NSString *identifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
上面的代码在我的两个应用程序中的同一部手机上提供了两个不同的标识符 - 不同的捆绑ID,但在我的Apple帐户上创建了两个App ID和两个开发配置文件。
我的理解,如果团队ID相同,供应商的标识符应该在这两个应用程序中相同。哪里出错了?我不明白的是什么?
答案 0 :(得分:6)
我现在正在打同样的问题。 “答案”是在Apple文档中按照其预期设计破坏了identifierForVendor:
假设捆绑包ID采用反向DNS格式,前两个组件用于生成供应商ID。例如,com.example.app1和com.example.app2似乎具有相同的供应商ID。
情况的实际情况是,identifierForVendor仅对使用相同配置文件和签名证书的应用程序完全相同。作为一个例子,我的企业环境中有多个应用程序,所有这些应用程序都是com.mycompany ..
identifierForVendor对于使用bundleID com.mycompany.app1。*及其配置文件的应用程序是相同的,但com.mycompany.app2使用相同的签名证书,但不同的配置文件会产生不同的identifierForVendor值。
编辑:这只发生在iOS7中,但在iOS6中运行良好。我昨天对此进行了一段时间的测试,可以在7天内复制问题,但在6天内我得到了预期的结果。
EDIT2: Apple已将目标帖子移到了identifierForVendor上。他们显然已经确定了他们的算法问题,而不是修复问题,已经改变了iOS版本之间的标识符功能和文档更改。更新的文档链接如下。 SMH。
答案 1 :(得分:4)
供应商不是由团队ID决定的,而是由以下两者决定:
这取决于设备是运行iOS 6还是7 +。
根据-[UIDevice identifierForVendor]文档:
通常,供应商由App Store提供的数据确定。 如果未从应用商店(例如企业版)安装该应用 应用程序和应用程序仍在开发中,然后是供应商标识符 根据应用程序的包ID计算。假设包ID 是反向DNS格式。
在iOS 6上,捆绑ID的前两个组件用于 生成供应商ID。如果捆绑包ID只有一个组件, 然后使用整个包ID。
在IOS 7上,捆绑包的所有组件除了最后一个组件 用于生成供应商ID。如果捆绑包ID只有一个 组件,然后使用整个包ID。
答案 2 :(得分:2)
因为你有2个不同的包ID。
供应商由前两个点分隔的字段标识。 所以com.a.app1和com.a.app2有相同的供应商(com.a)但是com.b.app3有不同的供应商(com.b)