博客 · · 指南

iOS App 上架流程:用 Claude Code 完成(2026)

从写好的 Xcode 项目到 App Store 上的新版本,中间大部分工作都可以交给 Claude Code。这篇按上架顺序走一遍:每一步让 Agent 做什么、哪些得你自己来、中国大陆区要多准备什么,规则都附上 Apple 官方页面。

适合已经有 Xcode 项目、在终端里用 Claude Code 的开发者。命令换成其他能执行 shell 命令的编程 Agent 也一样。文中 Apple 的要求以 2026 年 10 月为准,每一节都附了官方页面,上架前请再核对一次。

第 3 到第 7 步各有两种做法:手动,以及用 SwiftSales:它让 Claude Code 在你的 Mac 上用你自己的密钥调用 App Store Connect API,设置方法见文末的设置 SwiftSales。

上架流程一览

  1. 开发者账号、协议、App 记录(只做一次)
  2. 让 Claude Code 归档、导出构建
  3. 上传构建,等 Apple 处理完
  4. TestFlight 测试
  5. 填写商店页面:文字、截图、隐私、分级
  6. 提交审核
  7. 发布:手动、自动、定时或分阶段

在中国大陆区上架,还要在第 1 步之后准备 ICP 备案号,见下一节。

第 1 步:开发者账号和 App 记录

  • Apple Developer Program。 会费 99 美元一年,注册时按所在地区的当地货币显示价格。可以个人身份注册,开发商名称显示你的法定姓名;也可以公司身份注册,需要邓白氏编码(D-U-N-S)和一个与公司相关、能正常访问的网站。
  • 签署协议。 账户持有人要在 App Store Connect 的“商务”中签署最新协议,否则无法添加 App。收费 App 或 App 内购买项目还需要付费 App 协议。
  • Xcode 26 或更高版本。 自 2026 年 4 月 28 日起,上传到 App Store Connect 的 App 必须用 Xcode 26 或更高版本、iOS 26 SDK 构建。下一次调整会公布在 Apple 的即将实施的要求页面。
  • App 记录。 在 App Store Connect 的“App”中点添加按钮(+)›“新建 App”,填写平台、名称、主要语言、套装 ID 和 SKU。Apple 的 API 不提供这一步,需要账户持有人、“管理”或“App 管理”职能的成员在网页上做一次。
  • App Store Connect API 密钥:让 Claude Code 在命令行上传时需要。怎么创建、Issuer ID 在哪、选哪个职能,见 App Store Connect API 密钥怎么创建。

中国大陆区要多准备什么

只有在“价格与销售范围”里选择了中国大陆,下面这些才和你有关。

ICP 备案号。 工业和信息化部 2023 年发布《关于开展移动互联网应用程序备案工作的通知》,要求在境内提供互联网信息服务的 App 先备案,再开展业务;存量 App 的集中备案期是 2023 年 9 月到 2024 年 3 月。备案由 App 主办者向住所所在地的省级通信管理局办理,通过网络接入服务提供者或分发平台在线提交,材料齐全准确的,通信管理局在 20 个工作日内备案并发放备案号。

拿到备案号后,填在 App Store Connect 的“App 信息”页面。Apple 要求这里的 ICP 编号和元数据与工信部的备案信息一致:有简体中文本地化时以简体中文为准,没有时以主要语言为准。备案号验证通过后会显示在 App 的产品页上。

其他许可。 Apple 同时列出:游戏需要网络游戏出版物号;图书和报刊杂志类需要《网络出版服务许可证》;宗教内容需要《互联网宗教信息服务许可证》;新闻类需要《互联网新闻信息服务许可证》。详见 Apple 的 App 信息说明。

软著呢? Apple 在 App Store Connect 里列出的中国大陆额外材料,就是上面这些,其中没有计算机软件著作权登记证书。

第 2 步:让 Claude Code 归档和导出

App Store 构建就是用 app-store-connect 方式导出的归档。App Store Connect 收不收,看两个号:

  • 版本号(MARKETING_VERSION,即 CFBundleShortVersionString),比如 1.4,要高于已上架的版本。
  • 构建号(CURRENT_PROJECT_VERSION,即 CFBundleVersion),比如 42,要高于这个版本以前上传过的所有构建。

让 Agent 从项目里读出来,而不是猜。可以直接这样说:

帮我把这个 App 归档并导出,用于上传 App Store Connect。
1. 运行 `xcodebuild -list` 找到 App 的 scheme,再用
   `xcodebuild -showBuildSettings -scheme <scheme> -configuration Release`
   告诉我团队、套装 ID、版本号和构建号。
2. 把 CURRENT_PROJECT_VERSION 加一,告诉我新的构建号。
   不要改团队、签名方式、证书或描述文件;签名出错就停下来把错误给我看。
3. 归档:xcodebuild archive -scheme <scheme> -configuration Release
   -destination 'generic/platform=iOS' -archivePath build/App.xcarchive
4. 写 build/ExportOptions.plist(method 为 app-store-connect,填我的团队 ID
   和项目的签名方式),再用 xcodebuild -exportArchive 导出到 build/export。
5. 告诉我 .ipa 的路径。

Agent 写出的导出选项大致是这样:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>method</key><string>app-store-connect</string>
    <key>destination</key><string>export</string>
    <key>teamID</key><string>ABCDE12345</string>
    <key>signingStyle</key><string>automatic</string>
</dict>
</plist>

用自动签名时,归档和导出命令都加上 -allowProvisioningUpdates,让 Xcode 自己创建或更新描述文件。签名相关的改动最好由你决定:Agent 为了“修好”签名错误去换团队或描述文件,事后很难收拾。

加密声明。 如果 App 不用加密,或只用系统自带的加密(比如通过 URLSession 走 HTTPS),在 Info.plist 里加上 ITSAppUsesNonExemptEncryption,值为 NO。不加的话,每个新版本 App Store Connect 都会再问一遍出口合规问题。

第 3 步:上传构建

Apple 支持几种上传方式:

  • Xcode 的 Organizer:窗口 › Organizer,选中归档,点 Distribute App。人在电脑前时最省事。
  • Transporter:Apple 免费的 Mac App,把导出的 .ipa 拖进去即可。
  • 命令行,也就是 Claude Code 能替你跑的方式。altool 可以用 API 密钥认证:把密钥文件放到 ~/.appstoreconnect/private_keys/AuthKey_<Key ID>.p8(altool 会在这个文件夹里找),再运行:
xcrun altool --upload-app -f build/export/App.ipa -t ios \
  --api-key <Key ID> --api-issuer <Issuer ID>

不同 Xcode 版本的参数以 xcrun altool --help 为准。也可以在导出时直接上传:导出选项里的 destination 改成 upload,再给 xcodebuild -exportArchive 加上 -authenticationKeyPath、-authenticationKeyID 和 -authenticationKeyIssuerID。

.p8 文件不要放进代码仓库。Apple 明确建议不要把密钥存进代码库,而 Agent 能读到你项目里的每一个文件。

上传后 Apple 要先处理构建,处理完才会出现在 App Store Connect 里,并给你发邮件。各平台支持的 Xcode 版本见上传构建版本。

用 SwiftSales

输入 ship 提示词,后面跟上 App 名称和版本号:

/mcp__swiftsales__ship Tallytide 1.3

Claude Code 会像第 2 步那样归档、导出,导出到项目以外的一个构建文件夹,然后调用 upload_build。上传由你 Mac 上的 SwiftSales 用你的密钥完成,Agent 工作的目录里用不着放任何密钥文件。Apple 处理构建期间,Agent 用 build_upload_status 跟进,处理完会告诉你。

上传需要“准备”级别。第一次上传时,SwiftSales 会请你选好这个构建文件夹;以后放在里面的构建直接上传,不再询问。上传过程中请让 SwiftSales 保持打开。

SwiftSales 询问:允许 SwiftSales 读取这个文件夹里的构建?构建 Tallytide.ipa 1.3 (42),位置 /Users/mara/BuildsSwiftSales 询问:允许 SwiftSales 读取这个文件夹里的构建?构建 Tallytide.ipa 1.3 (42),位置 /Users/mara/BuildsSwiftSales 询问:允许 SwiftSales 读取这个文件夹里的构建?构建 Tallytide.ipa 1.3 (42),位置 /Users/mara/BuildsSwiftSales 询问:允许 SwiftSales 读取这个文件夹里的构建?构建 Tallytide.ipa 1.3 (42),位置 /Users/mara/Builds
第一次上传:选择构建文件夹(演示数据)

第 4 步:TestFlight 测试

  • 内部测试员:最多 100 位有内容访问权限的 App Store Connect 用户,不需要经过 TestFlight App 审核。
  • 外部测试员:最多 10,000 人,通过邮件或公开链接邀请。第一次给外部群组的构建要经过 TestFlight App 审核,同一版本之后的构建可能不需要完整审核;24 小时内最多提交 6 个构建送审。
  • 测试内容(What to Test):每个构建给测试员的一段说明,可以让 Claude Code 根据提交记录来写。
  • 公开链接可以设置 1 到 10,000 的人数上限,也可以按设备或平台筛选谁能加入。
  • 构建最长可供测试 90 天。

详见 Apple 的 TestFlight 概览。

用 SwiftSales

把 Tallytide 1.3 (42) 分发给 Friends & Family 群组,
根据 1.2 以来的提交记录写好测试内容。

Claude Code 用 distribute_build 把构建分给群组,用 set_what_to_test 写测试内容。manage_beta_group 可以新建群组、打开或关闭公开链接,beta_feedback 读取测试员发来的截图和崩溃报告。内部群组会马上拿到构建;外部群组要先经过 TestFlight App 审核,所以 SwiftSales 会先问你。

SwiftSales 请你批准:Claude Code 想把 Tallytide 1.3 (42) 分发给外部测试员,测试群组 Friends & Family,TestFlight 审核:提交审核SwiftSales 请你批准:Claude Code 想把 Tallytide 1.3 (42) 分发给外部测试员,测试群组 Friends & Family,TestFlight 审核:提交审核SwiftSales 请你批准:Claude Code 想把 Tallytide 1.3 (42) 分发给外部测试员,测试群组 Friends & Family,TestFlight 审核:提交审核SwiftSales 请你批准:Claude Code 想把 Tallytide 1.3 (42) 分发给外部测试员,测试群组 Friends & Family,TestFlight 审核:提交审核
把构建分发给外部测试员(演示数据)

第 5 步:填写商店页面

页面上大部分是文字,Claude Code 可以按 App 支持的每种语言起草。Apple 的长度限制:

字段 限制
名称 2 到 30 个字符
副标题 30 个字符
关键词 100 字节
推广文本 170 个字符,不用发新版本就能改
描述 4,000 个字符,纯文本
此版本的新增内容 4,000 个字符

关键词按字节算:一个汉字占 3 个字节,100 字节大约只能放 33 个汉字,比英文紧得多。App 名称和公司名本来就能被搜到,不用再写进关键词;也不能写其他 App 或公司的名字。

截图。 每种尺寸最多 10 张,JPEG 或 PNG,不能有透明通道。截至 2026 年 10 月,Apple 的截屏规范列为必需的有:

设备 要求 竖屏像素
配备灵动岛的 iPhone(中等显示屏) 至少 1 张 1206 × 2622 或 1179 × 2556
搭载面容 ID 的 iPhone(大显示屏) 没有上传配备灵动岛的 iPhone(大显示屏)截屏时(1320 × 2868、1290 × 2796 或 1260 × 2736) 1284 × 2778 或 1242 × 2688
iPad 13 英寸显示屏 App 支持 iPad 时 2064 × 2752 或 2048 × 2732

界面在各尺寸上一致时,App Store Connect 会把截图缩放到更小的尺寸。Apple 还宣布,从 2027 年 4 月起,用 iOS 27.1 或更高版本 SDK 构建的 App 需要提供 iPhone Duo 截图。尺寸会随新设备变化,截图前请先看一眼规范页面。

其他必填项:隐私政策网址(iOS App 必填)、“App 隐私”里关于数据收集的问答、年龄分级问卷、类别和审核备注。App 需要登录的话,请在备注里给审核人员一个能用的演示账号。

用 SwiftSales

用构建 42 准备 Tallytide 1.3,审核通过后自动分阶段发布。
根据 1.2 以来的改动为每种语言写好新增内容,再告诉我还缺什么。

prepare_release 会在 SwiftSales 里建一份发布草稿。新增内容(set_whats_new),描述、关键词和推广文本(set_metadata),名称、副标题和隐私政策网址(set_app_info),以及类别和年龄分级,都先写进这份草稿,不动 App Store Connect。截图分两步:upload_media 把文件上传到 App Store Connect 里这个 App 的素材中(需要“准备”级别),place_media 在草稿里按设备尺寸排好顺序。check_readiness 列出还缺什么;像“App 隐私”问答这种要你自己在 App Store Connect 里确认的项目,会附上链接。

整份草稿可以在 Mac 上的 SwiftSales 里看。确认无误后,apply_release 把它写进 App Store Connect 里的这个版本。这一步需要“准备”级别,此时还没有任何东西提交给审核。

SwiftSales 中 Tallytide 1.3 的发布草稿:就绪检查除 App 隐私(需在 App Store Connect 中确认)外均已通过;1 项修改还没有写入 App Store Connect;版本 1.3,构建 1.3 (42),审核通过后自动发布,分阶段发布已开SwiftSales 中 Tallytide 1.3 的发布草稿:就绪检查除 App 隐私(需在 App Store Connect 中确认)外均已通过;1 项修改还没有写入 App Store Connect;版本 1.3,构建 1.3 (42),审核通过后自动发布,分阶段发布已开SwiftSales 中 Tallytide 1.3 的发布草稿:就绪检查除 App 隐私(需在 App Store Connect 中确认)外均已通过;1 项修改还没有写入 App Store Connect;版本 1.3,构建 1.3 (42),审核通过后自动发布,分阶段发布已开SwiftSales 中 Tallytide 1.3 的发布草稿:就绪检查除 App 隐私(需在 App Store Connect 中确认)外均已通过;1 项修改还没有写入 App Store Connect;版本 1.3,构建 1.3 (42),审核通过后自动发布,分阶段发布已开
Mac 上 SwiftSales 里的发布草稿(演示数据)

第 6 步:提交审核

在版本页面选好构建,点“添加以供审核”,再点“提交以供审核”。App 内活动等项目可以放进同一次提交。

审核要多久? Apple 官方的说法是:通常至少 50% 的提交在 24 小时内审核完,90% 在 48 小时内。遇到严重 bug 修复或与活动时间挂钩的发布,可以申请加急审核。

新 App 最常遇到的被拒原因:

  • 2.1 App 完整性。 Apple 说超过 40% 未解决的问题属于这一条:崩溃、占位内容、失效链接、没给演示账号。
  • 5.1.1 数据收集和存储。 只要必要的数据,说清楚为什么要权限;App 里能注册账号,就要能在 App 里删除账号。
  • 4.3 垃圾 App。 同一个 App 的多个近似版本,或在已经很拥挤的类别里差异很小的模板 App。

第一次提交前,建议完整读一遍 App 审核指南。

用 SwiftSales

把 Tallytide 1.3 提交审核。

submit_for_review 每次都要等你批准。SwiftSales 会在菜单栏和窗口里弹出一张卡片,列清楚会改动什么:版本和状态、构建、发布方式、每种语言的新增内容和审核信息。你可以批准(有 Touch ID 的 Mac 用 Touch ID),也可以拒绝。请求默认 10 分钟后过期,可以在设置 › Agent 接入 › 批准有效期里选 5、10 或 30 分钟;卡片出现后草稿又被改过的,这张卡就不能再批准。

Mac 上的 SwiftSales 请你批准:Claude Code 想要提审 Tallytide 1.3 (42)Mac 上的 SwiftSales 请你批准:Claude Code 想要提审 Tallytide 1.3 (42)Mac 上的 SwiftSales 请你批准:Claude Code 想要提审 Tallytide 1.3 (42)Mac 上的 SwiftSales 请你批准:Claude Code 想要提审 Tallytide 1.3 (42)
提交审核(演示数据)

被拒了怎么办

手动处理。 在 App Store Connect 里打开这个 App,在“App 审核”里看审核人员的消息,改好问题后在那里回复,再重新提交这个版本。

用 SwiftSales。 release_status 和发布草稿都会显示被拒,并附上 App 在 App Store Connect 里的链接。Apple 的 API 拿不到审核人员的消息,所以请把消息原文复制给 Claude Code:

Tallytide 1.3 被拒了,审核人员的消息如下:
<粘贴消息>
帮我起草回复,并列出要改什么。

draft_review_reply 会找出消息里提到的审核指南条款并附上链接,给出修改清单,每一项都写明用哪个 SwiftSales 工具来改(比如审核备注用 set_review_details,新构建用 upload_build),再给一份回复模板,方括号里的部分由你补上。它不会改动任何东西。回复由你读过后,自己在 App Store Connect 里发送。改完之后,submit_for_review 把这个版本重新送审,同样要你在 SwiftSales 里批准。

SwiftSales 请你批准:Claude Code 想要提审 Tallytide 1.3 (42),版本 1.3 由被拒绝变为等待审核SwiftSales 请你批准:Claude Code 想要提审 Tallytide 1.3 (42),版本 1.3 由被拒绝变为等待审核SwiftSales 请你批准:Claude Code 想要提审 Tallytide 1.3 (42),版本 1.3 由被拒绝变为等待审核SwiftSales 请你批准:Claude Code 想要提审 Tallytide 1.3 (42),版本 1.3 由被拒绝变为等待审核
被拒后重新提交(演示数据)

第 7 步:发布

提交前就选好发布方式:

  • 手动发布此版本:审核通过、状态变成“等待开发者发布”后,由你点发布。发布后最长可能要 24 小时才会出现在 App Store 上。
  • 自动发布此版本:一通过审核就上线。
  • 在 App 审核后自动发布此版本,时间不早于你设定的日期和时间。

版本更新还可以分阶段发布:7 天内,开启自动更新的用户依次有 1%、2%、5%、10%、20%、50%、100% 收到更新。期间任何人都能手动下载,分阶段发布最多可暂停 30 天。详见分阶段发布版本更新。

用 SwiftSales

发布方式写在第 5 步的发布草稿里,提审卡片上就能看到,批准前心里有数。选了手动发布的话,准备好了就说:

现在发布 Tallytide 1.3。

release_now 和每一次发布一样,要你批准。分阶段发布期间,phased_release 可以暂停、继续,或者一次发给所有用户,每一步也都要你批准。过几天,sales_since_release 会把发布以来的销售和发布前同样天数的销售放在一起比较。

SwiftSales 请你批准:Claude Code 想要立即发布 Tallytide 1.3,版本状态由等待开发者发布变为正在处理以供分发SwiftSales 请你批准:Claude Code 想要立即发布 Tallytide 1.3,版本状态由等待开发者发布变为正在处理以供分发SwiftSales 请你批准:Claude Code 想要立即发布 Tallytide 1.3,版本状态由等待开发者发布变为正在处理以供分发SwiftSales 请你批准:Claude Code 想要立即发布 Tallytide 1.3,版本状态由等待开发者发布变为正在处理以供分发
立即发布审核通过的版本(演示数据)

设置 SwiftSales

SwiftSales 在你的 Mac 上运行一个 App Store Connect MCP 服务器。Claude Code 调用它的工具,SwiftSales 用你团队的密钥向 App Store Connect 发请求,Agent 看不到密钥。

  1. 在 Mac 上安装 SwiftSales(macOS 26 或更高版本),添加团队的 API 密钥。Agent 接入包含在永久高级版和 7 天免费试用里。发布相关的工作需要“App 管理”角色;用哪把密钥、选哪个职能,见 App Store Connect API 密钥怎么创建。
  2. 打开 Agent 接入:SwiftSales › 设置 › Agent 接入,用它帮你复制的命令把 SwiftSales 加进 Claude Code。完整步骤见连接 Agent。
  3. 选好 Agent 的级别。 默认是“只读”,按你想让它做到哪一步来调高:
步骤 工具 级别和批准
3. 上传 upload_build、build_upload_status 准备;只在第一次选构建文件夹时问
4. TestFlight distribute_build、set_what_to_test 准备;外部群组需要提审级别和你的批准
5. 商店页面 prepare_release、set_whats_new、check_readiness 起草
5. 截图、写入 upload_media、apply_release 准备
6. 提交审核 submit_for_review 提审;每次都问
6. 被拒 release_status、draft_review_reply 只读;回复由你发送
7. 发布 release_now、phased_release 提审;每次都问

想让“准备”级别的每一步也先问你,就给这个 Agent 打开“批准所有 App Store Connect 修改”。在 Claude Code 里输入 /,选 swiftsales:ship,或者直接输入 /mcp__swiftsales__ship。还没连接之前,也可以先在演示模式里用示例数据看看每个界面。

上架清单

  1. 开发者账号有效,协议已签,App 记录已建。
  2. 上架中国大陆区:ICP 备案号已填,和备案信息一致。
  3. 版本号高于线上版本,构建号高于这个版本之前的所有构建。
  4. 用 Xcode 26 或更高版本构建,已设置 ITSAppUsesNonExemptEncryption。
  5. 构建已上传、处理完成,并在 TestFlight 里测过。
  6. 每种语言的名称、副标题、关键词、描述和新增内容。
  7. 必需的截图、隐私政策网址、App 隐私问答、年龄分级。
  8. 审核备注;需要登录的 App 附上演示账号。
  9. 选好发布方式:手动、自动、定时或分阶段。
SwiftSales让你的 Agent 帮你发布 App。
  • 让 Agent 把 App 发上去Claude Code、Codex、Cursor、Claude 或 Xcode 通过你 Mac 上的 SwiftSales 上传构建、安排 TestFlight、填写商店页面并提交审核。
  • 销售数据一眼看清iPhone、iPad 和 Mac 上的仪表盘,主屏幕和锁定屏幕小组件,Mac 菜单栏,每天一条通知。
  • 你的密钥,你来批准团队密钥保存在你的钥匙串里,Agent 看不到。提交审核和发布都要你在 Mac 上批准。
  • 直接来自 Apple报表从 Apple 直接到你的设备和你自己的 iCloud,我们的服务器看不到它们。你连接的 Agent 只能读取你允许的数据,并交给它所用的 AI 服务。

免费下载 · 7 天免费试用 · 永久高级版 US$9.99

一次购买,无需订阅。支持家人共享。