Today I was upgrading Keychain to swift 4, and take this opportunity to fix the test. The tests pass on macOS, but on iOS, I get -25300 error for
var status = SecItemCopyMatching(query as CFDictionary, nil)
It is because there is no Keychain entitlement for test target. But this is a framework, how can I add entitlement 🤔 The solution is to use a Test Host to host the XCTest tests. See my pull request
Create test host target
First create an iOS app to act as a test host, you can name it TestHost_iOS
Enable Keychain capability
Then enable Keychain capability to let Xcode automatically create an entitlement file for you. Note that you can just enter the Keychain group. You don't need go to Apple Developer dashboard to configure anything
Specify Test Host
Then in you test target, specify Test Host by using $(BUILT_PRODUCTS_DIR)/TestHost_iOS.app/TestHost_iOS
Today I was upgrading Keychain to swift 4, and take this opportunity to fix the test. The tests pass on macOS, but on iOS, I get
-25300
error forIt is because there is no Keychain entitlement for test target. But this is a framework, how can I add entitlement 🤔 The solution is to use a Test Host to host the
XCTest
tests. See my pull requestCreate test host target
First create an iOS app to act as a test host, you can name it
TestHost_iOS
Enable Keychain capability
Then enable Keychain capability to let Xcode automatically create an entitlement file for you. Note that you can just enter the
Keychain group
. You don't need go toApple Developer dashboard
to configure anythingSpecify Test Host
Then in you test target, specify
Test Host
by using$(BUILT_PRODUCTS_DIR)/TestHost_iOS.app/TestHost_iOS
Now run your test again, it should pass 🎉