我正在尝试使用 Xcode 上的基本 SenTest 框架测试读取和更改钥匙串的代码。该代码在设备上运行良好,但是当我开始测试时,每次我想用SecItemDelete
/ SecItemAdd
/etc 触摸钥匙串时都会遇到这些错误。
The operation couldn’t be completed. (OSStatus error -34018 - client has neither application-identifier nor keychain-access-groups entitlements)
iOS Team Provisioning Profile: *
我为构建目标和测试目标提供了 匹配的通配符配置文件 ( )。
这些(未经证实的)堆栈溢出答案:
从 errSecItemNotFound 25300 中的钥匙串结果中读取
说我每次使用钥匙串时都需要一个与我的应用标识符匹配的配置文件,但这是不对的,否则我会在测试目标之外遇到相同的错误。
深入挖掘,(未经证实的)答案在这里:
SecItemAdd 和 SecItemCopyMatching 返回错误代码 -34018 (errSecMissingEntitlement)
暗示钥匙串中可能存在错误,更一般地说Security.framework
,这很可怕。
我的问题是;有没有人只有在测试目标上时才遇到 OSStatus 错误 -34018 ?这似乎是我看到的行为。
编辑:添加JorgeDeCorte在下面的答案中使用的这个答案。
如果问题在您的单元测试目标中存在,该线程似乎包含解决方案。
https://devforums.apple.com/message/917498#917498
基本上,您必须通过在测试目标中添加以下内容作为运行脚本来对您的 .xcttest 文件夹进行代码设计。
codesign --verify --force --sign "$CODE_SIGN_IDENTITY" "$CODESIGNING_FOLDER_PATH"
在设备上测试我的钥匙串时,我遇到了很多 -34018 错误,这设法修复了它。
如果您的测试目标中不存在问题,这可能不是解决方案。
所以我想解决方案是:强制签署你的测试目标。