iOS App 做国内 App 备案时,平台一般会要求填写 App 的特征信息,常见包括:

Bundle ID
公钥
SHA-1

这几个信息都和苹果开发者账号里的证书、标识符有关。这里记录一下从创建 Bundle ID、制作证书,到获取公钥和 SHA-1 的完整流程。

一、先分清几个概念

1. Bundle ID

Bundle ID 是 iOS App 的唯一标识,类似 Android 的包名。

常见格式:

com.company.appname

例如:

com.example.mall

备案时填写的 Bundle ID,要和 App Store Connect、Xcode 项目、打包使用的描述文件保持一致。

2. 公钥

备案里说的公钥,一般是签名证书里的 Public Key。它用于识别 App 签名证书。

注意:这里不是 Apple Push Notification 的推送 Key,也不是 Sign in with Apple 的私钥 .p8

3. SHA-1

iOS 备案里的 SHA-1,一般指苹果签名证书的 SHA-1 指纹,通常是 16 进制格式。

常见格式长这样:

AA:BB:CC:DD:EE:FF:11:22:33:44:55:66:77:88:99:00:AA:BB:CC:DD

有些备案平台填写时可以带冒号,有些平台要求去掉冒号。如果提交失败,就把冒号去掉再试:

AABBCCDDEEFF11223344556677889900AABBCCDD

二、需要准备什么

1. Apple Developer Program 账号
2. Mac 电脑
3. 钥匙串访问 Keychain Access
4. App 的 Bundle ID
5. Apple Distribution 证书
6. App Store 描述文件 .mobileprovision

如果只是备案,核心是拿到 Bundle ID、证书 公钥、证书 SHA-1

如果还要打包上架,还需要 .p12 证书和 .mobileprovision 描述文件。

三、创建 Bundle ID

登录苹果开发者后台:

https://developer.apple.com/account

进入:

Certificates, Identifiers & Profiles

创建步骤:

  1. 左侧选择 Identifiers
  2. 点击 +
  3. 选择 App IDs
  4. 类型选择 App
  5. 填写描述,例如 Mall App
  6. 填写 Bundle ID,例如 com.example.mall
  7. 勾选 App 需要的能力,例如 Push Notifications、Associated Domains、Sign in with Apple
  8. 保存

创建完成后,在 Identifiers 列表里看到的 IDENTIFIER 就是备案要填的 Bundle ID。

如果项目已经存在,也可以在 Xcode 里查看:

Target -> Signing & Capabilities -> Bundle Identifier

或者看 Info.plist / 构建配置里的:

PRODUCT_BUNDLE_IDENTIFIER

四、创建证书请求 CSR

在 Mac 上打开:

钥匙串访问

菜单栏选择:

钥匙串访问 -> 证书助理 -> 从证书颁发机构请求证书

填写:

用户电子邮件地址:你的 Apple ID 邮箱
常用名称:公司名或开发者名
CA 电子邮件地址:留空
请求是:存储到磁盘

保存后会得到一个文件:

CertificateSigningRequest.certSigningRequest

这个 CSR 文件用来在苹果开发者后台创建证书。

注意:生成 CSR 的同时,Mac 钥匙串里会生成一把对应的私钥。后面导出 .p12 时必须在同一台 Mac 上操作,或者确保私钥已经同步到了当前 Mac。

五、创建 Apple Distribution 证书

登录:

https://developer.apple.com/account

进入:

Certificates, Identifiers & Profiles -> Certificates

创建步骤:

  1. 点击 +
  2. 选择 Apple Distribution
  3. 上传刚才生成的 .certSigningRequest
  4. 点击生成
  5. 下载证书文件

下载后通常是:

distribution.cer

双击这个 .cer 文件,系统会导入到钥匙串。

在钥匙串里应该能看到类似这样的证书:

Apple Distribution: 公司名称 (TEAMID)

如果证书左侧有一个小三角,展开后能看到私钥,说明这台 Mac 上有对应私钥,可以正常导出 .p12

如果没有私钥,后面打包会有问题,需要回到生成 CSR 的那台 Mac 上导出,或者重新生成 CSR 和证书。

六、导出 p12 证书

打开:

钥匙串访问 -> 登录 -> 我的证书

找到:

Apple Distribution: 公司名称 (TEAMID)

右键选择:

导出

文件格式选择:

个人信息交换 .p12

设置一个密码,导出后得到:

ios_distribution.p12

这个 .p12 一般用于 HBuilderX、uni-app、Flutter CI、Fastlane、云打包等场景。

七、创建描述文件 mobileprovision

进入苹果开发者后台:

Certificates, Identifiers & Profiles -> Profiles

创建步骤:

  1. 点击 +
  2. 选择 App Store Connect
  3. 选择刚才创建的 App ID / Bundle ID
  4. 选择对应的 Apple Distribution 证书
  5. 填写 Profile 名称
  6. 生成并下载

下载后得到:

appstore.mobileprovision

打包时,.p12.mobileprovision 要对应同一个 Bundle ID 和同一个团队。

八、获取 Bundle ID

最直接的方式是在苹果开发者后台看:

Certificates, Identifiers & Profiles -> Identifiers

列表里的 IDENTIFIER 就是 Bundle ID。

也可以从 Xcode 看:

Target -> Signing & Capabilities -> Bundle Identifier

如果手里已经有 .ipa 文件,可以先解压:

unzip app.ipa -d ipa_tmp

然后读取:

/usr/libexec/PlistBuddy -c "Print :CFBundleIdentifier" ipa_tmp/Payload/*.app/Info.plist

九、获取 SHA-1

方法一:在钥匙串里查看

打开:

钥匙串访问 -> 登录 -> 证书

找到:

Apple Distribution: 公司名称 (TEAMID)

双击证书,展开详细信息,找到:

SHA-1

复制这个值填到备案平台。

方法二:用 openssl 查看

如果你手里有苹果下载的 .cer 文件,可以执行:

openssl x509 -inform DER -in distribution.cer -noout -fingerprint -sha1

输出类似:

sha1 Fingerprint=AA:BB:CC:DD:EE:FF:11:22:33:44:55:66:77:88:99:00:AA:BB:CC:DD

等号后面的就是 SHA-1。

如果备案平台不接受冒号,去掉冒号即可。

十、获取公钥

方法一:在苹果开发者后台查看

登录苹果开发者后台:

Certificates, Identifiers & Profiles -> Certificates

点进对应的证书详情页,部分备案教程会让你在这里查看证书详情里的 Public Key / 公共密钥。

如果页面显示不完整,可以先点击省略号展开;如果还是不完整,就按备案平台提示复制能显示出来的公钥内容。

方法二:从证书文件导出公钥

如果你手里有 .cer 文件:

openssl x509 -inform DER -in distribution.cer -pubkey -noout

输出类似:

-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----

有些备案系统要填的是完整 PEM 公钥,有些只要中间那段内容,有些平台页面会提示“10 进制或 16 进制”。实际以你提交备案的平台输入框说明为准。

如果平台要求一行,可以去掉头尾和换行,只保留中间内容。

十一、备案平台填写时怎么对应

常见填写关系:

备案字段iOS 对应信息
App 包名 / iOS 应用标识符Bundle ID
公钥 / 平台公钥Apple Distribution 证书公钥
签名 MD5 / SHA-1iOS 填证书 SHA-1

注意:

  • Android 通常填 MD5。
  • iOS 通常填 SHA-1。
  • 不要把 Android 的 MD5 填到 iOS。
  • 不要把推送证书、公钥 .p8、登录私钥当成备案公钥。
  • Bundle ID、公钥、SHA-1 要来自同一个要上架的 App 和签名证书。

十二、App Store Connect 里填写 ICP 编号

备案通过后,会拿到 ICP 备案号。

进入:

https://appstoreconnect.apple.com

找到对应 App:

App 信息 -> 在中国大陆的供应情况

按页面要求填写 ICP 备案信息。

这里要注意:

  • App Store Connect 里的 App 名称、开发者主体、备案主体信息要尽量保持一致。
  • 简体中文 App 信息要和备案信息一致。
  • 如果没有配置简体中文,本地化信息要和主要语言里的备案信息一致。
  • 游戏、新闻、出版、宗教等类型可能还要额外许可证。

十三、常见问题

1. 证书里看不到私钥怎么办?

说明当前 Mac 没有这个证书对应的私钥。

解决办法:

  1. 去生成 CSR 的那台 Mac 导出 .p12
  2. 或者重新生成 CSR
  3. 重新创建 Apple Distribution 证书
  4. 重新生成描述文件

2. SHA-1 和公钥用开发证书还是发布证书?

备案和上架一般用发布证书,也就是 Apple Distribution

不要用 Apple Development 证书去填生产 App 的备案信息。

3. Bundle ID 可以改吗?

如果 App 已经在 App Store Connect 创建并上传过构建版本,Bundle ID 基本就不能改了。

如果还没上传,可以重新建 App ID,但要同步修改 Xcode、描述文件、云打包配置。

4. p12 密码忘了怎么办?

.p12 密码忘了无法找回。

如果钥匙串里还有证书和私钥,可以重新导出一份 .p12 并设置新密码。

如果私钥也没了,就重新创建证书。

5. 备案平台提示 SHA-1 格式错误怎么办?

先确认是不是填了证书 SHA-1,而不是 App 文件的哈希。

再尝试两种格式:

AA:BB:CC:DD...

或:

AABBCCDD...

不同备案服务商的输入校验不完全一样。

十四、给开发和客户的资料清单

可以按下面这个清单交付:

App 名称:
开发者主体:
Bundle ID:
证书名称:
Team ID:
SHA-1:
公钥:
p12 文件:
p12 密码:
mobileprovision 文件:

建议把 .p12、密码分开传,不要放在同一个聊天窗口里。

十五、参考入口

  • Apple Developer:https://developer.apple.com/account
  • App Store Connect:https://appstoreconnect.apple.com
  • 阿里云 App 备案特征信息说明:https://help.aliyun.com/zh/icp-filing/basic-icp-service/user-guide/fill-in-app-feature-information
  • 腾讯云 App 备案特征信息说明:https://cloud.tencent.com/document/product/243/97789
  • Apple App 信息说明:https://developer.apple.com/cn/help/app-store-connect/reference/app-information/app-information

小结

iOS App 备案最容易混淆的是证书相关信息。记住这几个对应关系就行:

Bundle ID = iOS App 唯一标识
公钥 = Apple Distribution 证书里的公钥
SHA-1 = Apple Distribution 证书的 SHA-1 指纹
p12 = 证书 + 私钥,用来打包
mobileprovision = Bundle ID + 证书 + 权限配置,用来描述签名范围

备案前先把 Bundle ID、证书、描述文件统一好,后面打包、备案、上架都会省很多事。