我玩iOS签名机制快八年了,最早从iOS逆向工程入行,帮身边创业朋友处理应用分发的需求,踩过无数大小坑,从最早的企业签名满天飞,到现在苹果风控越来越严,我也一点点摸透了整个签名生态的规则,前几年为了解决证书过期掉签的麻烦,还自己写了P12签名证书自动更新脚本,帮我和不少同行解决了掉签影响用户的大问题,今天就把我这些年攒的经验实打实说出来,从核心逻辑到实际体验都讲清楚。
首先说最基础的设备签名逻辑,iOS天生的封闭性决定了,所有能在系统上运行的应用,都必须经过苹果官方认可的签名,没有签名或者签名失效的应用,会直接被系统拦截打不开。我们常说的设备签名,本质上就是利用苹果开发者账号的设备绑定权限,把需要安装应用的用户设备UDID,提前添加到苹果开发者后台的设备列表里,再生成对应绑定了设备列表的描述文件,最后用我们手里的P12证书对目标IPA包做重签名,也就是大家常说的IPA签名,这样用户下载安装后,苹果服务器验签时就能查到对应的设备授权,应用自然就能正常打开了。我刚入行的时候不懂这个逻辑,以为只要有证书就能随便签名,第一次帮朋友签完,二十多个用户一半都打不开,折腾了三天才搞明白,原来我忘记把用户的UDID加到开发者后台的设备列表里,那时候又没有自动化工具,一个个手动加,累得半死还差点砸了招牌,从那之后我才明白,搞懂基础逻辑比什么都重要。
接下来讲证书分发原理,证书本质上就是苹果颁发给开发者的数字身份凭证,我们导出的P12文件,就是带完整私钥的证书文件,是给IPA签名的核心凭证。目前主流的分发模式有几种,对应不同的证书类型:第一种是企业开发者账号发的企业证书,不需要绑定具体设备UDID,可以给任意设备签名,所以最早的企业分发都是用这种,签完的IPA一般放到H5封装的下载页面,用户点击安装就能用,不需要越狱,也不需要绕开系统限制。第二种是个人开发者账号或者公司开发者账号发的描述文件证书,分开发测试用和设备签名用,也就是我们刚才说的绑定UDID的设备签名。第三种就是TF签名,也就是基于TestFlight的官方分发,本质上是把应用作为测试包放到苹果官方的测试平台,用户通过TestFlight下载安装,本身就是苹果认可的分发方式。很多人不知道,哪怕是上了AppStore的应用,也会用TF签名做内部灰度测试,而那些不符合AppStore审核规则,又需要分发的应用,才会用各种侧载签名的方式。这里说一下H5封装,现在很多中小开发者或者商家,会把自己的web网页、小程序业务封装成IPA包,也就是H5封装,这类应用大多不符合AppStore的审核要求,所以几乎都依赖第三方签名分发,对签名稳定性的要求远高于普通测试应用,毕竟用户要长期打开使用,掉签一次就可能流失一大批用户。
说到这里就不得不提大家最关心的Apple ID风控,这些年苹果对签名的管控越来越严,风控规则也在不断更新,我吃过的亏真的能装一箩筐。2019年的时候,我那时候还没摸透风控规则,一次性给一个ID导入了一百多个UDID,当天那个ID直接红了,证书直接被苹果吊销,里面绑定的八十多台设备全掉签,客户那边是做本地生活服务的,当天就炸了,我赔了不少钱才把事情摆平。后来我花了一个多月整理苹果风控的规则,才搞明白,苹果现在对Apple ID的风控是多维度的:登录地点异常、单ID操作频率过高、单日绑定UDID数量过多、签名的应用包含违规内容、同一个IP登录多个ID,这些都会触发风控,轻一点的是证书失效掉签,重一点的直接封ID,之前存的证书全都用不了。现在我操作ID都会严格控制,每个个人ID每周新增绑定UDID不超过15个,每个ID的登录IP固定,操作之间留足间隔,还会用脚本自动监测ID的状态,触发轻度风控就立马切换备用ID,这么多年下来,几乎很少再出现大面积封ID的情况了。
接下来聊大家最关心的独享证书和共享证书,还有不同渠道的价格感受,我这么多年两种都用,也接触过各种渠道的货,太清楚里面的门道了。共享证书就是几十上百个客户共用同一个P12证书,什么乱七八糟的应用都往上签,价格非常便宜,现在市场价一般就是几十块到一百多块钱一个月,很多人贪便宜会选,但是稳定性真的差到离谱。只要其中一个应用违规被苹果查到,整个证书都会被吊销,所有客户的应用全掉签,我之前见过最夸张的,一个共享证书一周掉四次,用户根本用不了。还有不少不良服务商,把共享证书当独享卖,收大几百一个月,掉签了就拉黑失联,坑了不少新手。独享证书就是整个证书只给少量客户用,甚至一个客户独享,只会签正规合规的应用,触发风控和吊销的概率低很多,价格自然也更贵,现在独享企业证书一般一个月大几百到上千,独享个人UDID设备签名一般按年按台收费,一台设备一年几十块,100台就是五千左右一年,看起来比共享贵很多,但是算上掉签流失用户的成本,其实反而划算得多。我之前有个做H5封装付费社区的客户,一开始贪便宜用八十块一个月的共享签名,不到半个月掉了三次,掉一次就有十几个付费用户退款,半个月亏了小两万,后来换了我的独享签名,一年才六千多,再也没出过大问题,客户反而赚了更多。而且我那个P12签名证书自动更新脚本,就是为独享证书做的,能自动监测证书的有效期和有效性,提前七天生成新的证书,自动给所有已签IPA重签,自动更新H5下载页的描述文件,支持OTA增量更新,用户几乎感知不到掉签,体验比手动更新好太多了。
去年我专门花了三个月做了一次稳定性实测,用同一个H5封装的本地生活IPA包,分四组每组100台活跃设备,分别测试不同签名方式的稳定性,结果很能说明问题:第一组共享企业签名,第一个月结束掉签率就到了42%,也就是42台设备应用打不开,第三个月结束掉签率达到79%,几乎剩下没几个能用的,稳定性最差。第二组是我自己的独享企业签名,控制每月只签不超过5个正规应用,三个月下来掉签率只有8%,掉签的8台还是因为苹果那次批量吊销企业证书波及的,用我的自动脚本半天就恢复了,大部分用户都没感知到。第三组是独享个人UDID设备签名,三个月掉签率只有2%,只有两台因为ID切IP触发轻度风控掉了,自动更新之后立马恢复,稳定性比独享企业还高。第四组是TF签名,也就是苹果官方的TestFlight签名,三个月下来零掉签,稳定性确实是最好的,但是TF也有缺点,一个应用最多只能有一万个测试设备,审核比AppStore松但也有门槛,很多应用因为内容原因过不了审,而且测试链接90天就要更新一次,对大用户量的应用来说操作成本不低。
聊到最后不得不说AppStore,大家都知道,正规符合要求的应用,最好还是上AppStore,一年只要688的开发者年费,用户信任,不会掉签,还能做搜索获客,是最好的选择,但是很多应用比如内部测试应用、企业自用应用、H5封装的垂直工具,不符合AppStore的审核规则,上不了,才会需要用第三方签名。从我这么多年的经验来看,签名这个东西真的是一分钱一分货,贪便宜用共享签名,最后亏的肯定是自己,选独享证书配合自动化的更新脚本,控制好Apple ID风控,侧载应用也能做到和上架AppStore差不多的稳定体验,足够支撑中小项目的正常运营了。