Flutter集成Unity上传App Store报Invalid Signature签名错误
问题概述
报错信息:Invalid Signature, code object is not signed at all(iOS端)
场景为使用flutter-unity-view-widget插件完成Unity项目到Flutter项目的集成后,应用上传App Store环节触发该报错,常规公开方案无法修复。
触发报错前的操作流程:
- 从Unity导出iOS工程,Unity侧未做任何签名相关配置
- 在Xcode中执行安装包签名,为Unity导出的相关包设置了与主App完全相同的Bundle Identifier
- 直接执行App Store上传操作
当前开发环境:Unity 2022.1.1f1,Xcode 13.4.1
问题根因
两个核心错误操作触发签名校验失败:
- 为Unity导出的关联包设置和主App相同的Bundle Identifier不符合iOS签名规则,嵌套框架/模块的Bundle ID必须和主App存在区分
- Unity 2022.x版本导出的iOS工程默认包含独立的
UnityFramework二进制,仅对主App Target签名会漏签该内嵌代码对象,苹果后台上传校验时会识别到未签名的代码块直接驳回。
修复步骤
- Unity导出前配置修正
打开Unity工程的iOS Player Settings面板,进入Other Settings -> Identification分类:- 将Bundle Identifier设置为主App ID加后缀的格式,例如主App为
com.xxx.yourapp,Unity模块则设置为com.xxx.yourapp.unity,绝对不能和主App ID重复 - 勾选自动签名选项,选中对应开发团队后再导出iOS工程
- 将Bundle Identifier设置为主App ID加后缀的格式,例如主App为
- Xcode侧签名配置修正
打开Flutter项目下的ios/Runner.xcworkspace(不要直接打开Unity导出的独立工程,避免构建时配置被覆盖):- 选中主Target
Runner,确认签名团队、Bundle ID和主App原本的上架配置一致,开启自动签名 - 找到Pods工程下的
UnityFrameworkTarget,Bundle ID填写Unity侧设置的带后缀的ID,签名团队选择和主App一致的团队,开启自动签名,确保证书和描述文件匹配 - 进入
Build Phases -> Embed Frameworks分类,检查所有嵌入的Unity相关framework,确保Code Sign On Copy选项处于勾选状态
- 选中主Target
- 上传前本地校验
完成Archive打包后先不要直接上传,打开终端进入Archive包对应的Products/Applications目录,执行签名校验命令:
命令执行无报错再触发上传流程;如果提示某一二进制未签名,回到Xcode找到对应Target补全签名配置即可。codesign --verify --deep --strict --verbose=2 Runner.app
版本适配注意事项
针对Unity 2022.1.1f1 + Xcode 13.4.1的组合,不要直接修改Unity导出的独立iOS工程的签名配置,所有签名调整统一在Flutter主工程的workspace中完成,避免Flutter执行构建时覆盖手动修改的配置。
内容的提问来源于stack exchange,提问作者Abdelrahman
相关产品推荐
相关产品推荐

