Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure管道中iOS Xamarin项目的自动版本编号_Xamarin_Azure Devops_Xamarin.ios - Fatal编程技术网

Azure管道中iOS Xamarin项目的自动版本编号

Azure管道中iOS Xamarin项目的自动版本编号,xamarin,azure-devops,xamarin.ios,Xamarin,Azure Devops,Xamarin.ios,对于我的项目(基于Xamarin的移动iOS应用程序),我已经设置了Azure管道构建过程。 我想为每个版本自动增加和设置ipa文件版本 在搜索Internet时,我发现建议将以下代码添加到ios project.csproj文件中: <Target Name="BeforeBuild" Condition=" $(SetVersion) == true "> <GetAssemblyIdentity AssemblyFiles=

对于我的项目(基于Xamarin的移动iOS应用程序),我已经设置了Azure管道构建过程。 我想为每个版本自动增加和设置ipa文件版本

在搜索Internet时,我发现建议将以下代码添加到ios project.csproj文件中:

<Target Name="BeforeBuild" Condition=" $(SetVersion) == true ">
    <GetAssemblyIdentity AssemblyFiles="$(AssemblyPath)">
        <Output TaskParameter="Assemblies" ItemName="AssemblyInfo" />
    </GetAssemblyIdentity>
    <PropertyGroup>
        <VersionNumber>$([System.Text.RegularExpressions.Regex]::Match(%(AssemblyInfo.Version), `[^.][^.]*.[^.]*.[^.]*`))</VersionNumber>
    </PropertyGroup>
    <XmlPoke XmlInputPath="Resources/Info.plist" Query="//dict/key[. = 'CFBundleVersion']/following-sibling::string[1]" Value="$(BuildNumber)" />
    <XmlPoke XmlInputPath="Resources/Info.plist" Query="//dict/key[. = 'CFBundleShortVersionString']/following-sibling::string[1]" Value="$(VersionNumber)" />
  <Target Name="BeforeBuild" Condition=" $(SetVersion) == true ">
        <XmlPoke XmlInputPath="Info.plist" Query="//dict/key[. = 'CFBundleVersion']/following-sibling::string[1]" Value="$(BuildNumber)" />
        <XmlPoke XmlInputPath="Info.plist" Query="//dict/key[. = 'CFBundleShortVersionString']/following-sibling::string[1]" Value="$(VersionNumber).$(BuildNumber)" />
  </Target>
如您所见,SetVersion为
true
,VersionNumber为
1.0
,BuildNumber为
44

生成和生成二进制日志的任务如下:

  - task: XamariniOS@2
    inputs:
      solutionFile: '**/*iOS.csproj'
      signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
      signingProvisioningProfileID: '$(APPLE_PROV_PROFILE_UUID)'          
      configuration: '$(buildConfiguration)'
      msbuildArguments: "$(mobileProjectMSbuildArgumentsForIOS)"
      outputDirectory: "$(outputDirectory)"
      packageApp: true
      args: /p:IpaPackageDir="$(outputDirectory)"

  - task: PublishBuildArtifacts@1
    displayName: 'Publish binary log'
    inputs:
      PathtoPublish: '$(Build.ArtifactStagingDirectory)'
      ArtifactName: 'Binary log'
      publishLocation: 'Container'
    condition: succeededOrFailed()
但是,当项目使用管道建造时,该建造是绿色的,但是:

  • ipa文件的版本尚未设置为预期的
    1.0.34
    ,它具有旧值,该值是在项目的
    .plist
    文件中手动设置的

  • 未生成二进制日志。在运行发布二进制日志的任务时,我收到以下消息:

  • ##[警告]目录“/Users/runner/work/1/a”为空。不会向构建工件“二进制日志”添加任何内容

    我的问题是:

    为什么XmlPoke不适用于ios.csproj文件,即使
    SetVersion
    设置为
    true

    为什么不生成二进制日志

    欢迎提出任何意见


    谢谢。

    我发现你的作业有错误XamariniOS@2任务字段
    msbuildArguments
    outputDirectory
    是的字段。它们的存在不是为了什么

    因此,您可以尝试将
    /p:ipapackedir=“$(outputDirectory)”
    outputDirectory:“$(outputDirectory)”
    移动到
    mobileProjectMSbuildArgumentsForIOS
    变量

    variables:
        mobileProjectMSbuildArgumentsForIOS: "/p:OutputPath=$(outputDirectory) /p:IpaPackageDir="$(outputDirectory)" /p:SetVersion=true /p:VersionNumber=1.0 /p:BuildNumber=34 /bl:$(Build.ArtifactStagingDirectory)/build_iOS.binlog"
    
    然后将msbuildArguments分配给
    args
    字段:
    args:“$(MobileProject MSBuildArgumentsForios)”

    请参见下面更改的XamariniOS@2任务:

    - task: XamariniOS@2
        inputs:
          solutionFile: '**/*iOS.csproj'
          signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
          signingProvisioningProfileID: '$(APPLE_PROV_PROFILE_UUID)'          
          configuration: '$(buildConfiguration)'
          args: "$(mobileProjectMSbuildArgumentsForIOS)"
          packageApp: true
       
    

    是的,这解决了问题。非常感谢。
    - task: XamariniOS@2
        inputs:
          solutionFile: '**/*iOS.csproj'
          signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
          signingProvisioningProfileID: '$(APPLE_PROV_PROFILE_UUID)'          
          configuration: '$(buildConfiguration)'
          args: "$(mobileProjectMSbuildArgumentsForIOS)"
          packageApp: true