如何更改Xamarin.iOS项目的IPA输出位置?

时间:2016-06-16 22:03:41

标签: xamarin msbuild xamarin.ios

如果我想要使用某种持续集成或命令行构建,并将IPA输出到自定义位置,我将如何在Xamarin.iOS中执行此操作?

谢谢!

2 个答案:

答案 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>

Source

答案 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的路径。