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. Je me demande comment mon application pourrait permettre aux utilisateurs d'ouvrir des fichiers générés par mon application dans d'autres applications. Mail est-elle la seule application qui offre cette fonctionnalité ?
Réponses
Trop de publicités?Jetez un coup d'œil à la Interaction des documents Sujets de programmation 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 listeront votre application dans leurs choix "Ouvrir dans". Bien entendu, cela suppose que votre application crée des documents que les autres applications peuvent ouvrir.
Ce site est un excellent tutoriel, qui m'a aidé.
J'ai ajouté le support pour *.xdxf
dans mon application. En bref, vous devez faire deux choses. Premièrement, ajoutez des entrées comme celle-ci dans le fichier Plist
archivo:
<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
seulement si votre type de fichier est unique. Ou, en d'autres termes, n'est pas aquí .
Deuxièmement - gérer la méthode du délégué 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;
}
Afin d'être visible dans la liste des "ouvrir dans..." pour tous les fichiers, vous devez ajouter ceci à 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 "open in...", vous devez charger ce fichier. La plupart des sites web montrent à 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 sous IOS 7 se bloque sous IOS 8. J'ai dû implémenter la fonction suivante à la place pour qu'elle fonctionne.
func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool
{
println("Open URL "+url.path!)
}