Update : Dieses Problem wurde in Xcode 8.2 behoben. Der Schlüsselbund funktioniert im Simulator, ohne die Schlüsselbundfreigabe zu aktivieren.
Warum erhalte ich beim Aufrufen der Funktion im Xcode 8 / iOS 10-Simulator immer den Fehler -34018 ?SecItemAdd
Schritte zum Reproduzieren
Erstellen Sie ein neues einseitiges iOS-App-Projekt in Xcode 8. Führen Sie den folgenden Code in aus viewDidLoad
(oder öffnen Sie dieses Xcode-Projekt).
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.")
}
erwartete Ergebnisse
Artikel wird zum Schlüsselbund hinzugefügt.
Tatsächliche Ergebnisse
Die Funktion SecItemAdd gibt den folgenden Fehlercode zurück : -34018
.
Ausführung
Xcode Version 8.1 (8B62), macOS Sierra 10.12.1.
Aufbau
Tritt in Xcode 8 seit Beta 2 immer auf, wenn in einem iOS 10-Simulator getestet wird.
Tritt NICHT in Xcode 8 auf, wenn in einem iOS 9.3-Simulator getestet wird.
Demo
https://dl.dropboxusercontent.com/u/11143285/2016/07/KeychainBugDemo.zip
Verweise
Radar: https://openradar.appspot.com/27422249
Apple Developer Forums: https://forums.developer.apple.com/message/179846
Dieses Problem unterscheidet sich von dem folgenden Beitrag , weil es tritt konsequent in Xcode 8. SecItemAdd und SecItemCopyMatching gibt Fehlercode -34018 (errSecMissingEntitlement)
Antworten:
Ich konnte dies in meiner App umgehen, indem ich der Berechtigungsdatei Schlüsselbundzugriffsgruppen hinzufügte . Ich drehte ich auf dem Schlüsselanhänger - Sharing - Schalter in dem Capabilities Abschnitt in Ihrem Test - App, und es ist auch für mich arbeiten.
Element, das zu Berechtigungen hinzugefügt werden soll:
Ich habe dies nur unter macOS Sierra (10.12) versucht, daher bin ich mir nicht sicher, ob es unter 10.11.5 für Sie funktioniert.
quelle
In den Versionshinweisen zu Xcode 8.1 GM hat Apple das Problem erkannt und eine sauberere Problemumgehung vorgeschlagen:
Beachten Sie, dass es nach dem, was ich versucht habe, nur in Xcode 8.1 funktioniert. Obwohl der Text Sie in eine Build-Einstellung irreführen kann, müssen Sie dies in Ihrem Schema zu Ihren Umgebungsvariablen hinzufügen.
Xcode 8.2 wird dies lösen:
quelle
Dies kann passieren, wenn Sie ein Testziel haben, das keine Host-App hat. Reparieren
Fügen Sie eine Dummy-Host-App hinzu:
Aktivieren Sie die automatische Codesignatur und fügen Sie ein Team hinzu:
quelle
Beim Signieren mit E-Mail, Erstellen eines neuen Benutzers oder beim Abmelden mit Firebase ist eine Fehlermeldung aufgetreten.
Der Fehler war:
Ich habe den Schlüsselbund-Freigabeschalter im Abschnitt "Funktionen" in Ihrer Test-App aktiviert und er funktioniert auch für mich.
quelle
Ich suchte nach einer Lösung, bei der die Schlüsselbundfreigabe nicht verwendet wurde, da dies nicht die Funktion war, nach der ich gesucht hatte. Das Entwicklerforum scheint eine gute Lösung von EvergreenCoder zu haben, deren Umfang Sie nur auf den iOS 10-Simulator beschränken können (da dies der einzige betroffene Simulator zu sein scheint). Aus der Post:
Sie können so etwas erstellen
.plist
:und geben Sie unter Build-Einstellungen in einen Pfad zu dieser Datei an
Code Signing->Debug->Simulater iOS 10 SDK->($SRCROOT)/your-path-to-file
Wie in der Veröffentlichung angegeben, ermöglicht diese Berechtigung lediglich das Anhängen des Debuggers.
quelle
Ich hatte ein ähnliches Problem, obwohl beim Versuch, auf dem Gerät ausgeführt zu werden, der Fehler -34018 angezeigt wurde. Ich verwende XCode 8.1 unter Sierra mit iOS 10.1. Ich arbeite in einem Team und hatte plötzlich dieses Problem, als wir in den Projekteinstellungen auf "Signieren automatisch verwalten" umstellten. Wenn ich dies ausschalte und mein Profil manuell auswähle, funktioniert alles einwandfrei. Am Ende musste ich mein Entwicklerzertifikat aus meinem Schlüsselbund löschen und dann "Signatur automatisch verwalten" erneut auswählen. Beim nächsten Build wurde ein neues Signaturzertifikat für mich generiert, und jetzt funktioniert alles einwandfrei. Ich bin mir immer noch nicht sicher, was das Problem verursacht hat, da das andere Zertifikat bei manueller Auswahl einwandfrei funktioniert hat, aber nicht, wenn es von XCode verwaltet wird. Hoffe, dies hilft, stundenlange Kopfschmerzen für jemand anderen zu stoppen.
quelle
Ich konnte dieses Problem in Xcode 11 ohne Berechtigungsanpassungen lösen.
Ich habe dem Projekt meines Frameworks einfach ein neues App-Ziel namens MyFrameworkTestsHostApp hinzugefügt.
Dann habe ich das MyFrameworkTests-Ziel ausgewählt und seine Host-Anwendung als MyFrameworkTestsHostApp ausgewählt.
quelle
Es funktioniert, nachdem die Schlüsselbundfreigabe in Funktionen aktiviert wurde.
quelle
Es sind 3 Schritte erforderlich, um dieses Problem schnell zu beheben.
Dies wird die Magie tun
quelle