繁体   English   中英

Azure 用于 iOS 的 Devops 管道集成

[英]Azure Devops Pipeline Integration for iOS

我正在尝试不断交付我的 iOS 应用程序以进行 QA 测试。 为此,我首先需要生成一个 ipa 文件。 不幸的是,我没有看到它是在“XCode”任务中生成的。 我确实看到存档已成功创建,并且我确实有生成 package 的复选框。 下面是我当前的 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://docs.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()

您可以尝试为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

以上希望有帮助!

感谢您对 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://docs.microsoft.com/azure/devops/pipelines/languages/xcode

# The following lists all of the  Xcode options
# https://docs.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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM