.NET MAUI iOS应用发布失败:xcrun执行退出码139求助
解决dotnet publish iOS包时strip退出码139的问题
问题重现
执行以下发布命令时触发错误:
dotnet publish "/SomeDirectory/MyApp/MyApp.csproj" -f net8.0-ios -c Release -p:ArchiveOnBuild=true -p:RuntimeIdentifier=ios-arm64 -p:CodesignKey="Apple Distribution: SAMPLE MY APP (RT1234543)" -p:CodesignProvision="sample 25 03 25"
返回错误信息:
Tool xcrun execution finished (exit code = 139)
usr/local/share/dotnet/packs/Microsoft.iOS.Sdk.net8.0_18.0/18.0.8319/tools/msbuild/iOS/Xamarin.Shared.targets(2848,3): error : strip exited with code 139
dotnet build可正常生成.app包,但签名后因缺少配置文件被App Store Connect拒绝,环境配置:
- dotnet 8.0.407
- dotnet workload SDK 8.0.400
- macOS Sonoma (14.7.1)
- Xcode 16.1
解决方案
1. 匹配Xcode与.NET iOS SDK版本
Xcode 16.1对应iOS 18.1,当前使用的Microsoft.iOS.Sdk 18.0.8319版本不兼容,会导致工具链运行错误。更新.NET iOS workload到适配版本:
dotnet workload update ios
更新后确认workload版本与Xcode版本匹配。
2. 跳过自动strip符号处理
exit code 139是strip工具的段错误,可在发布命令中添加参数跳过自动符号剥离:
dotnet publish "/SomeDirectory/MyApp/MyApp.csproj" -f net8.0-ios -c Release -p:ArchiveOnBuild=true -p:RuntimeIdentifier=ios-arm64 -p:CodesignKey="Apple Distribution: SAMPLE MY APP (RT1234543)" -p:CodesignProvision="sample 25 03 25" -p:StripSymbols=false
生成包后可手动处理符号,或直接提交(App Store接受未strip的包)。
3. 修正配置文件参数
用配置文件的UUID替代名称作为CodesignProvision参数值,避免空格或特殊字符导致的匹配失败:
- 打开Xcode → 偏好设置 → 账号 → 查看详情 → 找到对应配置文件并复制UUID
- 修改命令为
-p:CodesignProvision=配置文件UUID
4. 清理缓存重试
清理项目和工具链缓存,排除旧文件干扰:
- 删除项目根目录下的
bin和obj文件夹 - 执行清理命令:
dotnet clean "/SomeDirectory/MyApp/MyApp.csproj" -f net8.0-ios -c Release
- 清理Xcode缓存:打开Xcode → 设置 → 位置 → 点击DerivedData旁的箭头,删除对应项目的缓存文件夹
5. 手动归档提交
若上述方法无效,改用Xcode手动归档:
- 执行
dotnet build生成.app包 - 打开Xcode,选择
Window → Organizer - 点击
Import,导入生成的.app包所在的归档目录 - 选中导入的归档,点击
Distribute App,按向导完成签名和提交
内容的提问来源于stack exchange,提问作者Keletso Botsalano
相关产品推荐
相关产品推荐

