使用Xcode 8.3.2为AdHoc IPA导出指定供应配置文件

时间:2017-04-28 08:24:52

标签: ios export provisioning-profile ipa xcodebuild

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

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

我已经为我的某个应用配置了导出,只能使用带有app-store方法的.plist文件。 对于任何AdHoc导出,我很高兴使用-exportProvisioningProfile "$PROVISIONING_PROFILE"。不知道为什么Apple认定它不好。

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

我能够从xcodebuild -help和其他问题中找到SO,我需要将方法设置为ad-hoc进行内部分发。好的,这很简单,但是......

我怎么能指定用于IPA导出的确切配置文件?

我可以在从GUI导出时选择所需的配置文件,因此我认为应该有一些方法可以将其传递给xcodebuild。但是,我仍然没有找到任何方法在网上做到这一点。

先谢谢你们。

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

1 个答案:

答案 0 :(得分:3)

您无法再直接指定IPA导出的配置文件,而是必须在exportOptions.plist中指定teamIDmethod的参数,因此xcodebuild将能够解析所需的配置文件:

<?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>

您可以在配置文件(密钥TeamIdentifier

中查找您的teamID

如果用于构建xcarchive的Provisioning Profile使用与export provisioning Profile相同的teamID,则不必在plist中设置teamID参数,但这总是一个好主意。

请务必将您的AdHoc Prov个人资料复制到$HOME/Library/MobileDevice/Provisioning Profiles,以便xcodebuild能够找到它。

修改

如果$HOME/Library/MobileDevice/Provisioning Profiles中有多个Prov 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. 尝试xcodebuild -exportArchive ... PROVISIONING_PROFILE_SPECIFIER=xxx,内容应该是Prov Profile的内部plist的Name键的值。此行为未记录,因此它可能无法在所有Xcode&gt;中使用。 7个版本。当您的应用包含嵌入式扩展时,它也可能无效,因为它们可能需要单独的Prov Profile。