Mise à jour : ce problème a été résolu dans Xcode 8.2. Le trousseau fonctionne dans le simulateur sans activer le partage de trousseau.
Pourquoi est-ce que je reçois toujours l' erreur -34018 lors de l'appel de la SecItemAdd
fonction dans le simulateur Xcode 8 / iOS 10 ?
Étapes à suivre pour reproduire
Créez un nouveau projet d'application iOS à page unique dans Xcode 8. Exécutez le code suivant dans viewDidLoad
(ou ouvrez ce projet Xcode).
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'article est ajouté au trousseau.
Résultats actuels
Fonction SecItemAdd renvoie le code d'erreur suivant: -34018
.
Version
Xcode version 8.1 (8B62), macOS Sierra 10.12.1.
Configuration
Se produit toujours dans Xcode 8 depuis la bêta 2 lors des tests dans un simulateur iOS 10.
Ne se produit PAS dans Xcode 8 lors du test dans un simulateur iOS 9.3.
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
Ce problème est différent de l'article suivant car il se produit systématiquement dans Xcode 8. SecItemAdd et SecItemCopyMatching renvoie le code d'erreur -34018 (errSecMissingEntitlement)
Réponses:
J'ai pu contourner ce problème dans mon application en ajoutant des groupes d'accès au trousseau au fichier des droits. J'ai activé le commutateur de partage de trousseau dans la section Capacités de votre application de test, et cela fonctionne également pour moi.
Élément à ajouter aux droits:
Je n'ai essayé cela que sur macOS Sierra (10.12), donc je ne suis pas sûr que cela fonctionnera pour vous sur 10.11.5.
la source
Dans Xcode 8.1 GM Release Notes, Apple a reconnu le problème et suggéré une solution de contournement plus propre:
Notez que d'après ce que j'ai essayé, cela ne fonctionne que dans Xcode 8.1. Bien que le texte puisse vous induire en erreur dans un paramètre de construction, ce que vous devez faire est de l'ajouter à vos variables d'environnement, dans votre schéma.
Xcode 8.2 résoudra ceci:
la source
Cela peut se produire si vous avez une cible de test qui n'a pas d'application hôte. Réparer
ajoutez une application hôte factice:
Activez la signature automatique du code et ajoutez une équipe:
la source
J'ai rencontré une erreur lors de la signature par e-mail, de la création d'un nouvel utilisateur ou de la déconnexion à l'aide de Firebase.
L'erreur était:
J'ai activé le commutateur de partage de trousseau dans la section Capacités de votre application de test, et cela fonctionne également pour moi.
la source
Je cherchais une solution qui n'utilisait pas le partage de trousseau, car ce n'était pas la fonctionnalité que je recherchais. Le forum des développeurs semble avoir un bon travail autour d'EvergreenCoder que vous pouvez limiter au seul simulateur iOS 10 (car cela semble être le seul simulateur affecté). D'après le message:
Vous pouvez créer un
.plist
like ainsi:et indiquez un chemin d'accès à ce fichier sous Paramètres de construction dans
Code Signing->Debug->Simulater iOS 10 SDK->($SRCROOT)/your-path-to-file
Comme indiqué dans l'article, ce droit permet simplement au débogueur d'être attaché.
la source
J'ai eu un problème similaire, même si j'obtenais l'erreur -34018 en essayant de fonctionner sur l'appareil. J'utilise XCode 8.1 sur Sierra avec iOS 10.1. Je travaille dans une équipe et j'ai soudainement eu ce problème lorsque nous sommes passés à "Gérer automatiquement la signature" dans les paramètres du projet. Lorsque je désactive cette option et que je sélectionne manuellement mon profil, tout fonctionne correctement. J'ai fini par devoir supprimer mon certificat de développeur de mon trousseau, puis re-sélectionner «Gérer automatiquement la signature». Sur la prochaine version, il a généré un nouveau certificat de signature pour moi et tout fonctionne bien maintenant. Je ne sais toujours pas ce qui a causé le problème car l'autre certificat fonctionnait bien lorsqu'il était sélectionné manuellement, mais pas lorsqu'il était géré par XCode. J'espère que cela aidera à arrêter un mal de tête d'une heure pour quelqu'un d'autre.
la source
J'ai pu résoudre ce problème dans Xcode 11 sans aucun ajustement des droits.
J'ai simplement ajouté une nouvelle cible d'application au projet de mon framework appelé MyFrameworkTestsHostApp.
Ensuite, j'ai sélectionné la cible MyFrameworkTests et choisi son application hôte comme MyFrameworkTestsHostApp.
la source
Cela fonctionne après avoir activé le partage du trousseau dans les capacités.
la source
Il y a 3 étapes à suivre pour résoudre ce problème rapidement.
Cela fera la magie
la source