gpt4 book ai didi

ios - SecItemAdd 在 iOS 10 模拟器的 Xcode 8 中总是返回错误 -34018

转载 作者:IT王子 更新时间:2023-10-29 07:29:14 26 4
gpt4 key购买 nike

更新:此问题已在 Xcode 8.2 中修复。钥匙串(keychain)在模拟器中工作,无需启用钥匙串(keychain)共享。

为什么在 Xcode 8/iOS 10 模拟器中调用 SecItemAdd 函数时,我总是收到错误 -34018?

重现步骤

在 Xcode 8 中创建一个新的单页 iOS 应用项目。在 viewDidLoad 中运行以下代码(或打开 this 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.")
}

预期结果

项目被添加到钥匙串(keychain)。

实际结果

函数 SecItemAdd 返回以下错误代码:-34018

版本

Xcode 版本 8.1 (8B62),macOS Sierra 10.12.1。

配置

在 iOS 10 模拟器中测试时,自 Beta 2 以来,始终出现在 Xcode 8 中。

在 iOS 9.3 模拟器中测试时不会出现在 Xcode 8 中。

演示

https://dl.dropboxusercontent.com/u/11143285/2016/07/KeychainBugDemo.zip

引用资料

雷达:https://openradar.appspot.com/27422249

Apple 开发者论坛:https://forums.developer.apple.com/message/179846

此问题与以下帖子不同,因为它在 Xcode 8 中一直发生。SecItemAdd and SecItemCopyMatching returns error code -34018 (errSecMissingEntitlement)

最佳答案

通过将 Keychain Access Groups 添加到 Entitlements 文件,我能够在我的应用中解决这个问题。我在您的测试应用程序的功能部分打开了钥匙串(keychain)共享开关,它对我也有效。

Screenshot of turning on the switch

要添加到权利中的项目:

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

我只在 macOS Sierra (10.12) 上试过这个,所以我不确定它是否适用于 10.11.5。

关于ios - SecItemAdd 在 iOS 10 模拟器的 Xcode 8 中总是返回错误 -34018,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38456471/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com