Windows端VS2022构建带扩展的Xamarin iOS应用签名失败
问题概述
使用Windows 11上最新版Visual Studio 2022,配对运行macOS Sequoia、Xcode 16.4的Mac构建带推送通知扩展的Xamarin iOS应用时,主应用签名正常,但扩展签名始终失败,上传App Store Connect时Transporter返回错误:
Validation failed
Invalid Signature. Invalid resource directory (directory or signature have been modified). The file at path "*****/PlugIns/***Ext.appex/****Ext" is not properly signed.
已尝试手动复制配置文件到旧路径Library/MobileDevice/Provisioning Profiles、更换Apple/iOS Distribution类型的配置文件和证书、先构建扩展再构建主应用、Mac终端手动重签等操作,均未解决;不含扩展的测试应用可正常上传,暂无法迁移至MAUI。
解决方案
1. 同步Xcode配置文件,放弃手动复制
Xcode 16.4在macOS Sequoia下已变更配置文件存储路径,VS2022现在支持直接从Xcode新路径同步配置,无需手动复制:
- 在Mac上打开Xcode 16.4,进入偏好设置 > 账户,登录开发者账号后重新下载所有配置文件。
- 在VS2022中打开iOS项目属性的iOS Bundle Signing标签,点击刷新配置文件,让VS自动从配对Mac同步最新的配置文件。
2. 调整扩展项目的构建与签名配置
- 打开推送扩展项目的属性,切换到iOS Build标签,将Release配置的链接器行为设置为不链接,避免链接过程中修改扩展的资源目录导致签名校验失败。
- 确认扩展项目的Bundle标识符与Apple开发者平台上对应配置文件的Bundle ID完全一致(包括大小写,Apple对Bundle ID区分大小写)。
3. 强制VS使用Xcode 16.4的签名工具
VS2022可能默认调用了旧版本的签名工具,需手动指定路径:
- 在Mac终端执行命令获取当前Xcode的开发者路径:
xcode-select -p
- 在VS2022中进入工具 > 选项 > Xamarin > iOS设置,将Xamarin iOS SDK位置设置为上述命令返回的路径(例如
/Applications/Xcode.app/Contents/Developer)。
4. 清除Mac上的签名缓存
在Mac终端执行以下命令清除旧的签名缓存和配置文件,重新生成:
rm -rf ~/Library/Caches/com.apple.DeveloperTools rm -rf ~/Library/MobileDevice/Provisioning Profiles/*
之后重新打开Xcode下载配置文件,再重新配对VS2022与Mac。
5. 用Xcode手动打包上传(终极方案)
如果上述方法都无效,绕开VS的打包流程,直接用Xcode处理:
- 在VS2022中选择归档生成.xcarchive文件,将该文件复制到Mac上。
- 在Mac上用Xcode打开.xcarchive文件,点击分发应用,选择App Store Connect,按照指引完成签名和上传,Xcode会自动适配扩展的签名规则。
额外检查项
- 确认推送扩展的
Entitlements.plist中包含aps-environment字段,Release配置下值为production,且与主应用的Entitlements配置一致。 - 在Mac的钥匙串访问中检查Distribution证书,确保证书处于信任状态且未过期。
内容的提问来源于stack exchange,提问作者Shant Hagopian

