如果我想要使用某种持续集成或命令行构建,并将IPA输出到自定义位置,我将如何在Xamarin.iOS中执行此操作?
谢谢!
答案 0 :(得分:6)
在Xamarin发布第7周期中,IPA文件的输出位置发生了变化。您有两种选择,第一种是修改.csproj
文件,而第二种是编辑Xamarin.iOS.Common.Targets
。
<强> 1。项目编辑
以下内容会将您的.IPA
文件移回原来的位置。或者,您可以在DestinationFolder
<PropertyGroup>
<CreateIpaDependsOn>
$(CreateIpaDependsOn);
CopyIpa
</CreateIpaDependsOn>
</PropertyGroup>
<Target Name="CopyIpa" Condition="'$(OutputType)' == 'Exe' And '$(ComputedPlatform)' == 'iPhone' And '$(BuildIpa)' == 'true'">
<Copy SourceFiles="$(IpaPackagePath)" DestinationFolder="$(OutputPath)" />
</Target>
<强> 2。目标文件
如果你有很多iOS项目,也许更有用。请记住,如果您更新Xamarin,则需要先备份此文件。
在Mac上,打开/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono/2.1/Xamarin.iOS.Common.targets
并更改以下行
<PropertyGroup>
<_IpaOutputPath>$(DeviceSpecificOutputPath)$(_AppBundleName) $([System.DateTime]::Now.ToString('yyyy-MM-dd HH-mm-ss'))</_IpaOutputPath>
<_IpaOutputDir>$(_IpaOutputPath)\</_IpaOutputDir>
<IpaPackageName Condition="'$(IpaPackageName)' != '' And !$(IpaPackageName.EndsWith ('.ipa', StringComparison.OrdinalIgnoreCase))">$(IpaPackageName).ipa</IpaPackageName>
<IpaPackageName Condition="'$(IpaPackageName)' == ''">$(_AppBundleName).ipa</IpaPackageName>
<IpaPackagePath>$(_IpaOutputDir)$(IpaPackageName)</IpaPackagePath>
</PropertyGroup>
到
<PropertyGroup>
<_IpaOutputPath>$(OutputPath)</_IpaOutputPath>
<_IpaOutputDir>$(_IpaOutputPath)\</_IpaOutputDir>
<IpaPackageName Condition="'$(IpaPackageName)' != '' And !$(IpaPackageName.EndsWith ('.ipa', StringComparison.OrdinalIgnoreCase))">$(IpaPackageName).ipa</IpaPackageName>
<IpaPackageName Condition="'$(IpaPackageName)' == ''">$(_AppBundleName).ipa</IpaPackageName>
<IpaPackagePath>$(_IpaOutputDir)$(IpaPackageName)</IpaPackagePath>
</PropertyGroup>
答案 1 :(得分:3)
更改IPA输出位置的最佳方法实际上是在构建完成后使用MSBuild目标将文件复制到所需位置。这样做是一种安全的方法,因为它允许设置客户位置,而无需修改可在更新期间更改的Xamarin系统文件。
在执行以下任何步骤之前,您需要备份项目文件夹,以防csproj文件中的内容编辑错误。
要完成此操作,您需要将以下MSBuild目标放在项目文件的 end 中,就在结束标记之前:
<Target Name="CopyIpa" Condition="'$(OutputType)' == 'Exe' And '$(ComputedPlatform)' == 'iPhone' And '$(BuildIpa)' == 'true'">
<Copy SourceFiles="$(IpaPackagePath)" DestinationFolder=“[PathToOutput]”/>
</Target>
这会将IPA从变量$(IpaPackagePath)复制到您设置为DestinationFolder的路径。