5

同じ識別子 (同じプロファイル) を持つ別のアプリケーションから、アプリケーションによって設定されたキーチェーン データにアクセスしようとしています。これを達成するためにこのリンクを使用しました。

キーチェーン データの保存は適切に行われています。以下のステートメントで errSecSuccess を取得します (シミュレーターとデバイスの両方で)。

OSStatus status = SecItemAdd((CFDictionaryRef)dictionary, NULL);

これまでのところは問題ありませんが、アプリ A が別のアプリ B に保存した資格情報を取り戻そうとすると、シミュレーターとデバイスで動作が異なります。

iOS シミュレーター 6.1 では、以下のステートメントのステータスが「0」になります。

 OSStatus status = SecItemCopyMatching((CFDictionaryRef)searchDictionary, &foundDict);

どの iOS デバイスでも、ステータスは「-25300」になります。

セキュリティ フレームワークにあるエラー コードは次のとおりです。

//errSecSuccess                = 0,       /* No error. */
//errSecUnimplemented          = -4,      /* Function or operation not implemented. */
//errSecParam                  = -50,     /* One or more parameters passed to a function where not valid. */
//errSecAllocate               = -108,    /* Failed to allocate memory. */
//errSecNotAvailable           = -25291,  /* No keychain is available. You may need to restart your computer. */
//errSecDuplicateItem          = -25299,  /* The specified item already exists in the keychain. */
//errSecItemNotFound           = -25300,  /* The specified item could not be found in the keychain. */
//errSecInteractionNotAllowed  = -25308,  /* User interaction is not allowed. */
//errSecDecode                 = -26275,  /* Unable to decode the provided data. */
//errSecAuthFailed             = -25293,  /* The user name or passphrase you entered is not correct. */

アイテムが見つからないことがわかりましたが、デバイスとシミュレーターが異なるのはなぜですか。

4

1 に答える 1

3

私の知る限り、アプリケーションで扱うキーチェーン グループは、デフォルトではシステム上の他のアプリ間で共有されません。この場合、別のアプリのグループを見つけることができた場合、キーチェーンが提供するセキュリティを無効にするプライベート キーチェーン アイテムを盗むことができることを意味します。

その結果、アプリ間で共有したいキーチェーン グループのパブリック定義を可能にする、キーチェーン アクセス グループとして知られる概念があります。ドキュメントには次のように記載されています。

キーチェーンの共有を有効にすると、アプリはキーチェーン内のパスワードをチームが開発した他のアプリと共有できます

そのため、キーチェーン アイテムは同じ開発者の他のアプリケーション (つまり、他のアプリ) とのみ共有できることに注意してください。

于 2014-11-16T15:42:15.240 に答える