web-dev-qa-db-fra.com

Comment partager des données de trousseau entre des applications iOS

Je décris un problème pour lequel il m'a fallu un certain temps pour apprendre la réponse.

L'exemple " GenericKeychain " est un bon début pour fournir un wrapper pour partager des données de trousseau entre des applications lors de l'utilisation de accessGroup dans l'init.

Cependant, l'implémentation de cela dans mon application a produit un code d'erreur obscur (qui a pris une éternité à localiser) -25243, ce qui signifie: Aucun contrôle d'accès.

J'ai exécuté l'exemple d'application d'Apple (GenericKeychain) sur mon iPad uniquement pour obtenir la même erreur. Hein?

La documentation d'Apple ne fournit-elle pas ce qui est nécessaire pour y parvenir?

55
GtotheB

Après avoir (beaucoup) creusé sur le Web, j'ai trouvé la réponse. Le groupe d'accès que vous utilisez lors de la construction de votre classe KeychainItemWrapper doit également être spécifié dans chacun des fichiers Entitlements.plist de votre application dans la section "keychain-access-groups".

Il semble presque évident maintenant que je vois "keychain-access-groups". Cependant, je n'avais aucune idée d'y regarder. J'espère que cela aide les autres.

53
GtotheB

En fait, ce n'est pas difficile à faire. Veuillez suivre les étapes.

App1:

  1. Ouvrez les capacités cibles de votre application et activez le partage KeyChain.
  2. Ajoutez un identifiant. (par exemple: com.example.sharedaccess)
  3. Ajoutez " ICKeyChainStore " à votre projet.
  4. Assurez-vous d'avoir un identifiant d'équipe ajouté à votre projet App1.
  5. Ajoutez Security.framework à votre projet App1.
  6. Et ajoutez ces codes à l'endroit dont vous avez besoin.

    [UICKeyChainStore setString:@"someValue" forKey:@"someKey" service:@"someService"];
    

App2:

  • Ouvrez les capacités cibles de votre application et activez le partage KeyChain.
  • Ajoutez un identifiant. (par exemple: com.example.sharedaccess)
  • Ajoutez " ICKeyChainStore " à votre projet.
  • Assurez-vous d'avoir un identifiant d'équipe ajouté à votre projet App2.
  • Ajoutez Security.framework à votre projet App2.
  • Et ajoutez ces codes à l'endroit dont vous avez besoin.

    NSString *string = [UICKeyChainStore stringForKey:@"someKey" service:@"someService"];
    
  • Vos TeamID doivent être identiques pour les deux projets.

  • J'ai essayé ces étapes sur un vrai appareil iPhone .
  • J'ai également essayé ces étapes avec Automatique et iOs Development profil d'approvisionnement.
  • Les identifiants de bundle de mes applications étaient comme ça: com.example.app1, com.example.app2.
14
alicanbatur