准备工作
iOS 开发需要两样硬件:
- iPhone 手机(调试设备,UDID 唯一)
- Mac 电脑(macOS 10.9+,钥匙串访问工具)
实际上没有 Mac 也可以用云 Mac(MacStadium、AWS EC2 Mac),但本地 Mac 是最舒服的方案。
一、申请 Apple ID
如果已有 Apple ID 可跳过。访问 https://appleid.apple.com 注册。建议用真实邮箱(后续找回密码用得到)。
二、申请开发者账号
访问 https://developer.apple.com/account
账号类型
| 类型 | 费用 | 适用 |
|---|---|---|
| 个人(Individual) | 99 USD/年 | 独立开发者 |
| 组织(Organization) | 99 USD/年 | 公司(需 D-U-N-S 编号) |
注册流程:登录 → 选择类型 → 填写资料 → 付款 → 等待审核(1~3 天)。
三、申请 Identifiers(App ID)
App ID 是应用的唯一标识,对应一个 Bundle ID(如 com.yourcompany.appname)。Bundle ID 不可重复,建议用反向域名:
- 个人:
com.firstname.lastname.appname - 公司:
com.companyname.appname
创建步骤
- 登录后台 → Certificates, Identifiers & Profiles → Identifiers
- 点击 “+” 添加
- 选择 App IDs,点击 Continue
- 选择 App
- 填写 Description(如 “我的App”)和 Bundle ID(如
com.example.app) - Capabilities:勾选需要的能力(推送通知、Sign in with Apple、App Groups、HealthKit 等)
- 点击 Continue → Register
常用 Capabilities
- Push Notifications:推送(必须生成 APNs 证书或 key)
- Sign in with Apple:Apple 登录
- App Groups:应用间共享数据
- Background Modes:后台运行
- HealthKit / HomeKit / Wallet:健康/智能家居/钱包
四、申请 Certificates(证书)
iOS 证书分三类:
| 证书 | 用途 |
|---|---|
| Apple Development | 开发期(真机调试) |
| Apple Distribution | 发布期(App Store / Ad Hoc) |
| APNs SSL (Sandbox & Production) | 推送通知(Sandbox 开发、Production 生产) |
申请步骤(Mac 钥匙串)
- 打开 Mac → 应用程序 → 实用工具 → 钥匙串访问
- 菜单:钥匙串访问 → 证书助理 → 从证书颁发机构请求证书
- 填写:
- 用户电子邮件:开发者邮箱
- 常用名称:随便填
- CA 邮箱:留空
- 请求是:选择存储到磁盘
- 保存得到
CertificateSigningRequest.certSigningRequest文件 - 回到 Apple Developer 后台 → Certificates → “+”
- 选择证书类型(Apple Development / Apple Distribution)
- 上传 .certSigningRequest 文件
- 下载生成的
.cer证书 - 双击
.cer→ 用钥匙串打开 - 在钥匙串中找到该证书 → 右键 → 导出 → 保存为
.p12(含私钥)
p12 密码:导出时设一个密码。别忘了这个密码——CI/CD、Fastlane、跨电脑开发都要用。
推送证书(APNs)
- 同上,但选 Apple Push Notification service SSL (Sandbox & Production)
- 同一个 App ID 可以同时有 Development 和 Production 推送证书
- iOS 13+ 起,也可以用 APNs Auth Key(.p8) 替代 SSL 证书——一份 key 通用 Sandbox 和 Production
五、添加调试设备
调试设备必须先在 Apple Developer 后台注册 UDID。
获取 UDID
- iPhone 用数据线连接 Mac
- 打开 iTunes(macOS Catalina 之前)/ Finder(Catalina 之后)
- 点击 iPhone 图标
- 在序列号区域点击切换显示 UDID
- 右键 → 复制
添加到 Apple Developer
- 后台 → Devices → All → “+”
- 填写:
- Platform:iOS / tvOS / watchOS
- Device Name:随便(如 “iPhone 15 - Dev”)
- Device ID (UDID):粘贴刚才复制的 UDID
- Register
个人开发者账号最多注册 100 台 设备(每年重置一次)。
六、申请 Provisioning Profiles
Profile 把 App ID + Certificates + Devices 串起来,是 Xcode 编译时真正要的"凭证包"。
类型
| Profile | 用途 |
|---|---|
| iOS App Development | 真机调试 |
| Ad Hoc | 内测(不上 App Store,最多 100 台设备) |
| App Store | 上架 App Store |
创建步骤
- 后台 → Profiles → All → “+”
- 选择类型 → Continue
- 选择 App ID → Continue
- 选择证书(Apple Development / Apple Distribution)→ Continue
- 选择调试设备(仅 iOS App Development / Ad Hoc)→ Continue
- 命名 Profile(如 “MyApp Dev”)→ Generate
- 下载
.mobileprovision文件 - 双击安装到 Xcode
添加新设备后必须重新生成 Profile——老的 Profile 不会自动包含新设备。
七、Xcode 中配置
- 打开 Xcode → 项目 → Signing & Capabilities
- 勾选 Automatically manage signing(Xcode 自动管理)
- Team 选择你的 Apple Developer Team
- Bundle Identifier 填刚才创建的 App ID
或者手动管理:
- 取消勾选 Automatically manage signing
- Provisioning Profile 选择刚才下载的
- Signing Certificate 选择对应的证书
八、构建并跑真机
| |
首次运行会弹窗要求信任证书:设置 → 通用 → VPN 与设备管理 → 信任开发者。
常见问题
“No code signing identities found”
证书没装到钥匙串。重新双击 .cer 文件。
“Failed to create provisioning profile”
Profile 中没有包含当前设备。重新生成 Profile(包含新设备 UDID)。
“Bundle Identifier conflict”
Bundle ID 全局唯一,换一个。
推送收不到
- 检查 Capabilities 是否勾选 Push Notifications
- 检查 APNs 证书是否过期(开发证书 1 年,生产证书 1 年)
- 改用 APNs Auth Key (.p8) 不会过期
2024+ 视角:自动签名、App Store Connect API、TestFlight
本文 2017 年写时,Xcode 的"自动签名"还是可选功能(Xcode 8 引入但很多团队不敢用)。7 年后(2024),自动签名已经是事实标准——配合 App Store Connect API + TestFlight + Fastlane,整套流程可以做到零人工、零 .p12 邮件。下面是当前的最佳实践。
1. 自动签名(Automatic Signing)—— 现在不用会累死
Xcode 14+(2022-09):自动签名能力再次大幅增强。
1.1 项目配置
| |
之后——Xcode 会自动:
- 创建/更新 App ID
- 创建/更新 Provisioning Profile(Development / Ad Hoc / Distribution)
- 关联证书
- 写入
*.xcodeproj/project.pbxproj
好处:
- 新员工入职 → 登录 Apple ID 即可(不用再走"申请证书 → 申请 Profile → 导出 p12"流程)
- Bundle ID 改名 → Xcode 自动重建
- 新增设备 UDID → Xcode 自动重生成 Dev Profile
- 没有 p12 邮件——告别
.p12+ 密码在企业微信群里传来传去
1.2 仍然需要手动的场景
- 企业内部分发(In-House / Enterprise)——仍需手动建 Enterprise Profile
- 跨电脑同步证书——见下节"钥匙串共享"
- 多 Target / 多 Bundle ID——Target 数量多时仍需手动管理
2. App Store Connect API(替代手工点网页)
2018 年 Apple 推出 App Store Connect API,到 2024 年已经覆盖几乎所有手动操作(上传构建、创建版本、提交审核、管理 TestFlight、管理用户等)。
2.1 创建 API Key
| |
得到 3 项:
- Issuer ID(团队级,UUID)
- Key ID(单 key 唯一)
- .p8 文件(私钥,只能下载一次)
2.2 用 API Key 上传构建(不再用 Transporter GUI)
| |
vs 旧版 Transporter:
- ✅ 可脚本化(CI/CD 友好)
- ✅ 不需要交互登录
- ✅ 不需要 2FA 验证码
- ✅ 一台机器一个 .p8,不受 Mac 换机影响
2.3 用 API Key 自动创建版本 / 提交审核
| |
3. TestFlight 2024 现状
Xcode 14+ 起 TestFlight 体验大幅提升:
| 特性 | 2017 状态 | 2024 状态 |
|---|---|---|
| 内测名额 | 25 个内部 + 1000 外部 | 100 个内部 + 10000 外部 |
| 外部测试 | 需 Apple 审核 | 不再需要(自动通过) |
| 构建有效期 | 60 天 | 90 天 |
| 群组管理 | 后台手动 | API 自动化 |
| 安装方式 | 邮件 / 链接 | TestFlight App / 公开链接 / QR Code |
TestFlight 公开链接(2020 推出):
| |
任何人点链接 → 安装 TestFlight App → 收到邀请 → 安装内测版。适合 50 人以内的小范围灰度。
4. Fastlane match —— 证书管理的"正确姿势"
本文 2017 时 Fastlane 还很新,2024 已经成熟到"不用不专业"。
4.1 match 是什么
把证书和 Profile 集中存到一个 Git 仓库(可以是私有 GitLab/Gitee),全团队共享。新员工入职 = 拉一次 git 仓库 = 拿到所有证书。
4.2 初始化
| |
4.3 在 CI/CD 里用
| |
好处:
- 不再用邮件发 p12——告别"证书密码忘了"、“p12 过期”、“新员工入职没人理”
- CI 机器无障碍——GitHub Actions / GitLab CI 直接拉
- 审计友好——所有证书变更都有 git 提交记录
5. 钥匙串共享(跨 Mac 同步)
如果仍然用手动签名 + 跨 Mac 开发,用 iCloud 钥匙串:
| |
之后——所有登录 Apple ID 的 Mac 自动共享证书 / 私钥。新 Mac 登录 = 5 分钟拿到所有签名材料。
6. 2024 iOS 证书管理完整流程(推荐)
| |
对比 2017:从"邮件发 p12、群里问密码、找运维加 UDID" → “git pull + fastlane 一条命令”。工程师精力从 1 天降到 5 分钟。
7. 2024+ 关键工具版本
| 工具 | 2017 主流 | 2024 主流 |
|---|---|---|
| Xcode | 8.x | 15.x / 16 beta(2024) |
| iOS SDK | iOS 10/11 | iOS 17 / 18 beta |
| Swift | 3.x | 5.9 / 5.10 |
| TestFlight | 内测 25 人 | 100 + 10000 + 公开链接 |
| 证书管理 | 手动 / 邮件 p12 | fastlane match + 自动签名 |
| 上传工具 | Transporter GUI | xcrun altool + App Store Connect API |
| 签名方式 | 手动 | Xcode 自动签名 |
| Provisioning Profile | 手动生成 | 自动生成(Xcode 14+) |
8. 一句话总结
2017 年的 iOS 签名是"每个工程师都要会手动申请证书“的工程师成年礼; 2024 年是”自动签名 + fastlane match + App Store Connect API + TestFlight 公开链接“的"零证书知识"时代。
新人不要再学手动签名——直接 fastlane match 拉仓库、Xcode 自动签名,几分钟搞定。
下一步
- 想把 IPA 上架 App Store,看 2019-11-15《iOS App Store 上架》
- 想用 Fastlane 自动化证书 + 打包,看 fastlane match 官方文档
- 想接 App Store Connect API,看 Apple 官方文档
参考资料
- Apple Developer:https://developer.apple.com/account
- 证书管理:https://developer.apple.com/help/account
- Bundle ID 命名规范:https://developer.apple.com/documentation/bundleresources
- APNs 文档:https://developer.apple.com/documentation/usernotifications
- App Store Connect API:https://developer.apple.com/documentation/appstoreconnectapi
- fastlane match:https://docs.fastlane.tools/actions/match/
- Xcode 自动签名:https://developer.apple.com/documentation/xcode/automatic-signing
