42

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 エラーが発生しましたが、これで修正できました。

問題がテスト ターゲットに存在しない場合、これはおそらく解決策ではありません。

したがって、解決策は次のとおりだと思います。テストターゲットに強制的に署名します。

4

5 に答える 5

6

あなたの質問に答えるには: はい、同じ問題が発生します。私のアプリを実行するとうまくいくようです。しかし、デバイスで XCTests を実行すると、キーチェーンがエラー -34018 を返すようです。奇妙なことは、シミュレーターでテストを実行すると発生しないことです。

編集:この回答で説明した解決策を見つけました

于 2014-03-10T14:25:34.133 に答える
1

「OSStatus error -34018」も表示されました。プロビジョニングプロファイルを再作成することで解決しました。

于 2015-07-14T22:54:10.827 に答える
1

キーチェーンを含むテストも実行できませんでした。

私にとってうまくいったのは、テスト用の「ホストアプリケーション」を追加することでした。これを見つけるには、プロジェクト ターゲットに移動し、[MyTestTarget] をタップして [全般] タブをクリックし、ドロップダウンで [ホスト アプリケーション] を選択します。

私は CocoaTouch Framework をテストしていたので、ホスト アプリケーションはありませんでした。テストのためだけに作成する必要がありました (例: "MyFrameworkTestApp")。

それでも問題が解決しない場合は、「MyFrameworkTestApp」ターゲットの「機能」タブに移動して、「キーチェーン共有」機能を有効にしてみてください。

于 2019-02-28T16:03:54.070 に答える