对于我的项目(基于Xamarin的移动iOS应用程序),我已经建立了Azure管道构建过程。我想要自动增加和设置ipa文件版本的每一个构建。
在搜索互联网时,我发现文章建议将以下代码添加到ios项目.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)" />我手动设置版本号,由于不需要程序集版本号,所以我将以下简化代码添加到我的iosProject.csproj文件中:
<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调用:
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。
生成和生成二进制日志的任务如下:
- 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.0.34,它有旧的值,该值是在项目中的.plist文件中手动设置的。##warningDirectory‘/User/runner/work/1/a’为空。不会添加任何东西来构建工件‘二进制日志’。
我的问题:
为什么XmlPoke不适用于ios.csproj文件,甚至SetVersion也被设置为true
为什么不生成二进制日志?
任何想法都欢迎。
谢谢。
发布于 2020-12-03 05:01:25
我发现你在XamariniOS@2任务中出错了。字段msbuildArguments和outputDirectory是Xamarin.Android任务的字段。它们不存在于Xamarin.iOS任务
因此,您可以尝试将/p:IpaPackageDir="$(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: "$(mobileProjectMSbuildArgumentsForIOS)"
请参阅下面更改的XamariniOS@2任务:
- task: XamariniOS@2
inputs:
solutionFile: '**/*iOS.csproj'
signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
signingProvisioningProfileID: '$(APPLE_PROV_PROFILE_UUID)'
configuration: '$(buildConfiguration)'
args: "$(mobileProjectMSbuildArgumentsForIOS)"
packageApp: truehttps://stackoverflow.com/questions/65113045
复制相似问题