从Keychain读取Xcode 9模拟器不会返回任何内容

时间:2017-09-19 11:35:40

标签: ios-simulator keychain xcode9

由于我使用Xcode 9,所有与钥匙串通信的单元测试都被破坏了。它也发生在Xcode GM上。正如我所追踪的那样,在读写时没有OSStatus错误,但是从钥匙串读取任何内容都不会导致使用钥匙串进行所有单元测试失败。当Apple发布带有iOS 10模拟器的Xcode 8时,我已经遇到过类似的问题,其中Keychain无效,Apple在Xcode 8.2中修复了这个问题。 iOS 11模拟器是否还有其他人面临此问题?对此有何想法?

2 个答案:

答案 0 :(得分:12)

最后我们发现了这个问题。正如@Gix所说,问题在于我们框架内的单元测试。 SDK测试没有应用程序上下文,因此没有/ a keychain可用。但实际上我们并不想像@Gix那样将测试从SDK移到应用程序中。因此,我们可以通过在SDK项目中添加app目标来解决问题,然后将其设置为SDK单元测试的主机。现在单元测试正在通过。但我仍然不明白为什么它只会在新的Xcode中失败。我们意识到它不是iOS 11模拟器问题,因为Xcode 9中的iOS 10模拟器也会发生同样的故障。因此,此限制是Xcode 9 Simulator应用程序的属性,可以使用我提供的解决方案进行修复。它仍然很混乱,但它有效,你不需要将测试从SDK移动到app!

答案 1 :(得分:1)

刚想出这个就在我身边,所以我想如果你遇到同样的问题,我会通知你。

我的问题是我的项目设置方式。在我的项目中,我有一个包含3个项目的工作区,1个是主应用程序,1个是框架/库,1个是Pods项目。我在我的框架中访问了keychain,我的单元测试目标是这个项目的一部分。

经过与Valet(您可以find here)后面团队的Dan Federman的广泛讨论和合作,我们发现我的单元测试目标需要成为主应用程序所在项目的一部分。一旦我将所有测试从库项目复制到主应用程序项目,所有内容都运行良好。

希望这有帮助!