使用 Xcode 8.3.2 指定 AdHoc IPA 导出的配置文件

RAM*_*237 4 export xcodebuild ios ipa provisioning-profile

昨天我已经从 Xcode 8.1 升级到 8.3.2,当然我所有的 CI 构建基础设施再次失败(感谢 Apple,你总是知道如何让我更加忙碌!)。

因此,主要的破坏性变化是这-exportProvisioningProfile不再是一个有效的选择。据我了解,他们现在强迫我们使用-exportOptionsPlist

我已经为我的一个应用程序配置了导出,以使用app-store仅适用于市场的方法的 .plist 文件。对于任何 AdHoc 导出,我很乐意使用-exportProvisioningProfile "$PROVISIONING_PROFILE". 不知道为什么苹果认为它很糟糕。

因此,现在我必须修改我的自动构建脚本以使用 .plist 文件进行任何导出。

我能够从xcodebuild -help这里的其他问题中找到我需要设置方法以ad-hoc进行内部分发的信息。好吧,这很容易,但是...

我到底该如何指定用于 IPA 导出的确切配置文件?

从 GUI 导出时我可以选择所需的配置文件,所以我相信应该有某种方法将其传递到xcodebuild. 但是,我仍然没有在网络上找到任何方法来做到这一点。

预先感谢各位。


ps 请不要建议使用自动配置文件管理,我有几个用于导出的配置文件专用于它们自己的目的,我需要明确说明在特定情况下使用其中哪一个(我的 bash 脚本在构建过程开始时定义它)。

Sve*_*ker 6

您不能再直接为IPA导出指定Provisioning Profile,而是必须在exportOptions.plist中指定参数teamIDmethod以便xcodebuild能够为您解析所需的Provisioning Profile:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>method</key>
    <string>ad-hoc</string>
    <key>teamID</key>
    <string>YOUR_TEN_CHARACTER_TEAM_ID</string>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

您可以在配置文件中查找您的 teamID(key TeamIdentifier

如果用于构建 xcarchive 的配置文件使用与导出配置文件相同的 teamID,则不必在 plist 中设置 teamID 参数,但这始终是一个好主意。

请务必将您的 AdHoc Prov 配置文件复制到,$HOME/Library/MobileDevice/Provisioning Profiles以便 xcodebuild 能够找到它。

编辑

如果您有多个 Prov 配置文件,其中$HOME/Library/MobileDevice/Provisioning Profiles所有配置文件都与方法、teamID 和应用程序包标识符的组合相匹配,那么您将有两个选择:

  1. 在每次导出之前做好准备$HOME/Library/MobileDevice/Provisioning Profiles,以便它只包含所需的配置文件。将当前内容移走 ( cp -Rpf "$HOME/Library/MobileDevice/Provisioning Profiles" "$HOME/Library/MobileDevice/Provisioning Profiles Backup" && rm -f "$HOME/Library/MobileDevice/Provisioning Profiles/"*.mobileprovision),然后将导出配置文件复制到该目录,导出 ipa 并恢复备份文件夹。
  2. 尝试一下,content 应该是Prov Profile 内部 plist 的 keyxcodebuild -exportArchive ... PROVISIONING_PROFILE_SPECIFIER=xxx的值。Name此行为未记录,因此它可能不适用于所有 Xcode > 7 版本。当您的应用程序包含嵌入式扩展时,它也可能不起作用,因为它们可能需要单独的 Prov 配置文件。