type
status
date
slug
summary
tags
category
icon
password
第一次独立开发 iOS App 的人,大概率都会在证书配置这一关卡壳。
我在做 SpeechNote 的时候也不例外。明明代码写完了,却在证书这里折腾了大半天……
这篇文章,就是我一路踩坑之后整理出来的完整流程。你跟着走一遍,基本不会再卡住。
证书配置是什么,为什么必须做
简单说,Apple 不允许任何未经认证的代码跑在真实设备上。你需要向 Apple 证明:这个 App 是我开发的,我有资格把它安装到设备上。
这套证明体系由三个东西构成:
- 开发证书(Development Certificate):证明"我是谁"
- App ID:证明"这个 App 是什么"
- 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 IDs → App,填写:- 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,依次选择:- App ID:选刚才注册的 SpeechNote
- 证书:选你的开发证书
- 设备:选你的测试设备(需要提前在 Devices 里添加 UDID)
- 填写 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
沪 · 赵巷
Catalog