
经常有人问我电脑是 Windows也能用 GameMaker 做 iOS 游戏最后顺利上架 App Store 吗我的回答是可以但中间有一道绕不过去的环节——你需要一台能执行 iOS 构建的 Mac。很多人以为 Xcode、证书、描述文件这些东西必须全部在 Windows 上解决结果第一步就被劝退了。实际上GameMaker 在 Windows 上负责的是项目开发、资源配置、远程构建调度和 App Store Connect 后台资料填写真正编译出 IPA 的活儿会交给一台 Mac 完成。这篇文章会把从 Windows 上的 GameMaker 工程到“打包成 iOS 应用再上传到 App Store Connect 提审上架”的完整链路讲清楚适合正在用 Windows 做 GameMaker、又想做 iOS 上架的游戏开发者。1. 为什么 Windows 不能直接“打包” iOS三道锁1.1 Xcode 与 macOS 工具链很多人第一次听到“Windows 可以打包 iOS”时会很兴奋然后在实际点击 Build 之后发现 GameMaker 一直在转圈最后报一个找不到远程主机的错误。原因并不复杂GameMaker 的 iOS 导出本质上是生成一个 Xcode 工程然后调用 macOS 上的 Xcode 工具链完成编译、链接、签名和打包。Xcode 只运行在 macOS 上这是第一道锁。所以在 Windows 端GameMaker 从事的并不是传统意义上的“交叉编译”而是把项目资源、代码、配置先打包成一个中间工程再通过 SSH 等协议推送到一台 Mac 上由 Mac 端工具链去执行真正的构建。简单理解就是Windows 是前台Mac 是编译后台。你完全不需要在 Windows 上安装或者配置复杂的东西只需要把“后台”顺利连上剩下的事情交给 Mac 完成。1.2 代码签名苹果生态的强制性要求即使编译成功iOS 应用也不是一个能直接安装的普通文件。系统要求可执行文件必须经过 code signing 签名并且签名信息和描述文件Provisioning Profile里的 Bundle ID、证书、设备列表严格匹配。签名工具链、钥匙串、描述文件管理这些组件同样只能在 macOS 环境里正常工作。老实说苹果这个设计确实让 Windows 用户痛苦由 Windows 直接生成一个“合法且能被 iPhone 接收”的 IPA 文件几乎是不可能完成的任务。理解了这一点之后你就不会再纠结“为什么我的 GameMaker 里导出 iOS 总是失败”而是把精力放到更实际的路径上找一台 Mac把签名和编译都放过去。1.3 Windows 端到底能做什么、不能做什么经常有人把“打包”和“上架”混在一起然后问出一个模糊的问题我不买 Mac 能上架吗明确一点Windows 端可以做以下工作编写 GameMaker 项目逻辑、美术资源、音效处理配置 GameMaker 工程里的 Bundle ID、版本号、权限生成并管理项目图标、截屏素材填写 App Store Connect 里的应用资料、隐私信息准备描述文件需要的 Certificate Signing RequestCSR启动远程构建查看构建日志Windows 端做不了的是本地编译生成 IPA、本地执行 iOS 模拟器、直接用 Apple 签名工具完成签名。所以要接受一个工作模式“Windows 负责写Mac 负责编和签”。2. 准备一台能构建 iOS 的 Mac本地机与云端机怎么选2.1 本地 Mac 的最低配置参考如果你家里正好有一台旧 MacBook优先用起来。Xcode 对系统版本比较挑剔一般要求电脑能运行最新的 macOS 版本所以太老的机型可能反而装不了新版 Xcode。建议至少 8GB 内存、20GB 可用磁盘、SSD。构建大型 GameMaker 项目时Xcode 会同时启动编译器、链接器和模拟器相关组件16GB 内存体验会更稳定。拿到 Mac 之后需要安装 Xcode在 App Store 搜索下载安装 Xcode 命令行工具并至少用你的 Apple ID 登录一次开发者后台确认开发者模式可用的状态。第一次安装 Xcode 后系统可能会弹出一堆许可协议必须在终端里执行一次sudo xcodebuild -license accept否则后续远程构建可能因为许可未接受而卡住。2.2 云 Mac没有实体机的最常用方案如果手里没有任何 Mac可以考虑租一台云端 Mac。现在市面上有不少按小时计费的云 Mac 服务基本思路是给你一台远程的 Mac 虚拟机背后通常是真实的 Apple 硬件通过远程桌面或者 SSH 访问。选服务时至少要看这几点是否提供 SSH 连接能力是否允许固定 IP方便你配置防火墙磁盘空间是否足够安装 Xcode 和中间产物带宽是否足够上传下载 IPA第一次拿到云 Mac 时很可能是一台干净的系统你要先装 Xcode执行许可接受命令再配置 SSH 公钥。整个流程和实体 Mac 没有本质区别唯一要注意的是云 Mac 是用完即走、按时计费所以签名用的 p12 证书、描述文件这些资料尽量在本地妥善备份别把所有东西都留在云机器上到期释放后你会连哭都来不及。2.3 账号与授权提前确认除了 Mac你还需要加入 Apple Developer Program个人账号一年 99 美元公司账号 299 美元。这个账号用来创建证书、App ID、描述文件以及管理 App Store Connect。GameMaker 这边同样要确认你的订阅授权里包含 iOS 导出目标。GameMaker 的订阅/许可证策略每隔一段时间会调整买之前务必在官网的导出平台列表里确认 iOS 是可见可选的我遇到过不止一位朋友把证书、Mac 环境全配好了最后才发现自己手里的 GameMaker 版本根本不给 iOS 导出那个心情我太懂了。3. 在 Windows 上配置 GameMaker 的 iOS 远程构建3.1 Mac 端先跑通最小环境拿到 Mac 后先把最小环境跑通。步骤并不复杂基本上是安装 Xcode。在终端执行许可接受命令sudo xcodebuild -license accept安装命令行工具xcode-select --install如果你的 GameMaker 项目用到了第三方 iOS 原生扩展比如需要 CocoaPods 管理的 SDK那还需要安装 CocoaPodssudo gem install cocoapods但我的个人建议是一开始先别着急装 CocoaPods等构建报错告诉你缺少 pod 命令时再补装。很多教程把所有依赖一股脑装好结果报错时反而不容易判断是哪个环节出的问题手动逐步安装反而是最可控的。3.2 Windows 端 GameMaker 里填什么打开 GameMaker进入 Preferences找到 iOS 相关的平台设置不同版本菜单位置会有差异但核心字段基本一致。这里要配置的是远程 Mac 的地址和连接信息以及签名材料位置Mac 的 IP 或主机名SSH 连接的用户名密码或 SSH 私钥路径Mac 上 GameMaker 的工作目录比如/Users/你的用户名/GameMakerStudio2证书文件 p12 和描述文件的存放路径这些信息看起来多但本质就一句话告诉 GameMaker 去哪台 Mac 上执行构建。如果你在 Windows 上已经能手动 SSH 登录到这台 Mac理论上 GameMaker 也能连上。3.3 先手动 SSH 一次再依赖 GameMaker很多人在这一步踩坑GameMaker 一直提示“Connecting to remote Mac...然后超时。原因往往是 Windows 防火墙、Mac 的远程登录没开、云 Mac 的 22 端口没放通或者密钥没配置好。建议在 Windows 的 PowerShell 或 CMD 里先手动执行一次ssh 用户名Mac的IP如果能登进去说明 SSH 链路没问题再去点 GameMaker 的 Build 按钮如果登不进去先解决连接问题不要在 GameMaker 里反复试。另外一个实用技巧优先使用 SSH 密钥而不是密码因为 GameMaker 的远程构建是自动化过程如果中途要求输入密码会直接卡住。在 Windows 上生成一对密钥把公钥加到 Mac 的~/.ssh/authorized_keys里私钥路径填到 GameMaker 设置里这样整个构建过程完全自动化。4. 证书、Bundle ID 和描述文件最容易卡住的一环4.1 在 Apple Developer 后台创建 App ID进入 developer.apple.com 的 Certificates, Identifiers Profiles 后台在 Identifiers 里新建一个 App ID。类型选 App然后填 Bundle ID例如com.mycompany.mygame。这个 Bundle ID 必须和 GameMaker 项目里 iOS 平台设置的 Bundle ID 完全一致大小写、点号都不能差。App Store 上架应用不允许使用通配符 Bundle ID所以一定要选显式 ID。这一步看着简单却是打包失败和提审报错的高发区。很多人先在 Apple 后台创建了一个 ID后来在 GameMaker 里改过几次项目名Bundle ID 就被顺手改掉了最终导致描述文件和证书都匹配不上构建阶段报出各种“Code Signing Error”。4.2 生成并导出 p12 证书在 Mac 上用“钥匙串访问”工具请求一个证书签名请求CSR具体路径是钥匙串访问 证书助理 从证书颁发机构请求证书。然后回到 Apple Developer 后台在 Certificates 里创建证书开发证书Apple Development用于真机调试和开发描述文件分发证书iOS Distribution或者 Apple Distribution用于 App Store 发布分别上传 CSR下载对应的.cer证书文件。把.cer双击导入 Mac 的钥匙串再在钥匙串里找到这个证书右键导出成.p12文件并设置密码。GameMaker 的 iOS 设置里会要求你指定 p12 路径和密码。p12 文件相当于你的签名身份相当于一把“私钥”千万不能泄露别放进 Git 仓库也别发给其他协作者。4.3 创建描述文件并配置到 GameMaker描述文件是连接 App ID、证书和设备信息的桥梁。如果要做真机调试需要先在 Devices 里添加测试机的 UDID如果直接上架通常只需要 App Store 分发描述文件它不需要指定设备。回到 Profiles 页面新建一个 Profile选择你要用的 App ID再选择之前创建的证书。下载.mobileprovision文件放到 Mac 的固定目录里然后在 GameMaker 的 iOS 设置里指定 Development 和 Distribution 描述文件的路径。不少人在这一步会混淆“用的证书”和“描述文件里的证书”。简单记证书代表你是谁描述文件代表“这个 App 可以用谁的证书签名在哪些设备上运行”。GameMaker 构建时会把这两个文件一起打包发给 Xcode签名环节就会自动使用它们。4.4 自动签名还是手动签名新版 Xcode 和 GameMaker 都支持自动签名也就是你把 Apple ID 登录到 Xcode选择 Team让 Xcode 自动生成和管理描述文件。自动签名在纯 Mac 开发时很省心但放在 Windows GameMaker 远程构建的场景里我建议谨慎使用。原因是自动签名一旦在远程构建时出错你只能回到 Mac 的 Xcode 里看签名的详细报错排查链路变长而且多个项目共用一个 Apple ID 时自动签名很容易把描述文件搞混。我自己的实践是所有准备上架的项目一律用手动 p12 描述文件的方式虽然配置步骤多一点但看到报错信息时能快速定位是证书过期、Bundle ID 不匹配还是设备列表缺失。5. 在 GameMaker 中把项目调到“能上架”的状态5.1 iOS 目标、Bundle ID 和版本号打开 GameMaker 项目先确认左侧平台列表里 iOS 目标已勾选。然后进入 iOS 的设置页需要注意这几个基础项Display Name桌面图标下方的名称建议和 App Store 上的应用名保持一致Bundle ID和 Apple Developer 后台创建的 App ID 完全一致Version版本号App Store 要求使用三段式格式例如 1.0.0Build构建号每次提交新包都要递增例如 1、2、3版本号和构建号是两个容易混淆的东西很多人上来就把这两个字段都写成了 1.0.0上传时 App Store Connect 会提示“版本号重复”或者“构建号格式错误”。建议把 Build 当作一个纯整数来看Version 才用三段式。5.2 权限与隐私描述iOS 系统对权限很敏感如果你的游戏用到相机、相册、位置、麦克风、通知等能力必须在 Info.plist 里配置对应的权限描述字符串。GameMaker 的 iOS 设置里通常有一个 Info.plist 配置区域可以手动添加键值例如NSCameraUsageDescription用于拍照上传头像等真实场景NSPhotoLibraryUsageDescription用于选择图片素材NSLocationWhenInUseUsageDescription用于显示附近玩法的位置信息这里最关键的是描述文案要真实不能为了过审随意填写。如果 App 只在一个角落用到定位却把描述写得天花乱坠审核员随便一试可能就会以“功能与描述不符”拒绝。我自己的习惯是做一个最小权限表把用到的每一项权限、触发时机、文案内容列清楚提审前再核对一遍。还要留意如果应用集成了统计、广告或基于设备 ID 的功能iOS 14.5 之后必须配置 App Tracking TransparencyATT弹窗并且在代码里正确调用相关 API。漏掉这一步审核时几乎一定会被要求补充隐私说明。5.3 图标、启动屏与截图尺寸App Store 上传要求一个 1024×1024 的应用图标而且不能包含 alpha 透明通道。设计师给的 png 经常带透明背景直接上传会在 App Store Connect 里报“图标不能包含 alpha 通道”解决办法是转成不透明背景或使用无透明的 PNG/JPG 格式。启动屏方面Apple 现在更推荐使用 Launch Screen 自动适配但 GameMaker 传统做法是生成一组启动图。如果你的 GameMaker 版本支持 Launch Screen 相关选项尽量开启否则在刘海屏设备上很容易出现黑边或者拉伸。可以先在默认启动图的基础上按新设备比例重新输出一套素材再在真机上查看效果。App Store 上架还需要提供截图不同设备尺寸的截图至少各提供一张。最常用的是 iPhone 6.7 英寸和 6.5 英寸这两档以及 iPad 相关尺寸如果你支持 iPad。截图可以在 Windows 上根据设计稿生成也可以从真机或云 Mac 的模拟器上截取但一定要保证截图内容是 App 真实界面不能拿设计稿顶替。5.4 横竖屏、目标设备与最终测试在 iOS 设置里把游戏实际支持的方向勾选好。只做横屏的游戏就只保留横屏方向别留一个竖屏方向在那边审核员一旦在错误方向打开你的 App看到旋转混乱或者黑屏可能直接判功能异常。目标设备同样要明确如果只针对 iPhone就不要勾选 iPad 支持。通用应用Universal在审核时会要求 iPad 上也必须能够完整运行这会让你的适配工作量和被拒风险增加不少。很多小团队第一版都选择“仅 iPhone”集中精力把核心体验打磨好等稳定了再补 iPad 适配。6. 构建、签名与上传从 Windows 到 App Store Connect6.1 在 GameMaker 里执行远程构建当以上配置全部完成在 GameMaker 中选择 iOS 目标点击 Build。你会看到输出窗口开始滚动远程日志本质上就是 GameMaker 把工程文件同步到 Mac再在 Mac 上执行 Xcode 构建。构建所需时间和项目规模、Mac 性能直接相关小项目几分钟大型项目等待时间可能较长。如果构建失败不要盯着 GameMaker 输出窗口猜建议同时切到 Mac 桌面打开 Xcode 查看构建日志。远程构建的好处是除了 GameMaker 的封装你还能看到 Xcode 本身的原始错误输出比如签名错误、图标格式错误、版本号格式错误等。我遇到过几次“Failed to code sign”的报错当时在 GameMaker 窗口里完全看不出具体原因切到 Mac 上 Xcode 日志里才看到是描述文件里 App ID 和工程里 Bundle ID 不匹配。6.2 构建完成后上传 IPAGameMaker 的远程构建成功不代表已经上架。构建成功只意味着 Mac 上生成了 IPA 或 Xcode Archive接下来要上传到 App Store Connect。推荐的做法是在 Mac 上打开 Transporter 工具或者使用 Xcode 的 Organizer选择 Distribution 上传到 App Store Connect。上传之前确认这几件事App Store Connect 后台已经创建了同名 AppBundle ID 和工程一致版本号已经填写且大于之前已有的任何版本你正在上传的这个构建包使用的是 Distribution 描述文件而不是 Development 描述文件电脑能稳定访问互联网上传过程不要中断Transporter 上传成功后会显示“已处理”之后可以登录 App Store Connect 的活动页面看到这个构建包进入“正在处理”状态。如果状态一直是“正在处理”可以耐心等几分钟如果变成“无效”大概率是签名配置或图标问题这时回 Mac 上检查 Xcode 的导出参数。6.3 TestFlight正式提审前必须先跑一轮突击检查一下你有没有遇到这种情况本地工程在 GameMaker 里跑得特别顺结果一打包就闪退或者某些接口在真机上完全不通。为了避免被审核员一键拒绝强烈建议在 App Store Connect 里启用 TestFlight。在 App Store Connect 的 TestFlight 页面你会看到刚上传的构建包。可以把它分配给内部测试组成员或者设置外部测试邀请测试用户。内部测试不需要审核外部测试需要经过一次 Beta 审核但通常比正式提审快很多。TestFlight 安装的包已经经过完整的签名验证基本等同于正式版的环境功能、权限、崩溃表现都会更加真实。我在 TestFlight 阶段踩过好几次坑最典型的是某个权限字符串漏写导致第一次启动时初始化游戏服务直接闪退。本地调试时因为开发描述文件覆盖了权限逻辑没暴露问题TestFlight 下用发布配置跑立刻被打回原形。所以“先 TestFlight再提审”不是流程上的负担而是帮你省下一次次被拒的时间。6.4 Windows 不能直接上传那就绕一下有人会问有没有办法只靠 Windows 上传 IPA我的回答是技术上有一些第三方工具可以做但不推荐。用这些工具绕过了 macOS 环境意味着你绕过了苹果正常签名流程的检查一旦上传后包状态变成“无效”排查起来非常困难。而且苹果对上传来源风控是实际存在的没必要在这个环节给自己找麻烦。最稳妥的上传方式仍然是在那台负责构建的 Mac 上完成。云 Mac 按小时计费的话建议把上传、TestFlight 处理、构建验证这些事集中在一次会话里做完确认 App Store Connect 已经接收构建包之后再释放机器。7. 上架 App Store 的资料填写与常见翻车点7.1 App Store Connect 里到底要准备哪些素材在 App Store Connect 点击“我的 App”新建应用后需要填写的不只是名称和描述。我列一下实际提交时会卡人的字段名称不超过 30 个字符不能出现未经授权的商标词关键词用逗号分隔可以放几个主要术语描述建议用几句话讲清楚玩法别堆砌功能点分类选择最匹配的游戏分类年龄分级根据实际内容勾选涉及虚拟金币抽奖要如实申报隐私政策 URL如果 App 收集任何用户数据必须提供一个可访问的网页截图各尺寸设备截图至少各一张要求真实界面审核备注写给审核员看的说明包括测试账号、可复现功能的操作路径隐私政策这一项我特别提醒一下很多独立开发者没有自己的网站就随手填一个第三方页面或者留空结果提审直接被拒。最稳妥的做法是建一个简单页面哪怕是静态托管也能接受但必须真实存在并且描述清楚你的数据收集逻辑。7.2 被拒绝之后怎么快速定位App Store 审核被拒是常态不用太丧气。常见的拒审类型包括崩溃或闪退后台可能附带了崩溃日志先通过 TestFlight 复现修复界面与描述不符截图和实际内容差异过大权限描述不完整申请了权限但 Info.plist 里没有对应文案缺少测试账号审核员无法登录 App 内依赖账号的功能引导购买但未使用 IAP如果游戏内卖的是虚拟道具却让用户走外部支付必拒被拒后在 Resolution Center 里会看到具体理由逐条回复以及重新提交即可。遇到“崩溃”类型别急着打感情牌解释先把崩溃日志里的堆栈信息发给开发团队定位修复重新构建上传再回复审核组“已修复重新提交版本”。7.3 提审和版本更新的基本节奏确认构建包状态为“已处理”并且在 TestFlight 里能正常安装之后再点击“提交审核”。审核等待时间短则一天长则一周都正常。这段时间不需要频繁查看但要把审核组可能需要的说明材料准备好比如测试账号和游戏引导。后续每次更新版本都沿用同一条链路改代码 → GameMaker 远程构建 → Transporter 上传 → TestFlight 自测 → 提审。唯一要记住的是 Build 号必须比前一个版本大Version 号也要按语义化版本规则递增。不要在同一 Version 下重复提交相同 Build后台会拒绝。8. 我在这条链路里踩过的坑和最终建议8.1 第一个坑SSH 通了GameMaker 还是连不上我第一次配置远程 Mac 时在 Windows 终端里手动 SSH 完全正常但 GameMaker 一直卡在连接阶段。后来检查发现GameMaker 设置里我填的是 Mac 的局域网旧 IP而 Mac 后来接入路由器时 IP 发生了变化。换到固定 IP 或主机名之后问题立刻消失。你现在如果也遇到“SSH 能连GameMaker 连不上”优先检查是不是 IP 变过、用户名拼写、密钥文件路径是否带空格。这三个原因解决了至少一半的远程构建连接问题。8.2 第二个坑证书链不完整导致的签名失败有次构建时Xcode 报了一个很短的签名错误没有任何上下文。我在 Mac 上反复检查 p12、描述文件都没问题后来才发现是钥匙串里缺少 Apple 的中间证书Worldwide Developer Relations导致签名链验证失败。重新下载并安装新的 WWDR 证书后一切恢复正常。如果你的证书是从老电脑迁移过来的特别容易遇到这种链不完整的情况。8.3 第三点别为“没有 Mac”拖延整个项目我见过很多独立开发者因为“我只有 Windows”这个想法把 iOS 上架的计划无限搁置。但实际上游戏逻辑、UI、资源、权限设计、截图素材、App Store 描述这些 80% 的工作完全可以在 Windows 上提前完成。真正需要 Mac 的只有最后一小段远程构建、签名、上传。我的建议是如果你的目标是长期持续做 iOS 游戏可以考虑收一台二手的 Apple Silicon Mac哪怕是入门款也比反复租云机器更划算而且签名环境配置一次可以长期沿用。如果只是偶尔发布云 Mac 完全够用。等 Mac 到位之后按照这篇文章的链路把 SSH、p12、描述文件配置好第一次构建、上传、提审往往一天之内就能跑通。剩下的就是根据审核反馈不断优化你的产品了。