.NET MAUI部署至iOS模拟器报错:simctl返回退出码22
核心问题定位
报错指向Info.plist的CFBundleVersion无效,但实际输出文件中已设置Bundle Version = 1、Bundle version string (short) = 2.0,且全新MAUI项目、同配置Xamarin项目可正常部署,说明问题出在当前项目的构建配置或文件引用异常。
下一步排查步骤
检查项目csproj中的版本配置
打开项目的.csproj文件,确认以下节点是否正确设置,且未被条件性覆盖:<PropertyGroup> <Version>2.0</Version> <!-- 对应Bundle version string (short) --> <Build>1</Build> <!-- 对应Bundle Version --> <ApplicationVersion>1</ApplicationVersion> <!-- MAUI专属,需与Build值一致 --> </PropertyGroup>注意:若存在针对iOS的条件组(如
PropertyGroup Condition="$(TargetFramework) == 'net6.0-ios'"),需确保其中的版本配置未冲突。清理并重建项目的iOS输出目录
手动删除Mac构建服务器上的项目输出缓存文件夹(通常位于~/Library/Caches/Xamarin/mtbs/builds/[项目名]),同时在Visual Studio中执行清理解决方案→重建解决方案,避免旧的Info.plist缓存干扰。检查Info.plist模板文件
确认项目中iOS平台的Info.plist模板(而非输出目录中的生成文件)是否存在语法错误或异常引用:- 打开
Platforms/iOS/Info.plist,检查CFBundleVersion和CFBundleShortVersionString是否使用了正确的MSBuild变量,而非硬编码冲突值:<key>CFBundleVersion</key> <string>$(Build)</string> <key>CFBundleShortVersionString</key> <string>$(Version)</string> - 若模板中直接写死了版本号,需确保与csproj中的配置完全一致。
- 打开
排查MAUI特定的配置冲突
对比全新MAUI项目的csproj和Info.plist,检查当前项目是否额外添加了可能影响版本的配置:- 是否启用了
UseIntermediateDesignerFile或其他自定义构建任务? - 是否在
Platforms/iOS/Entitlements.plist中存在与版本相关的异常配置?
- 是否启用了
验证构建过程中的变量替换
在Mac上手动触发构建,查看构建日志中是否有CFBundleVersion的替换异常:
执行命令:dotnet build -f net6.0-ios -c Debug搜索日志中
Processing Info.plist相关条目,确认最终生成的CFBundleVersion值是否为预期的1。
补充说明
由于同配置的Xamarin项目可正常运行,重点排查MAUI项目特有的构建逻辑差异,比如ApplicationVersion变量的使用、MSBuild任务的执行顺序等。
内容的提问来源于stack exchange,提问作者Ben Knoll

