iOS签名与描述文件

  • 通过此文档,可以了解签名与描述文件在iOS App开发中的作用, 以及深信服相关产品为什么需要这些文件

  • 下列介绍仅限于科普性介绍,想要知道更深入的知识,可以Google搜索相关资料

Apple对运行在iOS设备上的App有非常强的管理需求,所有运行在iOS设备上的App都需要经过检查,这个检查就是通过是一对的签名与描述文件来完成的。所以,所有App在安装到iOS设备前,都会用[签名 .p12] + [描述文件 .mobileprovision] 来对 App 进行 签名

(http://melonteam.com/posts/ios_qian_ming_ji_zhi_xiang_jie/)

iOS开发账号、证书、描述文件的关系

如图:

注意以上3个标红的部分,深信服的封装与客户证书环境下的aWork就需要是:企业开发账号下、企业发布方式、并选择对应发布证书生成的描述文件。

Q:签名证书长什么样子?

签名相当于是给App写上一些身份信息,并且只有这份签名信息被iOS设备认可了,App才能在iOS设备上成功安装并运行,一般的签名以p12形式提供,双击后可以安装在Mac系统的 keychain

然后在XCode中就可以找到对应的签名选项,使用此签名来给App提供身份信息

描述文件长什么样子?

描述文件与签名是一对的,如果说签名信息是验证了App身份的合法性,那么描述文件就表明此App的名字、具有的功能,描述文件在Apple开发者账号中,根据选择的AppID + 发布方式 生成,如果您之前使用的XCode配置是自动获取,那么在使用深信服某些功能时,就需要在Apple开发者账号中下载相关文件。

比如在下图,由于描述文件与签名不匹配并且不具有NetworkExtention功能,XCode不允许其进行编译

什么是PacketTunnel/NetworkExtion,为什么需要申请额外的描述文件?

NetworkExtion是Apple提供VPN功能的标准扩展,而PacketTunnel是深信服利用NetworkExtion技术具体实现的具有L3VPN功能的扩展,在SDK和aWork中都有遇到,在Apple的规定中,扩展是与主App有相当大的独立性,以至于运行时时两个进程,所以想要使用NetworkExtion功能的时候,需要两个描述文件,一个主App的,一个NetworkExtion扩展的(NetworkExtion扩展还需要在生成描述文件时开启NetworkExtion功能)

另外,必须要注意的是:

  • PacketTunnel的签名文件必须与主App一致
  • BundleID以主App名为前缀

⚠️在深信服产品中,签名与描述文件需要注意什么?

  • aWork使用自定义证书时,需要您去申请对应的企业发布的p12,以及aWork与PacketTunnel的企业发布描述文件,深信服利用这些文件对aWork进行重签名,以配合相同签名EasyApp完成功能
  • SDK在集成时,如果需要使用L3VPN模式,则需要对深信服的PacketTunnel进行重签名,一般的,在成SDK前,可能您只有主App的描述文件,此时,就需要您申请NetworkExtion扩展的描述文件,并对PacketTunnel进行重签名,这样才能使用具有相同签名的主App去启动PacketTunnel
  • 在使用EasyApp封装功能时,请一定提供企业发布的签名p12与描述文件,因为在封装过程中,深信服会对App进行重签名,重签名就是使用的您上传的文件,如果不匹配或者不是企业发布签名,就可能出现无法封装、封装后无法安装的问题