我接触苹果签名已经快六年了,最早帮创业朋友做iOS内测工具的时候就开始研究,后来陆续帮上百个中小开发者做IPA签名、H5封装打包分发,踩过坑也摸透了行业里的门道,今天就以我这么多年的实际使用经验,把苹果签名的核心逻辑讲透,给想要用签名分发应用的朋友做个参考。
首先说最基础的苹果签名技术原理,iOS作为闭源系统,对应用安装有严格的权限管控,所有能在iOS设备上正常打开运行的应用,必须拥有苹果官方授权的合法签名,没有签名的IPA包,就算你通过第三方工具导入设备,也会弹出“未受信任的开发者”提示,根本无法打开。 从技术层面说,苹果签名用的是非对称加密机制:苹果本身持有核心私钥,开发者申请苹果开发者账号后,苹果会给开发者颁发一个用自身私钥签名的开发者证书,开发者再用这个证书给需要分发的IPA包做二次数字签名,iOS设备系统内置了苹果的公钥,会先验证开发者证书的合法性,再验证IPA包的签名是否匹配,两步都通过才会允许应用运行。 不管是超级签名、企业签名还是TF签名,本质都是用合法的苹果开发者证书给未上架的IPA做授权签名,让系统认可应用的安装权限,我们常说的IPA签名就是这个环节的基础操作,而很多做轻应用的开发者常用的H5封装,就是先把H5网页打包成未签名的IPA裸包,再通过签名获得安装权限,最终实现用户扫码安装,不需要走官方上架流程。
接下来聊聊决定签名稳定性的核心:证书池机制。 我这么多年的经验总结,签名稳不稳,核心看服务商有没有成熟的证书池调度机制。 什么是证书池? 简单说就是服务商手里储备了大量不同的开发者证书,不会把上百个应用都堆在一两张证书里,苹果的风控系统会实时检测每个证书下的应用数量、总安装量,一旦超过阈值就会判定为违规大规模分发,直接封掉证书,证书一死,上面所有应用都会掉签。 成熟的证书池会做动态调度:把低风险、小流量的应用分散放在不同证书上,每个证书的安装量都控制在苹果风控阈值以内,当某个证书触发风控预警的时候,系统会提前把上面的应用迁移到其他空闲证书,从根源上降低掉签概率。 我早年踩过的最大的坑就是找了个个人小服务商,总共就两张企业证书,挂了几十个应用,结果不到半个月证书被封,我手上三个客户的应用全掉签,里面存了不少用户的本地数据,差点砸了自己的招牌。 后来换成了有千张级证书池的正规服务商,大部分应用都能稳定跑一年以上,很少出问题。 当然我也遇到过证书池清理的时候掉签的情况,那次苹果大规模清理违规开发者账号,有不到十分之一的应用受影响,服务商当天就完成了迁移补签,半天就恢复正常使用,也没有额外收费,整体体验还是很靠谱的。
然后说超级签名核心的UDID绑定机制。 UDID是每一台iOS设备独一无二的识别码,苹果对个人开发者账号的权限规定就是,每个账号最多只能绑定100台不同的设备UDID,只有绑定了UDID的设备才能安装这个账号签名的应用,超级签名就是用大量个人开发者账号组成证书池,实现批量分发。 简单说,用户扫超级签名的安装二维码的时候,系统会自动获取用户设备的UDID,然后把这个UDID添加到某个空闲个人开发者账号的绑定列表,再用这个账号的证书给IPA签名,生成对应的安装包供用户下载,全程不需要用户手动操作,就是我们说的超级ios签名扫码安装,比早年需要用户手动复制UDID的体验好太多。 UDID绑定其实也是超级签名稳定性更高的原因之一,因为每个账号最多绑定100台设备,分散下来每个账号的流量很低,很难触发苹果的风控,就算某个账号被封,也只会影响100个用户,不会全量掉签。 我之前自己玩票的时候,不懂规则把十几个应用都放在同一个个人账号里,结果不到一个月账号被封,所有绑定设备都用不了,后来才知道正规服务商都是一个账号只放一两个应用,严格控制数量,就是为了规避风险。
接下来聊聊完整的重签流程,我从手动重签到现在用自动化平台,对这个流程太熟悉了。 完整的重签流程分六步:第一步,获取用户的原始IPA包,如果是H5封装的应用,先根据用户提供的H5网址打包成未签名的IPA裸包;第二步,解压IPA包,修改应用的配置信息,比如bundle ID、权限描述、应用图标这些;第三步,根据签名类型匹配对应的证书和描述文件,如果是超级签名,这一步会先获取用户设备的UDID,把UDID写入描述文件;如果是企业签名,直接调用对应证书池里的描述文件;如果是TF签名,会把包上传到苹果TestFlight后台,等待官方审核签名;第四步,用签名工具对修改后的IPA包做重新加密签名,生成新的可安装安装包;第五步,生成下载链接和安装二维码;第六步,用户扫码就能完成安装,整个过程现在自动化平台几分钟就能完成,我早年用Xcode手动重签,一个包要折腾半个多小时,现在效率提升太多了。 我也遇到过重签出问题的情况,有一次客户的IPA包里带了违规的私有API,平台检测出来直接提示,修改完重新上传就好了,很少出现无缘无故签不了的情况。
最后说说大家最关心的:超级签名与企业签名的真实稳定性对比,还有不同渠道的真实价格,顺便也说说TF签名和官方上架的适配场景。 我这么多年经手了上百个应用,说实话,只要选对正规渠道,80%以上的签名应用都能稳定运行超过半年,很多都跑了两三年没有大问题,大家说的频繁掉签,基本都是贪便宜选了劣质渠道导致的,不是签名技术本身的问题。 先给大家整理一下目前市面上不同签名的真实价格:共享企业签名,就是很多个应用共用一张证书,价格最便宜,一般30-100元/月,年付300-800元,只适合临时测试用,稳定性最差,掉签概率超过80%;独立企业签名,一张证书只放你一个应用,价格一般300-600元/月,年付3000-5000元,稳定性不错,适合几千到几万用户的商用;证书池调度的超稳企业签名,价格一般800-1500元/月,年付8000-12000元,适合万级以上用户的商用,稳定性很高;超级签名按设备收费,一般1-3元/设备/年,100设备起充,也就是100-300元起步,掉签补签不扣设备数,适合几百到几千用户的中小应用;TF签名是苹果官方的内测签名,价格一般300-800元/次,有效期90天,到期可以重新提,现在最多支持10000个测试用户,稳定性非常高;官方上架就是上架App Store,苹果开发者账号688元/年,代上架服务费根据应用类型1000-10000元不等,过审后永久稳定,没有用户限制,能过审肯定首选官方上架,只是很多应用不符合审核要求没法上架。
再说说真实稳定性对比,正规渠道的超级签名掉签率大概在12%左右,大部分掉签都是应用本身违规触发风控,不是证书的问题,而正规超稳企业签名的掉签率大概在18%左右,也非常低,只有劣质共享签才会频繁掉签。 对比下来,超级签名的稳定性比普通企业签名高,因为分散了账号风险,就算掉签也只会影响小部分用户,补签也很方便,适合用户量不大的中小应用和内测;超稳企业签名适合用户量过万的应用,按年付费的成本比按设备算的超级签名更低,稳定性也能满足商用需求。 TF签名的稳定性比前两者都高,因为是苹果官方授权,基本不会掉签,只要能过审,用户量在一万以内的话,TF签名是非常好的选择。
我做了这么多年,最大的感受就是,苹果签名行业确实有不少坑,但只要选对正规有证书池的服务商,大部分签名都能稳定满足分发需求,掉签补签都是小概率事件,就算出现问题,正规服务商也能快速解决,对于没法上架官方App Store的应用来说,依然是目前最实用的分发方案,超级ios签名扫码安装因为体验好、成本灵活,也成了我现在给中小开发者推荐最多的方案。