以编程方式查找 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 应用程序标识符前缀的主要内容,如果未能解决你的问题,请参考以下文章