SecItemAdd renvoie toujours l'erreur -34018 dans Xcode dans iOS 8 10 simulateur
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 de 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 ouvrir cette Xcode projet).
let itemKey = "My key"
let itemValue = "My secretive bee 🐝"
//Remove from Keychain
//----------------
let queryDelete: [String: AnyObject] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: itemKey as AnyObject
]
let resultCodeDelete = SecItemDelete(queryDelete as CFDictionary)
if resultCodeDelete != noErr {
print("Error deleting from Keychain: \(resultCodeDelete)")
}
//Add to keychain
//----------------
guard let valueData = itemValue.data(using: String.Encoding.utf8) else {
print("🐣🐣🐣🐣🐣🐣🐣🐣🐣🐣 Error saving text to Keychain")
return
}
let queryAdd: [String: AnyObject] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: itemKey as AnyObject,
kSecValueData as String: valueData as AnyObject,
kSecAttrAccessible as String: kSecAttrAccessibleWhenUnlocked
]
let resultCode = SecItemAdd(queryAdd as CFDictionary, nil)
if resultCode != noErr {
print("🐝🐝🐝🐝🐝🐝🐝🐝🐝 Error saving to Keychain: \(resultCode).")
} else {
print("🍀🍀🍀🍀🍀🍀🍀🍀🍀 Saved to keychain successfully.")
}
Résultats Attendus
Élément est ajouté à un Trousseau de clés.
Les Résultats Réels
Fonction SecItemAdd retourne le code d'erreur suivant: -34018
.
Version
Xcode version 8.1 (8B62), macOS Sierra de gestion 10.12.1.
Configuration
Se produit toujours dans Xcode 8 depuis la Beta 2 lors de l'essai de un iOS 10 simulateur.
Ne se produit PAS dans Xcode 8 lors de l'essai de un iOS 9.3 simulateur.
Démo
https://dl.dropboxusercontent.com/u/11143285/2016/07/KeychainBugDemo.zip
Références
Radar: https://openradar.appspot.com/27422249
Forums Des Développeurs Apple: https://forums.developer.apple.com/message/179846
Cette question est différente de la post suivant, parce qu'il se produit constamment dans Xcode 8. SecItemAdd et SecItemCopyMatching retourne le code d'erreur -34018 (errSecMissingEntitlement)
- Cela semble être un problème dans Xcode 8 GM. Agréable de voir Apple est toujours au sommet de leur jeu...
- de même pour moi, toujours cette erreur
- Je suis vraiment creuser vos journaux de la console 🙂
- Le problème a été résolu dans Xcode 8.2, mais il est de retour dans Xcode 9.0!
Vous devez vous connecter pour publier un commentaire.
J'ai été en mesure de contourner ce problème dans mon application en ajoutant Trousseau d'Accès des Groupes, les Droits du fichier. J'ai allumé la Trousseau de Partage commutateur dans le Capacités section dans votre application de test, et il est travaillé pour moi en tant que bien.
Élément à ajouter à tous les droits:
Je ne l'ai essayé ce sur macOS Sierra (10.12), donc je ne sais pas si il va travailler pour vous sur 10.11.5.
Host Application
n'a pas été établi. Après j'ai choisi mon application cible il y trousseau commencé à travailler dans le simulateur iOS 10. Et il ne semble pas vraiment nécessaire d'avoirkeychain-access-groups
, pour moi c'était juste assez pour avoirentitlements
fichier avecaps-environment
ensemble pourdevelopment
(ce qui résout un avertissement lors de pistes de développement de l'application sur le périphérique).asp-environment
ensemble pourdevelopment
. Je me suis tourné sur le trousseau de partager n'aide pas : (Dans Xcode 8.1 GM Notes de Version Apple a reconnu le problème et a proposé un nettoyeur de solution de contournement:
Note 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 régime.
Xcode 8.2 permettra de résoudre ce problème:
Cela peut se produire si vous avez une cible de test qui n'a pas une application hôte. Pour résoudre
ajouter un mannequin d'accueil de l'app :
Activer la commande automatique de la signature de code et ajouter une équipe :
J'ai eu une erreur lors de la signature avec le courrier électronique, la création d'un nouvel utilisateur ou à se déconnecter à l'aide de firebase.
L'erreur était:
Je me suis tourné sur le Trousseau de clés commutateur de Partage dans la section Capacités dans votre application de test, et il est travaillé pour moi en tant que bien.
J'étais à la recherche d'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:
Vous pouvez créer un
.plist
comme suit: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é.
J'ai eu un problème similaire, si j'avais la -34018 d'erreur lorsque vous essayez d'exécuter sur l'appareil. J'utilise XCode 8.1 sur la Sierra avec iOS 10.1. Je travaille sur une équipe et tout eu ce problème lorsque nous sommes passés à "gérer Automatiquement la signature" dans les paramètres du projet. Quand je désactiver cette option et sélectionnez manuellement mon profil, tout fonctionne bien. J'ai fini par supprimer mon certificat de développeur de mon trousseau, puis re-sélectionnez "gérer Automatiquement la signature". Sur la prochaine génération, elle a généré un nouveau certificat de signature pour moi et tout fonctionne bien maintenant. Je ne suis toujours pas sûr de ce qui a causé le problème que les autres cert a bien fonctionné quand sélectionnés manuellement, mais pas quand géré par XCode. Espérons que cette aide à arrêter un heures des maux de tête pour quelqu'un d'autre.
Il fonctionne après l'activation du trousseau de partage des capacités.