17

J'ai vu tous les autres messages de SO sur le partage des données NSUserDefaults entre les applications hôtes et les extensions d'application, mais le mien ne fonctionne toujours pas. Voici tout ce que j'ai fait:Pourquoi les groupes d'applications ne fonctionnent-ils pas dans mon extension WatchKit?

  1. Activer les groupes d'applications sur l'onglet «Capacités» de Xcode pour l'extension et l'application hôte.
  2. Définissez le nom du groupe sur "group.com.mycompany.foo" et confirmez que l'extension et l'application hôte sont ajoutées au groupe.
  3. Confirmé qu'un fichier de droits existe pour les deux avec la clé "com.apple.security.application-groups" définie sur mon nom de groupe d'applications. (Pour ce que ça vaut, j'utilise aussi les capacités de trousseau partagé entre l'application d'extension et l'application hôte - donc je ne crois pas que ce soit un problème avec les droits)
  4. Régénère tous les profils d'approvisionnement. En fait, j'ai même révoqué tous mes certificats et régénéré tous les profils après la mise en place du groupe d'applications.

Et après tout cela, ce code ne fonctionne toujours pas:

// in the host app 
NSUserDefaults *testDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mycompany.foo"]; 
[testDefaults setObject:@"TEST" forKey:@"foo"]; 
[testDefaults synchronize]; 

puis:

// in the extension 
NSUserDefaults *testDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mycompany.foo"]; 
NSLog(@"%@", [testDefaults objectForKey:@"foo"]); 

qui se traduit par:

(null) 

Quand je Regardez dans les préférences Xcode, je remarque ces icônes, dont aucune ne possède l'icône "App Group": 01 Mais comme je l'ai déjà dit, je suis allé jusqu'à effacer mon trousseau, les certificats et les profils de provisionnement après la configuration du groupe d'applications. Donc, si c'est en fait le problème, comment puis-je ajouter le droit aux profils?

Qu'est-ce qui me manque? Je suis fraîche d'idées.

Aide?

EDIT: Les groupes d'accès fonctionnent dans mon extension & Today, mais pas dans l'extension WatchKit. Je n'ai aucune idée pourquoi, et tous les paramètres de construction semblent être configurés de la même manière.

EDIT 2: Pour ceux qui insistent sur le fait que mes capacités ne sont pas correctement configurés, voici une capture d'écran: Capabilities

+0

avez-vous essayé de cliquer sur le « Refres h "dans le coin inférieur gauche de la liste des profils d'approvisionnement de Xcode? –

+1

Probablement un million de fois. :( – user2393462435

+0

Il n'y a pas d'icône de groupes d'applications dans la colonne Droits dans la vue que vous avez attachée (au moins je ne l'ai pas et appgroups fonctionne pour moi.) Retour au problème: êtes-vous sûr que l'application hôte et la cible d'extension signé avec le bon profil d'approvisionnement et l'identité de signe de code? Et par correct je veux dire 'com.mycompany.foo.myapp' et' com.mycompany.foo.myapp.myappwatchkitextension'. Le caractère générique ne fonctionnera pas ici – lvp

Répondre

5

J'ai eu le même problème. Ce que j'ai remarqué, c'est que mon extension WatchKit et mon application WatchKit avaient des identifiants de paquets identiques. J'ai changé l'identifiant du bundle de mon application WatchKit. Aussi, je n'ai pas oublié de changer NSExtensionAttributes/WKAppBundleIdentifier dans le fichier info.plist de l'extension pour correspondre à cet identifiant. Maintenant tout fonctionne. J'espère que cela t'aidera!

En bref: Les identifiants de lots de WatchKit App et Extension doivent être différents!

+0

C'était le problème! MERCI BEAUCOUP! – user2393462435

+1

Cela ne fonctionnera pas pour WachOS 2+. Dans ce cas, vous devez utiliser [WatchConectivity] (http://stackoverflow.com/questions/31457811/send-messages-between-ios-and-watchos-with-watchconnectivity-in-watchos2) – marcelosalloum

2

Avez-vous essayé de lire la même clé de l'application iPhone?

Je crois que le problème est que vous n'avez pas activé le droit App Group dans votre extension WatchKit.

  1. Sélectionnez votre extension WatchKit dans les paramètres de votre projet.

  2. Sélectionnez l'onglet Fonctionnalités sous Extension WatchKit et recherchez les groupes d'applications et activez-les sur.

  3. Sélectionnez le même identificateur de groupe d'applications que celui que vous avez créé précédemment (il doit apparaître automatiquement et juste vérifier).

+0

Il est activé et le fichier de droits d'accès semble identique au fichier de droits pour mes extensions qui fonctionnent déjà. Mes paramètres de construction référencent correctement ce fichier d'autorisations (je le sais car le trousseau partagé fonctionne malgré le fait que le groupe d'applications ne fonctionne pas). – user2393462435

+0

Avez-vous essayé de lire la même clé après l'avoir configurée dans l'application iPhone? – BalestraPatrick

+0

Voir le code dans la question d'origine. Je suis en train de définir et de lire à partir de la même touche. – user2393462435

1

Voici ce qui a fait l'affaire pour moi. Apparemment Xcode créé automatiquement un nouveau fichier pour la nouvelle Entitlements Extension (probablement après avoir mis en place de « Capacités », mais malheureusement, la valeur du tableau était manquante ...

Dans l'application Entitlements:

enter image description here

Dans la prolongation de la valeur Entitlements ne manquait à partir du tableau:

enter image description here

En outre, il est important de vous assurer que le groupe apparaît dans l'onglet « capacité » pour les deux cibles (application et extension) et que tous les 3 coches sont verts, voir par exemple:

App cible

enter image description here

Extension cible

enter image description here