You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin iOS升级Big Sur后GitLab CI出现CompileITunesMetadata MSB4018错误

Xamarin iOS项目升级Big Sur后GitLab流水线构建失败问题

将iOS构建服务器从Mac OS Catalina升级到Big Sur后,运行cakebuild的GitLab流水线中某一特定Xamarin iOS项目构建失败,其余Xamarin iOS项目均可正常构建通过。而在另一台同样运行Big Sur系统的机器上拉取完全相同的代码(同提交、所有配置一致)时,该项目可以正常编译,甚至此前流水线构建通过的提交现在也会失败。

关键报错日志

"/Users/build/builds/Hh9r4va7/0/ClubMapp/application/ClubmappSolution/ClubmappAppIOS/ClubmappAppIOS.csproj" (Build target) (1) ->
(_CompileITunesMetadata target) -> 
  /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/Xamarin.iOS.Common.targets(320,3): error MSB4018: The "CompileITunesMetadata" task failed unexpectedly. [/Users/build/builds/Hh9r4va7/0/ClubMapp/application/ClubmappSolution/ClubmappAppIOS/ClubmappAppIOS.csproj]
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/Xamarin.iOS.Common.targets(320,3): error MSB4018: System.ArgumentException: Path cannot be the empty string or all whitespace. [/Users/build/builds/Hh9r4va7/0/ClubMapp/application/ClubmappSolution/ClubmappAppIOS/ClubmappAppIOS.csproj]
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/Xamarin.iOS.Common.targets(320,3): error MSB4018: Parameter name: path [/Users/build/builds/Hh9r4va7/0/ClubMapp/application/ClubmappSolution/ClubmappAppIOS/ClubmappAppIOS.csproj]
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/Xamarin.iOS.Common.targets(320,3): error MSB4018:   at System.IO.Directory.CreateDirectory (System.String path) [0x00016] in <92218043474744ea9d64d27064c35dcb>:0  [/Users/build/builds/Hh9r4va7/0/ClubMapp/application/ClubmappSolution/ClubmappAppIOS/ClubmappAppIOS.csproj]
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/Xamarin.iOS.Common.targets(320,3): error MSB4018:   at Xamarin.iOS.Tasks.CompileITunesMetadataTaskBase.Execute () [0x001ed] in <5fc761670f214242b2d9c8c4b0525b32>:0  [/Users/build/builds/Hh9r4va7/0/ClubMapp/application/ClubmappSolution/ClubmappAppIOS/ClubmappAppIOS.csproj]
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/Xamarin.iOS.Common.targets(320,3): error MSB4018:   at Xamarin.iOS.Tasks.CompileITunesMetadata.Execute () [0x0002a] in <5fc761670f214242b2d9c8c4b0525b32>:0  [/Users/build/builds/Hh9r4va7/0/ClubMapp/application/ClubmappSolution/ClubmappAppIOS/ClubmappAppIOS.csproj]
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/Xamarin.iOS.Common.targets(320,3): error MSB4018:   at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute () [0x00029] in <6f1ac64b362443459ae7e79676b4c67f>:0  [/Users/build/builds/Hh9r4va7/0/ClubMapp/application/ClubmappSolution/ClubmappAppIOS/ClubmappAppIOS.csproj]
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/Xamarin.iOS.Common.targets(320,3): error MSB4018:   at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask (Microsoft.Build.BackEnd.ITaskExecutionHost taskExecutionHost, Microsoft.Build.BackEnd.Logging.TaskLoggingContext taskLoggingContext, Microsoft.Build.BackEnd.TaskHost taskHost, Microsoft.Build.BackEnd.ItemBucket bucket, Microsoft.Build.BackEnd.TaskExecutionMode howToExecuteTask) [0x002b9] in <6f1ac64b362443459ae7e79676b4c67f>:0  [/Users/build/builds/Hh9r4va7/0/ClubMapp/application/ClubmappSolution/ClubmappAppIOS/ClubmappAppIOS.csproj]
    63 Warning(s)
    1 Error(s)
Time Elapsed 00:01:16.38
An error occurred when executing task 'Build'.
Error: One or more errors occurred. (MSBuild: Process returned an error (exit code 1).)
    MSBuild: Process returned an error (exit code 1).
Cleaning up file based variables
00:00
ERROR: Job failed: exit status 1

补充详细日志

Target "_CompileITunesMetadata: (TargetId:343)" in file "/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/Xamarin.iOS.Common.targets" from project "/Users/build/builds/Hh9r4va7/0/ClubMapp/application/ClubmappSolution/ClubmappAppIOS/ClubmappAppIOS.csproj" (target "_CreateAppBundle" depends on it):
Building target "_CompileITunesMetadata" completely.
Output file "build-outputiTunesMetadata.plist" does not exist.
Using "CompileITunesMetadata" task from assembly "/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/../iOS/Xamarin.iOS.Tasks.dll".
Task "CompileITunesMetadata" (TaskId:232)
  Task Parameter:AppBundleDir=build-outputClubmappAppIOS.app (TaskId:232)
  Task Parameter:OutputPath=build-outputiTunesMetadata.plist (TaskId:232)
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/Xamarin.iOS.Common.targets(320,3): error MSB4018: The "CompileITunesMetadata" task failed unexpectedly. [/Users/build/builds/Hh9r4va7/0/ClubMapp/application/ClubmappSolution/ClubmappAppIOS/ClubmappAppIOS.csproj]
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/Xamarin.iOS.Common.targets(320,3): error MSB4018: System.ArgumentException: Path cannot be the empty string or all whitespace. [/Users/build/builds/Hh9r4va7/0/ClubMapp/application/ClubmappSolution/ClubmappAppIOS/ClubmappAppIOS.csproj]
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/Xamarin.iOS.Common.targets(320,3): error MSB4018: Parameter name: path [/Users/build/builds/Hh9r4va7/0/ClubMapp/application/ClubmappSolution/ClubmappAppIOS/ClubmappAppIOS.csproj]
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/Xamarin.iOS.Common.targets(320,3): error MSB4018:   at System.IO.Directory.CreateDirectory (System.String path) [0x00016] in <92218043474744ea9d64d27064c35dcb>:0  [/Users/build/builds/Hh9r4va7/0/ClubMapp/application/ClubmappSolution/ClubmappAppIOS/ClubmappAppIOS.csproj]
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/Xamarin.iOS.Common.targets(320,3): error MSB4018:   at Xamarin.iOS.Tasks.CompileITunesMetadataTaskBase.Execute () [0x001ed] in <5fc761670f214242b2d9c8c4b0525b32>:0  [/Users/build/builds/Hh9r4va7/0/ClubMapp/application/ClubmappSolution/ClubmappAppIOS/ClubmappAppIOS.csproj]
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/Xamarin.iOS.Common.targets(320,3): error MSB4018:   at Xamarin.iOS.Tasks.CompileITunesMetadata.Execute () [0x0002a] in <5fc761670f214242b2d9c8c4b0525b32>:0  [/Users/build/builds/Hh9r4va7/0/ClubMapp/application/ClubmappSolution/ClubmappAppIOS/ClubmappAppIOS.csproj]
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/Xamarin.iOS.Common.targets(320,3): error MSB4018:   at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute () [0x00029] in <6f1ac64b362443459ae7e79676b4c67f>:0  [/Users/build/builds/Hh9r4va7/0/ClubMapp/application/ClubmappSolution/ClubmappAppIOS/ClubmappAppIOS.csproj]
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/Xamarin.iOS.Common.targets(320,3): error MSB4018:   at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask (Microsoft.Build.BackEnd.ITaskExecutionHost taskExecutionHost, Microsoft.Build.BackEnd.Logging.TaskLoggingContext taskLoggingContext, Microsoft.Build.BackEnd.TaskHost taskHost, Microsoft.Build.BackEnd.ItemBucket bucket, Microsoft.Build.BackEnd.TaskExecutionMode howToExecuteTask) [0x002b9] in <6f1ac64b362443459ae7e79676b4c67f>:0  [/Users/build/builds/Hh9r4va7/0/ClubMapp/application/ClubmappSolution/ClubmappAppIOS/ClubmappAppIOS.csproj]
Done executing task "CompileITunesMetadata" -- FAILED. (TaskId:232)
Done building target "_CompileITunesMetadata" in project "ClubmappAppIOS.csproj" -- FAILED.: (TargetId:343)
Done Building Project "/Users/build/builds/Hh9r4va7/0/ClubMapp/application/ClubmappSolution/ClubmappAppIOS/ClubmappAppIOS.csproj" (Build target(s)) -- FAILED.

进一步排查结果

经查阅Xamarin iOS msbuild源码,异常抛出点如下:

Directory.CreateDirectory (Path.GetDirectoryName (OutputPath.ItemSpec));

日志显示OutputPath.ItemSpec值为build-outputiTunesMetadata.plist,该字符串仅包含文件名无路径,传入Path.GetDirectoryName()后返回空字符串,调用CreateDirectory创建空路径时触发ArgumentException:路径不能是空字符串或全空白字符。


修复方案

问题根因:构建配置的输出目录末尾缺少路径分隔符,导致输出目录名和iTunesMetadata.plist文件名直接拼接成了无路径的字符串,比如你设置的输出目录是build-output,末尾没加/,拼接后就变成了build-outputiTunesMetadata.plist而不是build-output/iTunesMetadata.plist。
可根据实际需求选择以下任意一种修复方式:

  • 检查cakebuild构建脚本、项目.csproj文件或者流水线变量中配置的iOS构建输出路径(对应OutputPath/IpaOutputPath这类参数),确保路径末尾添加了macOS系统对应的路径分隔符/
  • 直接在项目.csproj文件的iOS构建配置节点下强制指定iTunesMetadata的输出路径:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
  <ITunesMetadataOutputPath>$(OutputPath)/iTunesMetadata.plist</ITunesMetadataOutputPath>
</PropertyGroup>
  • 如果是开发调试构建,不需要生成iTunesMetadata.plist,可直接关闭该生成任务,在.csproj中添加如下配置:
<PropertyGroup>
  <BuildITunesMetadata>False</BuildITunesMetadata>
</PropertyGroup>

内容的提问来源于stack exchange,提问作者Frederik Hoeft

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:06:03