更新:
旧解决方案不适用于最新的 Xamarin 版本,因此不建议使用。
官方发布解决问题的信息和建议:
https://developer.xamarin.com/releases/ios/xamarin.ios_9/xamarin.ios_9.8/#New_MSBuild_property_IpaPackageDir_to_customize_.ipa_output_location
但是,就我而言,拥有大约 30 个构建的多台构建机器编辑构建定义或 .csproj 文件是一场噩梦,尤其是在星期五。
这是我目前正在使用的一种解决方法。
在第 1655/1656 行之间插入此代码
<IpaPackageDir Condition="'$(IpaPackageDir)' == ''">$(DeviceSpecificOutputPath)</IpaPackageDir>
然后在 1661 之后插入以下行:
<IpaPackageName Condition="'$(IpaPackageName)' == '' And '$(_BundleVersion)' != ''">$(_AppBundleName)-$(_BundleVersion).ipa</IpaPackageName>
更改后文件的外观如下。第 1656 和 1662 行是新的。
祝你好运,玩得开心!
过时的解决方案:
根据 support@xamarin.com,现在编辑Xamarin.iOS.Common.targets 是建议的解决方法(Johan 回答中的选项 2)。
由于接受的答案仅显示问题的原因(选项 2),因此这里是解决问题的方法。
解决方法(在 Mac 上)是转到文件夹 /Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono/2.1/ 并打开文件 Xamarin.iOS.Common.targets
(或直接打开文件/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono/2.1/Xamarin.iOS.Common.targets)。
如果您使用的是 Windows,那么您需要编辑的文件是 C:\Program Files (x86)\MSBuild\Xamarin\iOS\Xamarin.iOS.Common.targets
然后将第1607行改为
<PropertyGroup>
<IpaPackageName Condition="'$(IpaPackageName)' != '' And !$(IpaPackageName.EndsWith ('.ipa', StringComparison.OrdinalIgnoreCase))">$(IpaPackageName).ipa</IpaPackageName>
<IpaPackageName Condition="'$(IpaPackageName)' == '' And '$(_BundleVersion)' != ''">$(_AppBundleName)-$(_BundleVersion).ipa</IpaPackageName>
<IpaPackageName Condition="'$(IpaPackageName)' == ''">$(_AppBundleName).ipa</IpaPackageName>
</PropertyGroup>
和第 1734 行到
OutputFile="$(OutputPath)$(IpaPackageName)"
这些更改取自之前稳定版本 (5.10.3) 的 Xamarin.iOS.Common.targets。