IdentifierForVendor

NSString *identifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; 

上面的代码在两个我的应用程序的同一个电话上给出了两个不同的标识符 – 不同的捆绑ID,但在我的Apple账户上创build了两个App ID和两个开发configuration文件。

我如何理解,如果团队ID是相同的,供应商的标识符应该在这两个应用程序中是相同的。 错误在哪里? 我不明白? 第一个应用

第二个应用

我现在正在同一个问题。 “答案”是,在Apple文档中,identifierForVendor按其预期的devise被破坏:

假设包ID是反向DNS格式,前两个组件用于生成供应商ID。 例如,com.example.app1和com.example.app2似乎具有相同的供应商ID。

实际情况是,对于使用相同configuration文件和签名证书的应用程序,identifierForVendor只是相同的。 作为一个例子,我在我的企业环境中有多个应用程序,所有这些都是com.mycompany ..

对于使用bundleID com.mycompany.app1。*及其供应configuration文件的应用程序,identifierForVendor与使用相同签名证书的com.mycompany.app2应用程序完全相同,但是不同的供应configuration文件会生成不同的identifierForVendor值。

编辑:这只发生在iOS7,但在iOS6中工作正常。 我昨天testing了一段时间,可以在7天内复制这个问题,但在6天内我得到了预期的结果。

编辑2:苹果已经移动了标识符ForVendor的目标职位。 他们显然确定了algorithm问题,而不是解决问题,而是改变了iOS版本之间的标识符function。 更新文档链接如下。 SMH。

identifierForVendor

供应商不是由团队ID决定的,而是由以下任一方式决定的:

  • 由App Store提供的数据(如果从App Store下载)
  • 包ID的一部分(如果使用任何其他方式部署)

这取决于设备是否运行iOS 6或7+。

根据- [UIDevice identifierForVendor]文档:

通常,供应商是由App Store提供的数据决定的。 如果应用程序未从应用程序商店安装(例如企业应用程序和应用程序仍在开发中),则根据应用程序的包ID计算供应商标识符。 捆绑ID被认为是反向DNS格式。

在iOS 6上,软件包ID的前两个组件用于生成供应商ID。 如果捆绑包ID仅具有单个组件,则使用整个捆绑ID。

在IOS 7上,除了最后一个组件之外的所有组件都被用来生成供应商ID。 如果捆绑包ID仅具有单个组件,则使用整个捆绑ID。

因为你有两个不同的捆绑ID。

供应商由前两个点分隔的字段标识。 所以com.a.app1和com.a.app2拥有相同的供应商(com.a),但com.b.app3拥有不同的供应商(com.b)