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

cob*_*bey 4 msbuild xamarin.ios xamarin

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

谢谢!

All*_*yer 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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

<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>
Run Code Online (Sandbox Code Playgroud)

资源


cob*_*bey 4

更改 IPA 输出位置的最佳方法实际上是在构建完成后使用 MSBuild 目标将文件复制到所需位置。这样做是一种安全的方法,因为它允许设置客户位置,而无需修改 Xamarin 系统文件(这些文件可能会在更新期间更改)。

\n\n

在执行以下任何步骤之前,您需要备份项目文件夹,以防 csproj 文件中的某些内容编辑不正确。

\n\n

为此,您需要将以下 MSBuild 目标放在末尾、结束标记之前:

\n\n
<Target Name="CopyIpa" Condition="\'$(OutputType)\' == \'Exe\' And \'$(ComputedPlatform)\' == \'iPhone\' And \'$(BuildIpa)\' == \'true\'">\n    <Copy   SourceFiles="$(IpaPackagePath)" DestinationFolder=\xe2\x80\x9c[PathToOutput]\xe2\x80\x9d/>\n</Target>\n
Run Code Online (Sandbox Code Playgroud)\n\n

这会将 IPA 从变量 $(IpaPackagePath) 复制到您设置为 DestinationFolder 的路径。

\n