以编程方式查找iPhone应用程序标识符前缀

时间:2010-03-01 02:26:40

标签: iphone iphone-sdk-3.0 ios-simulator

有没有办法以编程方式在iPhone应用程序中找到应用程序标识符前缀?或者甚至只是获取整个应用程序标识符字符串?

我看到你可以通过窥视“embedded.mobileprovision”文件找到它,但有更简单的方法吗? (如果你在模拟器中运行,我认为这不起作用)

编辑:对不起,我的意思是标识符PREFIX(10个字符)。我已经意识到我实际上并不需要这个,因为无论如何,ID的其余部分都保证是唯一的。

3 个答案:

答案 0 :(得分:10)

捆绑包ID存储在应用程序包的Info.plist中,如St3fan所指定,但您不应直接在Info.plist上进行搜索。相反,使用:

[[NSBundle mainBundle] bundleIdentifier]

答案 1 :(得分:4)

您可以通过查看现有KeyChain项的访问组属性(即kSecAttrAccessGroup)以编程方式检索Bundle Seed ID。在下面的代码中,我查找现有的KeyChain条目,如果它不存在则创建一个。一旦我有KeyChain条目,我从中提取访问组信息并返回访问组的第一个组件,以“。”分隔。 (期间)作为捆绑种子ID。

+ (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;
}

答案 2 :(得分:0)

如果我理解正确您正在寻找捆绑标识符?如果你能这样做的话。

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