代码签名机制
代码签名的作用
保证应用里所包含的内容正如它所说的那样不多不少
代码签名的核心
证书certificate 和 私钥private key
代码签名的工具
命令行工具codesign
- 签名
- 修改签名
- 查看签名信息
- 认证签名信息是否有效
备注
运行在模拟器上的app不需要签名
运行在越狱设备上的app不需要签名
一个已签名应用的组成
- 可执行文件
任何可执行的二进制文件都可以被设置签名:无论是动态库,命令行工具,还是.app后缀的程序包
签名会改动可执行文件的文件内容,将签名数据写入二进制文件中 - 资源文件
签名的过程中会在程序包(.app)中新建一个叫做 _CodeSignatue/CodeResources 的文件。这个文件中存储了被签名的程序包中所有文件的签名,包括资源文件和代码文件
一个bundle中的可执行bundle(比如extension)是需要单独签名的个体
沙盒机制
沙盒机制的作用
限制应用能访问系统的哪些资源
授权entitlements
在Capabilities中选定了一些选项后,会自动生成.entitlements文件
授权信息会被包含在应用的签名信息中
配置文件provisioning
在整个代码签名和沙盒机制中有一个组成部分将签名,授权和沙盒联系了起来,那就是配置文件 (provisioning profiles)
配置文件是一组信息的集合,这组信息决定了某个应用能否在某个特定的设备上运行起来
通常包括:DeveloperCertificates、ProvisionedDevices、Entitlements等有效信息。这里的entitlements是在developer center中创建该配置文件时设置的,有可能与Xcode中根据capacities生成的.entitlements不一致,从而造成问题