Azure Devops Pipelines - 具有多个配置文件的 Xcode 项目无法存档和签名

And*_*ard 3 xcode azure-devops azure-pipelines

我是 DevOps 的新手,所以如果我错过了一些基本的东西,请放轻松:)

我在 Azure Pipelines 中使用以下内容:Hosted MacOS with an Xcode Build Agent(Xcode 版本 5.142.0)

我刚刚开始尝试为使用多个配置文件的基于 Xcode 的项目设置管道。在我的场景中,我的应用程序中有以下配置文件:

  • 意图
  • 用户界面
  • 小工具
  • 应用程序

我已经按照说明在这里设置证书和配置文件(尽管我的项目使用自动签名)https : //docs.microsoft.com/en-us/azure/devops/pipelines/apps/mobile/app-signing ?view=vsts&tabs=apple-install-during-build

这些已正确安装到托管构建代理(没有错误),并且构建过程完美无缺,直到签名。

在签名期间,似乎没有一个目标可以找到他们的配置文件(使用“手动”和“自动”分配时)。

以下是日志中运行的内容:

[command]/usr/bin/xcodebuild -workspace /Users/vsts/agent/2.142.1/work/1/s/*MYAPP**.xcworkspace -scheme **MYAPP** archive -sdk iphoneos -configuration Release -archivePath /Users/vsts/agent/2.142.1/work/1/s/**MYAPP** CODE_SIGN_STYLE=Manual PROVISIONING_PROFILE= PROVISIONING_PROFILE_SPECIFIER= | /usr/local/bin/xcpretty --no-color

然后,当涉及到归档时,每个方案都会发生以下情况:

error: "xxx Today Widget" requires a provisioning profile with the Push Notifications and App Groups features. Select a provisioning profile for the "Release" build configuration in the project editor. (in target 'xxx Today Widget')

几个问题:

  1. 是否有任何人可以指点我的更新指南?这似乎是一个常见的用例,我显然遗漏了一些东西。

  2. 或者,在同一构建中归档和签署多个方案时,有没有办法强制将哪个配置文件用于哪个方案?

  3. 自动签名是管道中的一个选项吗?

为了完整起见,我在这里看到了一个类似的问题:https : //github.com/Microsoft/azure-pipelines-tasks/issues/964但它已经关闭了两年多。

小智 9

以下是我们如何构建具有多个配置文件以在 Azure DevOps 中工作的 iOS 应用程序。

  • 确保您的帐户中安装了由 Microsoft 编写的Apple App Store Azure DevOps 扩展
  • 使用多个“安装 Apple 配置文件”任务安装所需的所有配置文件
  • 添加Xcode 构建任务并使用您的工作区/项目设置对其进行配置
  • 将“签名样式”设置为“自动签名”并在“签名和配置”部分下的“团队 ID”字段中提供您的团队 ID
  • 创建一个 .plist 文件,将其配置为类似于以下内容,并将其放在某处(您的代码存储库、安全文件等)。此示例是手表应用程序,但可以是需要多个配置文件的任何场景。您可以通过在文本编辑器中打开它并查找“UUID”键来找到配置文件的 UUID。
    <?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>provisioningProfiles</key>
        <dict>
            <key>YOUR_BUNDLE_ID.watchkitapp.watchkitextension</key>
            <string>UUID_OF_ASSOCIATED_PROVISIONING_PROFILE</string>
            <key>YOUR_BUNDLE_ID.watchkitapp</key>
            <string>UUID_OF_ASSOCIATED_PROVISIONING_PROFILE</string>
            <key>YOUR_BUNDLE_ID</key>
            <string>UUID_OF_ASSOCIATED_PROVISIONING_PROFILE</string>
        </dict>
        <key>signingCertificate</key>
        <string>iOS Distribution</string>
        <key>signingStyle</key>
        <string>manual</string>
        <key>method</key>
        <string>app-store</string>
        <key>teamID</key>
        <string>YOUR_TEAM_ID</string>
    </dict>
    </plist>
Run Code Online (Sandbox Code Playgroud)
  • 在“Package options”部分下,在“Export options”字段中指定“Plist”,并提供您在“Export options plist”字段中创建的 .plist 的路径

  • 我没有运气让这个工作。我得到的只是:“找不到 '&lt;MY_BUNDLE_ID_1&gt;' 的配置文件:Xcode 找不到任何与 '&lt;MY_BUNDLE_ID_1&gt;' 匹配的 iOS 应用程序开发配置文件。自动签名已禁用,无法生成配置文件。要启用自动签名,将 -allowProvisioningUpdates 传递给 xcodebuild。(在项目“&lt;MY_PROJECT&gt;”的目标“&lt;MY_EXTENSION_TARGET&gt;”中)”。传递 -allowProvisioningUpdates 让我回到旧的“没有使用 Xcode 注册的帐户。将您的开发人员帐户添加到 Xcode”:( (2认同)