将iOS/macOS应用上架至App Store

说明:本文面向 iOS / iPadOS / macOS(含非商店分发)开发者,聚焦 2025 年苹果在隐私、可访问性、功能完整性与打包/签名方面的最新要求。关键事实基于苹果官方文档与开发者指南整理。(Apple Developer)


一、上架前的核心准备(2025 年新规要点)

1. 开发者账号选择与资质准备

  • 个人账号 vs 企业(组织)账号选择

    • 个人账号:适合个人独立开发、无公司资质。某些功能(例如 Apple Business Manager 企业分发、企业证书、组织团队角色管理)需组织账号。

    • 企业账号(Company / Organization):推荐公司/工作室、需要多人协作、需要企业法人信息(公司注册号、营业执照等)与 D-U-N-S 编号。

  • 角色/权限:建议至少一个 Admin、一个 App Manager 与一个负责财务/税务的联系人(以便处理付款信息、税务表单)。

  • 法律/合规资料:若应用涉及医疗、金融、博彩等受监管行业,提前准备相应牌照/资质文件以便审核时上传或在"联系 Apple 审核"中提供。

    • 如果面向欧盟用户并打算使用替代商店/网站分发,需要关注"替代分发与 iOS/iPadOS/iPadOS notarization"相关政策(见下文)。(Apple Developer)

核对清单

  • 是否用组织账号(需 D-U-N-S)?

  • App Store Connect 中已配置团队成员及角色?

  • 如果属监管行业,已准备好资质扫描件?


2. 证书与描述文件配置(实操)

  • 推荐使用自动管理签名 (Xcode)用于日常开发,但生产发布时最好用手动管理以完全掌控 Provisioning profile 与证书过期周期。

  • 常用命令(生成 CSR,用于申请 Apple Developer 证书):

    生成私钥与 CSR(示例)

    openssl req -new -newkey rsa:2048 -nodes -keyout key.pem -out csr.pem
    -subj "/C=CN/ST=State/L=City/O=Organization/OU=OrgUnit/CN=yourname@example.com"

  • macOS / Developer ID / Notarization:macOS 独立分发时,除了 Developer ID 签名还需Notarize (苹果自动扫描),建议使用最新 Xcode 的 notarytool/Xcode UI 完成提交(官方文档详述如何 notarize)。(Apple Developer)

常用签名/打包命令

  • Xcode Archive(CI 常用):

    Archive & export via xcodebuild(适合 CI)

    xcodebuild -workspace MyApp.xcworkspace -scheme MyApp -configuration Release
    -archivePath ./build/MyApp.xcarchive archive

    xcodebuild -exportArchive -archivePath ./build/MyApp.xcarchive
    -exportOptionsPlist ./ExportOptions.plist -exportPath ./build/export

  • 验证与上传(示例,使用 xcrun altool 或 Transporter):见"上传"章节。(Apple Developer)

核对清单

  • 证书(开发/发布)是否在有效期内?

  • 对应的 App ID 与 Bundle ID 是否一致?

  • Provisioning Profile 型别(App Store / Ad-Hoc / Development)是否正确?

  • macOS 分发是否完成 codesign + notarize?


3. 应用元数据准备(App Store 页面)

  • 必填项:应用名称、子标题、主要描述、屏幕截图(分辨率与设备对应)、App Icon(1024×1024)与隐私政策 URL。

  • 隐私信息(Privacy Nutrition Labels) :必须如实填写"数据收集/使用项",并在 App Store Connect 中补充隐私说明与隐私政策链接。苹果在 2025 年持续强化隐私透明度,错误或隐瞒会直接导致拒审或下架。(Apple)

  • 可访问性标签(Accessibility Nutrition Labels) :从 2025 年起 App Store 商品页新增可访问性标签(VoiceOver、字幕、字体大小等),建议在产品文案中明确列出支持的可访问性特性以提升合规性与展示。(Apple)

核对清单

  • 隐私 Nutrition Label 是否完整填写?

  • 隐私政策 URL 是否可访问(HTTPS)?

  • 屏幕截图是否覆盖主流机型(iPhone、iPad、Apple Watch/Apple TV 如适用)?

  • 是否准备好演示账号(若应用需要登录或有付费墙)?


二、应用开发与打包

1. 跨平台开发方案对比(补充字段)

工具 适用场景 证书要求 打包方式 注意事项(2025)
Xcode 原生 原生 Swift/Obj-C Apple Developer 发布证书 + Provisioning Profile Xcode Archive → Export IPA 推荐使用 Xcode 26+;校验 API 兼容性与系统最低版本。(Apple Developer)
Flutter 跨平台(流行) iOS 仍需配置 Xcode 工程与证书 通过 Xcode 打包或 CI(macOS runner) 注意苹果隐私与权限申报(某些插件会收集数据)。
uni-app / HBuilderX HTML5 混合 上传证书到云打包平台 HBuilderX 云打包或本地导出 若使用云打包,证书需上传至第三方/厂商平台,注意私钥安全与保管(合规风险)。
React Native / .NET MAUI 等 跨平台 同上 Xcode / CI 打包 注意平台插件的原生依赖是否满足苹果 2025 新规则(例如后台定位、健康数据收集)。

额外注意 :2025 年苹果更严格审查隐私权限使用理由 与功能必要性(例如后台定位、相机、麦克风、健康数据),在 Info.plist 中声明的 NS*UsageDescription 必须与 App Store 上填写的隐私描述一致并真实。(Apple Developer)


2. 2025 年打包新要求(要点)

  • Xcode 版本要求 :苹果建议使用 Xcode 26+ 编译与测试以兼容最新 SDK 与平台(若依赖新 API 或新编译器特性,务必在 CI 中同步升级并跑回归测试)。(Apple Developer)

  • Notarization 对 macOS 的加强 :macOS 应用/二进制建议在上传前进行 codesign + notarize(使用 notarytool 或 Xcode UI)。未 notarize 的 macOS 分发在新版 macOS 中可能触发 Gatekeeper 阻挡。(Apple Developer)

  • 隐私与可访问性声明 :在 App Store Connect 填写隐私标签与可访问性标签(Accessibility Nutrition Labels)。(Apple)

  • 功能完整性测试 :苹果明确要求"发布版本应包含完整功能流程"。对于需要登录、IAP 或服务器配合的功能,提交审查时应提供演示账号或录屏演示(视频尽量清晰展示完整流程)。(Apple Developer)


三、提交审核关键步骤

1. App Store Connect 配置

  • 在 App Store Connect 中创建 App(填写 SKU、Bundle ID、平台与类别)。

  • 填写"App 信息"(隐私标签、年龄分级、数据加密声明、地域分发设置)。

  • 若应用含订阅,提前配置产品(IAP)、价格区间与续订策略。

  • 为受限功能(HealthKit、HomeKit、Apple Pay、Push)确保相关协议已开启并顾及审查要求。(Apple Developer)

核对清单

  • IAP 已在 App Store Connect 中创建并与版本关联?

  • 隐私与可访问性标签已填写?

  • 测试人员已添加到 TestFlight?


2. 构建版本上传(Transporter / altool / Xcode)

  • 推荐工具:Xcode Organizer(图形化)、Transporter(GUI 或 CLI)、xcrun altool / xcrun notarytool(命令行),或使用 Fastlane 的 deliver 来自动化(CI 场景)。苹果官方说明支持多种上传方式。(Apple Developer)

  • Transporter CLI(示例)(官方 Transporter 用户指南):

    Transporter CLI upload 模式示例(参考 Transporter 用户指南)

    iTMSTransporter -m upload -assetFile ./MyApp.ipa -u your_apple_id -p your_password

    或使用 -itc_provider 指定 provider shortname

(注意:Transporter 在不同平台或版本中可用选项略有差异,官方 Transporter 用户指南为准)。(help.apple.com)

  • xcrun altool / API Keys 上传(较新的推荐做法):

    使用 App Store Connect API Key 上传(示例)

    xcrun altool --upload-app -f ./MyApp.ipa --apiKey YOUR_KEY_ID --apiIssuer YOUR_ISSUER_ID

(注:altool 有部分功能被 notarytool 或新版工具替代,建议参考当前 Xcode 版本文档)。(Stack Overflow)

核对清单

  • 二进制使用 Release 证书签名并通过 codesign 验证?

  • 如果是 macOS 应用,是否完成 notarize?

  • 上传成功后,App Store Connect 中是否出现新 build 且状态正常?


3. 审核材料准备(强烈建议)

  • 演示账号(若需登录):提供用户名/密码、测试用数据与清晰的"测试步骤"(Step-by-step)或演示视频。

  • 视频演示 :如果你的 App 涉及复杂流程、外部设备、硬件或订阅流程,提供短视频(分辨率清晰、带字幕)说明核心流程与权限弹窗。苹果审核团队会优先查看视频以复现问题。(Apple Developer)

  • 隐私合规材料:若使用用户数据(位置、联系人、健康等),提供隐私政策、数据处理说明(服务端如何存储与删除数据的流程)。

  • 第三方服务证明:如使用支付渠道、政府认证或行业合规(医疗/金融),上传相关资质证明。


四、2025 年审核新规重点(解读)

1. 隐私合规升级

  • Apple 强化透明度 :App Store 页面必须完整反映数据收集、用途与处理;隐私政策应详细说明数据去向(第三方、留存周期、用户删除流程)。错误或矛盾将导致拒审。(Apple)

  • 建议做法:在 App 内合适位置(首次使用关键权限时)给出更详尽的说明,并在设置内提供"数据删除/导出"入口以满足用户请求。

2. 功能完整性要求

  • 苹果要求上架版本功能完整 ,不能把核心功能放在服务器端后门或在审核期间屏蔽(例如需人工开通)。若无法在审核环境中完全演示,请提供演示账号或视频。(Apple Developer)

3. 内容安全审查

  • 更严格审查:仇恨、成人、误导性内容、青少年保护等。若含用户生成内容(UGC),必须具备内容审核流程与用户报告/封禁机制,并在 App Store 元数据中声明。(Apple Developer)

五、常见问题与解决方案(2025 实战)

1. 审核被拒高频原因 & 对应解决方案

  • 权限说明不全

    • 问题:Info.plist 中权限说明与 App Store 上传的隐私信息不一致或描述空泛。

    • 解决:同步 Info.plistNS*UsageDescription 与 App Store 上的隐私文本;在审核备注提供权限用途举例与录屏展示。(Apple Developer)

  • 功能不完整 / 无法复现

    • 解决:提供测试账号、详细步骤或演示视频;在"提交审核备注"区域写明需要审核人员关注的入口与测试数据。(Apple Developer)
  • 证书/签名问题(过期、错误)

    • 解决:使用 Fastlane(match)或 CI 自动管理证书,并在发布前验证证书有效期;为长时间项目配置证书轮换策略并记录私钥安全保管流程。(自由编码营)
  • 隐私标签与实际行为不符

    • 解决:审查 SDK/三方库是否收集数据(分析、广告、崩溃上报等),并在隐私标签中列明;如使用第三方 SDK,确认它们的隐私实践符合你提供给苹果的信息。(Apple)

2. 加急审核申请(Expedited Review)

  • Apple 对于发布关键修复(法律要求、重大崩溃或安全问题)提供加急审核选项,但审核是否接受由 Apple 决定。申请时需在 App Store Connect 的"联系 Apple 审核团队"提供足够证据与理由。(Apple Developer)

六、持续优化建议(上架后)

1. 版本更新策略

  • 小版本(bug fix)与大版本(新功能)分别规划:小版本优先使用热修复策略(遵守苹果政策)或快速提交;大版本提前在 TestFlight 做封闭/公开测试,收集崩溃与关键路径数据。

  • 自动化:CI → 自动构建 → 自动运行单元/UI 测试 → 测试通过才上传 TestFlight,并用 Fastlane 自动生成 Release Notes。

2. 推荐位申请技巧(上架后运营)

  • 准备本地化素材、App Preview(短视频)与高质量截屏;如支持可访问性特性、低带宽模式或特殊地区优化,需在提交时在"促请推荐/联系 Apple"中说明亮点。苹果在挑选推荐应用时,会考虑隐私、可访问性与质量。(Apple)

附录:常用命令汇总(可直接复制到 CI 脚本)

  1. 生成 CSR(用于创建 Apple Developer 证书)

    openssl req -new -newkey rsa:2048 -nodes -keyout key.pem -out csr.pem
    -subj "/C=CN/ST=State/L=City/O=Org/OU=Unit/CN=you@example.com"

  2. Xcode 打包(archive + export)

    xcodebuild -workspace MyApp.xcworkspace -scheme MyApp -configuration Release
    -archivePath ./build/MyApp.xcarchive archive

    xcodebuild -exportArchive -archivePath ./build/MyApp.xcarchive
    -exportOptionsPlist ./ExportOptions.plist -exportPath ./build/export

  3. 使用 Transporter(iTMSTransporter)上传(示例)

    iTMSTransporter -m upload -assetFile ./MyApp.ipa -u YOUR_APPLE_ID -p YOUR_PASSWORD

    或者提供 -itc_provider 参数

(详见 Transporter 用户指南)。(help.apple.com)

  1. 使用 xcrun altool(或 API Key)上传

    使用 API Key

    xcrun altool --upload-app -f ./MyApp.ipa --apiKey YOUR_KEY_ID --apiIssuer YOUR_ISSUER_ID

(注意:不同 Xcode 版本关于 altool / notarytool 的支持有所变化,建议查阅当前 Xcode 文档)。(Stack Overflow)

  1. macOS Notarize(notarytool 简示)

    codesign 之后

    xcrun notarytool submit ./MyApp.zip --keychain-profile "AC_PASSWORD_PROFILE" --wait
    xcrun stapler staple ./MyApp.app

(具体参数与流程以 Xcode / notarytool 文档为准)。(Apple Developer)


参考与进一步阅读(官方/权威)

  • App Store Review Guidelines(官方)------ 苹果开发者文档。(Apple Developer)

  • Xcode 26 Release Notes(官方)。(Apple Developer)

  • Privacy Nutrition Labels & Apple Privacy pages。(Apple)

  • Accessibility Nutrition Labels 公告(Apple Newsroom)。(Apple)

  • Transporter 用户指南(iTMSTransporter)。(help.apple.com)

相关推荐
新***袭6 小时前
如何在 Mac 上恢复已删除的文件(包括清空了垃圾箱方法)
macos
江东小bug王6 小时前
深入解析 iOS 与 macOS 应用程序生命周期(完整指南)
macos·ios
xingxing_F7 小时前
DSync for Mac 文件对比同步工具
macos
2501_9160088910 小时前
iOS 发布全流程详解,从开发到上架的流程与跨平台使用 开心上架 发布实战
android·macos·ios·小程序·uni-app·cocoa·iphone
非专业程序员11 小时前
iOS/Swift:深入理解iOS CoreText API
ios·swift
某柚啊12 小时前
iOS移动端H5键盘弹出时页面布局异常和滚动解决方案
前端·javascript·css·ios·html5
xingxing_F14 小时前
Swift Publisher for Mac 版面设计和编辑工具
开发语言·macos·swift
CHH32131 天前
在 Mac/linux 的 VSCode 中使用Remote-SSH远程连接 Windows
linux·windows·vscode·macos