又有人来问“怎么用 Godot 导出 iOS 应用并上架 App Store?签名字段该填什么?”了。这个问题其实在 Godot 社区里出现频率很高,原因很简单:如果你以前只打包过 Android,第一次碰 iOS,一定会被证书、描述文件、Team ID、Provisioning Profile 这一堆名词绕晕。更别说好不容易点下“Export”,Xcode 弹出一串签名错误,直接劝退。
今天这篇就把整个链路讲清楚,从工程导出的前置条件,到签名各个字段的含义和实际填法,再到 Xcode 里 Archive、上传 App Store Connect,最后是常见被拒原因和错误速查。无论你是刚准备试水 iOS,还是已经卡在签名报错上,都可以按顺序对照操作。本文基于 Godot 4.x 版本,但大部分步骤在 Godot 3.5+ 也适用,其中签名机制是苹果生态通用的,换引擎思路也完全一样。
1. 先搞清楚目标:从 Godot 到 App Store 的完整链路
1.1 为什么说导出 iOS 和打包 Android 完全是两回事
接触过 Android 打包的朋友都知道,Android 只需要生成一个 APK 或者 AAB,签名可以用 Android Studio 自动生成一个,也可以自己用 keytool 生成 keystore,过程相对自由,哪怕签名信息填错,大多只是警告,不影响安装。iOS 完全不同。
苹果的生态是强管控的,你打包出来的应用必须由 Apple 签发的证书签名,并且必须携带一个包含你 App 信息的描述文件(Provisioning Profile),才能在真机上运行,也才能上传到 App Store 审核。没有签名或者签名无效,Xcode 会直接拒绝打包,甚至会提示 “No signing certificate 'iOS Distribution' found”。这是苹果设下的安全机制,目的很直白:保证每个 App 的来源可追溯、内容可审计、安装可控。你没法像 Android 那样随便拿一个签名称“test”就糊弄过去。
所以整个流程上,Godot 导出的 iOS 项目更像一个“半成品”:Godot 负责把你的游戏逻辑和资源编译成一个 Xcode 工程,而签名、打包、上传这些事情,必须由你配合 Apple 开发者后台和 Xcode 完成。这也是为什么网上很多教程会直接说“你先装好 Xcode 再说”。理解了这一点,你就明白为什么不能像 Android 那样在 Godot 里点一下“Export”就拿到 ipa 了。
1.2 硬性前提与工具链清单
任何 iOS 打包都绕不开这三样东西:一台可以装 Xcode 的 Mac、一个 Apple Developer Program 付费账号、以及最新或次新版本的 Xcode。
具体清单如下:
- Mac 一台。Mac mini、MacBook、iMac 都行,但系统需要能安装当前版本的 Xcode。Xcode 现在体积很大,占几十 GB,磁盘空间至少要留出 80 GB 左右,否则编译器中途崩溃很常见。
- Xcode 从 App Store 安装。建议装正式版,不要用 beta 版,因为 beta 版有时会引入新的签名机制或模板变化,反而增加排查难度。
- Apple Developer Program 账号。个人开发者 99 美元一年。没有这个账号,你可以编译项目,但无法上传 App Store。企业账号或教育账号流程类似,但今天只讨论最常见的个人开发者账号。
- Godot 引擎编辑器。4.x 版本直接在官网下载即可。3.5+ 也支持 iOS 导出,步骤大同小异。
- iOS 导出模板。在 Godot 编辑器中,通过“编辑器 -> 管理导出模板 -> 下载”安装最新模板。不装模板,导出按钮是灰色的。
另外建议安装命令行工具。第一次打开 Xcode 后,在终端执行:
xcode-select --install这个命令用于安装 Xcode 必要的轻量组件,后续 Godot 导出或者 Xcode 命令行编译可能会用到。如果之前已经装过,终端会提示“command line tools are already installed”,那就放心继续。
我见过不少新手卡在“导出按钮没法点”的环节,其实就是模板没装。这一步说三遍:先装模板,先装模板,先装模板。
2. 项目导出前的工程准备
2.1 创建 Export Presets:Target 平台选 iOS
Godot 的导出预设相当于一个“打包配方”。打开你的项目,点击左上角的“项目 -> 导出”,如果没有导出面板,需要先点击“添加…”创建预设。在弹出的列表里找到“iOS”,选择它。如果你没看到 iOS 选项,说明导出模板还没安装,回到上面那一节。
添加预设之后,你会看到密集的配置项。不要慌,真正要改的核心只有几个。这里我建议先忽略 Sound、Render 等细项,直接在“选项”标签页里找到以下内容:
- Label:应用显示名称,相当于桌面图标下面的名字。慎重起见别留空,留空的话桌面显示名会变成工程名。
- Name:项目名,一般自动带出。
- Bundle Identifier:非常关键,后面单独讲。
- Target:最小 iOS 版本。
- Orientation:横屏还是竖屏,按游戏需要选。如果游戏没有适配旋转,就只勾你需要的方向,以免审核人员发现画面方向不对被拒。
导出预设的另一个作用,是保存签名相关配置。在“选项”标签页的“Code Signing Settings”里,有 Code Signing Identity、Provisioning Profile、Team ID 三个字段。这三个字段就是标题里问的“签名字段”。不过我要强调一点:在绝大多数情况下,你不需要在 Godot 里写这三个字段,直接在 Xcode 里让系统自动签名更省事。这个我在第三章详细解释。
2.2 Bundle Identifier、Target 与最低系统版本怎么定
Bundle Identifier,也叫 Bundle ID,是 App 在系统层级的唯一身份证。它通常采用反向域名格式,比如com.yourcompany.yourgame。注意:
- 只能包含字母、数字、点号和连字符,连字符尽量避免连续。
- 全系统内唯一,一旦在某个 App 上注册,就不能再被其他开发者使用。
- 大小写敏感吗?苹果后台要求小写。如果你在 Godot 里用了大写,上传时大概率会报错。
Bundle ID 必须和 Apple Developer 后台注册的 App ID 完全一致,也要和 App Store Connect 里创建 App 时填写的套装 ID 一致。同一款应用的三处必须一模一样,差一个字符都不行。我建议你提前在开发者后台把 ID 注册好,然后再填到 Godot 里,避免来回改。
Target 指的是最低支持的 iOS 版本。这里不是你写多少就支持多少,而是受限于 Godot 本身的要求。Godot 4.x 目前要求最低 iOS 版本至少是 12.0,如果你写低了,编译时系统可能自动提醒你改回。从实际用户覆盖考虑,如果游戏没有用到特别新的系统 API,iOS 12 和 iOS 13 以上是安全选择,覆盖率高,审核也容易过。如果你希望覆盖面更广,可以保留默认值。
2.3 图标、启动屏与权限描述,这几个坑最容易被苹果拒
很多号称发布成功的博主都会提醒你:图标和启动屏是在 Godot 里最容易被忽略的点,而且苹果审核很较真。
Godot 的 iOS 导出一共需要三类图标素材:
- 应用图标。推荐直接用一张 1024x1024 的无透明通道 PNG,命名
icon.png,放在项目根目录。Godot 会自动生成各种尺寸。但需要确认这张图的背景不要透明,不要带圆角,不要包含 alpha 通道。因为苹果在 iOS 设备上会自行应用圆角遮罩,如果你的原始图标自带圆角,显示出来会变成“圆角套圆角”,审核可能会以“图标不符合指南”为由打回。 - 启动图片。苹果要求所有 App 都必须支持 Launch Screen。Godot 在 iOS 导出时会自动生成一个默认的 LaunchScreen,但你需要提供一个占满画面、可拉伸的背景图,否则启动瞬间可能出现黑色大色块。推荐制作一张适合屏幕尺寸的启动图,并在导出选项里找到启动图片设置指定过去。
- 商店推广图。这个不是工程配置,但在上架时 App Store Connect 会要求至少一张 6.7 英寸或 6.5 英寸的截图,以及 1024x1024 的商店图标。这些可以在上架阶段用第三方工具生成,提醒你别忘了。
权限描述是另一个重灾区。如果你的游戏会在 iOS 上获取相册、相机、麦克风、定位等权限,必须在Info.plist中添加用途描述。否则,当系统弹出权限请求时,因为没有描述文案,会直接闪退或者被系统强制拒绝,审核人员会以“Crash on launch”为由打回你的应用。在 Godot 里,可以通过项目设置 -> 编辑器 -> 导出 -> iOS -> “Custom Info.plist” 添加键值。例如相机权限需要添加NSCameraUsageDescription,值为一段英文描述,如 “This app needs camera access to scan QR codes”。权限字符串不要留空,这是苹果明文规定的。
3. 签名字段到底填什么:从概念到实操
3.1 苹果签名体系:证书、描述文件、Team ID 的关系
要搞清楚签名字段怎么填,先理解这套体系。我把它们做个类比:
- 证书(Certificate)相当于身份证。它由 Apple 颁发,证明你这个人/开发者的身份。证书有两种常见类型:“Apple Development”用于开发调试,“Apple Distribution”用于发布上架。上架 App Store 用的就是
Apple Distribution证书。 - 描述文件(Provisioning Profile)相当于门票。它绑定了一组允许运行的设备(开发调试时)以及你的证书、App ID。描述文件也分多种:Development Profile 用于开发真机调试,App Store Profile 用于发布到 App Store,Ad Hoc Profile 用于内部测试。上架时需要选择和证书匹配的 Distribution Profile。
- Team ID 相当于团体编号。它标识你属于哪个开发者团队。你可以在苹果开发者后台 “Membership” 页面找到,是一串 10 位左右的字母数字组合。Team ID 不需要保密,但证书和描述文件必须属于同一个 Team,否则签名会失败。
三者的关系可以这样理解:证书证明你是某个人,Team ID 证明你在某个团队,描述文件证明团队允许这款应用签上你的名字并分发给指定设备。苹果在安装或上传时,会通过证书链校验 App 的数字签名,验证这个 App 确实是该团队创建的。
这里很容易出现的一个误区是:开发者在后台下载了一个.cer证书,双击安装到钥匙串,就以为已经签名了。实际签名时,Xcode 还会检查这个证书是否绑定了描述文件,而描述文件是否包含你这个 App 的 Bundle ID。任何一环不匹配,都会报签名错误。
3.2 Godot 导出面板里的三个关键字段逐项说明
现在回到 Godot 导出面板。在“选项”标签的 Code Signing Settings 中,你会看到这样三个字段:
| 字段 | 该填什么 | 示例 | 注意事项 |
|---|---|---|---|
| Code Signing Identity | 证书在钥匙串中显示的名称 | iPhone Distribution: Your Name (ABCDE12345) | 要和钥匙串里的证书全名严格一致,包括括号里的 Team ID |
| Provisioning Profile | 描述文件的名称或 UUID | MyGame AppStore Profile或6df4e2af-... | 不是填文件路径,而是描述文件的“名字”或 UUID |
| Team ID | 开发者后台 Membership 页的 10 位标识 | ABCDE12345 | 纯字母数字,不带空格 |
最容易出错的是 Code Signing Identity。很多人填了iPhone Distribution或者iPhone Developer,以为写个大类就行。实际上,Xcode 和 Godot 都需要一个具体存在的证书名称,你可以在“钥匙串访问”App 里选中证书,双击查看“用户名”和“名称”字段,复制那个完整名称。举个例子:如果你的名字是 Zhang San,Team ID 是A1B2C3D4E5,证书名称可能是iPhone Distribution: Zhang San (A1B2C3D4E5),那就必须一字不差地填进去。
Provisioning Profile 字段则更微妙。Godot 官方文档说明这里填描述文件的名称,而且需要你先把这个描述文件下载到本机并放到 Xcode 的配置目录中。你可以通过 Xcode 的“Settings -> Accounts -> Manage Certificates”来生成和下载。实际上,如果你在这里手动填了,Godot 会把签名信息写入生成的 Xcode 项目,Xcode 打开后会自动识别。但如果你对名字没有把握,最简单的方法是直接让 Xcode 自动管理签名,三个字段全部留空。
3.3 手动填写 vs Xcode 自动签名:我建议后者
为什么我强烈建议不要在 Godot 里填签名?原因有三个。
第一,Godot 的手动签名需要你保证证书、描述文件、Bundle ID 三者完全匹配,但这个匹配关系在苹果后台是动态的。每次 Xcode 更新、系统升级、证书到期,你都要重新下载并安装。如果你把旧描述文件的名字填进去,Godot 仍然会生成项目,但 Xcode 打开后死活签名失败。排查起来非常费时间。
第二,Xcode 的自动签名(Automatically manage signing)会自己根据你的开发者账号生成签名配置。你只需要在 Signing & Capabilities 面板里勾选自动管理,选择 Team,Xcode 就会自动创建或更新描述文件,并为你安装到本机。无需下载、无需手动填名称,也没有 UUID 对不上的烦恼。对于绝大多数独立开发者,这是最稳的路线。
第三,Godot 里手动签名最主要的应用场景是自动化构建,比如服务器用命令行打包、Jenkins 流水线、GitHub Actions 等。那种场景下没有可视化 Xcode 来接收自动签名,才需要手动指定证书和描述文件。普通桌面操作,完全没必要给自己上难度。
所以我的推荐方案是:Godot 导出时,Code Signing Settings 里的三个字段全部清空,直接导出,然后打开 Xcode 配置自动签名。文章下一章就按照这个思路来。
4. 用 Xcode 完成打包与验证:实际操作流程
4.1 从 Godot 导出 Xcode 工程的流程
在写好 Export Preset 后,点击“导出项目”,选择目标文件夹。不要选到项目根目录,最好新建一个build/ios文件夹。导出完成后,你会看到里面包含了:
godot_project.xcodeproj:Xcode 工程文件,双击它可以打开工程。godot_project:这是编译后的游戏可执行文件和其他资源。Info.plist、icon.png等辅助文件。
打开godot_project.xcodeproj后,Xcode 可能需要一小段时间进行索引,首次会比较慢。双击工程文件时,如果系统提示“The project ‘xxx’ is damaged and can't be opened”,多半是 Xcode 版本和模拟器类库不匹配,更新 Xcode 或者重新导出一遍即可。
Xcode 打开后,先看一眼左侧文件树,确认 Target 名称是 godot_project 之类。选中这个 Target,右侧就会看到 General、Signing & Capabilities 等标签页。这里要改的核心配置基本都在 Signing & Capabilities。
有一个细节需要注意:Godot 默认生成的项目里,“Deployment Info”中的 Device 默认可能是“iPhone”,如果游戏要同时支持 iPad,需要改成“Universal”。不然后面在 App Store Connect 里,Apple 会提示你的应用不支持 iPad,虽然不至于直接被拒,但会多一轮解释。建议提前把 Device 改为 Universal 或根据你的需求定好。
4.2 Signing & Capabilities 配置细节
进入 Signing & Capabilities 标签页后,首先确保“Automatically manage signing”这个复选框勾上。勾选后,会弹出一个选择 Team 的下拉框,里面会列出你当前 Mac 里所有登录过的开发者账号关联团队。选对团队后,Xcode 会自动为这个 Target 生成一个 Development 描述文件,并填入签名身份。整个过程通常只需要十几秒。
如果选择 Team 后,下方出现类似 “Failed to create provisioning profile.” 的红色提示,最常见的原因是 Bundle Identifier 已经被其他应用占用了。这个报错的意思就是:当前开发者账号里已经存在另一个 App ID,并且不在你的团队名下。解决方式很简单,把 Bundle Identifier 改成一个全新的、之前没有用过的值,然后再点一下刷新按钮,让 Xcode 重新生成描述文件。
另一种情况是提示 “No Accounts” 或 “Add an account”。这是因为 Xcode 还没有登录你的 Apple ID。点击左下角的 “Add Account”,输入你的开发者账号 Apple ID,登录后 Xcode 就会同步该账号的证书和 Team。这个动作本身不算在开发者后台额外创建什么,只是想让你本机具备签名能力。
配置完成后,打开 “Info” 标签,确认Bundle display name和Bundle identifier没有拼写错误。Bundle display name是用户看到的 App 名称,如果留空,桌面名会变成签出来的英文名,可能不太好。
4.3 Archive 导出 ipa:Xcode 的完整菜单路径
签名配置完成之后,不要急着一键 Run。第一次打包上架,我们需要走 Archive 流程。
先说一个容易踩的坑:在 Xcode 顶部选择运行设备时,必须选择 “Any iOS Device (arm64)”,不能选某个具体的模拟器。你选模拟器时,Archive 按钮是灰的,因为模拟器构建结果是调试用的 x86/arm64 slice,无法用于发布。选好 “Any iOS Device (arm64)” 后,菜单栏的 “Product -> Archive” 才会亮起来。
点击 Archive 之后,Xcode 会开始编译整个工程。第一次编译时间较长,短则几分钟,长则十几分钟,取决于项目大小和 Mac 性能。编译过程中不要频繁动鼠标,也不要切换 Xcode 的窗口,极少数情况下会导致 Xcode 卡死。编译完成后,Xcode 会自动弹出 Organizer 窗口,里面就是你新生成的 Archive 记录。如果 Organizer 没有自动弹出,可以在窗口菜单中打开 “Window -> Organizer”。
在 Organizer 里选中这条 Archive,右侧会有一个 “Distribute App” 按钮。点击它,接下来进入关键分发设置:
- 选择 “App Store Connect” 作为分发方式。
- 勾选 “Upload Symbols” 和 “Manage Version and Build Number” 都可以用默认值。
- 到 “App Thinning” 步骤时,选择 “All compatible device variants” 或默认选项均可。
- 最后点击 “Upload”,Xcode 会把 ipa 上传到 App Store Connect。如果你在电脑上开启了代理,可能会连接缓慢,这个属于清理环境问题,和我们打包无关。
上传成功后会提示 “Upload to App Store Connect successful”。如果报错,常见错误我放在第六章的速查表里。到这一步,打包和上传基础工作已经完成,接下来是 App Store Connect 后台的操作。
5. 上架 App Store 的完整流程与常见驳回坑
5.1 在 App Store Connect 创建 App 与套装 ID
打包上传不等于万事大吉。你还得在 App Store Connect 后台把一个应用记录创建好。这个过程很多人搞混,其实它和开发者后台的 Identifier 是两码事。
先理清顺序:
- 在 developer.apple.com 的 Certificates, Identifiers & Profiles 页面,注册一个 App ID(也就是 Bundle Identifier)。
- 然后在 appstoreconnect.apple.com 的“我的App”里点“+”创建一个 App,选择这个套装 ID。
- 创建 App 时需要填写一个唯一的“SKU”,通常是为了内部标识用,不会展示给用户,可以填你项目的内部代号。
在创建 App 时,语言、地区默认选择简体中文或英文都可以。如果你同时支持多语言,后面可以在“本地化”里补充。
这里有个容易忽略的地方:App Store Connect 创建 App 时填写的“版本号”和你 Xcode 工程里的版本号要对应。Godot 导出的项目默认 Version 是 1.0.0,如果你在 App Store Connect 里写 1.0,虽然系统一般会自动匹配,但为了规避 E-mail 通知时报错,最好直接在 Xcode 的 General 标签里把 Version 和 Build 改好,比如 Version 1.0.0, Build 1001。Build 号每次上传都要递增,否则上传会提示 “The provided bundle version is already uploaded”,拒绝接受。
5.2 ipa 上传到 App Store Connect 的几种方式
绝大多数人用的是 Xcode Organizer 上传,这已经是在上一章介绍的方式。如果你在测试阶段需要频繁上传 TestFlight,也可以直接用 Transporter 这个工具。Transporter 是苹果官方出品,可以直接拖入 ipa 文件上传。它在 Mac 上独立安装,如果你是 CI 流程,也可以用它自动化。
上传后,你不需要立刻手动“提交审核”,因为 App Store Connect 里会有个活动列表。你可以在“TestFlight”标签页里启用内测组,先请几个设备跑一下,确认没有崩溃,再去“App Store”标签页提交版本审核。不建议跳过 TestFlight 直接提交正式审核,除非你非常有把握。因为审核被拒一次,除了时间上的浪费,心态也容易崩。
5.3 常见被拒原因与规避思路
我把这几年见过的高频被拒原因列一下,每一个都是真实踩过的:
- 缺少权限描述。前面已经讲过,相机、麦克风、相册、定位、通讯录等敏感权限,必须在 Info.plist 中提供用途描述。描述写清楚,不要写一堆套话。
- 图标不符合规格。自查三件事:是否 1024x1024、是否有 alpha 通道、是否自带圆角。
- 使用私有 API。如果你的游戏调用了某些 Undocumented API,苹果审核系统可能直接二进制扫描出来。尽量减少使用非官方第三方 SDK 的底层调用。
- 支付方式不合规。如果你的游戏里有向用户出售数字内容,比如去广告、解锁关卡、内购货币,必须使用苹果的 StoreKit,而不能接支付宝、微信支付等第三方支付通道。否则审核必拒。
- 启动闪退。有些机器上打开游戏就闪退,通常是图标加载失败、资源路径加了大小写不敏感假设、或者缺少
arm64支持。真机测试至少覆盖多个系统版本再提交。 - 截图与描述不符。App Store 审核人员会对比截图和实际功能,如果截图里显示的网络玩法实际无法访问,会产生误导。
被拒之后,不要慌。登录 App Store Connect,在“解决方法中心”会看到具体原因,你可以按实际情况回复或提交新的版本。大多数情况下,只要不是原则性违规,修改后重新上传都会通过。
6. 实操心得与常见错误速查
6.1 我踩过的三个坑:签名不匹配、图标尺寸、启动画面
我最早帮一个朋友用 Godot 导出 iOS,对方没有在 Godot 里写任何签名信息,直接生成 Xcode 工程。打开后我选了自动签名,却在 Xcode 里迟迟看不到 Team。排查了半天,才发现他的 Xcode 里根本没有登录开发者账号,而凭他的 Apple ID 在 App Store Connect 后台已经关联了证书,但本地钥匙串里没有。解决方案就是在 Xcode 的 Settings 里添加账号,等待同步。
第二个坑来自图标。朋友的游戏图标是一张圆角图,他直接在 1024 的 PNG 上加了透明圆角。上传后莫名其妙被拒,原因是 “Icon contains an alpha channel”。苹果要求商店图标不能有 alpha 通道,必须是完全不透明的 PNG。解决方法是把图标导出为 JPG,再包装成 PNG,或者在设计软件里执行“扁平化并关闭透明通道”。
第三个坑是启动画面。Godot 默认的启动画面是纯色背景加一个居中的加载图标。如果你不设置启动图片,审核员在较慢的设备上启动游戏时,会看到几秒的黑屏,容易被判定为“加载时崩溃”。我们在启动图片里放了一张分辨率 1170x2532 的竖屏图,并在 Godot 的启动设置里指定好路径,问题就解决了。实际上,启动画面的关键不在于多精美,而在于明显可感知的加载过渡,避免黑屏。
6.2 常见错误代码速查表
下面是我整理过的签名和上传相关错误对照,可以贴在边上随时查:
| 报错信息 | 原因 | 解决 |
|---|---|---|
| No signing certificate 'iOS Distribution' found | 钥匙串里没有 Distribution 证书,或证书已过期 | 到开发者后台生成新的 Apple Distribution 证书,并安装到钥匙串 |
| Provisioning profile 'xxx' doesn't include the currently selected device | 描述文件未包含你的测试机 UDID | 在开发者后台把设备的 UDID 加入描述文件并重新下载 |
| Code Signing Error: Signing for 'xxx' requires a development team | Xcode 里没有选中 Team | 在 Signing & Capabilities 中勾选自动签名并选择 Team |
| The provided bundle version is already uploaded | 上传过的 Build 号被重复使用 | 在 Xcode General 里把 Build 号调大,再重新 Archive |
| ITMS-90022: Missing required icon file | 缺少指定尺寸的应用图标 | 确保 icon.png 为 1024x1024 且无透明通道 |
| ITMS-90111: Invalid Toolchain | Xcode 版本过低或非正式版 | 更新到最新正式版 Xcode |
| ERROR ITMS-90046: Code Signature Invalid | 签名无效,常见于手动填了错误证书名 | 改用 Xcode 自动签名重新生成 |
| Unable to authenticate with App Store Connect | 网络或本地缓存问题 | 稍后重试,确保联网正常 |
排查签名问题,还可以用终端工具直接查看签名信息。比如:
# 查看某个 ipa/app 的签名详情 codesign -dv --verbose=4 你的App路径 # 列出本机可用的代码签名身份 security find-identity -v -p codesigningcodesign -dv会打印详细的签名身份团队 ID,能帮助你快速判断是否签了正确的证书。security find-identity可以看当前钥匙串里有哪些可用证书,如果你在 Godot 里手动填了名称,但这里查不到,说明证书名称不对。
6.3 最后的经验:先自动签名,再研究手动
根据我实际测试下来,Godot 导出 iOS 这个流程,最高效的方式就是:先不管签名,把精力全部花在 Bundle ID、图标和启动画面上,然后交给 Xcode 自动签名,最后 Archive 上传。等这一整个流程跑通了,确认游戏能上架,再回头研究 CI 自动化里的手动签名配置,那会轻松很多。如果你第一次就手动填签名,一个字段填错,报错信息又长又难懂,很容易让新手打退堂鼓。
上架这件事,本质上就是把苹果后台、Xcode 和 Godot 三方之间建立正确的匹配关系。只要 Bundle ID 一致、证书有效、描述文件完整,剩下的就是苹果审核流程上的常规检查。TestFlight 一定要善用,它在正式审核之前就能让真实设备安装你的 App,很多崩溃和权限问题早暴露早修复,比被审核员打回再改要高效得多。
最后分享一个小技巧:不要只用一台低版本真机测试。如果你只有一台 iPhone,尽量在上面跑遍所有主要功能,同时再找一台 iPad 试试。审核人员通常会在不同设备上测试,常见的就是 iPhone 最新机型加 iPad Pro。只要这两类设备不崩,基本可以放心提交。祝各位都能顺利把 Godot 游戏送进 App Store。