32 votes

Les valeurs ne sont pas toujours conservées dans le groupe d'applications entre l'application compagnon et l'extension d'application

De temps en temps, mais pas toujours (cela fait un moment que cela fonctionne), l'application/extension se met dans un état où je ne peux pas lire un drapeau défini dans mon App Group entre mon application compagnon et mon extension d'application. Je ne sais pas comment il se met dans cet état ni pourquoi les valeurs diffèrent, mais c'est critique à mon application, ceux-ci sont toujours synchronisés.

Application compagnon viewDidLoad :

NSUserDefaults *myAppSettings = [[NSUserDefaults alloc] initWithSuiteName:@"group.myapp"];

.....

[myAppSettings setBool:true forKey:@"myBool"];

[myAppSettings synchronize];

NSLog([myAppSettings boolForKey:@"myBool"] ? @"Companion app - bool TRUE" : @"Companion app - bool FALSE");

Extension de l'application viewDidLoad

NSUserDefaults *myAppSettings = [[NSUserDefaults alloc] initWithSuiteName:@"group.myapp"];

[myAppSettings synchronize];

NSLog([myAppSettings boolForKey:@"myBool"] ? @"App extension app - bool TRUE" : @"App extension - bool FALSE");

Sortie console

Companion app - bool TRUE
App extension - bool FALSE

Je synchronise également avant que mon application compagnon ne passe en arrière-plan. J'ai configuré mon groupe d'applications dans le portail, etc.

Qu'est-ce que je fais de travers ?

EDITAR

Apparemment, d'autres personnes ont également ce problème : https://devforums.apple.com/message/977151#977151

"Je pense qu'il y a actuellement beaucoup de problèmes.

Parfois le partage de données fonctionne, puis un changement et tout d'un coup le widget ne peut plus voir les données partagées (à la fois sur le simulateur et sur l'appareil).

C'est ennuyeux et j'espère qu'il sera un peu plus fiable dans la prochaine version bêta !"

EDITAR 2 Il semble qu'une autre personne ait également signalé ce problème :

"J'ai également remarqué la même chose. NSUserDefaults, mais aussi à tous les fichiers du dossier conteneur. Les l'extension clavier perd soudain l'autorisation de lecture/écriture dans le dossier après avoir utilisé le clavier pendant un certain temps."

EDIT 3 Plus de preuves : https://devforums.apple.com/message/1028078#1028078

Après la mise à jour vers la version bêta 3, j'ai remarqué que, parfois, le clavier n'arrivait pas à ouvrir la base de données parce qu'il ne parvenait pas à . Le clavier était capable d'accéder au fichier auparavant.

enter image description hereenter image description here

EDIT 4

Il semblerait que cela soit dû au fait que le clavier perd la fonction RequestsOpenAccess drapeau. Mais je ne peux pas le reproduire et je n'ai aucun moyen d'en être sûr.

EDIT 5

Il semble que d'autres personnes signalent ce problème dans la version GM d'iOS8 :

Ce problème persiste pour moi dans le GM. Il semble lié à un clavier mais il semble aussi qu'il y ait une certaine contention entre le entre le clavier et l'application contenante pour savoir qui crée la suite dans quel ordre. l'ordre. Je pense que ce problème est du côté d'Apple. Croyez-moi, je VEUX que ce soit que ce soit ma faute mais j'ai passé d'innombrables heures à faire des essais et des erreurs. Non Quoi que je fasse dans le code et que je vérifie avec NSLog, cela finira toujours dans cet état. dans cet état un jour ou l'autre. J'espère que quelqu'un trouvera une pilule magique :S

Quelqu'un a-t-il déjà résolu ce problème ?

2voto

Joey Points 2141

Apparemment, vous MUST demander un accès au réseau afin d'accéder à des données partagées NSUserDefaults (pourquoi, je ne sais pas...). C'est indiqué directement dans le App Extension Guide de programmation :

Par défaut, un clavier n'a pas d'accès au réseau et ne peut pas partager un conteneur avec l'application qui le contient. Pour activer ces fonctions, définissez la valeur de la clé booléenne RequestsOpenAccess dans le fichier Info.plist sur YES.

Veillez à modifier le RequestsOpenAccess au champ YES . Vous le trouverez dans Info.plist du clavier > NSExtension > NSExtensionAttributes > RequestOpenAccess. Ensuite, supprimez le clavier dans Settings, effacez l'application, relancez-la et ajoutez à nouveau le clavier. Une fois que vous l'avez ajouté, vous devez taper sur le nom du clavier et basculer le commutateur sur Allow Full Access. L'application vous avertira (et bien sûr vos utilisateurs) que le clavier peut désormais transmettre n'importe quelle donnée sur le réseau, y compris les numéros de carte de crédit que vous saisissez... Mais bon, vous pouvez maintenant partager des données comme vous l'espériez. Vous devrez demander aux utilisateurs de suivre les mêmes étapes pour autoriser l'accès, puis les rassurer en leur disant que vous n'êtes pas méchant, sinon cela ne fonctionnera tout simplement pas et vous n'obtiendrez jamais les données stockées dans vos préférences partagées.

Cette situation est extrêmement regrettable et je voudrais vous demander envoyer un rapport de bogue à Apple et nous n'avons pas besoin de demander un accès complet pour partager des données entre l'application et l'extension.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X