Azure DevOps Xamarin.iOS 模拟器生成输出

Azure DevOps Xamarin.iOS simulator build output

这是我的构建管道:

pool:
  vmImage: 'macOS-latest'
  
variables:
  buildConfiguration: 'Release'

steps:
- task: NuGetToolInstaller@0

- task: NuGetCommand@2
  displayName: 'Restoring nuget for the solution'
  inputs:
    restoreSolution: '**/*.sln'

- task: XamariniOS@2
  displayName: 'Building iOS for simulator'
  inputs:
    solutionFile: '**/*iOS*.csproj'
    configuration: '$(buildConfiguration)'
    buildForSimulator: true
    packageApp: false
- task: CopyFiles@2
  displayName: 'Copy Files to: $(build.artifactstagingdirectory)'
  inputs:
    SourceFolder: $(build.SourcesDirectory)
    Contents: '**/*.app'
    TargetFolder: '$(build.artifactstagingdirectory)'
  condition: succeededOrFailed()
  
- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact: Mobile-BackReporting iOS'
  inputs:
    PathtoPublish: '$(build.artifactstagingdirectory)'
  condition: succeededOrFailed()

重要的部分是任务:CopyFiles@2

我正在尝试将 iOS 模拟器包即 SampleToDo.iOS.app 复制到暂存目录。我可以在构建输出中看到,文件是在此处生成的:

/Users/runner/runners/2.171.1/work/1/s/MobileBackReporting.iOS/bin/iPhoneSimulator/Release/SampleToDo.iOS.app

为了到达这条路径,我已经尝试了在这里找到的构建和代理环境变量路径的所有可能组合: https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=azure-devops&tabs=yaml

我仍然无法将 SampleToDo.iOS.app 文件复制到暂存区,因为复制文件任务发出警告:

##[warning]Directory '/Users/runner/work/1/a' is empty. Nothing will be added to build artifact 'drop'.
##[warning]Directory '/Users/runner/work/1/s' is empty. Nothing will be added to build artifact 'drop'.

如果您在管道中启用 system.debug(在管道中设置 system.debug=true 变量)。从复制文件任务日志可以看出,.app其实是一个目录。这就是为什么复制文件任务显示找不到文件的错误。

由于.app是一个目录,你需要像下面这样配置复制文件任务。复制文件任务会将此目录下的所有内容复制到文件夹$(build.artifactstagingdirectory)/SampleToDo.iOS.app.

如果要生成.ipa文件,可以设置packageApp=true

    - task: CopyFiles@2
      displayName: 'Copy Files'
      inputs:
        SourceFolder: $(build.SourcesDirectory)
        Contents: '**/SampleToDo.iOS.app/**'
        TargetFolder: '$(build.artifactstagingdirectory)/SampleToDo.iOS.app'
        flattenFolders: true
      condition: succeededOrFailed()

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