$(AppIdentifierPrefix)在构建期间未解析

时间:2015-03-22 14:57:07

标签: ios xcode

.entitlements文件中的

$(AppIdentifierPrefix)未被实际的AppIdentifierPrefix取代。有人可以对这个问题有所启发吗?

1 个答案:

答案 0 :(得分:4)

因此,当您向应用程序添加 iCloud Game Center 等功能时,我对您YourApp.entitlements文件的理解已添加到您的项目中。< / p>

(我很想看到官方文档的一些指示......如果存在的话。)

这些权利文件用于什么?

首先,.entitlements仅适用于 build 进程的项目。 应该在最终的.app产品中结束。如果是,请选择.entitlements文件,然后在文件检查器中,清除目标成员。 (这是Xcode实际生成这些文件的方式,没有任何目标成员资格)

那么.entitlements文件用于什么呢?它是构建过程的一部分,它以两种形式被采集和处理并放入最终的应用程序包中:

  • 首先:.entitlements文件的内容嵌入在embedded.mobileprovision文件中。这是一个带有二进制签名的签名属性列表,但是如果你在文本编辑器中打开它,你可以看到有一个<key>Entitlements</key>部分应该有处理过的权利。

  • 第二:还有一个名为.entitlements的{​​{1}}文件的副本。这与原始archived-expanded-entitlements.xcent文件基本相同,只是已经处理完毕。

.entitlements文件中可以使用哪些预处理器值

我认为.entitlements文件的处理不会记录在任何地方。肯定会有一个预处理器在运行它,因此.entitlements之类的东西会被实际值替换。但是,这似乎与用于$(AppIdentifierPrefix)文件的文件不同。

Info.plist与您在Xcode项目中配​​置的团队标识符相同。您可以在标识部分中的目标常规设置下找到已配置的团队。如果团队设置为,则会有一个很好的更改,$(AppIdentifierPrefix)将无法设置。

  

所以最后回答你的问题:如果你看看我上面提到的那两个文件,你仍然看到$(AppIdentifierPrefix)没有被正确替换,请确保你的项目有一个团队标识符已配置。

Xcode如何知道您的目标使用哪些权利文件?

在构建设置中,您可以查看代码签名权利设置,以找出Xcode用于每个构建配置的文件。通常 Debug Release 使用相同的权利文件,但您可以更改它。

(例如,对于Firefox for iOS,我们为 Nightly Aurora Beta Release build。这些都有不同的权利文件。我们有不同的权利文件的原因是因为我们无法使$(AppIdentifierPrefix)预处理器识别.entitlements之类的设置 - 我很想知道是否有一种方法,因为这将使我们的构建更简单。)

什么工具处理$(PRODUCT_NAME:rfc1034identifier)个文件?

不完全确定。但是如果你查看构建日志,你会看到一些.entitlements工具的引用。这似乎是一个内部Xcode命令,而不是作为命令行工具实际存在的东西。所以这不是很有用。

现在您几乎了解我对builtin-productPackagingUtility个文件的所有了解: - )

(我喜欢评论并将此答案转化为权利文件的权威指南 - 我认为围绕它们存在很多混淆)