什么是 codesign?
codesign
是 macOS
和 iOS
开发中用于代码签名的核心命令行工具,它确保应用程序的来源可信且未被篡改。无论是发布到 App Store
还是独立分发,代码签名都是必经流程。
核心功能
- 身份验证
- 完整性校验
- 沙盒权限控制
- 通过
entitlements
文件定义应用权限(如网络访问、摄像头调用)。
- 系统兼容性
macOS
和 iOS
应用必须签名才能运行或分发。
基础操作
1. 对应用签名
1
| codesign -s "Developer ID Application: Your Name (TeamID)" /path/to/App.app
|
-s
指定证书名称(需与钥匙串中的名称完全匹配)。
- 查看可用证书:
1
| security find-identity -v -p codesigning
|
2. 验证签名
1 2 3 4 5
| codesign -dv /path/to/App.app
codesign -vvv /path/to/App.app
|
3. 提取权限配置(Entitlements)
1
| codesign -d --entitlements - /path/to/App.app
|
高级用法
1. 强制重签名
1
| codesign -f -s "New-Certificate" /path/to/App.app
|
注意:重签名前建议先移除旧签名:
1
| codesign --remove-signature /path/to/App.app
|
2. 嵌套组件签名
1
| codesign -s "Certificate" --deep /path/to/App.app
|
--deep
会自动签名 .app
内的 .framework
和 .dylib
,但对复杂项目可能失效。
3. 启用强化运行时(Hardened Runtime
)
1 2 3 4
| codesign -s "Certificate" \ --options runtime \ --entitlements entitlements.plist \ /path/to/App.app
|
- 必须提供
entitlements.plist
文件,否则应用可能崩溃。
实战场景
场景 1:重签名整个应用
1 2 3 4 5 6 7 8
| codesign --remove-signature App.app
find App.app -name "*.framework" -o -name "*.dylib" | xargs -I {} codesign -s "Certificate" {}
codesign -s "Certificate" --entitlements entitlements.plist App.app
|
场景 2:解决常见错误
调试工具
1. 查看完整签名信息
1
| codesign -dvvv /path/to/App.app
|
2. 验证 Gatekeeper 兼容性
1
| spctl -a -vvv /path/to/App.app
|
参考资源
Apple
官方代码签名指南
- 终端手册:
man codesign