Вы можете программно получить идентификатор комплекта семян, посмотрев на атрибут группы доступа (т.е. kSecAttrAccessGroup
) существующего элемента KeyChain.В приведенном ниже коде я ищу существующую запись KeyChain и создаю ее, если она не существует.Получив запись KeyChain, я извлекаю из нее информацию о группе доступа и возвращаю первый компонент группы доступа, разделенный знаком "."(точка) в качестве идентификатора комплекта семян.
+ (NSString *)bundleSeedID {
NSDictionary *query = [NSDictionary dictionaryWithObjectsAndKeys:
kSecClassGenericPassword, kSecClass,
@"bundleSeedID", kSecAttrAccount,
@"", kSecAttrService,
(id)kCFBooleanTrue, kSecReturnAttributes,
nil];
CFDictionaryRef result = nil;
OSStatus status = SecItemCopyMatching((CFDictionaryRef)query, (CFTypeRef *)&result);
if (status == errSecItemNotFound)
status = SecItemAdd((CFDictionaryRef)query, (CFTypeRef *)&result);
if (status != errSecSuccess)
return nil;
NSString *accessGroup = [(NSDictionary *)result objectForKey:kSecAttrAccessGroup];
NSArray *components = [accessGroup componentsSeparatedByString:@"."];
NSString *bundleSeedID = [[components objectEnumerator] nextObject];
CFRelease(result);
return bundleSeedID;
}