Chr*_*s S 3 keychain entitlements ios
我正在尝试使用 KeyChainAccess 实现钥匙串共享。我已经构建了两个非常基本的应用程序:应用程序一将字符串写入共享钥匙串,应用程序二从共享钥匙串读取数据并显示它。
我的应用程序一代码:
override func viewDidLoad() {
super.viewDidLoad()
//save item to keychain
let keychain = Keychain(service: "app.test", accessGroup: "xxxxx.xxxxx.xxxxx.Keychain-Sharing")
do {
try keychain.set("Some Data Set in app one", key: "sharedData")
print("Success")
label.text = "Success"
}
catch let error {
print("Keychain write failed: \(error)")
label.text = "Keychain write failed: \(error)"
}
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序二代码从共享钥匙串读取和显示:
override func viewDidLoad() {
super.viewDidLoad()
//load item from keychain
let keychain = Keychain(service: "app.test", accessGroup: "xxxxx.xxxxx.xxxxx.Keychain-Sharing")
let data = try? keychain.get("sharedData")
print("Data from Keychain: \(data ?? "nil")")
label.text = "Data from Keychain: \(data ?? "nil")"
}
Run Code Online (Sandbox Code Playgroud)
这是一个非常基本的示例,只是为了尝试这个概念,但是我发现当我在 Mac 上使用 Xcode 的模拟器运行它时,它的行为符合预期,我运行第一个应用程序 - 它成功了,然后我运行第二个应用程序和显示正确的字符串。
当我然后尝试在设备上运行它时(通过将我的设备插入我的 Mac 并更改运行位置,我在尝试从共享钥匙串写入和读取时收到以下错误:
OSStatus error:[-34018] Internal error when a required entitlement isn't present, client has neither application-identifier nor keychain-access-groups entitlements.
Run Code Online (Sandbox Code Playgroud)
我检查了我的权利文件,我可以看到它们都包含在两个应用程序中:
此外,当我将鼠标悬停在我的配置文件上时,它告诉我它们已包含在内:
这是让它在 Xcode 模拟器中成功运行的原因吗?我还缺少什么才能让它在手机上运行?我认为这与我的证书/配置文件有关,但我对此很陌生,所以我不确定我到底需要/缺少什么或要检查什么?
任何人都可以帮助或指出我正确的方向吗?
小智 8
我遇到过同样的问题。解决方案非常简单。再次检查钥匙串初始化程序中的 accessGroup 参数。例如,您在功能中添加名为“com.myCompany.app”的钥匙串组。但它不是accessGroup的全名。要解决此问题,只需在钥匙串组名称前添加“App ID 前缀”即可。您可以在 App ID 配置中的 Apple 开发者帐户中找到此前缀。完整的访问组名称将为“XXXXXXXXXX.com.myCompany.app”,其中 XXXXXXXXXX 是您的 App ID 前缀。
| 归档时间: |
|
| 查看次数: |
2081 次 |
| 最近记录: |