我研究iOS签名机制快八年了,从最早企业签名刚兴起的时候就开始帮身边做开发的朋友调试测试包,踩过的坑比很多新人接触过的签名渠道都多,到现在还有很多刚接触侧载分发的朋友,签完IPA之后装不上,问我哪里出了问题,十有八九是漏掉了苹果签名证书手动信任这关键一步,这看起来简单的操作,难倒了大半刚入门的新手。今天我就把这么多年总结的干货全说出来,从底层逻辑到实际使用感受,给想要做应用分发的朋友做个参考。
先说说设备签名的底层逻辑,iOS作为闭源系统,核心规则就是所有安装到手机上的应用必须获得苹果的官方授权,不管你是从AppStore下载的还是通过侧载安装的,本质上都需要合法的签名验证才能运行。从AppStore下载的应用,苹果已经提前帮开发者完成了全链路的签名验证,用户下载完直接点开就能用,不需要任何额外操作,但很多不能上架AppStore的应用,比如企业内部的办公OA、还在灰度测试的新产品、不符合苹果审核规则的工具类应用,就需要通过IPA签名的方式获得授权,实现不通过AppStore直接安装。设备签名的逻辑说透了就是:苹果通过颁发证书给开发者授权,开发者用对应证书给IPA安装包加上签名标识,iOS系统验证签名合法后,就允许应用安装运行,而我们安装完第三方签名的应用后,需要做苹果签名证书手动信任,本质就是系统默认不会自动信任非AppStore分发的企业级证书,需要用户手动在设置中开启信任权限,这一步说简单也简单,但刚接触的用户几乎都容易在这里卡壳。
再说说证书分发的原理,苹果开发者账号本身分为个人、公司、企业三种不同类型,不同类型的账号能生成的证书权限完全不同,证书分发的本质就是苹果给开发者账号下发对应权限的授权证书,开发者用证书给应用签名后就能向外分发。我们常见的几种分发方式对应不同的证书:企业签名用的是企业开发者账号生成的in-house证书,不需要绑定设备UDID,也不需要上传苹果官方服务器,就能直接分发安装;超级签名用的是个人开发者账号的Ad Hoc证书,通过绑定用户设备UDID实现授权;TF签名本质是走苹果官方的TestFlight测试通道,需要把IPA包上传到苹果官方平台,用户通过TestFlight客户端安装,相当于官方认可的内测分发;而现在很多小团队喜欢做的H5封装,就是把适配移动端的网页打包成IPA安装包,再做签名分发,这种方式开发成本低、上线速度快,很多本地商家、小团队的内部应用都这么做,只要封装出来的IPA包本身没有违规内容,签名后的稳定性和原生包差不了多少。
接下来聊聊大家最关心的Apple ID风控,这些年我栽在风控上的次数真不少,苹果的风控机制这些年越来越严,早就不是早些时候随便弄个账号就能随便签名的时代了。不管是个人账号还是企业账号,只要你签名的IPA包涉及违规内容,比如涉赌涉诈、盗版侵权、违反苹果规则的功能,苹果检测到之后会直接吊销证书,严重一点直接封禁整个开发者账号,很多人签名频繁掉签,百分之八十都是触发了苹果的风控。我早年就碰过一件糟心事,那时候刚入行贪便宜用了共享证书,结果同证书上有个客户签了盗版影视APP,被用户举报后苹果直接吊销了整个证书,我当时给一个客户做的内部OA全掉签,几百个员工都没法用,最后我赔了客户小一万块才摆平,从那之后我就再也不敢随便碰乱加应用的共享证书了。现在苹果的风控不只是查违规应用,还会检测账号的使用行为:同一个个人开发者账号本来最多只能绑定100台测试设备,你硬绕限制绑几百台,很快就会被封;一个企业证书签了上百个不同的第三方应用,安装量短时间暴涨,也会触发苹果的异常检测,直接吊销证书,所以风控这块真的不能大意。
说到这里就不得不提独享证书和共享证书的区别,这么多年用下来,我最大的感受就是两者的稳定性和价格差得不是一星半点。共享证书就是很多不同开发者、不同IPA包共用同一个证书,好处就是价格极低,我见过最便宜的共享企业签一个月才几十块,一年也才两三百,很多新人刚入门贪便宜就会选,但稳定性真的差到离谱,我早年刚做的时候买过一百块三个月的共享签,结果一周掉三次,每次掉签都要重新签名,还要通知所有用户重新安装,折腾到最后客户都跑了,算下来亏的钱比买一年独享证书还多。而独享证书就是一个证书只给你自己用,只放你自己的应用,不会给其他陌生人的IPA签名,价格自然贵很多,我现在用的独享企业证书,一年下来大几千,但换来的是超高的稳定性,只要你自己的应用不违规,基本不会掉签。
说说我这些年接触不同渠道的价格感受,现在签名市场的价格分层真的很明显:淘宝、拼多多上几块钱一周的共享签,基本都是圈钱的,签完没两天证书就掉,商家也联系不上,纯纯的智商税;中端渠道的共享签一般一个月100到300块,能用上一两个月,但掉签频率还是很高,出了问题售后也不及时;独享证书的价格一般一个月500到1500不等,一年下来几千块,稳定性有保障,大一点的渠道还会给备用证书,一个出问题另一个直接顶上去;TF签名一般是按下载次数收费,一个下载2到5块钱,或者包月几百块,适合小范围内测;如果能上架AppStore当然最好,但是上架AppStore不仅需要每年交99美元的开发者费用,还要过苹果严苛的审核,很多应用根本过不了审,所以才会选择签名分发的方式。
去年我专门花了三个月做稳定性实测,用同一款未上架的测试应用,分别做了共享签名、独享签名、TF签名,另外还做了一个H5封装的包做独享签名,用三台不同系统版本的iPhone从iOS14到iOS16不间断测试,结果差异真的很大。共享签名那个,第一个月就掉了四次,第三次掉签就是因为同证书上有违规应用被苹果封号,整个证书直接作废,之后我找商家也联系不上,只能重新换渠道,而且安装过程中经常出现“无法验证应用”,哪怕我做了苹果签名证书手动信任,系统还是不认,稳定性极差。然后是独享企业签名,三个月只掉了一次,还是我自己不小心把一个带测试违规内容的包放上去了,触发了风控,删掉违规包重新签名后,直到现在快一年了都没掉过,每天打开十多次,不管是新系统还是旧系统都能正常运行,从来没有出现过无法验证的问题。然后是TF签名,作为苹果官方的内测渠道,三个月测试一次都没掉过,稳定性比独享企业签还高,但缺点也很明显:一是每个应用最多只有10000个测试名额,大范围分发根本不够用;二是审核很严,违规应用根本上传不了;三是用户需要先下载TestFlight才能安装应用,很多用户觉得麻烦,转化率会低很多。最后是H5封装的IPA包做独享签名,稳定性和原生IPA签名几乎没有差别,只要封装的时候代码没有问题,不触发苹果的检测,用了快一年也没出问题,很适合小团队小范围使用。
这些年我也碰到过很多有意思的坑,之前找一个小渠道做共享签名,价格特别便宜,结果用了半个月,用户反馈说打开应用老是弹低俗广告,我反编译了IPA包才发现,不良商家给共享证书签名的时候,会偷偷给所有包注入广告代码,赚额外的广告费,好好的一个内部应用弹乱七八糟的广告,差点把客户的生意搅黄,换成独享证书之后就再也没有出现过这种问题,毕竟独享证书只有你自己用,商家也不会随便修改你的安装包。还有一次,我给客户做完签名,所有用户都装好了,结果全都打不开,客户急得给我打电话,我远程帮一个用户看了一下,才发现所有人都没做苹果签名证书手动信任,系统弹了未受信任的提示之后,用户就以为是应用坏了,从那之后我每次给用户做签名,都会附上一步一步的图文教程,避免再出现这种低级问题。
其实现在来看,能上架AppStore的应用我还是建议尽量走官方渠道,官方渠道的稳定性是最高的,用户下载也方便,不需要任何额外操作,也不会掉签,但对于确实没法上架的应用,选对签名方式真的太重要了,一分钱一分货永远是真理,贪便宜用低价共享签,最后掉签丢用户,亏的还是自己,选独享证书只要应用不违规,稳定性完全能满足需求,哪怕价格高一点,长期用下来反而更划算。