[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX 个人网站: https://www.x86asm.org QQ交流: 643439947 编程生涯: 2001年~至今[共20年] 职业生涯: 18年 开发语言: C/C++、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi、XCode、Eclipse 技能种类: 逆向 驱动 磁盘 文件 研发领域: Windows应用软件安全/Windows系统内核安全/Windows系统磁盘数据安全 项目经历: 磁盘性能优化/文件系统数据恢复/文件信息采集/敏感文件监测跟踪/网络安全检测
[序言] 今日开始要更新macOS平台的旧App, 距离上次更新有2年时间了, 也就意味着我有2年没有碰macOS开发. 但今年必须要完成macOS平台上的旧App更新. 首先要解决最棘手的问题就是"沙盒" "公证" "证书" "签名"这4个概念的内在联系. 通过前几天摸索, 旧App依然可以在最新版本的macOS系统非沙盒模式运行稳定. 那么剩下就是解决"签名"的问题. 另外"公证"很简单, 这里不详细描述, 这里主要记录最新版xcode下的"证书"和"签名"的配置流程, 以防以后忘记.
[生成证书] 1> 进入xcode->Preferences->accounts, 点击左下角的"+"号, 登入你的developer账号, 然后界面会自动列出跟开发账号相关Team信息. 2> 选中Team, 然后单击右下角的"Manage Certificates..."按钮, 弹出证书管理界面 3> 在证书管理界面里面, 点击左下角的"+", 选中"Developer ID Application", 然后就会自动生成证书了. 通过这3个步骤, 本机macOS会有相应的证书生成, 可以通过macOS系统自带的"钥匙串访问"工具查看. 此时也可通过apple开发者网站登陆进去, 在证书面板也会出现对应的证书文件, 该证书是可以下载的. 注意: 后台会显示很多个证书, 一定要区分和牢记, 哪个证书实在哪个macOS电脑生成的. 这里吐槽一下, 证书没有任何信息可以显示是哪个电脑生成, 只能通过查看证书的生成时间, 通过生成时间, 在配合你本人的记忆, 才能区分证书是哪台机器.?
[生成签名文件] 假设你要签名一个App并分发出去, 例如你的App id是: com.areyouok.ok, 那么你需要在apple开发者网站里面配置相应的Identifiers和Profiles 1> 用developer账号登陆到https://developer.apple.com后台 2> 进入Identifiers面板, 创建一个名为com.areyouok.ok的id配置内容, 并选中相应你在[生成证书]步骤生成的那个证书. 3> 进入Profiles面板,会自动显示com.areyouok.ok的Profiles配置, 你可以下载, 也可以进入进行edit并为com.areyouok.ok的Profiles配置属于你自己本机的证书. 即你在[生成证书]步骤生产的那个证书.
[给代码进行签名] 配置好Profiles之后, 即可下载, 然后启动xcode打开com.areyouok.ok项目或者新建一个id为com.areyouok.ok的项目, 进入项目的TARGETS->Signing&Capabilities, 去掉Automatically manage signing, 然后通过手工配置Team, id, 并导入下载好的Profiles文件, 这时Signing Certificate就能自动识别了. 此时该项目可以自动进行代码"签名", "公证", 并进行"分发". ??
[故障解决] 1> 如果你的项目出现类似No signing certificate "Developer ID Application" found的问题. 原因: 是你的Profiles文件, 没有正确选对属于当前macOS电脑生成的证书文件. 解决: 登陆https://developer.apple.com后台, 重新配置Profiles并选对正确的certificate文件. 如果确定你的电脑和https://developer.apple.com后台都没有当前电脑的证书, 那么可以通过上面步骤重新生成证书并重新配置Profiles, 保证100%可以重新签名.
2> 如果你的证书出现missing private key的问题. 原因: 是你的证书里面的private key丢失了, 一般是自己误删除(比如我自己, 通过macOS系统自带的"钥匙串访问"工具把所有项目证书都全部删除了.), 还有一种情况是当前你使用的证书不是你电脑上生成的, 是别人电脑上生成的. 解决: 如果是你自己把private key弄丢了, 那么只能通过上面步骤重新生成证书并重新配置Profiles, 保证100%可以重新签名. 如果确认证书是别人的, 然后又想正常使用, 那么需要弄清楚该证书是在哪台电脑上生成的, 然后就去那台电脑上通过"钥匙串访问"工具, 导出私钥(p12文件), 然后在导入到你自己的电脑上.
[一些细节问题] 一个证书可以绑定不同的App id并进行"签名" "公证" "分发".
[总结] macOS平台下的所谓"沙盒" "公证" "证书" "签名", 非常不人性化, 总之不好用.
|