作为一个接触iOS签名快六年的技术爱好者,从最早帮朋友做越狱插件分发的时候我就开始研究各类签名方案,这几年帮几十家中小开发者做过内测分发、外部分发的签名服务,踩过不少坑也攒了很多实打实的经验,今天就把我对iOS签名的理解和实际使用感受整理出来,给需要的朋友做个参考。
首先说最基础的签名技术原理,很多刚接触的朋友都搞不懂为什么iOS一定要签名,其实核心原因就是iOS的闭源生态和安全机制,苹果规定,所有安装到iOS设备上的应用都必须经过苹果授权的签名,本质上就是用苹果颁发给开发者的合法证书,对IPA安装包进行非对称加密签名,安装的时候苹果系统会验证签名的合法性,确认包没有被篡改、开发者身份合法之后才会允许应用启动,没有签名或者签名过期、失效的应用,系统直接会提示“无法验证应用”,根本打不开。我们常说的IPA签名,就是对未签名、或者已经失效的IPA包,重新用合法证书完成签名流程,让应用可以正常安装打开,现在很多客户做H5封装应用,就是把做好的H5页面封装成标准IPA包之后,再做IPA签名才能分发用户安装,没有这一步根本用不了。
接下来讲证书池机制,这也是决定签名稳不稳定的核心因素之一,我最早做签名的时候,很多小服务商都是用单证书接活,一个企业证书签几十个上百个APP,只要其中一个APP违规被举报、被苹果检测到,整个证书直接被封,所有签过的APP全都会掉签,牵连一大片,我最早就吃过这个亏,一个客户的商城APP,和十几个擦边APP共用一个证书,结果别人的APP被查,我的客户的APP也跟着掉签,折腾了整整两天才重新弄好,损失了不少用户。后来正规服务商都开始做证书池机制,说白了就是服务商提前申请了大量不同开发者账号对应的证书,搭建起自己的证书资源池,把不同客户的APP分散分到不同的证书里,一个证书只放少量几个APP,这样哪怕某一个证书出问题,也只会影响这个证书下的少数APP,不会牵连所有客户,现在大的服务商的证书池都是动态维护的,实时监控每一张证书的状态,一旦检测到证书有被封的风险,会自动给客户的APP做迁移补签,很大程度上降低了掉签的概率,我现在合作的服务商,证书池有上千张不同的证书,分散风险做得非常好,这大半年下来只有不到5%的APP出过掉签问题,大部分都稳定运行。
然后说UDID绑定,这个是所有需要个人开发者账号签名的方案绕不开的环节,UDID就是每一台iOS设备独有的识别码,苹果规则里,个人开发者账号最多只能绑定100台测试设备,只有绑定了UDID的设备,才能安装用这个个人账号签名的应用,我们常说的超级签名,本质就是用个人开发者账号的Ad Hoc授权做的签名,所以每一个安装超级签名的用户设备,都需要先绑定UDID才能完成签名安装。很多人会担心获取UDID泄露隐私,其实我做这么多年,正规服务商只会用UDID做签名绑定,不会收集其他隐私信息,而且现在自动获取UDID的技术已经很成熟了,用户只需要点一下下载链接,就能自动获取UDID,不用手动去复制,非常方便。我也遇到过UDID绑定出问题的情况,有一次用户的网络不好,获取UDID出错,结果签完名之后装不上,重新获取一次UDID再签名就好了,这种都是小问题,不影响整体使用。
接下来讲实际的重签流程,我平时帮客户做重签,流程已经非常标准化了:第一步拿到客户的IPA包,不管是原生开发的IPA还是H5封装好的IPA,第一步都是先做脱签处理,清理掉IPA包原来带的旧签名信息和描述文件,避免旧信息和新签名冲突导致闪退;第二步就是根据客户选的签名类型,做对应准备,如果是超级签名就获取用户的UDID,如果是企业签名就直接从证书池选一张可用的空证书;第三步就是生成匹配的描述文件,用专业签名工具对IPA包重新签名;第四步就是做签名验证,安装到测试机上试一下,确认能正常打开不闪退,之后生成下载链接,交付给客户。现在大部分正规平台都已经实现了自动化重签,整个流程最快三五分钟就能完成,比我最早手动操作的时候效率高太多,当然我也遇到过出问题的时候,之前有一个客户自己修改过IPA包的内容,脱签不彻底,结果重签之后一直闪退,折腾了两个小时,把包彻底清理干净重新签名才好,这种都是小概率的问题,一般正规签名平台都会帮你排查解决。
说完基础的几个概念,再来说大家最关心的稳定性对比和价格问题,现在市面上主流的签名方案有四种,分别是官方上架、TF签名、超级签名、企业签名,每种的价格和稳定性都不一样,我给大家说一下实际市场的情况:首先是官方上架App Store,这肯定是最稳定的,只要过审,永远不会掉签,用户直接从App Store下载,体验最好,但是苹果审核非常严格,很多内测应用、工具类应用、不符合规范的应用根本过不了审,价格方面,现在找代上架的话,一般普通APP是几百到几千不等,大部分都是过审收费,不过过不了的话一般也不会退款,这个是行业常规。然后是TF签名,TF就是苹果官方的TestFlight内测平台,本质就是把APP放到TestFlight里让用户下载,因为是苹果官方的内测渠道,所以稳定性非常高,基本不会掉签,除非你主动下架,TF签名现在的价格,一般按季度收费的话是两三千一个季度,按安装量收费的话一般是十块钱左右一个安装,比其他签名贵一点,但是胜在稳定,适合对稳定性要求高的项目,我去年给一个企业做内部办公APP,用的就是TF签名,整整一年都没出过问题,用户只需要第一次装的时候下个TestFlight,之后更新和使用都和官方APP没区别,体验非常好。
接下来就是大家问得最多的超级签名和企业签名的真实稳定性对比,我做这么多年的实际感受是,只要是正规渠道的,两者都能做到稳定使用,但是差异也很明显:首先超级签名,超级签名用的是个人开发者账号,每个账号最多绑定100台设备,风险非常分散,哪怕一个账号被封,也只会影响100个用户,不会牵连所有人,正规渠道的超级签名,掉签率非常低,我合作的正规渠道,超级签名的年掉签率不到3%,大部分都能稳定用到一年,价格方面,超级签名都是按安装量收费,不同渠道差价非常大,那种一两块钱一个安装的,基本都是用废号、滥签,用不了几天就掉,我最早贪便宜试过一次,1.2元一个安装,一百个安装不到一周全掉了,服务商也联系不上,亏了钱还耽误事,正规渠道的超级签名一般是5到12块钱一个安装,虽然贵一点,但是稳定性非常好,我有一个内测项目,一百二十个内测用户,用超级签名跑了快七个月,只掉了两个,补签之后就正常了,非常省心。
然后是企业签名,企业签名用的是苹果企业开发者账号,不需要绑定UDID,不限安装量,用户扫码就能下载,适合大规模外部分发,价格方面差异也很大,共享企业签就是很多客户共用一个证书,价格非常便宜,几十块到几百块一个月,但是稳定性非常差,我最早用的时候,一周掉两三次都是常事,半夜掉签用户都来找我,折腾得不行,而正规的独占企业签,就是一个证书只放少数几个客户的APP,价格一般是一千多到四千多一个月,稳定性就好很多,我现在有一个本地生活工具APP,用的就是两千多一个月的独占企业签,已经稳定跑了八个多月,只掉过一次,还是因为苹果更新了政策,服务商当天就给补好了,用户几乎没感受到影响。整体对比下来,超级签名适合小批量内测,稳定性比共享企业签好很多,成本也不高,独占企业签适合大规模外部分发,只要选正规渠道,稳定性也完全够用,掉签都是小概率事件。
我做这么多年,确实也遇到过掉签、证书被封的问题,但是现在正规服务商都有完善的补签机制,掉签之后只要联系服务商,几个小时之内就能补好,重新生成下载链接,用户重新下载一次就能用,大部分时候都不会影响太久,只要你不贪便宜找那种没有资质的小渠道,大部分情况都能稳定使用。而且不管你是原生IPA签名,还是H5封装后的IPA签名,只要包本身没有违规内容,正规服务商都能给你做稳定的签名方案,哪怕上不了官方App Store,也能满足分发需求。
总的来说,iOS签名技术发展到现在已经非常成熟了,证书池机制、自动化重签这些技术都很大程度提升了稳定性,大部分方案都能满足日常使用需求,只要选对渠道,选对适合自己项目的签名类型,完全可以做到长期稳定运行,掉签补签这些问题只是小概率的意外,不用过分担心。对于很多暂时没法上架官方App Store的项目来说,找正规的ios签名技术支持,就能低成本实现稳定分发,满足开发测试和用户使用的需求。