J'ai mis à jour mon Xcode 8 vers la bêta 2 aujourd'hui et j'essaie de partager des données entre App et Today Extension. Je suis confronté à cet avertissement de journal:
2016-07-08 18: 00: 24.732472 ProjetctX [941: 42801] [Valeurs par défaut de l'utilisateur] Échec de lecture des valeurs dans CFPrefsPlistSource <0x1700f1280> (Domaine: group.xpto, Utilisateur: kCFPreferencesAnyUser, ByHost: Yes, Container: (null) : L'utilisation de kCFPreferencesAnyUser avec un conteneur n'est autorisée que pour les conteneurs système, en se détachant de cfprefsd
Est-ce que quelqu'un peut m'aider?
Il s’agit en fait d’un avertissement parasite introduit dans iOS 10 et macOS 10.12. (Source: https://Twitter.com/Catfish_Man/status/784460565972332544 )
Le conseil de l'ajout de l'ID de votre équipe annulera l'avertissement, mais créera également de nouveaux paramètres utilisateur par défaut. Cela aura pour conséquence que toutes les données précédemment stockées seront illisibles.
Pour le moment, la solution consiste simplement à l'ignorer.
En outre, Apple membre du personnel CFM sur les forums :
Le message enregistré est faux, à moins que vous ne fassiez des choses très spécifiques que je ne pense pas possibles sans utiliser des fonctions privées (il a été ajouté pour détecter les utilisations abusives de ces fonctions, mais malheureusement aussi avec un cas d'utilisation normal).
Voici comment utiliser NSUserDefaults avec des groupes d’applications pour transmettre des données entre votre application principale et votre extension:
Dans votre application principale, sélectionnez votre projet dans le navigateur de projet.
Sélectionnez votre cible principale et choisissez l'onglet Capacités.
Basculez le commutateur App Groups sur ON. Ceci communiquera avec le portail de développeur afin de générer un ensemble de droits.
Créez un nouveau conteneur. Selon Apple, votre ID de conteneur doit commencer par "groupe". Par conséquent, un nom tel que "group.io.intrepid.myapp" est parfait.
Sélectionnez votre cible de poste et répétez le processus d'activation des groupes d'applications. Ne créez pas de nouveau groupe d'applications, sélectionnez simplement le groupe qui vient d'être créé dans la cible principale de l'application.
Lors de la lecture ou de l'écriture de NSUserDefaults dans votre application ou votre extension, n'accédez pas à NSUserDefaults.standardUserDefaults (). Utilisez plutôt NSUserDefaults (suiteName: "group.io.intrepid.myapp"). Remarque: Le nom de la suite est le nom du conteneur de votre groupe d'applications créé à l'étape 4.
Assurez-vous que, groupe activé et utilisant le même identifiant de groupe pour l'extension et la section de fonctionnalité de l'application!
Le crédit va à http://blog.intrepid.io/ios-app-extensions
Également eu le même problème avec mon application macOS.
Résolu par: Redémarrez l'appareil!
Je suis confronté au même problème lorsque j'essaie d'utiliser initWithSuiteName. On dirait qu'il s'agit d'un bug d'Apple. La seule solution/solution que j'ai trouvée consiste à réinitialiser tous les paramètres du périphérique. Allez à Paramètres -> Général -> Réinitialiser -> Réinitialiser tous les paramètres.
Cela n’efface aucun contenu sur l’iPhone, mais efface tous les paramètres. Après avoir réinitialisé le réglage, tout a bien fonctionné. Faites-moi savoir si cela vous aide aussi.
SuiteName (postfix) ne doit pas être l'ID principal de l'ensemble.
Construisez avec Xcode 8.1 Beta et vous verrez le même avertissement, mais vous obtiendrez également la valeur.