【问题标题】:Specify Provisioning Profile for AdHoc IPA export with Xcode 8.3.2使用 Xcode 8.3.2 为 AdHoc IPA 导出指定配置文件
【发布时间】:2017-09-26 07:04:03
【问题描述】:

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

所以,主要的破坏性变化是-exportProvisioningProfile 不再是一个有效的选项。据我了解,他们现在强迫我们改用-exportOptionsPlist

我已经将我的一个应用程序的导出配置为使用带有app-store 方法的 .plist 文件,仅供市场使用。 对于任何 AdHoc 导出,我很乐意使用 -exportProvisioningProfile "$PROVISIONING_PROFILE"。不知道为什么 Apple 认为它不好。

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

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

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

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

提前谢谢各位。


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

【问题讨论】:

    标签: ios export provisioning-profile ipa xcodebuild


    【解决方案1】:

    您不能再直接为 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>
    

    您可以在 Provisioning Profile 中查找您的 teamID(键 TeamIdentifier

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

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

    编辑

    如果您在 $HOME/Library/MobileDevice/Provisioning Profiles 中有多个省配置文件,它们都匹配方法、团队 ID 和应用程序包标识符的组合,您将有两种选择:

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

    【讨论】:

    • 是的,感谢您的回复,这正是我的导出 plist 文件目前的样子。但是,我在$HOME/Library/MobileDevice/Provisioning Profiles 目录中为该特定应用程序提供了几个配置文件,并且我能够明确说明在 Xcode 8.1 的哪种情况下使用哪个配置文件。事实上,当使用 GUI 界面时我仍然可以做到,但我需要它在脚本中自动化,这就是我问这个问题的原因。此外,我使用这种方法的第一次构建肯定会使用比我需要的更少的设备获取错误的配置文件:(所以,我需要将它指向我想要的...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    相关资源
    最近更新 更多