前言
将 iOS 应用发布到 App Store 是应用开发的最后一公里,也是让全球用户使用你的应用的必经之路。App Store 拥有超过 10 亿活跃用户,是 iOS 应用分发的唯一官方渠道。
本文将详细介绍从准备工作到成功上架的完整流程,包括 TestFlight 测试分发、内购配置、App Clip 等高级功能,帮助你顺利完成应用上架。
整体流程概览:
- 注册 Apple Developer Program
- 准备应用素材和项目配置
- 在 App Store Connect 创建应用记录
- 使用 TestFlight 进行测试分发
- 配置内购和 App Clip(如需要)
- 使用 Xcode 打包并上传应用
- 提交审核并等待结果
- 发布应用并进行后续管理
准备工作
Apple Developer Program 账户
要在 App Store 发布应用,必须加入 Apple Developer Program。Apple 提供两种账户类型:
| 对比项 | 个人账户 | 组织账户 |
|---|---|---|
| 年费 | 99 美元 | 99 美元 |
| 发布者名称 | 个人姓名 | 公司/组织名称 |
| 团队成员 | 仅自己 | 可添加多人 |
| 申请要求 | Apple ID | Apple ID + D-U-N-S 编号 |
| 审核周期 | 即时 | 1-2 周 |
| 适用场景 | 独立开发者 | 公司/团队开发 |
企业账户(Enterprise Program):年费 299 美元,用于企业内部应用分发,不在 App Store 上架。
注册流程:
- 访问 Apple Developer Program 官网
- 使用 Apple ID 登录(建议使用专用的开发者账号)
- 选择账户类型(个人或组织)
- 填写个人/组织信息
- 完成付款(支持信用卡/借记卡)
- 等待审核通过(个人即时,组织需 1-2 周)
项目配置检查
在上传应用前,确保 Xcode 项目配置正确:
Bundle ID 设置:
- 格式:反向域名,如
com.yourcompany.appname - 必须全局唯一,一旦设置不可更改
- 在 Xcode 中通过
Signing & Capabilities配置
版本号规范:
- Version(CFBundleShortVersionString):面向用户的版本号,如
1.0.0 - Build(CFBundleVersion):内部构建号,如
1、100、2024.12.25 - 每次上传到 App Store Connect,Build 号必须递增
签名与证书:
- 确保使用 Distribution 证书(非 Development)
- Provisioning Profile 类型必须是 App Store
- 建议开启 Automatically manage signing 简化配置
应用素材准备
App 图标规格:
| 尺寸 | 用途 |
|---|---|
| 1024 x 1024 px | App Store 展示 |
| 180 x 180 px | iPhone (@3x) |
| 120 x 120 px | iPhone (@2x) |
| 167 x 167 px | iPad Pro |
| 152 x 152 px | iPad (@2x) |
注意:图标必须是不透明的(无 Alpha 通道),格式为 PNG。
截图尺寸要求:
| 设备 | 尺寸(像素) |
|---|---|
| 6.7 英寸(iPhone 15 Pro Max) | 1290 x 2796 |
| 6.5 英寸(iPhone 11 Pro Max) | 1242 x 2688 |
| 5.5 英寸(iPhone 8 Plus) | 1242 x 2208 |
| 12.9 英寸 iPad Pro | 2048 x 2732 |
必须提供的截图:
- 至少 6.5 英寸 iPhone 截图(最少 1 张,最多 10 张)
- 如果支持 iPad,需要 12.9 英寸截图
应用预览视频(可选):
- 时长:15-30 秒
- 格式:H.264、ProRes 422
- 分辨率:与截图相同
应用描述与关键词:
- 名称:最多 30 个字符
- 副标题:最多 30 个字符,简短描述应用功能
- 描述:最多 4000 个字符,详细介绍应用
- 关键词:最多 100 个字符,用逗号分隔
- What's New:版本更新说明
App Store Connect 配置
创建 App 记录
- 登录 App Store Connect
- 点击 My Apps → + → New App
- 填写基本信息:
- Platform:iOS
- Name:应用名称
- Primary Language:主要语言
- Bundle ID:选择已注册的 Bundle ID
- SKU:唯一标识符(内部使用)
- User Access:访问权限设置
应用信息填写
在 App Information 页面配置:
基本信息:
- Name:App Store 显示名称
- Subtitle:副标题
- Category:主分类和次分类
- Content Rights:版权信息
隐私政策:
- Privacy Policy URL:必填,指向隐私政策页面
- App Privacy:详细说明数据收集情况
年龄分级:
- 根据应用内容回答问卷
- 系统自动计算适用年龄
- 常见分级:4+、9+、12+、17+
版本信息配置
在 App Store 标签页配置版本信息:
截图与预览:
- 按设备尺寸上传截图
- 可添加应用预览视频
- 支持本地化(不同语言不同截图)
描述信息:
- Promotional Text:促销文字(可随时更新,无需审核)
- Description:应用描述
- Keywords:搜索关键词
- Support URL:支持链接
- Marketing URL:营销链接(可选)
What's New:
- 当前版本的更新说明
- 对用户可见,需认真填写
定价与销售范围
在 Pricing and Availability 页面配置:
价格等级:
| 等级 | 美元 | 人民币 |
|---|---|---|
| Free | $0 | 免费 |
| Tier 1 | $0.99 | ¥6 |
| Tier 2 | $1.99 | ¥12 |
| Tier 3 | $2.99 | ¥18 |
| Tier 10 | $9.99 | ¥68 |
| Tier 50 | $49.99 | ¥348 |
销售地区:
- 默认全球可用
- 可选择特定国家/地区
- 可设置预购和发布日期
TestFlight 测试分发
TestFlight 是 Apple 官方的 Beta 测试平台,允许在正式上架前分发测试版本。
TestFlight 简介
主要特点:
- 支持 iOS、iPadOS、macOS、tvOS、watchOS
- 测试员通过 TestFlight App 安装测试版
- 自动收集崩溃日志和反馈
- 测试版有效期 90 天
内部测试
内部测试员是 App Store Connect 团队成员:
配置步骤:
- 在 App Store Connect 中进入应用
- 选择 TestFlight 标签
- 点击 Internal Testing → +
- 创建测试组并添加成员
- 上传构建版本后自动分发
限制:
- 最多 100 名内部测试员
- 无需 Beta 版审核
- 构建上传后即可测试
外部测试
外部测试员不需要是团队成员:
配置步骤:
- 在 TestFlight 中创建 External Testing 组
- 添加测试员邮箱或使用公开链接
- 选择要分发的构建版本
- 提交 Beta 版审核(首次或重大更新时)
- 审核通过后测试员收到邀请
限制:
- 每个应用最多 10,000 名外部测试员
- 需要通过 Beta 版审核
- 可创建公开链接(无需邮箱邀请)
测试反馈收集
自动收集:
- 崩溃日志
- 能耗报告
- 设备信息
手动反馈:
- 测试员可在 TestFlight App 中提交反馈
- 包含截图和文字描述
- 开发者在 App Store Connect 查看
In-App Purchase 配置
如果应用需要内购功能,需要在 App Store Connect 中配置。
内购类型说明
| 类型 | 说明 | 示例 |
|---|---|---|
| 消耗型(Consumable) | 使用后消耗,可重复购买 | 游戏金币、道具 |
| 非消耗型(Non-Consumable) | 一次购买,永久有效 | 去除广告、完整版解锁 |
| 自动续订订阅(Auto-Renewable) | 定期自动扣费 | 会员订阅、杂志 |
| 非续订订阅(Non-Renewing) | 固定期限,手动续订 | 季度通行证 |
创建内购项目
- 在 App Store Connect 中进入应用
- 选择 Features → In-App Purchases
- 点击 + 创建新项目
- 填写信息:
- Reference Name:内部名称
- Product ID:唯一标识符,如
com.app.coins100 - Pricing:选择价格等级
- Localization:显示名称和描述
定价与本地化
- 选择基准价格,系统自动计算各地区价格
- 可手动调整特定地区价格
- 添加多语言显示名称和描述
- 上传审核用截图(展示购买界面)
服务端验证
推荐使用服务端验证防止盗版:
验证流程:
1. 用户完成购买 → App 获得 Receipt
2. App 发送 Receipt 到自己的服务器
3. 服务器调用 Apple 验证 API
4. 验证通过后发放权益
App Store Server API:
- 生产环境:
https://buy.itunes.apple.com/verifyReceipt - 沙盒环境:
https://sandbox.itunes.apple.com/verifyReceipt
沙盒测试
- 在 App Store Connect 创建 Sandbox Tester 账户
- 在测试设备上登录沙盒账户
- 使用 Development 或 TestFlight 版本测试
- 沙盒环境不产生真实扣费
App Clip 配置
App Clip 是轻量级应用体验,用户无需下载完整应用即可使用部分功能。
App Clip 简介与使用场景
特点:
- 大小限制 15MB(iOS 16+)或 10MB(iOS 15 及以下)
- 通过扫码、NFC、链接等方式触发
- 可引导用户下载完整应用
适用场景:
- 餐厅点餐
- 共享单车解锁
- 停车缴费
- 商品购买
项目配置
创建 App Clip Target:
- 在 Xcode 中选择项目
- File → New → Target
- 选择 App Clip
- 配置 Bundle ID(主应用 Bundle ID +
.Clip)
共享代码:
- 使用 Framework 共享业务逻辑
- App Clip 和主应用可共享 App Group 数据
App Clip Code
App Clip Code 是 Apple 设计的视觉码,类似二维码:
- 在 App Store Connect 生成
- 支持 NFC 功能
- 可自定义颜色和样式
- 用于线下场景展示
体验 URL 配置
- 在 App Store Connect 中进入应用
- 选择 App Clip → App Clip Experiences
- 配置 URL:
- URL:触发 App Clip 的链接
- Action:显示的操作按钮
- Header Image:展示图片
审核要求
- App Clip 必须与主应用一起提交审核
- 功能必须聚焦单一任务
- 必须提供明确的完整应用下载入口
- 遵守所有 App Store 审核指南
Xcode 打包与上传
Archive 构建
- 连接真机或选择 Any iOS Device
- 菜单栏选择 Product → Archive
- 等待构建完成
- 构建成功后自动打开 Organizer
常见构建问题:
- 确保选择正确的 Team 和 Provisioning Profile
- 确保 Code Signing 配置正确
- 检查是否有编译警告和错误
证书与描述文件配置
证书类型:
| 类型 | 用途 |
|---|---|
| Apple Development | 开发和调试 |
| Apple Distribution | App Store 和 Ad Hoc 分发 |
描述文件类型:
| 类型 | 用途 |
|---|---|
| Development | 开发测试 |
| Ad Hoc | 指定设备分发 |
| App Store | App Store 和 TestFlight |
| Enterprise | 企业内部分发 |
使用 Xcode 上传
- 在 Organizer 中选择构建版本
- 点击 Distribute App
- 选择 App Store Connect
- 选择 Upload
- 配置选项:
- Include bitcode:建议开启
- Upload symbols:建议开启
- 等待上传完成
使用 Transporter 上传
Transporter 是 Apple 官方上传工具:
- 从 Mac App Store 下载 Transporter
- 在 Xcode 中导出
.ipa文件 - 将
.ipa拖入 Transporter - 登录 Apple ID 并上传
适用场景:
- CI/CD 自动化上传
- 上传失败时的备选方案
- 批量上传多个应用
上传问题排查
常见错误及解决方案:
| 错误 | 原因 | 解决方案 |
|---|---|---|
| Invalid Binary | 包含模拟器架构 | 在 Build Settings 中排除模拟器架构 |
| Missing Compliance | 加密合规声明缺失 | 在 Info.plist 添加 ITSAppUsesNonExemptEncryption |
| Invalid Provisioning Profile | 描述文件不匹配 | 重新生成 App Store 类型描述文件 |
| Icon Missing | 图标缺失或格式错误 | 检查 Assets.xcassets 中的图标 |
提交审核
审核前检查清单
提交前请确认以下事项:
- 应用在各种设备上正常运行
- 所有功能可正常使用
- 无明显 Bug 和崩溃
- 符合 App Store 审核指南
- 截图与实际功能一致
- 隐私政策链接有效
- 内购功能测试通过
- 第三方登录功能正常
- 无占位符文本或测试数据
提交流程
- 在 App Store Connect 中选择应用
- 进入 App Store 标签页
- 选择上传的构建版本
- 完善所有必填信息
- 回答出口合规和内容版权问题
- 点击 Submit for Review
加急审核申请
如遇紧急情况,可申请加急审核:
- 访问 Apple 加急审核请求
- 登录开发者账号
- 填写加急原因:
- 严重 Bug 修复
- 安全问题
- 时效性活动
注意:加急审核非保证通过,仅加快审核速度。
审核周期说明
| 审核类型 | 通常周期 |
|---|---|
| 首次提交 | 24-48 小时 |
| 版本更新 | 24 小时内 |
| 被拒后重新提交 | 24 小时内 |
| 加急审核 | 数小时内 |
审核流程详解
审核状态解读
| 状态 | 说明 |
|---|---|
| Waiting for Review | 等待审核 |
| In Review | 审核中 |
| Pending Developer Release | 审核通过,等待开发者发布 |
| Ready for Sale | 已上架 |
| Rejected | 被拒绝 |
| Metadata Rejected | 元数据被拒(仅需修改信息) |
| Developer Rejected | 开发者主动撤回 |
常见拒审原因
以下是最常见的拒审原因及解决方案:
| 类别 | 问题 | 解决方案 |
|---|---|---|
| 性能 | 应用崩溃 | 修复崩溃 Bug,进行充分测试 |
| 性能 | 加载速度过慢 | 优化性能,添加加载指示器 |
| 设计 | 功能过于简单 | 丰富功能,提供实质价值 |
| 设计 | 界面粗糙 | 遵循 HIG 设计规范 |
| 功能 | 使用私有 API | 移除私有 API 调用 |
| 功能 | 功能不完整 | 确保所有功能可用 |
| 元数据 | 截图与功能不符 | 更新截图反映真实功能 |
| 元数据 | 描述误导用户 | 准确描述应用功能 |
| 法律 | 侵犯版权 | 移除侵权内容 |
| 法律 | 缺少隐私政策 | 添加有效的隐私政策链接 |
| 内购 | 使用第三方支付 | 数字商品必须使用 Apple 内购 |
| 内购 | 内购功能无法使用 | 修复内购流程 |
| 登录 | 缺少 Apple 登录 | 支持第三方登录时需提供 Apple 登录 |
| 登录 | 需要登录才能使用基本功能 | 提供游客模式或延迟登录 |
| 内容 | 用户生成内容缺少管理 | 添加举报和过滤机制 |
申诉与沟通技巧
收到拒审通知后:
- 仔细阅读拒审原因和相关审核指南条款
- 理解问题:确保完全理解审核员的顾虑
- 解决问题:修改应用或提供解释
- 礼貌沟通:在 Resolution Center 回复
有效的申诉策略:
- 提供详细的功能说明和截图
- 解释业务场景和使用方式
- 附上相关法律文件或授权证明
- 保持专业和礼貌的态度
重新提交
修改后重新提交:
- 如果是 Metadata Rejected,只需修改元数据后回复
- 如果需要修改代码,上传新的构建版本
- 在 Resolution Center 说明修改内容
- 点击 Submit for Review
发布与后续管理
发布选项
手动发布:
- 审核通过后需手动点击发布
- 适合需要协调营销活动的场景
自动发布:
- 审核通过后立即自动上架
- 适合常规更新
分阶段发布:
- 逐步向用户推送更新(7 天内)
- 可监控崩溃率后再决定是否全量发布
- 可随时暂停或加速
版本更新流程
- 在 App Store Connect 创建新版本
- 填写版本号和 What's New
- 上传新的构建版本
- 更新截图(如有界面变化)
- 提交审核
用户评价管理
回复评价:
- 在 App Store Connect 中查看和回复
- 及时回复负面评价
- 表达感谢和改进意愿
请求评价:
- 使用
SKStoreReviewController请求评价 - 每年每个用户最多触发 3 次
- 选择合适时机(如完成任务后)
销售与下载数据分析
在 App Analytics 中查看:
- 展示次数:App Store 页面查看次数
- 下载量:首次下载和重新下载
- 销售额:按地区、时间段查看
- 留存率:用户回访情况
- 崩溃率:按版本和设备查看
常见问题排查
上传失败
网络问题:
- 检查网络连接稳定性
- 尝试切换网络环境
- 使用 Transporter 工具上传
验证失败:
- 检查 Bundle ID 是否匹配
- 确认证书和描述文件正确
- 验证 Info.plist 必填字段
证书问题
证书过期:
- 在 Apple Developer 网站更新证书
- 在 Xcode 中刷新 Provisioning Profile
证书不匹配:
- 确保使用 Distribution 证书
- 检查 Keychain 中的证书是否有效
审核被拒
- 仔细阅读拒审邮件中的具体原因
- 对照 App Store Review Guidelines 修改
- 在 Resolution Center 寻求澄清
- 必要时提供演示视频或测试账号
TestFlight 问题
测试员无法安装:
- 确认测试员邮箱正确
- 检查设备是否兼容
- 确认构建版本已分发
构建版本不可用:
- 检查是否已完成处理
- 确认 Export Compliance 信息
- 外部测试需通过 Beta 审核
内购问题
沙盒测试失败:
- 确认使用沙盒测试账户
- 检查内购项目状态是否为"Ready to Submit"
- 验证 Product ID 正确
审核时内购不可用:
- 确保内购项目已提交审核
- 提供清晰的购买流程截图
- 在 Review Notes 中说明测试方法
参考资料
文章标签
xinglei.wang
博主专注于技术、阅读与思考。在这里记录学习、思考与生活。
