3

かなり長い間、KeychainItemWrapper の ARC バージョンを使用して、プライベート キーチェーン アイテムの読み取りと書き込みに成功してきました。

現在、iOS アプリを共有アクセス グループを使用するように変換して、同じアプリ プレフィックスを共有する 2 つのアプリからキーチェーン アイテムにアクセスできるように取り組んでいます。機能セクションで、キーチェーン グループ「MYAPPPREFIX.MYSHAREDACCESSNAME」を追加しました。

これらの行を使用して、変数をキーチェーン グループに書き込みます。

keychainItemWrapper = [[KeychainItemWrapper alloc] initWithIdentifier:key accessGroup:@"MYAPPPREFIX.MYSHAREDACCESSNAME"];
[keychainItemWrapper setObject:value forKey:(__bridge id)(kSecAttrAccount)]; // store the new value in the keychain

accessGroup がnilとして指定されている場合、うまく機能します。ただし、アクセス グループを指定すると、デバッガー ログに次のエラーが記録されてクラッシュします。

-[KeychainItemWrapper writeToKeychain] でのアサーションの失敗、..../KeychainItemWrapper.m:329 キャッチされない例外 'NSInternalInconsistencyException' によるアプリの終了、理由: 'キーチェーン アイテムを追加できませんでした。

結果の OSStatus エラー コードは -25243 で、詳細を追跡できませんでした。

共有アクセス グループに書き込むために他に何かしなければならないことはありますか?

4

1 に答える 1

6

他の人に役立つ場合は、問題を特定できました。Xcode の「機能」では、アプリ ID プレフィックスを省略する必要がありました。ただし、アクセス グループを識別するときに、アプリ ID プレフィックスを含める必要があります。

そのため、機能では、グループに「myAccessGroup」という名前を付けました。

私のコードでは、プレフィックスを次のように含めています。

keychainItemWrapper = [[KeychainItemWrapper alloc] initWithIdentifier:key accessGroup:@"xxxxxxxx.myAccessGroup"];
于 2014-10-10T21:50:33.763 に答える