我接触苹果签名技术快六年了,从最早自己做iOS独立开发内测,到后来帮本地很多中小企业做H5封装IPA签名,大大小小的问题碰过不计其数,最早栽跟头就是在P12签名证书损坏修复上,那时候刚入行,导出证书的时候误操作,把存私钥的P12文件搞坏了,打包出来的IPA一直提示无法安装,折腾了整整一个通宵才弄明白问题出在哪,这么多年用下来,对苹果签名的各个环节都摸得透透的,今天就把我的真实使用经验分享出来。

首先说签名技术原理,其实苹果的签名机制本质就是非对称加密的信任验证,苹果作为信任根,开发者从苹果开发者后台申请证书,下载下来的P12文件就是打包了开发者身份私钥和证书的文件,我们给IPA做签名,就是用开发者私钥给IPA的安装包做加密签名,用户手机上的iOS系统用苹果的公钥验证这个签名,只有验证通过,确认这个安装包是经过苹果开发者账号授权的,才允许安装运行。说白了,IPA签名就是给IPA一个合法的身份标识,让iOS系统放行,不管是H5封装的应用,还是原生开发的内测应用,只要不上官方上架,都需要做合法的IPA签名才能安装。

接下来说说行业里常用的证书池机制,我这些年用过的正规服务商,基本都是用证书池来保障稳定性的。什么是证书池?就是服务商把几十上百个不同的开发者账号的P12证书、描述文件都整合在一起,做成一个资源池,根据用户的需求动态分配证书签名。为什么要做证书池?单个个人开发者账号最多只能绑定100台测试设备,名额不够用,而单个企业开发者账号虽然不限制设备数量,但一旦被苹果检测到违规使用,就会直接吊销证书,所有用这个证书签的应用都会掉签。证书池就是把风险分散,一个证书出问题,池子里还有其他证书可以用,掉签之后也能快速补签,不用用户等太久。我现在长期合作的服务商,证书池分共享池和独享池,共享池是多个客户共用证书资源,价格便宜,适合小体量的内测项目;独享池是客户自己买几个开发者账号放在池子里,只有自己用,稳定性更高,价格也贵一点,我做过的几个企业内部OA项目,都是用的独享证书池,用了两三年都没出过什么大问题。

然后说说UDID绑定,这是超级签名最核心的机制,我最早做H5封装给客户做内测的时候,就接触到了UDID绑定。每一台iOS设备都有一个唯一的设备识别码,就是UDID,超级签名的流程就是,用户要安装应用的时候,分发页面会自动调用苹果的接口获取用户设备的UDID,然后把这个UDID添加到对应开发者账号的测试设备列表里,再用这个开发者账号的证书给IPA签名,这样只有绑定了UDID的设备才能安装这个应用。这个机制的好处就是苹果本身允许个人开发者添加100台测试设备,属于官方允许的内测行为,所以苹果一般不会随便吊销,稳定性比很多共享企业签好很多。这里也碰到过问题,早年我刚用超级签名的时候,碰到过小服务商把一个UDID重复卖给多个客户,后来一个账号违规,所有绑定这个账号的设备都掉签,折腾了好久才补好,后来换了大服务商就再也没出过这种问题。

说过重签流程,我自己不仅用服务商签名,有时候也会给客户做本地重签,整个流程其实不算复杂,我一般用fastlane做自动化重签,步骤大概是这样:第一步先拿到未签名的IPA包,如果是H5封装的应用,就是封装平台导出的原始未签名IPA;第二步准备好对应的P12签名证书和mobileprovision描述文件,这一步是最容易出问题的,如果导入证书的时候权限不对,或者存储过程中文件损坏,就会出现证书验证失败,这时候就要做P12签名证书损坏修复,我一般的处理方法是先检查钥匙串里的证书是不是被系统信任,如果不信任就改一下信任设置,要是还不行就直接从苹果开发者后台重新下载证书,重新导出带私钥的P12文件,设置好访问密码,重新导入系统就好了,大部分情况半小时就能修复完成;第三步就是配置重签工具的参数,指定新的Bundle ID、证书路径、描述文件路径;第四步执行重签脚本,一般五分钟就能生成签好名的IPA,整个流程下来熟练了十几分钟就能搞定。

接下来聊聊大家最关心的超级签名和企业签名的真实稳定性对比,还有不同渠道的价格,我用了这么多年,也踩过不少坑,这里给大家说真话。首先说价格,不同渠道差价非常大,企业签名里,共享证书的企业签,小渠道一般99-150元一个月,大渠道一般199-299元一个月;独享证书的企业签,小渠道大概800-1200元一个月,大渠道正规证书的一般1500-2500元一个月。超级签名都是按设备点数收费,小渠道一般0.6-1元一个点,大渠道一般1.5-3元一个点,同一个设备掉签补签不重复扣费。TF签名的话,按周期收费,小渠道大概199-299元一个月,大渠道一般399-699元一个月,按下载量的话大概0.3-0.8元一个下载。

然后说稳定性,我这六年百分之八十的使用场景都是稳定好用的,只要选对正规渠道,很少出问题。先说超级签名,超级签名用的是个人开发者账号,绑定UDID,风险分散在几十个上百个账号,只要你签的不是违规应用,基本很少掉签,我有一个客户的门店培训应用,217台设备,用超级签名快两年了,只掉过一次,还是因为其中一个开发者账号被苹果封号,服务商证书池里马上换了新证书,十分钟就补签好了,用户重新安装就能用,一点不影响使用。企业签名我用的也不少,共享企业签稳定性确实差一点,早年贪便宜用过小渠道的共享签,半个月掉了三次,每次补签要等大半天,害得客户的业务员没法开单,差点丢了客户,后来换了大渠道的共享企业签,一般两三个月才掉一次,补签也快,稳定性好了很多,独享企业签的稳定性其实和超级签名差不多,我有一个客户的招商会临时用的应用,五千多台设备,用独享企业签做了三个月,只掉过一次,补签之后一直用到活动结束,也没问题,就是价格贵一点,适合设备量大的项目。

我也碰到过不少问题,比如证书问题,去年有一次服务商的服务器硬盘出问题,十几个P12证书损坏了,他们技术团队连夜做P12签名证书损坏修复,四个小时就把所有证书恢复了,只影响了几个客户,补签之后马上就正常了,还有一次我自己误操作把客户的P12证书删掉了,就是按修复流程,从开发者后台重新生成证书导出,半小时就弄好了,没耽误客户的测试进度。掉签补签其实现在正规服务商都做的很好,基本都是掉签之后免费补,半小时内就能搞定,不像早年小渠道补签还要收钱,还要等一两天。

这里也必须说一下大家常问的几个其他签名渠道,官方上架肯定是最稳定的,只要能上官方上架,我肯定推荐客户上,官方上架的应用不会掉签,用户下载也方便,直接从App Store搜索就能安装,信任度也高,但是官方上架审核非常严格,很多内测应用、企业内部应用、定制化应用,还有一些不符合审核条款的应用根本上不了,而且审核周期长,一般要三到七天,赶不上内测的进度,所以签名才是刚需。还有TF签名,也就是TestFlight签名,这是苹果官方认可的内测签名方式,最近两年我用的特别多,TF签名不用绑定UDID,用户点击链接就能在TestFlight里安装,稳定性非常高,基本不会掉签,一次上架能用三个月,到期了重新上传就行,价格也不贵,适合几百台设备的内测项目,比超级签名成本还低,我现在做H5封装的中小项目,很多客户都选TF签名,体验非常好。

这么多年用下来我最大的感受就是,苹果签名技术现在已经非常成熟了,绝大多数正规服务商的服务都是稳定靠谱的,只要你不贪便宜找那种几块钱一个月的黑渠道,基本不会有什么大问题,碰到P12损坏也不用慌,只要按流程修复就能解决,不同的签名类型适合不同的场景,小体量内测用超级签名或者TF签名,设备量大用企业签名,成熟产品走官方上架,完全能满足不同的需求,我自己做H5封装IPA签名这么久,百分之八十的项目都能稳定运行一年以上,给客户省了很多上架的成本和时间,确实是非常实用的技术,只要摸透了原理,选对了服务商,就能长期稳定使用,不用太担心掉签的问题,就算出了小问题,补签修复也都很方便。