菜鸟教程小白 发表于 2022-12-13 10:26:56

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


                                            <p><p>.entitlements 文件中的$(AppIdentifierPrefix) 不会被实际的 AppIdentifierPrefix 替换。有人可以对这个问题有所了解吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>以下是我对当您添加 <em>iCloud</em> 或 <em>Game Center</em> 等功能时添加到项目中的 <code>YourApp.entitlements</code> 文件的理解到您的应用程序。</p>

<p>(我很想看到一些指向官方文档的指针……如果有的话。)</p>

<p><strong>这些权利文件有什么用途?</strong></p>

<p>首先,<code>.entitlements</code> 仅在您的项目中用于 <em>build</em> 过程。它应该<em>不</em>出现在最终的 <c​​ode>.app</code> 产品中。如果是,请选择 <code>.entitlements</code> 文件并在 <em>File Inspector</em> 中清除它的 <em>Target Membership</em>。 (这就是 Xcode 实际生成这些文件的方式,没有任何目标成员资格)</p>

<p>那么 <code>.entitlements</code> 文件是干什么用的呢?它是构建过程的一部分,在此过程中它会被提取和处理,并以两种形式放入您的最终应用程序包中:</p>

<ul>
<li><p>首先:<code>.entitlements</code> 文件的内容嵌入在<code>embedded.mobileprovision</code> 文件中。这是一个带有二进制签名的签名属性列表,但是如果您在文本编辑器中打开它,您会看到有一个 <code><key>Entitlements</key></code> 部分应该具有已处理的权利在那里。</p></li>
<li><p>第二:还有一个名为 <code>archived-expanded-entitlements.xcent</code> 的 <code>.entitlements</code> 文件的副本。这与原始 <code>.entitlements</code> 文件基本上是相同的文件,只是它已经过处理。</p></li>
</ul>

<p><strong>.entitlements 文件中可以使用哪些预处理器值</strong></p>

<p>我不认为 <code>.entitlements</code> 文件的处理记录在任何地方。肯定有一个预处理器在上面运行,因此像 <code>$(AppIdentifierPrefix)</code> 这样的东西会被实际值替换。但是,这似乎与用于 <code>Info.plist</code> 文件的那个不同。</p>

<p><code>$(AppIdentifierPrefix)</code> 与您可能在 Xcode 项目中配置的 <em>Team Identifier</em> 相同。您可以在 <em>Identity</em> 部分的目标的<em>General</em> 设置下找到已配置的<em>Team</em>。如果团队设置为 <em>None</em>,那么会有一个很好的变化,即不会设置 <code>$(AppIdentifierPrefix)</code>。</p>

<blockquote>
<p>So to finally answer your question: if you look at those two files that I mentioned above, and you still see the <code>$(AppIdentifierPrefix)</code> is not correctly substituted, make sure your project has a <em>Team Identifier</em> configured.</p>
</blockquote>

<p><strong>Xcode 如何知道您的目标使用什么权利文件?</strong></p>

<p>在您的build设置中,您可以查看 <em>代码签名权利</em> 设置,以了解 Xcode 用于每个构建配置的文件。通常 <em>Debug</em> 和 <em>Release</em> 使用相同的权利文件,但您可以更改它。</p>

<p>(例如,对于 iOS 版 Firefox,我们为 <em>Nightly</em>、<em>Aurora</em>、<em>Beta</em> 和 <em>Release</em 构建了配置> 构建。这些都有不同的权利文件。我们有不同的权利文件的原因是因为我们无法让 <code>.entitlements</code> 预处理器识别像 <code>$(PRODUCT_NAME:rfc1034identifier)</这样的设置</code> - 我很想知道是否有办法做到这一点,因为这将使我们的构建更简单。)</p>

<p><strong>什么工具处理 <code>.entitlements</code> 文件?</strong></p>

<p>不完全确定。但是,如果您查看构建日志,您会看到一些对 <code>builtin-productPackagingUtility</code> 工具的引用。这似乎是一个内部 Xcode 命令,而不是实际作为命令行工具存在的东西。所以这不是很有用。</p>

<p>现在您几乎了解了我所知道的关于 <code>.entitlements</code> 文件的所有信息 :-)</p>

<p>(我喜欢评论并将这个答案变成权利文件的权威指南 - 我认为它们周围有很多困惑)</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - $(AppIdentifierPrefix) 在构建期间未解析,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/29195849/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/29195849/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - $(AppIdentifierPrefix) 在构建期间未解析