Mac M2构建iOS版.NET MAUI Blazor Hybrid应用签名失败问题修复
.NET MAUI iOS构建代码签名错误排查求助
背景
我开发了一款用于ERP的.NET MAUI应用,目前已成功部署到Android和Windows平台,运行正常。该应用从.NET 7起步,现已升级至.NET 8。
环境
- Apple M2 MacBook(arm64架构)
- 最新版XCode + dotnet 8
- 本地构建iOS版本(无法连接Mac与Windows)
构建命令
dotnet publish -f net8.0-ios -c Release
错误信息
/usr/local/share/dotnet/packs/Microsoft.iOS.Sdk/17.2.8078/tools/msbuild/iOS/Xamarin.Shared.targets(2257,3): error : /usr/bin/codesign exited with code 1: [<Project_path>/bluelotus360.com.mauiBlazor.csproj::TargetFramework=net8.0-ios] /usr/local/share/dotnet/packs/Microsoft.iOS.Sdk/17.2.8078/tools/msbuild/iOS/Xamarin.Shared.targets(2257,3): error : <Project_path>/bin/Release/net8.0-ios/ios-arm64/bluelotus360.com.mauiBlazor.app: code object is not signed at all [<Project_path>/bluelotus360.com.mauiBlazor.csproj::TargetFramework=net8.0-ios] /usr/local/share/dotnet/packs/Microsoft.iOS.Sdk/17.2.8078/tools/msbuild/iOS/Xamarin.Shared.targets(2257,3): error : In subcomponent: <Project_path>/bin/Release/net8.0-ios/ios-arm64/bluelotus360.com.mauiBlazor.app/System.Xml.Linq.dll [<Project_path>/bluelotus360.com.mauiBlazor.csproj::TargetFramework=net8.0-ios] /usr/local/share/dotnet/packs/Microsoft.iOS.Sdk/17.2.8078/tools/msbuild/iOS/Xamarin.Shared.targets(2257,3): error : Failed to codesign '<Project_path>/bin/Release/net8.0-ios/ios-arm64/bluelotus360.com.mauiBlazor.app': <Project_path>/bin/Release/net8.0-ios/ios-arm64/bluelotus360.com.mauiBlazor.app: code object is not signed at all [<Project_path>/bluelotus360.com.mauiBlazor.csproj::TargetFramework=net8.0-ios] /usr/local/share/dotnet/packs/Microsoft.iOS.Sdk/17.2.8078/tools/msbuild/iOS/Xamarin.Shared.targets(2257,3): error : In subcomponent: <Project_path>/bin/Release/net8.0-ios/ios-arm64/bluelotus360.com.mauiBlazor.app/System.Xml.Linq.dll [<Project_path>/bluelotus360.com.mauiBlazor.csproj::TargetFramework=net8.0-ios] /usr/local/share/dotnet/packs/Microsoft.iOS.Sdk/17.2.8078/tools/msbuild/iOS/Xamarin.Shared.targets(2257,3): error : [<Project_path>/bluelotus360.com.mauiBlazor.csproj::TargetFramework=net8.0-ios] /usr/local/share/dotnet/packs/Microsoft.iOS.Sdk/17.2.8078/tools/msbuild/iOS/Xamarin.Shared.targets(2257,3): error : [<Project_path>/bluelotus360.com.mauiBlazor.csproj::TargetFramework=net8.0-ios]
已尝试操作
已参考相关指南验证从Apple获取的证书,钥匙串中显示证书已验证。
解决建议
手动指定签名证书与配置文件
在发布命令中明确指定签名标识和Provisioning Profile,避免自动匹配异常:dotnet publish -f net8.0-ios -c Release /p:CodesignKey="iPhone Distribution: 你的团队名称 (团队ID)" /p:CodesignProvision="你的配置文件名称"可通过
security find-identity -v -p codesigning命令查看本地可用的签名证书名称。清理构建缓存后重试
旧缓存可能干扰签名流程,执行以下命令清理后重新构建:dotnet clean rm -rf obj bin dotnet publish -f net8.0-ios -c Release检查证书信任设置
打开钥匙串访问,找到iOS签名证书,右键选择显示简介,在信任选项卡中将使用此证书时设为始终信任,重启终端后再尝试构建。更新并验证配置文件
下载包含当前应用Bundle ID和最新证书的Provisioning Profile,双击安装到XCode,确保配置文件中的Bundle ID与项目Info.plist里的CFBundleIdentifier完全一致。手动测试代码签名
尝试手动对出错的System.Xml.Linq.dll签名,排查权限或工具问题:codesign -s "iPhone Distribution: 你的团队名称 (团队ID)" <Project_path>/bin/Release/net8.0-ios/ios-arm64/bluelotus360.com.mauiBlazor.app/System.Xml.Linq.dll若手动签名失败,根据提示修复(比如执行
chmod +x赋予文件可执行权限)。检查项目配置文件
打开项目.csproj文件,确保iOS签名配置正确:<PropertyGroup Condition="'$(TargetFramework)' == 'net8.0-ios'"> <CodesignKey>iPhone Distribution: 你的团队名称 (团队ID)</CodesignKey> <CodesignProvision>你的配置文件名称</CodesignProvision> <ArchiveOnBuild>true</ArchiveOnBuild> </PropertyGroup>
内容的提问来源于stack exchange,提问作者Gayantha
相关产品推荐
相关产品推荐

