我接触iOS签名机制快八年了,从最早企业签名刚兴起的时候就开始折腾,帮身边大小团队做过几百次IPA签名,踩过的坑比吃过的饭还多。这段时间总有圈里的新朋友找我吐槽,说现在签名掉得人心慌,上个月刚交了钱,这个月就全掉了,问我有没有真正稳定的签名方案。刚好我前阵子整理了自己用的P12签名证书监控到期提醒脚本,干脆把这些年摸出来的干货整理出来,给大家做个参考。
很多刚接触iOS分发的朋友第一个搞不懂的就是,为什么我的IPA不能直接装到iPhone上?这就要从iOS的设备签名逻辑说起。iOS从诞生之初就是闭源系统,为了保证设备安全,所有安装到系统上的应用都必须经过苹果的签名验证,没有合法签名的IPA,就算你把安装包传到手机上,系统也会直接禁止启动,根本打不开。早期的内测签名,核心逻辑就是UDID设备绑定:苹果给个人和公司开发者账号开放了测试设备权限,一个账号最多可以绑定100台测试设备的UDID,也就是设备唯一识别码,你把需要测试的设备UDID加到开发者后台,生成对应的描述文件,再用开发证书打包做IPA签名之后,只有这些绑定过的设备才能正常安装启动,没绑定的设备哪怕拿到安装包也用不了。我刚入行的时候不懂这个规则,曾经为了多装用户,在一个证书里加了102台设备,结果提交之后苹果直接驳回了描述文件,所有已经安装的用户全部打不开,那时候还没有自动化监控,等我收到用户反馈的时候已经过去大半天,耽误了客户的内测,赔了不少人情,从那之后我就一直想做个自动化的监控工具,后来慢慢攒出来这个P12签名证书监控到期提醒的小工具,就是为了避免这种低级错误。
搞懂了基础的签名逻辑,再来说说大家常问的证书分发原理,以及现在市面上吵得最多的独享证书和共享证书的区别。我们常说的企业签名,用到的是苹果企业开发者账号发放的企业分发证书,这种证书本身是给企业开发内部自用APP用的,不需要绑定设备UDID,也没有设备数量限制,所以被用来做对外的APP分发。P12文件就是包含了证书私钥的导出文件,服务商拿到P12和对应的描述文件,就可以给任意IPA做重签名,让用户直接安装。所谓共享证书,就是几十上百个开发者共用同一个P12证书,大家把自己的APP都放在这个证书上签名,服务商把成本摊开,所以价格卖得很便宜;而独享证书就是整个证书只给一个客户用,只签客户自己的APP,不会分给其他人用。
为什么很多人签名掉得勤?核心原因就是没搞懂苹果现在的Apple ID风控规则。这七八年我亲眼看着苹果的风控机制越来越严,早五六年前,你随便注册个企业开发者账号,一个证书签几十个APP,用一年都不会被吊销,现在完全不一样了。苹果的风控模型会从多个维度检测你的账号和证书:同一个账号是不是频繁切换IP登录?同一个证书签了多少个APP?签的APP有没有违规内容?有没有异常的安装量?只要触发任何一个风控阈值,苹果直接就会吊销你的证书,严重一点直接封掉整个开发者账号。我2019年那会贪便宜,给自己做的小工具APP找了个一个月80块的共享证书,当时比独享证书便宜了快400块,我觉得反正就是个小工具,凑合用就行,结果不到半个月,突然所有用户都反馈打不开,查了半天发现,同证书的一个开发者签了违规的菠菜APP,被苹果举报之后封了证书,整个证书所有APP全掉,我那时候有三千多付费用户,挨个安抚,还给大家退了四分之一的会员费,前前后后损失了小两万,从那之后我做正式分发再也没碰过共享证书。
现在很多中小开发者和做本地生活业务的商家,不愿意花精力过AppStore审核,大多会选择把H5页面封装成IPA,再做签名分发,也就是常说的H5封装。很多人觉得H5封装的IPA签名规则不一样,其实本质上和原生IPA签名没有任何区别,但是H5封装的IPA反而更容易触发风控,我见过太多踩坑的朋友:很多在线封装平台会默认给IPA加上很多不必要的权限,比如读取通讯录、获取精准位置,甚至还有的加了推广SDK,这些多余的内容很容易被苹果的风控系统检测到,哪怕你的业务本身没问题,也可能被吊销证书。之前我帮一个做社区团购的朋友处理过掉签问题,他就是在某平台免费封装的IPA,签完不到一周就掉了,我拆开包一看,里面带了三个第三方推广SDK,还有两个多余的权限申请,去掉之后重新签名,换了独享证书,到现在一年多都没掉过。
要说最稳定的分发方式,肯定还是上AppStore,苹果官方认可,只要你不违规,永远不会掉签,用户下载也方便,但是AppStore的审核规则大家都懂,很多类型的APP根本过不了审,比如一些内测中的项目、一些特殊行业的内部APP、还有一些带小众功能的工具,都没办法上架AppStore,这时候TF签名就是次优的选择。TF签名其实就是把IPA上传到苹果官方的TestFlight内测平台,通过苹果官方的签名让用户安装,本质上是走官方渠道,所以稳定性比企业签名高很多。TF签名的优势很明显,不容易掉签,一般只要你APP不违规,能用两三个月甚至更久,但是也有缺点:一个TF包最多只能邀请10000个测试用户,超过之后就得重新打包上传,而且用户下载需要先安装TestFlight客户端,再点击邀请链接才能安装,步骤比企业签名麻烦一点,另外90天测试期到了之后也需要重新上传,并不是很多服务商宣传的永不掉签。我去年给一个公司做内部办公APP,一共1100多个员工,刚好符合TF的用户限制,用了一年多,只在90天的时候重新上传了一次,从来没掉过签,比之前他们用共享企业签名稳定太多了。
玩了这么多年,我也跑过不下几十个渠道,对不同渠道的价格感受真的很深,价格差大,稳定性差更大。现在市面上的共享企业签名,一般一个IPA每月价格在50到150块之间,便宜是真便宜,但是稳定性真的差,我见过平均一周掉一次的,只适合刚开发出来做内部测试,绝对不适合给用户用;独享企业签名,价格一般每月300到800块不等,包年的话大多在3000到6000块,我现在用的这个渠道,包年独享是4800,合下来每月400,属于中等价位,稳定性已经非常好了;TF签名现在大多是按包收费,一个包保三个月一般是200到500块,也有按安装量收费的,一个下载1到2块,如果你的用户多,其实算下来比独享企业签名还贵;个人UDID签名适合小体量用户,一般一台设备每年10到30块,100台设备满配也就1000到3000块一年,适合用户不到100人的小团队内测,性价比很高。
前三个月我专门做了一次为期30天的稳定性实测,选了五个同类型的H5封装本地资讯IPA,分别放在共享证书、中等价位独享、高价独享、TF签名、UDID签名五个渠道,全程记录掉签和异常情况,结果很能说明问题:共享证书在第7天就因为同证书违规被吊销掉签,补签之后第22天再次掉签,30天掉了两次;中等价位独享证书全程没有掉签,只有3个用户反馈偶尔打不开,排查后是描述文件缓存问题,重新安装就解决了,只有一次小波动;高价独享和TF签名、UDID签名全程30天没有任何异常,所有用户都能正常打开。这次测试我把所有P12证书都加到了我的P12签名证书监控到期提醒脚本里,脚本每天自动查询证书状态、剩余配额和到期时间,有异常就给我发微信提醒,那次共享证书掉签前两个小时,我就收到了异常提醒,提前给测试用户发了通知,把影响降到了最低,要是没有这个监控,等用户来找我,我都不知道出了什么问题,这个监控提醒对于做签名的人来说真的是刚需。
这么多年总结下来,其实签名行业根本没有什么神乎其神的永不掉签技术,核心就是选对证书类型,做好Apple ID风控,做好日常监控。贪便宜用共享证书,看起来省了几百块,一次掉签损失的用户和口碑,远远不止这点钱。我现在给朋友推荐方案,都是按用户规模来:用户不到100,选UDID签名,便宜稳定;用户在100到10000之间,优先选TF签名,官方渠道省心;用户超过10000,或者不方便用TF的,就选中高端的独享企业证书,一定要做好P12证书的监控,提前预警到期和异常,基本能做到大半年甚至一年不掉签。我自己的三个工具APP,用独享证书已经快10个月了,没有掉过一次,用户的续费转化率比之前用共享签名的时候高了35%,这点投入真的非常值。只要摸清楚规则,选对渠道,做好监控,其实稳定的签名并没有大家想的那么难。