type
status
date
slug
summary
tags
category
icon
password
第一次独立开发 iOS App 的人,大概率都会在证书配置这一关卡壳。
我在做 SpeechNote 的时候也不例外。明明代码写完了,却在证书这里折腾了大半天……
这篇文章,就是我一路踩坑之后整理出来的完整流程。你跟着走一遍,基本不会再卡住。

证书配置是什么,为什么必须做

简单说,Apple 不允许任何未经认证的代码跑在真实设备上。你需要向 Apple 证明:这个 App 是我开发的,我有资格把它安装到设备上。
这套证明体系由三个东西构成:
  1. 开发证书(Development Certificate):证明"我是谁"
  1. App ID:证明"这个 App 是什么"
  1. Provisioning Profile:把证书、App ID、设备绑在一起,告诉系统"这个人可以在这台设备上运行这个 App"
三个都配好,你的 App 才能跑在真机上。

第一步:生成 CSR 文件

CSR(Certificate Signing Request)是你向 Apple 申请证书的凭证,本质是一个包含你公钥信息的请求文件。

方式一:用钥匙串访问生成(传统方式)

打开「钥匙串访问」→ 菜单栏「证书助理」→「从证书颁发机构请求证书」,填写邮箱,选择「存储到磁盘」,保存 .certSigningRequest 文件。
常见问题一:找不到「钥匙串访问」
macOS Sequoia(15.0)之后,Apple 把这个 App 从实用工具文件夹里藏起来了,但没有删除。
最快的方式:Command + Space 打开 Spotlight,搜索「钥匙串」或「Keychain Access」,回车即可。
如果 Spotlight 也搜不到,手动进 Finder,按 Command + Shift + G,粘贴路径:
就能看到它了。

常见问题二:证书助理报错「未知错误 = -2,147,414,007」
这个错误码(十六进制 0x80010009)本质是网络连接失败。证书助理会尝试连接 Apple 的 CA 服务器,国内网络访问不稳定,导致超时。
最稳的解决方案:用命令行绕过证书助理,直接生成 CSR:
桌面会生成 .csr.key 两个文件,前者上传到开发者后台,后者妥善保存,绝对不能丢
再有一个原因就是,如果电脑上存储的文件夹含有中文名,保存 .certSigningRequest 文件磁盘,也会报这样错,换个英文名目录就可以了。

方式二:让 Xcode 自动管理(最省心)

在 Xcode 的 Target → Signing & Capabilities 里,勾选 Automatically manage signing,选择你的 Team,Xcode 会自动处理证书、CSR 和 Profile 的全套流程。
对独立开发者来说,这是最推荐的方式,省去 80% 的手动操作。

第二步:在开发者后台申请证书

登录 developer.apple.com,进入 Certificates, Identifiers & Profiles
点击左侧 Certificates → 右上角 + → 选择 Apple Development → 上传刚才生成的 .certSigningRequest 文件 → 下载 .cer 文件 → 双击安装到钥匙串。

第三步:注册 App ID

点击左侧 Identifiers+App IDsApp,填写:
  • Description:建议填英文,如 SpeechNote。后台对中文没有强制限制,但填中文偶尔会遇到保存异常,英文最稳。
  • Bundle ID:选择 Explicit,填写你的 Bundle ID。
常见问题三:Bundle ID 怎么填
Bundle ID 采用反向域名规则,比如你有域名 jinghai.ink,那就写 ink.jinghai.speechnote。格式是:反转域名 + 应用名称,完全合规。
注意:这个值要和 Xcode 项目里 Target → General → Bundle Identifier 完全一致,一个字符都不能差。

Capabilities 怎么勾选?
只勾选你真正用到的功能。多勾选不会让 App 更强,反而会让 App Review 时多一些审核关注点。
常见问题四:Push Notifications Broadcast Capability 是什么,要勾吗
这是 iOS 17.2 新增的功能,专门用于向大量用户同时推送只读广播通知,类似体育赛事比分、新闻头条这类场景。
比如 SpeechNote 是语音笔记工具,完全用不到。如果将来需要普通推送提醒,勾选常规的 Push Notifications 即可,两者是不同的选项。

第四步:创建 Development Provisioning Profile

点击左侧 Profiles+iOS App Development,依次选择:
  1. App ID:选刚才注册的 SpeechNote
  1. 证书:选你的开发证书
  1. 设备:选你的测试设备(需要提前在 Devices 里添加 UDID)
  1. 填写 Profile 名称,如 SpeechNote Development
下载 .mobileprovision 文件,双击安装,然后在 Xcode 里选择对应的 Profile 即可。

关于 .p12 和 .p8:什么时候需要它们

.p12 — 证书 + 私钥打包

.p12 用于在多台 Mac 或 CI/CD 环境(如 GitHub Actions、Fastlane)中共享签名能力。
导出方式:
打开钥匙串访问,切换到「证书」标签,找到 Apple Development: 你的名字,展开后会看到证书下面挂着一个私钥,同时选中证书和私钥(Command 点选),右键 → 导出 2 个项目,格式选 .p12
常见问题五:钥匙串里有两组同名证书,选哪个
看两点:一是证书和私钥是否在同一个钥匙串(都在「登录」或都在「系统」);二是过期时间选最新的。
如果一组的证书在「系统」钥匙串但私钥在「登录」钥匙串,这组是异常的,不要选它。选证书和私钥都在「登录」钥匙串的那组。

常见问题六:导出时必须设密码吗
不强制,留空也可以完成导出。但 .p12 包含私钥,建议设密码。尤其是要上传到 CI/CD 平台或发给他人的时候,一定要加密码,否则相当于把你的签名权限裸奔在网络上。

.p8 — APNs 推送认证密钥

.p8 是服务端推送通知的认证密钥,不是从钥匙串导出的,而是在开发者后台生成:
Certificates, Identifiers & Profiles → 左侧 Keys+ → 勾选 Apple Push Notifications service (APNs) → 下载。
两点务必记住:.p8 只能下载一次,关闭页面就再也拿不到了;一个 .p8 密钥同时适用于开发和生产环境,不需要分别创建。
如果暂时不做推送功能,这个文件用不到,跳过即可。

整个流程一张图


写在最后

证书配置这件事,第一次做的时候确实让人头疼——全是英文、逻辑绕、还容易踩坑。
但搞清楚一次之后,你会发现它其实很有规律:谁(证书)+ 什么App(App ID)+ 在哪台设备(Profile),三个问题回答清楚,就全通了。
鲸海语记还在持续开发中,后续会分享更多 iOS 独立开发过程中的实战经验。如果你也在做自己的 App,欢迎留言交流。

 
2026.02.28 18:00 沪 · 赵巷