Right.
This is a well-known issue with library tests (sometimes called logic tests by Xcode). Those tests are run by a tool (xctest) that does not have entitlements. Historically this caused problems for folks using custom entitlements (to access CloudKit,for example) but now it affects folks using the keychain as well.
AFAIK there’s no direct workaround. However,I believe you can avoid the problem by running this test code within your app (emphasis mine) (in the docs this is called an app test).
Because these run inside your app,they get the app’s entitlements.
If you don’t have an app handy,you can create a dummy one just to host the tests. (emphasis mine how do I do this?)Please try this out and let us know if you hit any snags.
Oh,and don’t let the availability of a workaround prevent you from filing a bug about this. Xcode should be able to run library tests with entitlements,and this recent keychain change makes this even more important.
Share and Enjoy
https://forums.developer.apple.com/message/179846(见:Eskimo的回复于2016年11月4日上午2:12)
他再次在另一个回复中说:
- You can avoid the problem by running your tests within an app,creating a dummy app if you don’t have one handy. (emphasis mine)
- Feel free to file your own bug about this limitation.
所以他再次提到:
您可以通过在应用程序中运行测试来避免此问题,如果您没有方便,则可以创建虚拟应用程序.
我很乐意这样做,我似乎无法弄清楚如何做到这一点.
我有的部分:
Framework Project | |- Unit Test Target |- Framework Target Dummy App Project | |- ??? How do I make this run the Framework's Unit Test Target?
解决方法
https://medium.com/@ryuichi/setup-host-app-for-keychain-tests-in-xcode-8-97222611917e#.z3zpqwnzt
我正在添加一个全新的应用程序项目,我只需要在单个视图应用程序的Framework项目中添加一个新的Target
然后,我可以在测试目标中选择Host Application.
使用我之前的图表,最终的结果是:
Framework Project | |- Unit Test Target |- Framework Target |- Dummy App Target