iOS的代码签名和沙盒机制

时间:2021-04-08 20:27:50

代码签名机制

代码签名的作用

保证应用里所包含的内容正如它所说的那样不多不少

代码签名的核心

证书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不一致,从而造成问题

原文链接

http://www.objc.io/issue-17/inside-code-signing.html