【问题标题】:iOS - Error Xcode 10 in Azure DevOPS - Issues with Provisioning Profile TaskiOS - Azure DevOPS 中的错误 Xcode 10 - 预配配置文件任务问题
【发布时间】:2019-02-10 23:24:45
【问题描述】:

我遇到了 Xcode iOS 应用的 Azure DevOPS 管道问题。我从头开始创建了管道,它使用了一个 yaml 文件,我在其中定义了构建以及基于 Microsoft 官方文档的签名和配置。该构建使用 XcodeVersion=10 和 CocoaPods 并实现签名和配置。我对 P12 证书的预安装没有问题,构建从 Secure Files 库中提取它并成功安装。

让我遇到问题的是配置文件。我必须在 InstallAppleProvisioningProfile@1 任务或 Xcode 任务中的 ProvisioningProfileUuid 配置中做错了,因为构建在 Xcode 任务上引发以下错误:

❌ 错误:“注册”需要具有无线附件配置功能的配置文件。在项目编辑器中为“发布”构建配置选择一个配置文件。 (在目标“注册”中)

我尝试将 InstallAppleProvisioningProfile@1 任务的 provProfileSecureFile 设置指向“.provisionprofile”和“.mobileprovision”文件,但我仍然在日志中看到没有执行命令. 该应用可以在本地基于“MyProvisioning_Profile.mobileprovision”构建、签名和配置,没有任何问题。

pool:
    vmImage: 'macOS-10.13'

variables:
    scheme: ''
    sdk: 'iphoneos'
    configuration: 'Release'

steps:
# Install an Apple certificate required to build on a macOS agent
- task: InstallAppleCertificate@2
    inputs:
    certSecureFile: 'MyProductionCert.p12'
    certPwd: $(P12password)

# Install an Apple provisioning profile required to build on a macOS agent
- task: InstallAppleProvisioningProfile@1
inputs:
    provisioningProfileLocation: 'Secure Files'
    provProfileSecureFile: 'MyProvisioning_Profile.provisionprofile'
    removeProfile: false

- task: Xcode@5
inputs:
    sdk: '$(sdk)'
    configuration: '$(configuration)'
    xcodeVersion: '10' 
    exportPath: '$(agent.buildDirectory)/output/$(sdk)/$(configuration)'
    packageApp: false
    xcWorkspacePath: 'Register.xcworkspace' 
    scheme: 'Register'
    signingOption: 'manual' 
    signingIdentity: $(APPLE_CERTIFICATE_SIGNING_IDENTITY)
    provisioningProfileUuid: $(APPLE_PROV_PROFILE_UUID)

我希望看到从 InstallAppleProvisioningProfile@1 任务中至少执行一个命令,但我看到的是 2 个成功但日志中的空任务: 1.前期工作:安装AppleProvisioningProfile 2.安装AppleProvisioningProfile

Azure DevOPS Xcode 任务随后失败并出现以下错误:

2019-02-08T01:35:05.1819530Z [command]/usr/bin/xcodebuild -sdk iphoneos -configuration Release -workspace /Users/vsts/agent/2.146.0/work/1/s/Register.xcworkspace -scheme Register build CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Distribution: [MyCompany LLC] ([MyTeamID]) PROVISIONING_PROFILE= PROVISIONING_PROFILE_SPECIFIER= | /usr/local/lib/ruby/gems/2.6.0/bin/xcpretty -r junit --no-color
2019-02-08T01:35:10.6519500Z ❌  error: "Register" requires a provisioning profile with the Wireless Accessory Configuration feature. Select a provisioning profile for the "Release" build configuration in the project editor. (in target 'Register')
2019-02-08T01:35:10.6560090Z ** BUILD FAILED **

使用 Azure 管道的任何人以前都遇到过这个问题吗?我该如何解决?

【问题讨论】:

  • 谢谢@Cœur 我刚刚更新了问题以修复我在问题文本中的一个拼写错误。 yaml 是正确的,所以这对我的问题没有帮助。如果之前在 Azure devOPS 或旧 VSTS 中设置过 xcode 管道的任何人提供任何帮助,我们将不胜感激。

标签: azure-devops xcode10


【解决方案1】:

您需要使用配置文件的 GUID(与签名证书相同),而不是其文件名。

如果您在 Azure DevOps(管道 > 库 > 安全文件 > {您的配置文件})中查看文件详细信息,则可以从 secureFileId 查询字符串参数获取 URL 中的 GUID。

【讨论】:

    【解决方案2】:

    当您使用InstallAppleProvisioningProfile@1 任务运行一次管道时,您可以找到配置文件 GUID。 (根据我的经验,SecureFiles 的 URL 中的 GUID 是 Azure Pipelines 的 GUID,与配置文件 GUID 无关。

    如果您已将配置文件上传到管道的安全文件,并且您的管道中有以下内容:

    - task: InstallAppleProvisioningProfile@1
      displayName: 'Install Ad Hoc Apple Provisioning Profile'
      inputs:
        provisioningProfileLocation: 'secureFiles'
        provProfileSecureFile: 'SomeProfile.mobileprovision'
    

    您会在管道的日志中看到类似的内容:

    sr/libexec/PlistBuddy -c Print UUID _xcodetasktmp.plist
    12345678-abcd-1234-abcd-1234567890ab
    sr/libexec/PlistBuddy -c Print Name _xcodetasktmp.plist
    Company Profile iOS Distribution or Ad-Hoc
    

    从那里复制配置文件 GUID,更新您的管道并重试。

    我的 XCode 任务配置如下:

    - task: Xcode@5
      displayName: 'Build React Native for iOS'
      inputs:
        actions: 'build'
        scheme: 'AwesomeAppNative'
        sdk: 'iphoneos'
        configuration: 'Release'
        xcWorkspacePath: './ios/AwesomeAppNative.xcworkspace'
        xcodeVersion: '10' # Options: 8, 9, 10, default, specifyPath
        args: '-UseModernBuildSystem=N' # See https://github.com/facebook/react-native/issues/20492
        useXcpretty: 'false' 
        signingOption: 'manual' # Options: nosign, default, manual, auto
        signingIdentity: 'Certificate identity name (<TEAMID>)'
        provisioningProfileUuid: 12345678-abcd-1234-abcd-1234567890ab # Ad Hoc
        # provisioningProfileName: DONT PUT THE NAME HERE IT WOULD TAKE PRECENDENCE
        # teamId: <TEAMIDFromCertificat> # for signingOption: auto
        packageApp: 'true' # Package the app
        exportOptions: 'auto'
    

    【讨论】:

      【解决方案3】:

      我发现使用 URL 中字段的 GUID 没有;工作。

      这对我来说获得了正确的文件夹 UUID:

      1. 导航到 ~/Library/MobileDevice/Provisioning Profiles/
      2. 如果您有多个,则将它们备份(例如通过 Zip 文件然后解压缩将在以下步骤后恢复文件)
      3. 全部删除
      4. 从 developer.apple.com 下载 Provisioning Profile
      5. 双击下载的 .mobileprovision 文件
      6. 最新添加的文件是带有 GUID 的文件,因为文件名将是 UUID。复制此 UUID。
      7. 如果需要,可以通过解压缩备份来恢复以前的配置文件。

      【讨论】:

        【解决方案4】:

        如果您使用的是Install Apple Provisioning Profile 任务,则变量$(APPLE_PROV_PROFILE_UUID) 由任务自动设置。

        您应该使用它而不是手动将其从日志中取出,因为当您在配置文件过期时替换它时它仍然有效。

        微软官方文档显示它here(朝向页面底部)。

        同样为证书设置$(APPLE_CERTIFICATE_SIGNING_IDENTITY)

        【讨论】:

          猜你喜欢
          • 2023-04-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-18
          • 2014-04-29
          • 1970-01-01
          • 2021-12-29
          相关资源
          最近更新 更多