Behind The Xcode -- iOS 签名机制 | 来自缤纷多彩的灰

Behind The Xcode -- iOS 签名机制 @ WHlcj | 2023-12-17T21:15:16+08:00 | 3 分钟阅读

感觉这块内容还挺重要的,以前个人开发者时期完全没了解过。实习期遇到这块的内容直接就懵了。所以这里梳理一下相关的应用层的知识。

Apple 采用以非对称加密算法为基础的签名机制来解决盗版 app 横行的问题,实现闭源生态。本篇不会究其底层原理,只告诉初级开发者必要了解的信息。

Certificates & Identifiers & Profiles

简单来说,只要你安装了正确的 Certificates 并且在 Xcode 添加了正确的 Profile (描述文件) 就可以真机测试了。而每一个 Profile 相当于一份白名单,以标明正确的开发者使用正确的设备对正确的 app 进行真机测试。名单中每一个成员都由一下部分组成: Certificate & Identifier & Device

Certificate(证书)

标识开发设备。早期需要先在钥匙串申请 CSR 文件,然后在 Apple Developer 上传 CSR 文件来获取。现在可以直接在 Xcode –> settings –> Accounts 自动获取。不过若需加入组织开发者账号,需要在 Apple Developer 后台,组织开发者账号管理员添加证书。

证书分为两种类型:

Development Certificate (开发证书)

开发人员可以通过该设备进行真机测试,可以生成副本——也就是 .p12 文件——供多台电脑安装

Distribution Certificate (发布证书)

开发人员可以通过该设备制作测试版和发布版程序,不可生成副本

Identifier(标识符)

标识 App。通常指的是 AppID,在工程中可以简单认为 AppID 就是指的 Bundle ID。其实 AppID 完整的形式如下

1
TeamID字符串.BundleID

TeamID 字符串是 Apple 根据你的 TeamID 生成的十位字符。下面举例我都用 XXX0XX1XX2 来表示

实际上 AppID 分为两种:

显示 AppID

1
XXX0XX1XX2.com.elee.test.demo1

通配 AppID

1
XXX0XX1XX2.com.elee.test.*

通配 AppID 可能对应着多个 App 比如这里可能对应的是

1
2
3
4
XXX0XX1XX2.com.elee.test.demo1
XXX0XX1XX2.com.elee.test.demo2
XXX0XX1XX2.com.elee.test.haha
...

在生成 Profile 时需要 AppID,如果是通配 AppID 那么 Profile 也可能会对应多个 App

Device(设备)

标识测试设备。可以在 Xcode –> 运行设备 –> Manage Destinations 看到 DeviceID 。Device 可以在 Apple Developer 后台,由组织开发者账号管理员进行添加。

如果不使用真机,则只需要 Identifier 就可以运行在模拟器上了,如下图

Apple 开发者账号类型

免费开发者账号是无法进入 Apple Developer 管理后台的,但是在自动签名机制下可以推断 Certificates & Identifiers & Profiles 这些信息在后台是也是存在的。

自动签名机制

背景

在 Xcode 7 之前,只有加入到 Apple Developer Program(即付费)才能进行真机调试,Xcode 7 之后苹果推出了 Automatic signing 功能,只要在 Xcode 上登陆 Apple ID,就会自动管理证书和 Provisioning Profile,同时免费账号也能进行真机调试。

功能

该机制主要会自动创建 Development Certificate 证书并创建或更新 Profile 证书。这个 Profile 保存在 ~/Library/MobileDevice/Provisioning Profile 但是 Apple 后台不会存在这个 Profile。如果在 ~/Library/MobileDevice/Provisioning Profiles 里面删除了该Provisioning Profile文件,Xcode 会马上重新生成 Provisioning Profile

.p12 文件

.12文件是 Development Certificate 的加密副本。因为组织开发者账号的 Certificate 数量有限,所以推出.12文件来供更多的开发者使用。

本地若有 Development Certificate 则可以在 Keychain Access 生成.12文件发给第三方。第三方双击.12文件,输入密码,则安装成功。具有 Development Certificate 的能力。再配合上有 Development Certificate 的 Profile 文件。则第三方就可以运行开发同一 App