Comment partager des données de trousseau entre les 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 sharepoint départ pour fournir un wrapper pour le partage de données de trousseau entre les applications lorsque vous utilisez le groupe accessGroup dans init.

Cependant, l’implémentation de cette fonctionnalité dans mon application a généré un code d’erreur obscur (qui a pris un temps fou à se localiser), à savoir -25243, ce qui signifie: Pas de contrôle d’access.

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

La documentation d’Apple ne parvient-elle pas à fournir ce qui est nécessaire pour accomplir cela?

    Après quelques fouilles sur le Web, j’ai trouvé la réponse. Le groupe d’access 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 ” groupes d’access aux clés “. Cependant, je n’avais aucune idée de regarder même là-bas. J’espère que cela aide les autres.

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

    App1:

    1. Ouvrez les fonctionnalités cibles de votre application et activez le partage KeyChain.
    2. Ajouter un identifiant (ex: com.example.sharedaccess)
    3. Ajoutez ” UICKeyChainStore ” à 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 à un endroit dont vous avez besoin.

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

    App2:

    • Ouvrez les fonctionnalités cibles de votre application et activez le partage KeyChain.
    • Ajouter un identifiant (ex: com.example.sharedaccess)
    • Ajoutez ” UICKeyChainStore ” à votre projet.
    • Assurez-vous d’avoir un identifiant d’équipe ajouté à votre projet App2.
    • Ajoutez Security.framework à votre projet App2.
    • Et ajoutez ces codes à un endroit dont vous avez besoin.

       NSSsortingng *ssortingng = [UICKeyChainStore ssortingngForKey:@"someKey" service:@"someService"]; 
    • Vos TeamID devraient être les mêmes pour les deux projets.

    • J’ai essayé ces étapes sur un vrai appareil iPhone .
    • J’ai également essayé ces étapes avec le profil d’approvisionnement d’ Automatic et d’ iOs Development .
    • Les identifiants de regroupement de mes applications étaient les suivants: com.example.app1, com.example.app2.