发布MAUI iOS应用报错:需启用代码签名以创建Xcode归档
解决远程Mac发布iOS应用时的「需启用代码签名才能创建Xcode归档」错误
问题描述
使用远程Mac发布.NET MAUI iOS应用,执行dotnet publish -f:net6.0-ios -c:Release时触发以下错误:
C:\Users\salazar\source\repos\OcrSolution\OcrSolution>dotnet publish -f:net6.0-ios -c:Release MSBuild version 17.4.0+18d5aef85 for .NET Determining projects to restore... All projects are up-to-date for restore. OcrSolution -> C:\Users\salazar\source\repos\OcrSolution\OcrSolution\bin\Release\net6.0-ios\ios-arm64\OcrSolution.dll C:\Program Files\dotnet\packs\Microsoft.iOS.Sdk\16.1.228\tools\msbuild\iOS\Xamarin.Shared.targets(2684,3): error : Code signing must be enabled to create an Xcode archive. [C:\Users\salazar\source\repos\OcrSolution\OcrSolution\OcrSolution .csproj::TargetFramework=net6.0-ios]
已配置远程主机信息,且删除了csproj.user文件,仍无法解决。
解决方案
以下是针对该问题的排查和修复步骤:
1. 修正项目配置中的拼写错误
查看你的.csproj配置,发现ServerAddres存在拼写错误,正确属性名为ServerAddress,错误会导致远程连接时无法正确读取主机地址,进而影响签名资产验证:
<!-- 原错误配置 --> <ServerAddres>xxx</ServerAddres> <!-- 修改为 --> <ServerAddress>xxx</ServerAddress>
2. 显式启用代码签名开关
在iOS Release配置的PropertyGroup中添加EnableCodeSigning属性,强制开启代码签名:
<PropertyGroup Condition="$(TargetFramework.Contains('-ios')) and '$(Configuration)' == 'Release'"> <RuntimeIdentifier>ios-arm64</RuntimeIdentifier> <CodesignKey>iPhone Distribution: xxxx (xxx)</CodesignKey> <CodesignProvision>LingkailOcrApp</CodesignProvision> <ArchiveOnBuild>true</ArchiveOnBuild> <EnableCodeSigning>true</EnableCodeSigning> <!-- 添加该行 --> <TcpPort>58181</TcpPort> <ServerAddress>xxx</ServerAddress> <!-- 已修正拼写 --> <ServerUser>xxxx</ServerUser> <ServerPassword>xxx</ServerPassword> <_DotNetRootRemoteDirectory>/Users/{macOS username}/Library/Caches/Xamarin/XMA/SDKs/dotnet/</_DotNetRootRemoteDirectory> </PropertyGroup>
3. 验证远程Mac上的签名资产有效性
- 远程Mac必须已安装配置的分发证书(
iPhone Distribution: xxxx (xxx)),且证书未过期、未被吊销 - 确认**描述文件
LingkailOcrApp**已正确安装,且其App ID与项目中ApplicationId(com.lingkail.ocrapp)完全匹配 - 登录远程Mac的Xcode,进入
Xcode > 设置 > 账户,检查Apple ID下的证书和描述文件是否正常,无警告提示
4. 清理并重建项目
- 执行本地清理命令:
dotnet clean -f:net6.0-ios -c:Release - 远程Mac上清理缓存:删除
~/Library/Caches/Xamarin/XMA目录下的旧SDK缓存,确保使用最新的.NET iOS SDK - 重新执行发布命令:
dotnet publish -f:net6.0-ios -c:Release
5. 确认远程连接权限
确保远程Mac的用户(ServerUser配置的账号)拥有足够权限:
- 在远程Mac的「钥匙串访问」中检查证书的访问权限,确保当前用户能读取该证书
- 确认远程Mac防火墙允许
TcpPort(58181)的通信
内容的提问来源于stack exchange,提问作者Fitri Halim
相关产品推荐
相关产品推荐

