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 になります
キーチェーンを使用するたびにアプリ ID と一致するプロビジョニング プロファイルが必要であると言いますが、それは正しくありません。そうしないと、テスト ターゲットの外で同じエラーが発生します。
より深く掘り下げると、(未確認の)回答は次のとおりです。
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 エラーが発生しましたが、これで修正できました。
問題がテスト ターゲットに存在しない場合、これはおそらく解決策ではありません。
したがって、解決策は次のとおりだと思います。テストターゲットに強制的に署名します。