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

Posted

技术标签:

【中文标题】以编程方式查找 iPhone 应用程序标识符前缀【英文标题】:Finding iPhone Application Identifier Prefix programmatically 【发布时间】:2011-01-22 03:40:40 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

您可以通过查看现有 KeyChain 项的访问组属性(即kSecAttrAccessGroup)以编程方式检索捆绑种子 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;

【讨论】:

在发布多个问题的复制和粘贴样板/逐字答案时要小心,这些往往会被社区标记为“垃圾邮件”。如果您这样做,则通常意味着问题是重复的,因此请改为标记它们。 ***.com/a/11841898/419 感谢您的提醒。最初,我添加了一个答案,其中只有一个指向我的其他答案的链接,但 SO 会自动将其转换为对该问题的评论。我认为在这里复制我的答案会更有帮助,因为所有其他回答者都误解了问题并给出了错误的答案。我应该删除这个答案并链接到另一个答案作为对问题的评论吗? 另外,我查看了 SO 的“标记”功能,但没有找到合适的选项来标记这个问题。该问题包含其他问题所缺少的其他信息,因此它不是完全重复的。【参考方案2】:

bundle id 存储在应用程序包的 Info.plist 中,如 St3fan 指定的那样,但您不应该直接在 Info.plist 中摸索。相反,使用:

[[NSBundle mainBundle] bundleIdentifier]

【讨论】:

【参考方案3】:

如果我理解正确,您正在寻找捆绑标识符?如果你能做到这一点。

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

【讨论】:

一位匿名用户建议这样做更简单:NSString* appID = [[NSBundle mainBundle] bundleIdentifier];

以上是关于以编程方式查找 iPhone 应用程序标识符前缀的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式从iPhone获取IMEI号码[重复]

如何以编程方式精确查找 PPI

获取 iPhone 的唯一设备标识符

iOS 以编程方式居中对象

如何以编程方式显示 UISplitViewController Master?

如何以编程方式检测音符和和弦(在 iPhone SDK 中)?