Поиск префикса идентификатора приложения iPhone программно - PullRequest
3 голосов
/ 01 марта 2010

Можно ли программным способом найти префикс идентификатора приложения в вашем приложении iPhone? Или даже просто получить всю строку идентификатора приложения?

Я вижу, вы можете найти его, заглянув в файл "embedded.mobileprovision", но есть ли более простой способ? (И я не думаю, что это работает, если вы работаете в симуляторе)

РЕДАКТИРОВАТЬ: Извините, я имею в виду идентификатор PREFIX (10 символов). Однако я понял, что мне это на самом деле не нужно, потому что в любом случае остальная часть идентификатора гарантированно будет уникальной.

Ответы [ 3 ]

10 голосов
/ 01 марта 2010

Идентификатор пакета хранится в Info.plist пакета приложения, как указано в St3fan, но вы не должны напрямую нащупывать Info.plist. Вместо этого используйте:

[[NSBundle mainBundle] bundleIdentifier]
4 голосов
/ 09 августа 2012

Вы можете программно получить идентификатор комплекта семян, посмотрев на атрибут группы доступа (т.е. 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;
}
0 голосов
/ 05 августа 2011

Если я правильно понимаю, вы ищете идентификатор пакета? если вы можете получить этот путь.

NSString* appID = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"];
...