我研究iOS签名机制快八年了,从最早企业签名刚兴起的时候就开始折腾,最开始是帮圈内朋友签内测包,后来自己做小工具开发分发,踩过的坑比我经手的安装包还多,今天就以我自己的实际经验,把从底层逻辑到实际使用的所有感受捋清楚,给刚入行的朋友做个参考。
P12签名证书用于代码签名,这是整个iOS签名的核心基础,要讲明白就得先从设备签名逻辑说起。iOS系统本身做了严格的签名验证,所有能在设备上打开运行的应用,必须经过苹果官方信任的证书签名,系统验证通过才会放行,不然要么提示“未受信任的开发者”,根本打不开,连安装步骤都走不完。我们常说的IPA签名,本质就是把开发者打包好的IPA安装包,用对应类型的证书做重签名,替换掉原包的签名信息,让系统认可这个包的合法性。P12文件其实就是把证书和对应私钥打包导出的文件,做代码签名的时候,就是用P12里存储的私钥对安装包的哈希值做加密签名,苹果系统验证的时候,就能对应到苹果开发者后台已经授权过的证书,自然就能通过验证正常安装。
讲完基础逻辑,再说说证书分发原理。苹果的开发者账户本身分好几种,每年99美元的个人/公司开发者账户,每年299美元的企业开发者账户,不同账户能申请的证书权限完全不一样。99刀账户的证书只能用来上架AppStore或者做一百台设备的内测,而299刀的企业开发者证书,苹果本来就是给企业做内部员工应用分发用的,天生开放了免上架、不限设备安装的权限,不需要经过AppStore审核就能直接分发,这也是所有线下企业签名的核心原理。除了企业签名,我们现在常用的还有TF签名,也就是基于TestFlight的签名,本质是把应用作为内测包上架到苹果官方的TestFlight平台,用户通过TestFlight下载安装,也是苹果官方认可的分发方式,稳定性天生就比企业签更高。
说到这里就不得不提大家最关心的Apple ID风控,还有独享证书和共享证书的区别,这两块我踩过的坑真的太多了。苹果现在的风控机制已经升级得非常完善了,不再是人工举报才会处理,都是机器学习自动扫描,从证书签名的应用内容,到关联的Apple ID信息,都会做风险评估。如果同一个证书下签名了多个违规应用,比如擦边内容、违规功能,苹果扫描到之后会直接封禁整个证书,严重一点还会牵连整个Apple ID,直接封掉开发者账号,所有关联证书都会失效。那独享和共享的区别就很明显了:共享证书就是一张P12证书,签名服务商同时给几百上千个不同开发者的IPA包共用,什么包都往上签,自然很容易碰到违规包牵连,掉签率非常高;而独享证书就是一张证书只给一个开发者用,只签你自己的应用,只要你自己的应用合规,基本不会因为别人的应用被牵连封号掉签,稳定性要高太多。我最早刚做签名的时候,贪便宜用共享证书,那时候苹果风控还没现在严,偶尔能稳一两个月,现在我试过好几个渠道的共享签,最快三天就掉,慢的也就半个月,真的没法长期用。
我之前也做过三个多月的稳定性实测,专门找了三个不同渠道的证书,签同一个合规的IPA包,放同样的五百台设备量,每天统计掉签情况,结果差异真的太明显了:第一个是某小渠道的共享证书,二十块钱一个月,第七天就掉签了,问服务商才知道,同证书上有个赌博类的包被苹果扫了,整个证书直接封了,我们所有人的包都掉;第二个是个人中间商号称的独享证书,收了我八百块一个月,结果第三十二天掉了,后来查出来他根本就是把共享证书冒充独享卖,偷偷把我的包放到别人的证书上,人家的包违规了连坐掉签;第三个是正规大平台的独享证书,六百块一个月,整个三个月测试期结束,一次都没掉,后来我一直用这个证书,用到现在快一年了,只因为苹果更新政策换过一次证书,服务商十分钟就处理完了,用户根本没感知,这种稳定性真的是共享签给不了的。
说完稳定性再说说我这么多年跑不同渠道的价格感受,这个行业价格真的太乱了,从几十块到上千块都有,我总结下来就是一分钱一分货,贪便宜一定会吃亏。共享证书一般都是按包按月收费,便宜的十块钱一个月,贵一点的四五十,看起来确实便宜,但是掉一次签,你要重新给所有用户发安装链接,用户流失最少三分之一,我之前做一个本地生活的工具内测,刚开始图便宜用共享,半个月掉一次,掉一次我就要重新通知所有用户重新下载,不到一个月,五百个用户跑了两百多,后来换了独享,虽然一个月六百多,但是稳了快一年,用户留存直接上去了,算下来其实比共享划算太多。独享证书的价格差异也很大,个人中间商一般比大平台便宜两三百,但是我碰到过两次跑路,一次卷了我半年的年费就消失了,一次是封了证书找不到人补,损失太大;大平台价格透明,售后也稳,掉签了能很快补,虽然贵一点,但是用着放心。TF签名一般是按次收费,价格从三百到一千多不等,大部分能稳两三个月到半年,对于中小内测项目来说性价比很高,比按月付的企业签便宜,稳定性还更好,就是需要过苹果审核,违规应用过不了,而且最多只能装一万台设备,超了就要重新弄,所以用户量超过一万的项目还是用独享企业签更合适。
这里还要说到大家常问的H5封装,现在很多开发者不会做原生开发,都是把H5网页封装成IPA包,再签名分发,我帮朋友弄过好多个H5封装的项目,这里坑特别多。H5封装的IPA包,很多人不注意内容合规,比如加了违规功能、没做备案,甚至内容本身就不符合苹果规则,这种包不管你用什么证书,都很容易触发苹果风控,我之前有个朋友做分销商城的H5封装,没改违规内容,用共享签三天掉,换了我的独享签,不到一周证书也被封了,后来改了内容去掉了违规部分,才稳定下来。所以H5封装的IPA,一定要先把内容合规做好,不然再好的证书也扛不住苹果风控。
很多人也会问,为什么不直接上架AppStore?不是所有应用都适合上架AppStore的,企业内部办公应用、还在迭代的内测项目、不符合AppStore审核规则的工具类应用,都没法上架,这时候才需要IPA签名分发。我自己有好几个私人用的小工具,都是调用系统权限做自动化操作的,根本不可能过AppStore审核,所以一直都是自己签名用;很多创业公司做内测,每周都要更两三个版本,总不能每次更新都等AppStore审核三五天吧,根本赶不上测试进度,所以都是签名后分发,测试完稳定了再正式上架AppStore,这也是现在行业内的常规操作。
我这么多年遇到印象最深的坑,还是前年帮客户做项目的那次,客户本来要做企业内部办公应用,我推荐他用独享证书,结果他贪便宜,一定要用共享证书,说能省大几百,我劝了好几次都不听,结果装好不到十天,证书因为同包的违规应用被封,一百多个员工都用不了,客户那边老板大发雷霆,找到我头上,我没办法,只能免费帮他换了我自己用的独享证书,才把问题解决,那一次我直接亏了小一千的证书费,从那之后我不管谁找我做签名,我都先把丑话说在前面,临时用三五天的测试包可以用共享,长期用一定要上独享,不然出了问题真的得不偿失。还有一次我自己注册了企业开发者账号,想自己签自己的包,结果帮朋友签了一个他的测试包,他那个包内容违规,苹果直接把我整个开发者账号封了,两千多块的年费直接打了水漂,从那我才知道,苹果的风控是连整个Apple ID一起算的,只要你账号下有一个证书出问题,整个账号都保不住,所以现在我都不自己拿账号签了,都是找正规服务商拿独享,人家有专人做风控分流,合规和不合规的分开放,风险小很多。
总的来说,玩了这么多年iOS签名,我最大的感受就是,签名行业没有绝对便宜又稳定的好事,一分钱一分货永远是真理,临时测试可以选便宜的共享签,长期使用一定要选正规渠道的独享证书,中小项目内测优先选TF签名,稳定性价比又高,只要你的应用本身合规,选对合适的证书,就能长期稳定使用,完全可以满足不上架AppStore的分发需求。