web-dev-qa-db-fra.com

Ajout de l'option "Ouvrir dans ..." à l'application iOS

Sur les appareils iOS, l'application Mail propose l'option "Ouvrir dans ..." pour les pièces jointes. Les applications répertoriées ont enregistré leurs CFBundleDocumentTypes auprès du 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. Mail est-il la seule application qui offre cette fonctionnalité?

44
westsider

Jetez un œil aux Rubriques de programmation d'interaction de documents pour iOS: enregistrement des types de fichiers pris en charge par votre application .

Tant que vous fournissez vos types de documents dans votre Info.plist, les autres applications qui reconnaissent ce type de document répertorieront 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.

37
Jay O'Conor

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

J'ai ajouté la prise en charge de *.xdxf fichiers dans mon application. En bref, vous devez faire deux choses. Tout d'abord - ajoutez des entrées comme celle-ci au 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 ne devez ajouter UTExportedTypeDeclarations que si votre type de fichier est unique. Ou par d'autres mots n'est pas ici .

Deuxième - gérer la méthode déléguée dans 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;
}
19
wzbozon

Afin d'être visible dans la liste des "ouvrir dans ..." pour tous les fichiers, vous devez l'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 apparaît dans "Ouvrir dans ...", vous devez charger ce fichier. La plupart des sites Web montrent comment 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 fonctionnait bien dans IOS 7 plante dans IOS 8. J'ai dû implémenter la fonction suivante à la place pour la faire fonctionner).

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

J'ajoute mon application dans la liste "Ouvrir dans" avec succès comme suit,

Select info in YourAppName.target Ajoutez 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/Miscivers/Reference/UTIRef/Articles/ System-DeclaredUniformTypeIdentifiers.html # // Apple_ref/doc/uid/TP40009259-SW1

J'espère que vous réussirez aussi !!

Cependant, la fonctionnalité que je veux implémenter est "Partager" comme Facebook ou Slack, je ne peux pas le faire encore ... tout le monde peut me donner un gros coup de main :(

2
Yvonne