独立开发者第一次提审被拒的比例高得吓人——不是因为标准多高,是因为准备清单很长,大多数人漏掉一半。这篇按”先卡哪一关”的顺序把真实清单列清楚。
问题背景
Apple 审核是规则驱动的,不是感觉驱动的。大部分拒审不是”你 App 烂”,是”你某个东西没配好”。独立开发者收益最大的操作就是把每一条都做完再第一次提交——花一轮审核而不是四轮。这份清单讲的是”点提交按钮之前要做什么”,不讲”怎么做出好 App”。
判断标准
- 你已经有一个能在真机上跑的 build。
- 你已经有 Apple Developer 账号($99/年那个,不是只装 Xcode)。
- 在任何对外发布承诺前还有至少 5 天 buffer。
- 基本法务实体已经搞清楚(或者就以个人身份发布)。
实操步骤
-
创建 App 记录——App Store Connect → My Apps → ”+“(左上)→ “New App”。
- Bundle ID:必须和 Xcode 项目里的一致(Xcode → Target → Signing & Capabilities → Bundle Identifier)。命名规则建议
com.<你的域名倒序>.<appname>,例com.yoursite.pockethabits。 - Primary Language:上线后永久不可改(影响展示页默认语言),中国市场优先选 Simplified Chinese,全球先 English (U.S.)。
- Primary Category:上线后可改,但搜索排名权重很大,慎重。
- App Name + SKU:SKU 是内部代号,外部看不到,用
appname-2026q2这种自描述。
- Bundle ID:必须和 Xcode 项目里的一致(Xcode → Target → Signing & Capabilities → Bundle Identifier)。命名规则建议
-
挂隐私政策到固定 URL。GitHub Pages / Vercel 免费方案:
# 用 Astro 或纯 markdown mkdir privacy && cd privacy echo "# Privacy Policy for <App Name>" > privacy.md echo "Last updated: 2026-05-21" >> privacy.md # 部署到 https://yoursite.com/privacy/政策必须包含 7 块:收集数据类型 / 收集目的 / 第三方共享 / 数据保留期 / 用户权利 / 数据删除流程 / 联系方式。可直接用 App 隐私政策清单 里的模板填。
-
App Privacy 表(App Store Connect → App Privacy)。Apple 32 个数据类目逐项过:
Identifiers → 用 Crashlytics / Adjust / AppsFlyer 必须勾 Usage Data → 用 Firebase Analytics / Mixpanel 必须勾 Diagnostics → 几乎所有用 Sentry / Crashlytics 都勾 Contact Info → 收邮件 / 手机号才勾 Health & Fitness → 用 HealthKit 才勾 ...每勾一项还要选:Linked to User / Not Linked / Used for Tracking。
第三方 SDK 也算你收集——核对
Podfile/Package.swift,每个 SDK 都查它的 Privacy Manifest:# Xcode 15+ 检查所有依赖的 PrivacyInfo.xcprivacy find . -name "PrivacyInfo.xcprivacy" -exec cat \{\} \; -
截图(iPhone 6.7” / 6.5” / 5.5” + iPad 12.9” if iPad)。规格:
iPhone 6.7" / 6.9":1290x2796 或 1320x2868 (iPhone 16 Pro Max) iPhone 6.5":1242x2688 (iPhone 11 Pro Max) iPhone 5.5":1242x2208 (iPhone 8 Plus) iPad Pro 12.9":2048x2732推荐用 Fastlane snapshot 自动跑:
gem install fastlane fastlane snapshot init # 在 SnapfileUITests/SnapshotHelper.swift 写 UI test fastlane snapshot --devices "iPhone 16 Pro Max,iPad Pro 13-inch (M4)"截图加文字 caption / mock 设备框用 AppLaunchpad 或 Figma 模板,但 App 界面部分必须是真实运行的 build。
-
写 App 名 / 副标题 / 关键词——详细规则看 App Store 展示页文案,核对关键格式:
App Name: ≤30 char Subtitle: ≤30 char Keywords: ≤100 char, comma-separated, no spaces 例: habit,streak,daily,routine,morning,evening,ritual,offline Description: ≤4000 char What's New: ≤4000 char -
年龄分级(Age Rating)——App Store Connect → App Information → Age Rating → “Edit”。Apple 给 14 个问题,按 App 真实内容选:
Cartoon or Fantasy Violence → None / Infrequent / Frequent Realistic Violence → ... Profanity → ... Sexual Content → ... Gambling → ...(哪怕只是骰子小游戏也得勾 Simulated Gambling) Unrestricted Web Access → 如果 App 内含 WebView 能浏览任意 URL,必须勾做错最常见在 “Unrestricted Web Access”——用了 WKWebView 加载外部链接就要勾,不勾会被拒。
-
IAP 必须先配再提交。App Store Connect → 你的 App → Features → In-App Purchases → ”+”:
Type: - Consumable 一次性消耗品(金币 / 道具) - Non-Consumable 一次性永久解锁("去广告") - Auto-Renewable Subscription 月 / 年订阅 - Non-Renewing Subscription 定期但不自动续费 Reference Name: 内部用,例 "Pro Monthly" Product ID: 代码引用,建议 com.yoursite.appname.pro_monthly Price Tier: Tier 1 ($0.99) → Tier 87 ($999.99) Display Name: 用户看到的,例 "Pocket Habits Pro" Description: 用户看到的,≤45 char建议截图准备好:IAP screenshot(订阅卖点页)必须上传。然后在 Xcode 里:
// StoreKit 2 用法 let products = try await Product.products(for: ["com.yoursite.app.pro_monthly"]) -
TestFlight 真用户测试。App Store Connect → TestFlight → Internal / External Testing:
Internal: 只能加 100 个 App Store Connect 团队成员,build 上传就能立刻测 External: 最多 10,000 邀请用户,第一个 build 需要 Apple 审核(24-48h) 操作: 1. Xcode → Product → Archive → Distribute App → App Store Connect → Upload 2. 等 build 处理完(10-30 分钟) 3. TestFlight → 选这个 build → Add External Testers → 邀请邮件 4. 拿到至少 5 个真实用户反馈 + 0 crash 才能进下一步修完明显问题再考虑提审。
-
提审前最后一遍清单:
- [ ] App 图标在 1024x1024 / 60x60 都清晰可辨 - [ ] 启动屏(Launch Screen)不是空白也不是占位 - [ ] grep 没有残留的 print() / NSLog / TODO / 开发用 debug 菜单 - [ ] grep 没有 "test@example.com" / "lorem ipsum" - [ ] About 页 / Settings 页 / Help 页所有链接 curl 通 - [ ] 删 App → 重装 → 走完冷启动全流程无 crash - [ ] 审核账号已在 App Review Information 填好,且账号已登录测试设备验证可用 - [ ] App Store Connect 里所有红色 "Required" 标都已变绿# 一键过 grep 检查 grep -rE "TODO|print\\(|NSLog|test@example|lorem" --include="*.swift" --include="*.m" --include="*.mm" .
容易踩的坑
- 隐私政策挂在个人邮箱或免费二级域名。Apple 要稳定的,用自己域名。
- 觉得”我不收集数据”就跳过 App Privacy。用了 Firebase Analytics、Sentry 之类都算收集。
- IAP 没在 TestFlight 沙盒测就提交。IAP bug 一定会被审核抓到,浪费一整轮。
- 截图展示了你 App 根本没有的功能。这是 2.3.3 条款常见拒审。
- 虚构评论、虚构用户数、写”曾被某媒体报道”但无法证实。
- App 名包含别人的商标。Apple 法务环节会抓。
这篇适合谁
第一次上 iOS 的独立开发者,想压缩准备工作、避免低级拒审。
这篇不适合谁
已经有成熟发布流程的大团队——这些基本都做过了,看拒审原因那篇更有用。
FAQ
- 第一次提审一般多久: 2026 年中位审核时间 24-48 小时,但第一次提审经常第一天就被打回 Metadata Rejected,重新计时。预留一周。
- 要 LLC 才能发布吗: 不用。个人 Apple Developer 账号就能发布。开 LLC 是为责任或品牌,不是要求。
- 用品牌名但没注册商标可以吗: 可以,但有商标冲突时 Apple 可能要你证明所有权。先在 USPTO 数据库搜一下。
- App 主要是网页套壳怎么办: 认真读 4.2 条。没原生价值的纯套壳会被拒。加点真原生功能(推送、离线、分享 extension),否则准备被拒。
相关阅读
- App Store 审核常见问题
- App 隐私政策要准备什么
- TestFlight 是什么
- App Store Listing Prompt:标题、副标题、截图文案
- 用 AI 写能转化的 App Store 上架文案
标签: #独立开发 #App Store #App 上线 #入门