首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure管道中iOS Xamarin工程的自动版本编号

Azure管道中iOS Xamarin工程的自动版本编号
EN

Stack Overflow用户
提问于 2020-12-02 17:21:28
回答 1查看 319关注 0票数 1

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

在搜索互联网时,我发现文章建议将以下代码添加到ios项目.csproj文件中:

代码语言:javascript
复制
<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)" />

我手动设置版本号,由于不需要程序集版本号,所以我将以下简化代码添加到我的iosProject.csproj文件中:

代码语言:javascript
复制
  <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>

在我的azure-管线.call文件中,我有以下命令行,其中包含硬编码的值(仅用于调试),用于msbuild调用:

代码语言:javascript
复制
variables:
    mobileProjectMSbuildArgumentsForIOS: "/p:SetVersion=true /p:VersionNumber=1.0 /p:BuildNumber=34 /bl:$(Build.ArtifactStagingDirectory)/build_iOS.binlog"

如您所见,SetVersion是true,VersionNumber是1.0,BuildNumber是44

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

代码语言:javascript
复制
  - 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()

但是,当使用管道建造项目时,构建是绿色的,但是:

  1. ipa文件的版本没有设置为预期的1.0.34,它有旧的值,该值是在项目中的.plist文件中手动设置的。
  2. 不生成二进制日志。在运行发布二进制日志的任务时,我会得到以下消息:

##warningDirectory‘/User/runner/work/1/a’为空。不会添加任何东西来构建工件‘二进制日志’。

我的问题:

为什么XmlPoke不适用于ios.csproj文件,甚至SetVersion也被设置为true

为什么不生成二进制日志?

任何想法都欢迎。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-03 05:01:25

我发现你在XamariniOS@2任务中出错了。字段msbuildArgumentsoutputDirectoryXamarin.Android任务的字段。它们不存在于Xamarin.iOS任务

因此,您可以尝试将/p:IpaPackageDir="$(outputDirectory)"outputDirectory: "$(outputDirectory)"移动到mobileProjectMSbuildArgumentsForIOS变量。

代码语言:javascript
复制
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: "$(mobileProjectMSbuildArgumentsForIOS)"

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

代码语言:javascript
复制
- task: XamariniOS@2
    inputs:
      solutionFile: '**/*iOS.csproj'
      signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
      signingProvisioningProfileID: '$(APPLE_PROV_PROFILE_UUID)'          
      configuration: '$(buildConfiguration)'
      args: "$(mobileProjectMSbuildArgumentsForIOS)"
      packageApp: true
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65113045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档