我接触iOS应用签名整整六年了,最早是自己做个人开发的时候,做了几个本地工具类APP,不符合苹果App Store的上架规则,没法走官方上架通道,才开始自己研究各种签名方案,从最基础的P12签名证书生成、IPA签名操作一步步摸过来,这么多年踩过坑也用过足够多稳定的方案,今天就把我的真实使用经验整理出来。
很多刚接触iOS签名的朋友都搞不懂为什么一定要签名,其实这是苹果的安全机制决定的——iOS系统内核只允许安装经过苹果官方授权签名的应用,没有合法签名的IPA包哪怕安装到手机上,也会被系统直接拦截无法打开。而我们常说的P12签名证书,其实就是一个打包了开发者身份公钥和私钥的文件,是整个签名环节的核心。完整的签名逻辑其实是苹果的双层验证机制:开发者用自己申请的P12签名证书给IPA包做第一次签名,再把签名后的包提交给苹果服务器验证,验证开发者身份合法后,苹果会用自己的根证书做二次签名,用户手机安装的时候,系统只需要验证根签名是否有效,就能正常打开应用。不管是IPA签名、H5封装后的套壳APP签名,还是官方上架、TF签名里的签名环节,核心都是用合规的P12签名证书完成签名授权,P12证书的合法性和质量,直接决定了签名后的应用稳定性。
我最早做签名的时候,手里只有一两本P12证书,所有的包都签在这两个证书上,掉一次签所有应用都不能用,折腾了大半年才明白证书池机制的重要性。现在正规的签名服务商,包括我自己帮朋友做签名用的都是证书池,简单来说就是把几十上百本不同的合规P12签名证书整合到同一个签名系统里,根据每个应用的类型、大小自动分配证书,一本证书只签合理数量的应用,避免因为单本证书签名应用过多触发苹果的风险检测。如果某一本证书因为意外被苹果吊销,系统会自动从证书池里调出新的合规P12证书给应用做重签,整个过程不需要用户手动操作,大部分时候用户甚至感觉不到曾经掉过签。我自己的证书池里现在有120多本正规申请的P12证书,单本证书最多只签25个应用,这么运营三年多,平均每个月掉签的应用占比不到3%,大部分掉签都是因为应用本身涉及违规被举报,很少出现因为证书本身被苹果扫掉的情况。当然我也踩过证书池的坑,早年找过一个小服务商,说自己有大证书池,结果实际上只有不到10本证书,一本证书塞了上百个应用,不到半个月就掉了一半的包,补签还花了整整两天,那段时间真的折腾坏了。
说到UDID绑定,这是超级签名最核心的机制,和企业签名的原理完全不一样。企业签名用的是企业级开发者账号生成的P12证书,不需要绑定任何设备UDID,只要证书有效,任何iOS设备都可以安装,而超级签名用的是个人或者公司开发者账号生成的P12证书,苹果规则里个人开发者账号最多只能绑定100台测试设备的UDID,每一个绑定的UDID才能安装用这个账号签名的应用,所以超级签名本质就是把多个个人开发者账号的100个名额攒起来,用户安装应用之前,先获取用户设备的UDID,把UDID绑定到开发者账号后台,再用对应的P12证书给IPA重签名,生成只有这个UDID能安装的包。这个机制本身的好处是苹果很难批量封禁,因为每个账号只有最多100个名额,分散在不同账号里,一个账号出问题不会影响其他账号的安装,只要账号都是正规申请的,稳定性其实很高。我自己做内部测试的小工具就是用超级签名分发,一百多个内部员工的设备绑定,用了快两年,只有三个设备因为换手机重新绑定了一次,从来没有集体掉签的情况。当然UDID绑定也有问题,如果用到了黑卡申请的开发者账号,苹果一旦封号,这个账号下所有绑定的UDID都会失效,对应的安装包就全掉了,我早年贪便宜找过那种一块钱一个安装的超级签名,不到一个月所有账号全被封,一百多个种子用户的安装全掉了,损失真的不小,后来换了正规的八块钱一个安装的,就再也没出过这种问题。
这么多年我自己手动做过重签,也用自动系统签过,完整的重签流程其实很清晰,不管是IPA签名还是H5封装出来的新IPA包,流程都是一样的:第一步拿到原始未签名的IPA包,先解压删除包里面原有的旧签名和描述文件,清理掉残留的签名信息;第二步根据签名类型,从证书池里匹配对应合规的P12签名证书和描述文件,如果是超级签名,这一步要先把用户提供的UDID添加到开发者账号的绑定列表,生成对应这个UDID的描述文件;第三步就是用签名工具或者自动脚本,用P12证书给清理后的IPA包重新做签名,替换掉旧的签名信息;第四步重新打包生成新的可安装IPA包,然后上传到分发服务器,生成下载链接给用户;最后我们还会用测试机安装一遍,验证签名有效、应用能正常打开才会交付给用户。掉签之后的补签其实就是完整走一遍这个流程,只是把失效的P12证书换成新的有效证书而已,现在自动证书池系统已经能做到十分钟内完成补签,效率非常高。
接下来就是大家最关心的超级签名与企业签名的真实稳定性对比,还有不同渠道的真实价格,我把这么多年了解到的市场价整理一下,都是目前市面的真实行情:首先是共享企业签名,就是很多不同开发者的应用共用一个证书池的P12证书,价格一般是单个应用每月100元到300元不等,这种适合短期测试,稳定性差一点,掉签概率比较高;然后是独立企业签名,就是一本P12证书只给你自己的应用用,或者一个证书只放少数几个同类型合规应用,价格一般是每年1500元到3000元,按季度付的话每个季度大概500元到800元,这种稳定性就高很多;接下来是超级签名,基本都是按安装量收费,单个安装价格大概是5元到15元,安装量越大单价越低,一万个安装以上大概能谈到3元左右一个安装;然后是TF签名,也就是把应用上架到苹果官方的TestFlight做分发,这种价格一般是单个应用200元到800元一年,稳定性很高;最后是官方上架苹果App Store,除了开发者本身需要交每年99美元的苹果开发者年费,找代办上架的话,根据应用类型不同价格大概是3000元到10000元不等,上架成功后是最稳定的,但是审核门槛很高,很多应用没法过审。
说到稳定性对比,我这么多年的使用下来,八成以上的情况只要选对正规渠道,都是非常稳定的。我自己有一个H5封装的本地生活工具APP,用独立企业签名分发,放在大证书池里快两年了,只掉过一次签,那次是证书持有者的企业开发者账号到期续费,不小心误操作吊销了旧证书,掉签之后服务商不到一小时就用证书池里的新P12证书补签完成,用户只需要退出重进一下就能用,大部分用户都没发现出过问题。超级签名我用在一个线下门店的员工培训APP,三百多个UDID绑定,用了一年半,只有五个用户因为更换手机需要重新安装,从来没有掉签的情况,稳定性非常好。当然我也遇到过掉签、证书出问题的情况,除了刚才说的小渠道黑证书的坑,还有一次是我自己签的一个应用被同行举报,苹果直接吊销了证书,那次掉了之后也是两三天就补好了,没有影响太久。对比下来,企业签名适合用户量比较大的外部分发,不限制安装数量,只要证书池够大、P12证书质量好,月掉签概率不到5%,稳定性完全能满足需求,成本也比超级签名低很多;超级签名适合小范围的内部测试或者种子用户分发,因为UDID绑定分散,只要不用黑号,稳定性也很高,就是用户量上去之后成本会涨的很快;TF签名其实是除了官方上架之外最稳定的,因为是苹果官方认可的测试分发,只要不违规基本不会掉,缺点就是有些应用类型苹果不允许进TF,而且用户需要下载TestFlight才能安装,体验稍微差一点;官方上架当然是最稳定的,流量也最多,但是审核严、周期长,很多不符合规则的应用根本没法上架,所以才需要各种签名方案。
这么多年用下来,我最大的感受就是,iOS签名现在技术已经非常成熟了,核心就是选合规的P12签名证书,选有成熟证书池机制的正规服务商,只要应用本身不做违规内容,不管是IPA签名还是H5封装后的签名,稳定性都能满足大部分项目的需求,比起花几个月磨官方上架的审核,对于中小项目、内部工具、内测项目来说,签名分发的性价比真的高很多,偶尔的掉签也有成熟的补签机制快速处理,不会对正常使用造成太大影响。只要选对了渠道和方案,大部分用户都能获得和官方上架应用相差无几的使用体验,完全不需要担心稳定性的问题。