105 votes

SecItemAdd renvoie toujours l'erreur -34018 dans Xcode 8 dans le simulateur iOS 10

Mise à jour: Ce problème a été corrigé dans Xcode 8.2. Trousseau de travaux dans le simulateur sans l'activation de trousseau de partage.

Pourquoi suis-je toujours recevoir l'erreur -34018 lors de l'appel d' SecItemAdd fonction dans Xcode 8 / iOS 10 simulateur?

Étapes pour Reproduire

Créer un nouveau Single page app iOS de projet dans Xcode 8. Exécutez le code suivant dans viewDidLoad (ou ouvrez ce projet Xcode).

let itemKey = "My key"
let itemValue = "My secretive bee 

190voto

Deyton Points 2239

J'ai été en mesure de contourner ce problème dans mon application par l'ajout de Trousseau d'Accès des Groupes pour les Droits du fichier. Je me suis tourné sur le Trousseau de Partage de basculer dans les Capacités de l'article dans votre application de test, et il est travaillé pour moi.

Screenshot of turning on the switch

Élément à ajouter à tous les droits:

<key>keychain-access-groups</key>
<array>
    <string>$(AppIdentifierPrefix)com.evgenii.KeychainBugDemo</string>
</array>

J'ai seulement essayé cela sur macOS Sierra (10.12), donc je ne sais pas si il va travailler pour vous sur 10.11.5.

17voto

Tiago Almeida Points 4043

Dans Xcode 8.1 GM Notes de Version Apple a reconnu le problème et a proposé un nettoyeur de solution de contournement:

Trousseau Api peut échouer à travailler dans le Simulateur si vos droits fichier ne contient pas une valeur pour l'application de l'identificateur de droit. (28338972) Solution: Ajouter un paramètre de construction à votre cible nommée ENTITLEMENTS_REQUIRED et affectez la valeur OUI. Ce sera la cause de Xcode pour insérer automatiquement une l'application de l'identificateur de droit lors de la construction.

Notez que d'après ce que j'ai essayé, ça ne fonctionne que dans Xcode 8.1. Bien que le texte peut vous induire en erreur dans un paramètre de construction, ce que vous devez faire est d'ajouter cette page à vos Variables d'Environnement, dans votre schéma.

enter image description here

Xcode 8.2 permettra de résoudre ce problème:

Résolu dans Xcode 8.2 bêta - IDE Trousseau Api fonctionnent correctement dans Simulateur. (28338972)

13voto

Mustafa Points 667

Cela peut se produire si vous avez une cible de test qui n'a pas une application hôte. Pour corriger

  1. ajouter un mannequin d'accueil de l'app : enter image description here

  2. Activer la commande automatique de la signature de code et ajouter une équipe :

enter image description here

  1. Activer le trousseau de partage des capacités

enter image description here

5voto

kavita patel Points 51

J’ai eu une erreur tout en signant avec le courrier électronique, créant un nouvel utilisateur ou avec signe à l’aide de la base de feu.

L’erreur était :

code d’erreur au domaine des firauth 17995

J’ai allumé l’interrupteur trousseau partage dans la section fonctionnalités dans votre application de test, et il travaille aussi bien pour moi.

4voto

ahtierney Points 248

Je cherchais une solution qui n'a pas utilisé Trousseau de partage, que ce n'était pas la fonction que je cherchais. Le forum du développeur Semble avoir un bon travail autour de EvergreenCoder que vous pouvez limiter la portée aux seuls iOS 10 simulateur (comme cela semble être le seul touché le simulateur). Du poste:

Le problème semble être qu'il doit y avoir au moins un droit pour Xcode pour ajouter correctement l'application "identificateur" enttilement à l'application. C'est pourquoi trousseau de partage semble être une solution mais ce n'est qu'indirectement donc: tout autre droit semble bien fonctionner.

Vous pouvez créer un .plist comme:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE plist PUBLIC "-/  
<plist version="1.0">  
    <dict>  
        <key>get-task-allow</key>  
        <true/>  
    </dict>  
</plist>

et de fournir un chemin d'accès à ce fichier sous Paramètres de génération en

Code Signing->Debug->Simulater iOS 10 SDK->($SRCROOT)/your-path-to-file

Comme indiqué dans le post, ce droit permet tout simplement le débogueur pour être fixé.

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