测试Keychain - OSStatus错误-34018

And*_*rew 41 iphone xcode ios sentestingkit

我正在尝试使用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错误,并设法解决了这个问题.

如果您的测试目标中不存在该问题,则可能不是解决方案.

所以我猜解决方案是:强制签署您的测试目标.

Jor*_*rte 6

回答你的问题:是的,我遇到了同样的问题.它似乎在运行我的应用程序时工作正常.但是当我在我的设备上运行我的XCTests时,似乎钥匙串返回错误-34018.奇怪的是,当我在模拟器上运行测试时,它不会发生.

编辑:我找到了一个解决方案,我在这个答案中已经解释过了

  • 你能描述一下你所链接的解决方案,以防链接出现故障吗?或者我们没有点击查找它.... (11认同)