独立开发者上线 App 前要准备什么

2026 年独立 iOS 开发者上线前的真实 checklist:法务、技术、内容三块准备,避免第一次提审就翻车。

独立开发者第一次提审被拒的比例高得吓人——不是因为标准多高,是因为准备清单很长,大多数人漏掉一半。这篇按”先卡哪一关”的顺序把真实清单列清楚。

问题背景

Apple 审核是规则驱动的,不是感觉驱动的。大部分拒审不是”你 App 烂”,是”你某个东西没配好”。独立开发者收益最大的操作就是把每一条都做完再第一次提交——花一轮审核而不是四轮。这份清单讲的是”点提交按钮之前要做什么”,不讲”怎么做出好 App”。

判断标准

  • 你已经有一个能在真机上跑的 build。
  • 你已经有 Apple Developer 账号($99/年那个,不是只装 Xcode)。
  • 在任何对外发布承诺前还有至少 5 天 buffer。
  • 基本法务实体已经搞清楚(或者就以个人身份发布)。

实操步骤

  1. 创建 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 这种自描述。
  2. 挂隐私政策到固定 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 隐私政策清单 里的模板填。

  3. 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 \{\} \;
  4. 截图(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。

  5. 写 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
  6. 年龄分级(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 加载外部链接就要勾,不勾会被拒。

  7. 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"])
  8. 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 才能进下一步

    修完明显问题再考虑提审。

  9. 提审前最后一遍清单

    - [ ] 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 上线 #入门