containerURLForSecurityApplicationgroupidentifier obtenir une valeur nulle

je fais deux iPad app qui communiquent avec un fichier et récupère toutes les données d'un fichier. Je cherche et trouve ce "containerURLForSecurityApplicationgroupidentifier" nous pouvons créer le groupe et stocker dans cela. J'ai écris le code ci-dessous. Dans le dossier d'admissibilité, j'écris

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.app-sandbox</key>
       <true/>
     <key>com.apple.security.application-groups</key>
     <array>
        <string>$(TeamIdentifierPrefix)com.xxx.catalogapp.Coredata</string>
     </array>
    <key>keychain-access-groups</key>
    <array>
        <string>$(AppIdentifierPrefix)com.xxx.catalogapp.Coredata</string>
    </array>
</dict>
</plist>

et en Code j'écris ceci

NSFileManager* fileManager = [NSFileManager defaultManager];
NSURL* storeUrl = [fileManager 
containerURLForSecurityApplicationGroupIdentifier:@"com.xxx.catalogapp.Coredata"];
NSLog(@"%@", storeUrl);

mais stockeurl je reçois nil valeur.

5
demandé sur Cœur 2014-03-22 11:53:25

4 réponses

Xcode6 (actuellement en beta) renforce les ID de Dossier Partagés pour commencer avec "group."

partager mon magasin CoreData fonctionne pour moi avec L'URL suivante avec Xcode6/iOS8 les deux bêta.

NSFileManager* fileManager = [NSFileManager defaultManager];
NSURL* storeUrl = [fileManager containerURLForSecurityApplicationGroupIdentifier:@"group.XXX"];

il semble que la documentation liée à stevesliva sera obsolète dès que Xcode6 sera disponible

5
répondu Chris 2014-08-18 07:34:57

Eh bien, je l'ai vérifié dans mon propre code. L'identifiant de L'équipe apparaît dans le sous-répertoire de la bibliothèque/des conteneurs de groupe, vous devez donc en fait l'inclure dans votre code:

NSFileManager* fileManager = [NSFileManager defaultManager];
NSURL* storeUrl = [fileManager containerURLForSecurityApplicationGroupIdentifier:@"YOURTEAMID.com.xxxxxxxxxxx.catalogapp.Coredata"];
NSLog(@"%@", storeUrl);

ce dont je ne suis pas sûr, c'est de savoir si C'est un nom requis-- ce n'est pas très convivial-- ou si C'est quelque chose Qu'Apple recommande pour le rendre super-unique.

comme mentionné dans le commentaire ci-dessus, cela a été compris à partir de Apple Guide De Conception Du Bac À Sable-Groupe D'Application Répertoire Des Conteneurs:

Ces conteneurs sont automatiquement ajoutés dans chaque application sandbox du conteneur tel que déterminé par l'existence de ces clés, et sont stockés dans ~/Bibliothèque/Conteneurs/, où est le nom du groupe. Le nom du groupe lui-même doit commencer par votre ID d'équipe de développement, suivi d'une période.
2
répondu stevesliva 2014-08-13 16:01:59

dans iOS 11, Il y a une meilleure façon d'obtenir L'URL du conteneur partagé.

[NSFileProviderManager defaultManager].documentStorageURL

1
répondu Randall Wang 2017-07-20 15:33:22

assurez-vous de signer à la fois votre application et votre extension avec le même profil d'approvisionnement!

-5
répondu JJSaccolo 2014-08-26 10:24:12