Github Actions发布.NET MAUI iOS报错:钥匙串无有效签名密钥
解决.NET 8 MAUI + Github Actions(Xcode 16)TestFlight上传签名错误
核心问题定位
错误提示No valid iOS code signing keys found in keychain,说明MSBuild构建时无法从钥匙串中匹配到签名证书与配置文件的有效组合,即便你已完成证书导入和配置文件下载操作。
分步解决方法
1. 确认证书与配置文件的绑定关系
- 登录Apple开发者后台,进入「Certificates, Identifiers & Profiles」→「Profiles」,选中你的App Store配置文件,查看「Signed by」字段是否显示正确的分发证书名称。
- 若不匹配,重新生成配置文件并绑定正确的证书。
2. 调整Github Actions钥匙串权限
导入证书后,默认钥匙串可能锁定或权限不足,导致MSBuild无法访问。在证书导入步骤后添加以下命令:
# 解锁默认钥匙串 security unlock-keychain -p "runner" /Users/runner/Library/Keychains/login.keychain-db # 设置证书全局访问权限 security set-key-partition-list -S apple-tool:,apple: -s -k "runner" /Users/runner/Library/Keychains/login.keychain-db
注:runner是Github macOS Runner的默认密码,无需额外配置。
3. 手动指定dotnet publish签名参数
放弃自动匹配,在发布命令中明确指定以下参数:
dotnet publish -f net8.0-ios -c Release /p:ArchiveOnBuild=true \ /p:CodesignKey="Apple Distribution: 你的团队名称 (团队ID)" \ /p:CodesignProvision="你的App Store配置文件名称" \ /p:TeamId=你的团队ID \ /p:ApplicationId=你的应用Bundle ID
CodesignKey:需完全匹配证书的「常用名称」(可在本地钥匙串中查看)CodesignProvision:使用配置文件的名称而非UUID,避免匹配异常TeamId:Apple开发者团队IDApplicationId:应用的Bundle ID
4. 验证Xcode与.NET iOS SDK兼容性
.NET 8对应iOS SDK 18.0,需确认Xcode 16的SDK版本匹配。在Actions中添加步骤验证:
xcodebuild -version
若版本不一致,切换到正确的Xcode路径:
sudo xcode-select -s /Applications/Xcode_16.app/Contents/Developer
5. 确认配置文件安装路径
将下载的配置文件复制到指定目录:
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles cp 你的配置文件.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/
用以下命令验证配置文件有效性:
security cms -D -i ~/Library/MobileDevice/Provisioning\ Profiles/你的配置文件.mobileprovision
检查输出中的Entitlements和TeamIdentifier是否与应用信息一致。
6. 清理Runner环境缓存
旧缓存可能残留无效签名信息,构建前添加清理步骤:
# 清理MSBuild缓存 dotnet clean -f net8.0-ios -c Release # 删除旧配置文件 rm -rf ~/Library/MobileDevice/Provisioning\ Profiles/*.mobileprovision
内容的提问来源于stack exchange,提问作者Reid
相关产品推荐
相关产品推荐

