代码签名与证书
问题
iOS 的代码签名机制是什么?Certificate 和 Provisioning Profile 的关系?
答案
签名验证流程
关键组件
| 组件 | 说明 |
|---|---|
| Certificate | 包含公钥的数字证书,Apple 签发 |
| Private Key | 私钥,存在钥匙串中 |
| App ID | Bundle Identifier + Capabilities |
| Provisioning Profile | 组合证书、App ID、设备 UUID |
| Entitlements | App 权限声明(推送、Keychain 共享等) |
证书类型
| 类型 | 用途 |
|---|---|
| Development | 调试用,绑定设备 |
| Distribution | App Store 发布 |
| Enterprise | 企业内部分发 |
| Ad Hoc | 有限设备测试(100 台) |
Automatic Signing
Xcode → Signing & Capabilities → 勾选 "Automatically manage signing",Xcode 自动处理证书和 Profile 的创建与更新。
常见面试问题
Q1: 为什么换电脑后打包失败?
答案:私钥存在本机钥匙串中。新电脑没有私钥,无法用证书签名。解决方案:
- 从原电脑导出
.p12文件(包含私钥+证书) - 或在 Apple Developer 重新创建证书
Q2: Provisioning Profile 过期怎么办?
答案:Xcode 自动签名模式下会自动更新。手动签名需要到 Apple Developer 后台重新生成 Profile 并下载安装。