我研究iOS签名机制快八年了,大大小小的坑踩了不下几十个,这半年因为公司要做内部新员工培训应用,需要把定制的IPA包分发到员工手机上,不能公开上架,刚好用上了超级签名用于员工培训这个方案,这段时间实测下来,对整个iOS签名行业的各种规则、价格、稳定性又有了新的体会,今天就把我梳理的内容和实际体验分享出来。
首先说需求背景,我们做的员工培训系统是原生开发的IPA包,涉及大量内部课件、考核系统,肯定不能上架AppStore,上架之后所有用户都能搜到下载,会泄露公司内部信息,而且我们迭代速度快,平均两三天就会根据培训反馈更一次功能,走AppStore审核不仅要排队等,审核规则多不说,每次更新都要等三五天,完全跟不上我们的迭代节奏,所以一开始就排除了上架AppStore的选项。产品部一开始提过要不要做H5封装,把培训网页打包成IPA,省事又快,我一开始也动心了,试了一下H5封装的包,发现调用手机摄像头扫码、离线缓存课件这些原生功能体验极差,而且H5封装本质还是要生成IPA,最终还是需要做IPA签名才能安装,绕不开签名这一步,所以最后还是决定用原生IPA做签名分发,接下来就开始对比各种签名方式,TF签名、企业签名、超级签名都试了个遍。
先给大家理清楚最基础的设备签名逻辑,很多刚接触签名的朋友以为签名就是给IPA盖个戳就能装,其实不对,iOS的封闭生态决定了,只有经过苹果授权的应用才能在手机上运行,设备签名的核心逻辑,就是给应用加上苹果认可的授权,证明这个应用允许在指定的这几台设备上安装运行。就拿我们用的超级签名来说,它本质用的是苹果个人开发者账号的测试设备授权:每个付费的苹果开发者账号,每年都有最多100台测试设备的绑定配额,你要安装应用的设备,先把它的UDID上报给苹果开发者后台,苹果登记之后,用对应的证书给IPA签名,用户手机安装的时候,系统会联网校验你的设备UDID是不是在苹果登记的授权列表里,如果在,就能正常安装运行,不在就会提示无法验证应用,打不开。
接下来讲证书分发原理,证书其实就是苹果给开发者签发的一份授权证明,开发者本地生成证书请求文件,上传到苹果开发者后台,苹果验证你的开发者资格有效之后,就会给你签发对应的开发或者生产证书,我们做分发用的一般是生产证书,拿到证书之后,我们用它给IPA包的二进制代码、资源文件做签名校验,把签名信息写入安装包,iOS系统安装的时候,除了校验设备UDID,还会校验签名是不是苹果签发的有效证书,所有信息对的上才会允许安装。这个过程里,证书是核心,证书一旦被苹果撤销,所有用这个证书签过的IPA都会失效,也就是大家常说的掉签。
讲完基础原理,就不得不说大家最关心的Apple ID风控,这个也是我踩过最大的坑,我最早做内部应用的时候,图便宜找了那种十几块钱一个月的共享签名,结果用了不到一周就全掉了,找渠道才知道,那个渠道用的Apple ID都是批量注册的黑号,要么是盗来的,要么是违规刷出来的开发者账号,苹果的风控系统一检测就封,封了之后直接撤销证书,所有签名全部失效。苹果的风控规则虽然没有公开,但是我这么多年摸出来的规律很清晰:同一个IP地址登录几十个上百个开发者账号,必然触发风控;同一个开发者账号频繁批量增删UDID,一个月新增几百台设备,也会触发风控;注册之后没有任何正常使用行为,只拿来签名不做其他开发,就是苹果眼里的风险账号,随时会被封。所以现在找签名,首先要看对方的Apple ID是不是正规注册、正常维护的,不然再便宜也不能用。
说到这里,就该讲大家经常问的独享证书和共享证书的区别了,这个也是影响稳定性最大的因素。共享证书就是几十上百个开发者共用一本证书,或者一个开发者账号给几十个不同的IPA签名,所有客户共用这个账号的配额和证书,它的成本很低,所以价格也卖的很便宜,我这次找渠道的时候,看到很多共享超级签名一块钱一个设备,甚至还有不限设备三百块钱包年的,看起来吸引力很大,但是背后的风险也很大,刚才说的风控问题,共享账号因为签名的应用多,UDID变动频繁,非常容易触发苹果风控,掉签概率比独享证书高十几倍,而且一旦掉签,所有用这个证书的应用全都打不开,很多小渠道收了钱,掉签了就给你重新签一次,过两天又掉,甚至直接跑路不管你。而独享证书就是一本证书只给你一个应用用,对应的Apple ID也只用来维护你这一个应用的签名,不会给其他客户用,成本自然高,价格也贵,我这次选的独享超级签名,一千个设备配额包年才三千多,算下来一个设备一年才三块多,其实也不算贵。
这次为了员工培训应用不翻车,我特意做了三个月的稳定性实测,前后对比了四个不同渠道的不同方案,给大家说说实际感受。第一个是淘宝买的共享证书超级签名,我花20块钱买了10个设备测试,第三天就全掉了,卖家直接失联,这个就不用多说了。第二个是个人开发者出的共享证书,300块钱一年不限设备,我装了50台测试,平均12天掉一次,每次掉了要等大半天才能重新签好,员工还要重新安装,非常折腾。第三个是TF签名,这个其实是苹果官方的TestFlight分发,稳定性确实不错,我测试了半个月没掉,但是问题也很明显,每次更新都要重新提交TF审核,快的话也要大半天,慢的话要一两天,我们两三天一更的节奏根本跟不上,而且员工安装还要先下载TestFlight,再跳转到里面下载应用,多了一步操作,很多新员工一开始都找不到安装入口,体验不好。最后就是我现在用的独享证书超级签名,从六月份部署到现在,一共86台员工设备,前后更新了四次,整整三个多月,没有掉过一次签,安装成功率100%,只有两个安装问题,一个是员工自己输错了UDID,改完之后重新发链接就好了,另一个是手机网络差下载中断,重新下一次就解决了,稳定性真的超出我的预期。
再说说不同渠道的价格感受,这么多年我发现,iOS签名这个行业真的是一分钱一分货,便宜有便宜的道理,贵有贵的好处。之前我总想着省钱,能省一点是一点,结果每次掉签耽误事,耽误项目进度,领导批评不说,还要花几倍的时间去补锅,算下来反而更贵。这次我算过账,我们86台设备,独享包年也就不到三百块钱,平均下来一个员工一年才三块多,一杯奶茶钱都不到,换来了三个多月不用管,安安稳稳,太值了。那些便宜的共享签名,看起来一年才几十块钱,但是掉一次签,折腾我大半天,我的时间成本都不止这点钱,更何况员工培训要是因为打不开应用耽误了新员工入职流程,这个损失就更大了。
这段时间我也遇到了不少问题,给大家提个醒,很多新手朋友会觉得H5封装不用签名,这是完全错误的,不管你是原生开发还是H5封装,只要是要安装到iOS手机上的IPA,都必须做IPA签名,没有合法签名,系统根本不让你安装,我之前试H5封装的时候就遇到过,H5封装工具导出的IPA包结构有问题,就算签名没问题,安装之后也会提示无法验证,后来重新调整了包结构才好。还有就是很多渠道宣传免UDID超级签名,说不用用户提供UDID就能安装,我也试过,结果不到三天就掉了,这种其实大多是用共享证书,还靠灰色手段获取用户UDID,非常容易触发苹果风控,根本不稳定,反而不如正规的获取UDID的方式靠谱。
总结下来,超级签名用于员工培训这种小范围的内部应用场景,真的是再合适不过了,对比AppStore更灵活,不用公开也不用等长审核周期,对比TF签名更新更方便,改完就能发不用重新等审核,对比企业签名稳定性更好,价格也更低,只要选对了独享证书的正规渠道,稳定性完全可以满足需求,价格也不高,适合企业做内部应用分发。不管是做什么用途,选签名千万不要只看价格,稳定性才是最重要的,省了几十块钱,掉签耽误事就得不偿失了。我这次选对了方案,整个新员工培训周期下来没有出任何问题,领导也很满意,也算给自己这么多年研究iOS签名交了一份满意的答卷。