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

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

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

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

【问题讨论】:

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


    【解决方案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;
    }
    

    【讨论】:

    • 在发布多个问题的复制和粘贴样板/逐字答案时要小心,这些往往会被社区标记为“垃圾邮件”。如果您这样做,则通常意味着问题是重复的,因此请改为标记它们。 stackoverflow.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];
      猜你喜欢
      • 2012-07-28
      • 2012-04-23
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多