7

iOS アプリにデータを安全に保存するために、SSKeychainオープン ソース ライブラリを使用しています。昨日、iTunes からアプリを v1.0 から v2.0 に更新したときに、SSKeychain がデータを保持できなかったという問題に直面しました。

UUID 生成のコード:

- (NSString *)createNewUUID
{
    CFUUIDRef theUUID = CFUUIDCreate(NULL);
    CFStringRef string = CFUUIDCreateString(NULL, theUUID);
    CFRelease(theUUID);
    return (__bridge NSString *)string;
}

ここでは、一意のデバイス文字列を生成し、 を使用しkeychainて同じものを保存しました。アプリは一意の文字列/デバイス識別子に大きく依存します。これは、iOS5 から iOS7 にかけUnique Device Identifierて、メソッドが非推奨になったため、Apple が に関連して多くの変換を行ったためです。

Store & Retrieve のコープ スニペット:

NSString *retrieveuuid = [SSKeychain passwordForService:@"com.name.appname" account:@"AppName"];
if (retrieveuuid == nil) {
    NSString *uuid  = [self createNewUUID];

    //Store the password in Keychain
    NSError *error = nil;
    [SSKeychain setPassword:uuid forService:@"com.name.appname" account:@"AppName" error:&error];

    if ([error code] == SSKeychainErrorNotFound) {
        NSLog(@"ID not found");
    }
}

それで、これはキーチェーンがその値/識別子を保持できないということですか、アプリがAppleから更新されたとき、または私はある時点で見逃しています. アプリのインストール、アンインストール、リセット、更新に関係なく、識別子をデバイスに永続的に保存できるかどうかを助けてください。

または、生成時に同じdeviceID /一意の文字列を提供できる API があるので、一意の文字列を保存する必要がありますか?

注 :アプリは iOS 4.3 以降をサポートしている必要があります。

4

3 に答える 3

4

この回答をご覧ください。現在直面している問題は、チーム ID であるバンドル シード ID (バンドル ID の前の 10 記号の英数字コード) に関連付けられているキーチェーン グループへのアクセスが実質的に失われることです。したがって、基本的に、アプリの更新後のキーチェーンへのアクセスは、@PF1 が言及したようなプロビジョニング プロファイルではなく、使用する配布証明書に依存します。
私の主張を証明するために、次の手順を試すことをお勧めします。

  1. iTunes Connect でアプリに新しいバージョンを追加します。
  2. 「アップロード準備完了」にします。
  3. 会員センターでご自身に新しい配布証明書を発行してください。
  4. 2 つの新しいアプリストア プロビジョニング プロファイルを作成します。1 つは古い証明書で、もう 1 つは新しい証明書で作成します。
  5. アプリを App Store に送信するために通常行うように、2 つのアーカイブを作成します。1 つは古い証明書、もう 1 つは新しい証明書です。
  6. 両方を検証します。新しい証明書を使用すると、このバージョンではキーチェーン グループへのアクセスが失われるという検証警告が表示されます。
于 2014-08-25T14:41:12.173 に答える
2

古い質問であることは知っていますが、誰かにとって役立つ場合に備えて、この回答を残します。両方のバージョンで同じ資格を使用して修正しました。

ここに画像の説明を入力

ここに画像の説明を入力

于 2016-08-06T20:18:22.790 に答える
1

同様の問題が発生している他の人にとっては、ローカルでテストし、アプリケーションを手動でアップグレードしようとしたときにこの問題が発生しました。デバイス上のバージョン (App Store プロファイルでプロビジョニング) を、Xcode からのローカル コピー (チーム プロビジョニング プロファイルでプロビジョニング) で上書きしようとしました。almas がコメントで指摘したように、キーチェーンはビルドに使用されるプロビジョニング プロファイルに関連付けられているようです。Apple に提出してアプリを更新したところ、SSKeychain は問題なく動作しました。

于 2014-08-22T21:54:10.320 に答える