Lorsque vous faites une application IOS, vous pouvez attacher des types de fichiers à votre application ce qui permet par exemple de faire des fichiers de sauvegarde.
Dans le delegate de votre UIApplication, vous avez une fonction qui sera appelée lorsque vous copier un fichier dans votre application.
Dans cette fonction vous recevez l'URL du fichier. Si vous recevez un document attaché par email et que vous le copier dans votre app, cela copiera réellement le fichier dans un répertoire Mail qui se trouve dans le répertoire de votre application. Pas de problème vous pouvez accéder aux fichiers directement.
Mais lorsque vous tapez un fichier dans le cloud, le fichier ne se trouve pas dans votre répertoire (sandbox) et vous ne pouvez pas l'ouvrir car vous n'en avez pas les droits. Vous devez alors appeler la fonction :
Cette fonction va vous donner les droits temporaires pour accéder au fichier. Cette fonction renvoie un BOOL que l'on stocke car il faut appeler une autre fonction lorsque l'on a fini avec le fichier :
En plus nous accédons à un fichier dans le cloud et le service cloud peut donc le modifier pendant que vous l'utilisez... Pour prévenir que nous utilisons le fichier, il faut utiliser un NSFileCoordinator :
Dans le delegate de votre UIApplication, vous avez une fonction qui sera appelée lorsque vous copier un fichier dans votre application.
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(nonnull NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options;
Mais lorsque vous tapez un fichier dans le cloud, le fichier ne se trouve pas dans votre répertoire (sandbox) et vous ne pouvez pas l'ouvrir car vous n'en avez pas les droits. Vous devez alors appeler la fonction :
BOOL scoped = [url startAccessingSecurityScopedResource];
if(scoped) [url stopAccessingSecurityScopedResource];
[[NSFileCoordinator new] coordinateReadingItemAtURL:url options:NSFileCoordinatorReadingForUploading error:&error byAccessor:^(NSURL *u){ /* Là on utilise le fichier */ }];
Commentaires