Azure DevOps管道集成iOS

4

我想要持续地向QA测试提供我的iOS应用程序。为此,我首先需要生成一个ipa文件。不幸的是,在“XCode”任务中,我没有看到它被生成。 我确实看到存档已成功创建,并且我有生成包的复选框。以下是我的当前yml文件。

# Xcode

# Build, test, and archive an Xcode workspace on macOS.
# Add steps that install certificates, test, sign, and distribute an app, save build artifacts, and more:
# https://learn.microsoft.com/azure/devops/pipelines/languages/xcode

trigger:
- Development

pool: 'OSX'

steps:

- task: InstallAppleCertificate@2
  inputs:
    certSecureFile: 'MyAppDistributionCert-20200305.320pm.p12'
    certPwd: '$(MyAppiOSDistributionCert)'
    keychain: 'temp'

- task: InstallAppleProvisioningProfile@1
  inputs:
    provisioningProfileLocation: 'secureFiles'
    provProfileSecureFile: 'Bot_MyApp_Debug.mobileprovision'

- task: Xcode@5
  inputs:
    actions: 'clean build test archive'
    scheme: 'MyApp'
    sdk: 'iphonesimulator'
    configuration: 'Debug'
    xcWorkspacePath: '**/MyApp.xcworkspace'
    xcodeVersion: 'default' # Options: 8, 9, 10, default, specifyPath
    packageApp: true
    destinationPlatformOption: 'iOS'
    destinationSimulators: 'iPhone 8 Plus'
    signingOption: default
    provisioningProfileName: 'Bot_MyApp_Debug.mobileprovision'
    exportMethod: 'Development'
    exportPath: '$(system.defaultworkingdirectory)'

- task: CopyFiles@2
  inputs:
    contents: '**/*.ipa'
    targetFolder: '$(build.artifactStagingDirectory)'
- task: PublishBuildArtifacts@1

- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact: drop'
  inputs:
    PathtoPublish: '$(build.artifactstagingdirectory)'
  condition: succeededOrFailed()
2个回答

2
感谢您的帮助,Levi Lu-MSFT。您指引了我正确的方向。最初,问题在于我为提供程序使用了错误的证书,并且使用了'sdk iphonesimulator'而不是'sdk iphoneos'。然后我尝试使用两个不同的配置文件(一个用于iphone目标,另一个用于扩展),但是我遇到了问题。然后我意识到我可以只使用一个证书和一个启用了应用程序组的配置文件。这样,再加上其他一些小的更改,我就能够导出并创建一个工件。虽然我仍然在使用我的ipa通过MS App Center分发应用程序时遇到问题,但我认为可以关闭此工单。以下是我的yaml文件,以防有人遇到问题:
# Xcode

# Build, test, and archive an Xcode workspace on macOS.
# Add steps that install certificates, test, sign, and distribute an app, save build artifacts, and more:
# https://learn.microsoft.com/azure/devops/pipelines/languages/xcode

# The following lists all of the  Xcode options
# https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/build/xcode?view=azure-devops

trigger:
- Development

pool: 'OSX'

steps:

- task: InstallAppleCertificate@2
  inputs:
    certSecureFile: 'TFSDJR-Certificates.p12'
    certPwd: '$(TSFMyAppPW)' #MyAppiOSDistributionCert
    keychain: 'temp'


- task: InstallAppleProvisioningProfile@1
  inputs:
    provisioningProfileLocation: 'secureFiles'
    provProfileSecureFile: 'TFSMyAppDebug.mobileprovision'

- task: Xcode@5
  inputs:

  # Build Aurguments
    actions: 'clean'
    scheme: 'MyApp'
    **sdk: 'iphoneos'**
    configuration: 'Debug'
    xcWorkspacePath: '**/MyApp.xcworkspace'
    xcodeVersion: 'default' # Options: 8, 9, 10, default, specifyPath

# Package options
    packageApp: true
    exportOptions: specify
    **exportMethod: 'development'**
    exportPath: '$(system.defaultworkingdirectory)'
    teamId: YOURTEAMID
    exportTeamId: YOURTEAMID


- task: CopyFiles@2
  inputs:
    contents: '**/*.ipa'
    targetFolder: '$(build.artifactStagingDirectory)'

- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact: drop'
  inputs:
    PathtoPublish: '$(build.artifactstagingdirectory)'
  condition: succeededOrFailed()

1
你可以尝试为 exportPath 指定一个不同的文件夹(例如 $(agent.buildDirectory)/output/$(sdk)/$(configuration)),而不是使用 $(system.defaultworkingdirectory)。这样做可以避免默认工作文件夹中的内容(包括ipa文件)被导出内容覆盖。
你也可以检查xcode任务的日志,查看ipa文件是否已生成以及其所在位置。
你还可以查看Xcode任务的归档路径参数。ipa文件将放置在归档路径中定义的文件夹中。你可以指定一个自定义的位置来存储ipa文件。例如,我将ipa文件放置在文件夹$(system.defaultworkingdirectory)/archive中。然后在接下来的任务中,我将通过路径$(system.defaultworkingdirectory)/archive/*.ipa引用ipa文件。
- task: Xcode@5
  inputs:
    ...
    exportPath: "$(agent.buildDirectory)/output/$(sdk)/$(configuration)"
    archivePath: "$(system.defaultworkingdirectory)/archive"


- task: CopyFiles@2
  inputs:
    sourceFolder: "$(system.defaultworkingdirectory)/archive"
    contents: '**/*.ipa'
    targetFolder: '$(build.artifactStagingDirectory)'
- task: PublishBuildArtifacts@1

希望以上内容有所帮助!

我意识到它没有生成ipa。谢谢你提醒我检查日志。我之前使用的是“sdk iphonesimulator”,而不是“sdk iphoneos”。我已经做出了更改,现在出现了供应配置文件的问题。正在等待我的老板提供这些文件。我很快会提供更新。 - Daelhoser
现在我遇到了与我们的扩展程序相关的预配文件问题。然而,在苹果网站上,我们只有一个预配文件。在 XCode 设置中,我们正在自动管理签名,所以不确定苹果正在做什么。你有什么线索可以尝试的吗?有没有一种方法可以输入我的苹果开发者凭据,以便它自动执行签名? - Daelhoser
我已经收到了两个配置文件(一个用于应用程序,另一个用于扩展)和一个有密码的p12文件。不幸的是,现在我收到了一个错误提示,说扩展没有有效的配置文件。值得一提的是,该项目已设置为自动管理所有目标的签名,并且我们正在使用应用程序组。 - Daelhoser
参数provisioningProfileName的描述称使用不同的方案或目标来使用单个工作区中的目标分别指定不同的配置文件(iOS,tvOS,watchOS)的不同生成任务。您可以尝试使用另一个xcode构建任务来提供扩展配置文件。 - Levi Lu-MSFT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接