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 以降をサポートしている必要があります。