2010-10-20 5 views
42

Sur les appareils iOS, l'application Courrier offre l'option "Ouvrir dans ..." pour les pièces jointes. Les applications répertoriées ont enregistré leur CFBundleDocumentTypes avec le système d'exploitation. Ce que je me demande, c'est comment mon application pourrait permettre aux utilisateurs d'ouvrir des fichiers générés par mon application dans d'autres applications. Est-ce que Mail est la seule application qui offre cette fonctionnalité?Ajout de l'option "Ouvrir dans ..." à l'application iOS

+1

Je suis sûr que la réponse est ici: http://stackoverflow.com/questions/2774343/how-do-i-associate-file-types-with-an-iphone-application –

+1

L'article mis à jour qui fournit les informations pertinentes peut maintenant être trouvé sous [ Document Interaction Programming Topics] (http://developer.apple.com/library/ios/#documentation/FileManagement/Conceptual/DocumentInteraction_TopicsForIOS/Articles/PreviewingandOpeningItems.html#//apple_ref/doc/uid/TP40010410-SW1 "Programmation d'interaction de document Sujets ") – robotpukeko

Répondre

36

Jetez un coup d'œil au Document Interaction Programming Topics for iOS: Registering the File Types Your App Supports.

Tant que vous fournissez vos types de document dans votre Info.plist, d'autres applications qui reconnaissent ce type de document listeront votre application dans leurs choix «Ouvrir dans». Bien sûr, cela suppose que votre application crée des documents que d'autres applications peuvent ouvrir.

+0

Merci! Cela ressemble exactement à ce que je cherchais. Et, oui, mon application crée .csv et .zip des dossiers. – westsider

+0

vous voudrez peut-être modifier votre réponse pour référencer le nouveau lien (Apple a réorganisé iOS Reference Library, apparemment). – westsider

+0

J'ai ajouté le type de document dans mon application. par exemple j'ai ajouté le type PDF.Mais quand je cours l'interaction de document il prend juste l'application rapide d'aspect. –

15

This est un excellent tutoriel, qui m'a aidé.

J'ai ajouté le support pour les fichiers *.xdxf dans mon application. En bref, vous devez faire deux choses. Tout d'abord - ajouter des entrées comme celui-ci dans le fichier Plist de votre application:

<key>CFBundleDocumentTypes</key> 
<array> 
    <dict> 
     <key>CFBundleTypeName</key> 
     <string>XDXF Document</string> 
     <key>LSHandlerRank</key> 
     <string>Owner</string> 
     <key>CFBundleTypeRole</key> 
     <string>Editor</string> 
     <key>LSItemContentTypes</key> 
     <array> 
      <string>com.alwawee.xdxf</string> 
     </array> 
    </dict> 
</array> 
<key>UTExportedTypeDeclarations</key> 
<array> 
    <dict> 
     <key>UTTypeDescription</key> 
     <string>XDXF - XML Dictionary eXchange Format</string> 
     <key>UTTypeConformsTo</key> 
     <array> 
      <string>public.text</string> 
     </array> 
     <key>UTTypeIdentifier</key> 
     <string>com.alwawee.xdxf</string> 
     <key>UTTypeTagSpecification</key> 
     <dict> 
      <key>public.filename-extension</key> 
      <string>xdxf</string> 
      <key>public.mime-type</key> 
      <string>text/xml</string> 
     </dict> 
    </dict> 
</array> 

Ici, vous devez ajouter UTExportedTypeDeclarations que si le type de fichier est unique. Ou par d'autres mots n'est pas here.

deuxième - gérer la méthode de délégué AppDelegate:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
{ 

    if (url != nil && [url isFileURL]) { 

     // xdxf file type handling 

     if ([[url pathExtension] isEqualToString:@"xdxf"]) { 

      NSLog(@"URL:%@", [url absoluteString]); 

     } 

    } 

    return YES; 
} 
+0

Le lien du didacticiel est rompu. –

4

Pour être visible dans la liste des « ouverte ... » pour tous les fichiers, vous devez ajouter à votre plist

<key>CFBundleDocumentTypes</key> 
<array> 
    <dict> 
     <key>CFBundleTypeName</key> 
     <string>Open All Files</string> 
     <key>LSHandlerRank</key> 
     <string>Owner</string> 
     <key>CFBundleTypeRole</key> 
     <string>Editor</string> 
     <key>LSItemContentTypes</key> 
     <array> 
      <string>public.content</string> 
      <string>public.data</string> 
     </array> 
    </dict> 
</array> 

Une fois que votre application s'affiche dans "Ouvrir dans ...", vous devez charger ce fichier. La plupart site montre implémenter cette fonction:

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String, annotation: AnyObject?) -> Bool 
{ 
    println("Open URL "+url.path!) 
} 

Mais cette fonction qui a bien fonctionné dans l'IOS 7 accidents dans l'IOS 8. Je devais mettre en œuvre la fonction suivante au lieu de le faire fonctionner.

func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool 
{ 
    println("Open URL "+url.path!) 
} 
2

ajouter mon application dans « ouvert » liste avec succès comme suit,

Select info in YourAppName.target Ajouter un nouveau filtre de type de document, dont le nom est tout ce que vous voulez et le type est défini dans https://developer.apple.com/library/ios/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html#//apple_ref/doc/uid/TP40009259-SW1

J'espère que vous pouvez avoir du succès aussi!

Cependant, la fonction que je veux mettre en œuvre est « Partager » comme Facebook ou Slack ne, je ne peux le faire encore ... quelqu'un peut me donner une grosse main :(

Questions connexes