Published on

iOS 开发与上架经验分享:从零到 App Store 实战指南

Authors
Table of Contents

NOTE

如果你第一次独立开发 iOS app 并打算上架,希望这篇文章能帮你探探路。 介绍到的信息与政策不一定百分百正确或是最新的,请以最新政策信息为准。

准备期:你要做的第一个决定

1. 个人账号还是公司账号?

注册 Apple Developer Program 的第一个问题,就是选账号类型。

个人账号(Individual):审核简单,$99/年,App Store 显示的开发者名字就是你的真实姓名。适合独立开发者,一个人玩就行。

公司账号(Organization):需要提供 DUNS 编号,审核周期更长(通常要 1-2 周),但显示的是公司名,更有品牌感,也支持多成员协作。如果你的 app 面向企业用户,或者你希望以品牌而非个人名义发布,选这个。

想清楚了再注册。两个方向的迁移结果差异很大:

  • 个人 → 公司:可以迁移。向 Apple 提交请求,提供 D-U-N-S 编号和公司身份文件,审核通过后账号类型变更,已上架的 app 不需要重新提交。(Apple 官方文档
  • 公司 → 个人:不可逆。Apple Developer Support 的官方答复是「一旦从个人迁移到公司,无法撤销」,他们能做的只是禁用团队账号,届时将无法在 App Store 继续发布 app。

2. Bundle Identifier 的设计

Bundle ID 是 app 的唯一标识符,格式是域名反写,比如 com.tencent.xin,全小写,不用连字符。

只有一个需要牢记的规则:上传第一个 build 之后就不能更改了。换 Bundle ID 等于重新提交一个新 app,旧用户的评分、购买记录全部断掉。(参考:Changing the bundle identifier

格式本身没有强制要求,按自己的习惯来就好,域名反写(com.getfinmind.finmind)是业界惯例,唯一性有保障,但不是必须。核心只有一点:想清楚再定,定了就别想着改。

内容期:上架前你要准备的材料

3. 隐私政策页 & 技术支持页

这两个是 App Store 审核的硬性要求,必须是可公开访问的网页,不能是本地文件或者 App 内页面。

隐私政策页:说清楚你收集了哪些数据,怎么使用,是否分享给第三方。如果你的 app 完全本地运行,不收集任何数据,也要明确写出来。示例:privacy.getfinmind.com

技术支持页:一个简单的落地页就够,提供联系方式(邮箱即可),说明 app 是什么、如何反馈问题。不需要很复杂。示例:support.getfinmind.com

怎么做这两个页面:两个页面本质上都是静态 HTML,我的做法是直接让 AI 生成——把 app 的基本信息、数据处理方式、联系邮箱告诉它,让它输出一个单文件 HTML,然后部署到 Cloudflare Pages 就行了。

域名在哪里买、怎么配置:我是在 Cloudflare 直接注册的 getfinmind.com,注册完之后 DNS 就自动托管在 Cloudflare 了,不用额外迁移。子域名(privacy.getfinmind.comsupport.getfinmind.com)直接在 Cloudflare DNS 里加 CNAME 记录指向对应的 Pages 项目即可,全程在同一个平台完成,不需要折腾。两个页面分别建了独立的 Cloudflare Pages 项目,部署只需要把 HTML 文件推到 GitHub,Cloudflare 自动构建,几秒钟就上线。

唯一要注意的是:不能用 Notion 公开页、GitHub README 或飞书文档替代,Apple 要求是一个稳定的、可公开访问的网页。

两个页面最好放在同一个域名下。如果你打算长期做独立开发,建议认真维护一个自己的网站。

4. 国区 app:ICP 备案

国区上架涉及两件事,通常打包在一起处理:

App 备案(主体):工信部要求所有在国内分发平台上架的 app 必须完成备案,拿到备案号后 App Store 才会向中国大陆用户开放。这是强制要求,跟 app 是否联网无关。

域名备案(附带):App 备案时域名是必填项,哪怕你的 app 完全不联网,也得填一个域名——所以域名备案几乎是绕不开的配套步骤。如果 app 有自己的后端 API,对应的域名当然也要一并备案。

流程大致是:国内云服务商购买服务器 → 注册域名 → 在云服务商备案系统提交申请(由云服务商代为向工信部备案)。各家云服务商(阿里云、腾讯云等)都有配套的备案辅助流程,跟着走就行。(参考:阿里云 ICP 备案流程概述App 备案快速入门知识

几个注意点:

  • 备案需要实名,需要时间:一般要一两周,看每个省工信部,建议不要临近上架才开始。
  • 服务器需要在国内:备案要求主机在境内,境外服务器不能备案。
  • 基本上都要备案:只要你的 app 想在国区上架,就做好备案的准备,不要抱侥幸心理。

备案名要注意潜在的重名风险

我最初用 FinMind 作为备案名提交,阿里云初审时发现这个名字跟金融类有关联,加上搜索引擎上有同名金融平台,存在重名隐患,建议修改。最终改成了中文名「盈余」,和 App Store 的中文名保持一致。备案名只是工信部那边的登记信息,不影响你的英文品牌。如果你的 app 跟金融、医疗等敏感领域沾边,备案前最好先搜一下有没有重名的平台,主动规避风险。

5. App Store 截图与预览图

截图是用户在 App Store 里看到的第一眼,比功能描述更重要。

几个尺寸是必须提交的:6.9 英寸(iPhone 16 系列)、6.5 英寸(iPhone 14 Plus 等),还有 iPad 的尺寸(如果你的 app 支持 iPad)。可以用 Xcode 模拟器截图,也可以用 Sketch / Figma 做设计稿再渲染。

不要偷懒直接用 App 截图。加上设备边框、简短的 slogan、适当的背景色,会显得更专业。市面上有很多截图生成工具,效率很高,也可以让 AI 帮你生成,通过代码或直接文生图的方式。

商业期:钱的问题较复杂

6. 选对付费模式

App Store 支持几种主要的付费方式(官方说明):

模式适合场景
一次性买断工具类、游戏,用户不喜欢订阅
非续费订阅有明确周期的内容(如年度内容包)
自动续费订阅持续提供服务,适合 SaaS 类产品,收入稳定
免费 + 内购降低门槛,核心功能免费,高级功能付费

自动续费订阅是目前最主流的独立开发盈利模式

关于 Apple 抽成,有两个机制值得了解:通常情况下,符合 App Store Small Business Program 的开发者可以享受 15% 抽成;资格主要看上一日历年 App Store proceeds 是否不超过 100 万美元,新开发者也可申请。对于不符合该计划的开发者,自动续订订阅在用户累计满 12 个月付费服务后,开发者收益从 70% 提高到 85%,也就是 Apple 抽成从 30% 降到 15%。对绝大多数独立开发者来说,如果符合 Small Business Program,15% 基本是起点,不需要等订阅满一年。

不过订阅本身是 App Store 内购里配置和实现复杂度较高的一类,涉及 StoreKit、订阅组、续订状态、服务端验证、App Store Server Notifications、退款和账单异常处理等,需要提前做功课。(Apple In-App Purchase 官方页面

另需注意,中国大陆 App Store 店面自 2026 年 3 月 15 日起费率有所调整,标准费率为 25%,Small Business Program 和订阅满一年后为 12%。

7. 订阅的几个坑

如果你选了自动续费订阅,有几件事要特别注意:

收据验证密钥:服务器验证用户订阅状态时需要用到。StoreKit 1 用的是 Shared Secret(32 位十六进制字符串);StoreKit 2 则换成了 In-App Purchase Key。新项目建议直接用 StoreKit 2。如果你的账号或 app 迁移,记得重新生成并同步更新到服务器验证逻辑,否则用户订阅状态会出现问题。(Apple 官方文档

沙盒测试:订阅类内购无法在未经 App Review 审核之前用真实支付测试,需要配置 StoreKit Configuration File 在本地模拟,或者使用沙盒账号在 Xcode 里测试。

免费试用期(Introductory Offer):Apple 允许你为新用户提供首月免费或折扣价,这是提高转化的利器,在审核通过后可以在 App Store Connect 里配置。

8. 收款与税务

这一块很容易被忽略,却是「能不能拿到钱」的关键。

在 App Store Connect 的 Agreements、Tax 和 Banking 里,你需要:

  • 签署付费 app 分发协议
  • 填写税务信息(根据你的身份,填写个人税号或公司税号)
  • 绑定银行账户(实测国内招商银行可以直接绑,其他银行未测试,建议自行确认)

你的银行账户、税务主体,必须与你注册的开发者账号类型匹配。个人账号用个人身份收款,公司账号用公司账户收款,混用会导致审核不通过或者打款失败。

不过说实话,这部分我目前还没有太多亲身经验——因为截至写这篇文章,我还没有收到任何一笔订阅。

上架期:提交审核

9. 在 App Store Connect 里填写 App 信息

填写 app 名称、副标题、关键词、描述文字、分级信息、类别……这些文案直接影响搜索排名和用户点击率,值得认真对待。

几个要点:

  • 关键词字段:只有 100 个字符,要精挑细选,用逗号分隔,不要重复 app 名称里已有的词。
  • 分级问卷:老实填,如果审核员发现你的实际内容与填报等级不符,会被拒。
  • 版本更新说明:首次上架写清楚 app 是什么就好,不要写废话。

10. 审核与被拒

初次提交审核大概要 1-3 天,有时更快。常见的被拒理由:

  • 崩溃:审核员会实际测试,稳定性一定要在提交前测好
  • 内购配置问题:订阅项目没有正确配置,或者 UI 上没有清楚说明价格和续订规则
  • 隐私相关:用了某些系统权限(麦克风、相机、位置等)但没有填写使用说明,或者隐私政策不够清晰
  • 元数据与实际功能不符:截图展示了 app 里没有的功能

被拒不要慌,第一次提交经常容易被拒的。仔细阅读 Resolution Center 里的反馈,大多数问题是可以修复后再提交的。

盈余的审核过程踩了不少坑:

第一关是正式提交时发现一堆必填项没填:版权信息(© 2026 Zesen Huang)、中文和英文两个语言版本各自的「技术支持网址」、以及 App 隐私声明(要在 App Store Connect 里声明你的 app 是否收集数据,全本地运行的 app 选「不收集任何数据」就好)。这些细节散落在不同页面,很容易漏掉,建议提交前逐项对照检查。

第二个坑和订阅有关:首次包含订阅的 app,在审核通过之前,订阅在 TestFlight 和沙盒环境里都无法真正购买——这会造成一个「死循环」,没法在提交前充分测试付费流程。解决方案是在 Xcode 里配置 StoreKit Configuration File,用本地 mock 的方式模拟购买流程,验证代码逻辑没问题后再提交。

第三个坑是 Guideline 3.1.2c,也就是订阅 Paywall 缺少必要信息被拒。具体缺失的是:隐私政策链接、用户协议(EULA)链接、自动续订说明、以及恢复购买按钮,四项缺一不可。

做法是在 SwiftUI 的 Paywall UI 里把这四项全部补上;同时 App Store Connect 里中英文两个本地化的 App 描述里,也要加上 Privacy Policy 和 EULA 的链接,两边都要到位。

最后

单纯的 App 开发迭代比完成上述这些上架流程和备案手续有趣得多,但要让 App 能给苹果几十亿的用户体验,上架流程就不得不去做。

希望这篇文章对你有用。

欢迎扫码下载,或在苹果应用商店搜「Yuroo」下载。 记录收支,感知生活。财务有盈余,生活有余裕 🏄‍♂️。

Yuroo App Store 海报