我接触苹果签名整整五年了,从最早帮朋友做内测APP折腾手动签名,到现在自己攒了证书池做签名分发,大大小小的坑踩了不下几十个,也见过太多用户因为找错渠道,天天被掉签搞得头疼,最近半年来问我TF苹果签名无法验证是什么问题的朋友特别多,索性就把我这些年摸出来的经验整理成干货,从技术原理到各个签名类型的稳定性、价格都讲透,给想要做IPA签名分发的朋友做个参考。
所有苹果签名的核心其实都绕不开iOS的系统机制,iOS作为闭源系统,对第三方应用的管控非常严格,任何没有经过苹果授权签名的IPA包,都没法在手机上安装运行,哪怕你把安装包传到手机上,点开也会提示“无法验证应用”。从技术原理上来说,这个验证机制用的是非对称加密:苹果手里握着根公钥,只有拥有苹果授权的开发者账号,才能拿到对应的私钥,给IPA包做签名,手机启动应用的时候,会用苹果的根公钥验证签名信息,验证通过才能正常运行,不通过就直接拦截。我们说的IPA签名,本质就是给未经过授权的IPA包,匹配上符合苹果规则的开发者私钥签名,让系统放行应用,哪怕你是H5封装出来的IPA包,只要签名符合规则,一样可以正常安装使用,这和原生开发的IPA没有任何区别。
我最早做企业签名的时候,就懂了证书池对稳定性的重要性,什么是证书池?简单来说就是签名服务商把多张独立申请的企业开发者证书整合到一个资源池里,给用户做IPA签名的时候,会根据应用类型、用户规模自动分配闲置证书,而不是几百上千个应用挤在同一张证书里。如果某一张证书因为各种原因被苹果封禁掉签,系统也会自动从证书池里调出另一张干净的证书给应用重签,最快十几分钟就能完成补签,把对用户的影响降到最低。我刚做证书池的时候也踩过坑,那时候手里资金不多,贪便宜从贩子手里收了十多张二手企业证书,结果不到半个月苹果就大面积封证书,那十多张证书全没了,我手里二十多个客户的应用集体掉签,我熬了一整夜给一个个客户换证书补签,最后还是有两个客户因为体验太差走了,从那之后我就认准一个理:证书池里的证书必须是自己用正规主体申请的干净证书,每一张证书上挂的应用数量都控制在合理范围,不能为了多赚钱滥加应用,不然稳定性根本没法保证。现在我的证书池里二十多张企业证书,每一张挂的应用不超过20个,这么多年下来,整体掉签率控制得非常低,80%以上的应用几个月都不会掉一次。
不管是超级签名还是TF签名,都绕不开UDID绑定这个环节,UDID是每一台苹果设备独有的识别码,相当于设备的身份证,苹果对不同类型的开发者账号都有绑定设备数量的限制,比如个人开发者账号一个账号最多只能绑定100台UDID,企业开发者账号虽然没有设备数量限制,但也对签名的应用管控严格。超级签名的本质就是用多个个人开发者账号的100台设备配额,给每一台要安装应用的设备绑定UDID,每一台设备占一个配额,只有绑定了UDID的设备才能安装运行对应的应用。我刚做超级签名的时候,那时候获取UDID还要用户手动复制粘贴,步骤很麻烦,经常有用户填错UDID,最后安装完提示无法验证,还要重新绑定补签,现在大部分平台都做了UDID自动获取,用户点一下弹窗授权就能拿到,出错率低了很多。而TF签名其实是苹果官方的TestFlight测试渠道,本质上也需要绑定UDID,只不过这个过程是苹果自动完成的,用户只需要点击邀请链接,就能自动把自己设备的UDID上报给苹果,绑定之后苹果会给应用签上官方的名,所以整个过程用户不用手动操作,非常方便,也很少出UDID绑定错误的问题,很多人遇到的TF苹果签名无法验证,其实根本不是UDID绑定的问题,大多是包被下架或者测试过期导致的,重新上传就能解决。
我最早都是手动给IPA重签,对整个流程非常熟悉,哪怕现在都是自动化流程了,我偶尔也会手动处理一些特殊的包,完整的重签流程其实很清晰:第一步是拿到需要签名的原IPA包,不管是原生开发还是H5封装的,第一步都是解压IPA,拿到核心的.app程序包;第二步是清除原有的签名信息,删掉旧的描述文件和代码签名目录,避免新旧签名冲突;第三步是生成新的描述文件,如果是需要绑定UDID的超级签名或者TF签名,就把已经绑定好的UDID信息写入描述文件,如果是企业签名就生成对应证书的通用描述文件;第四步就是用对应证书的私钥,通过codesign命令对.app包重新做代码签名,这个过程是核心,签名的参数不对就会导致安装失败或者无法验证;第五步就是把签好名的.app文件重新打包成IPA,上传到分发平台就可以给用户下载了。如果是已经掉签的应用补签,其实就是换一张有效的证书,重复一遍上面的流程就行,大部分时候补签完用户重新下载安装就能正常使用,我遇到过最常见的问题就是H5封装的包重签之后包名不对,导致和旧包冲突无法覆盖安装,后来我就要求每次重签都核对原包的包名,出错率就降下来了。
我做了这么多年,给很多客户做过不同类型的签名,说实话,只要找对正规渠道,不管是超级签名还是企业签名,80%以上的使用场景下都是稳定好用的,当然也会有掉签的情况,只要补签及时就不会影响使用。先说说不同渠道的价格吧,不同渠道不同类型的签名价格差非常大:企业签名分共享版和独立证书版,共享版就是几百个应用共用一张证书,很多小渠道的共享版只要几十块钱一个月,甚至十几块就能买,这种我非常不推荐,稳定性太差,平均一周掉个两三次都是常事;独立证书版就是一张证书只给少量应用用,正规渠道的价格一般是内容合规的普通应用,每个月300到600元,如果是内容稍微敏感一点的应用,每个季度大概800到1500元,这种独立证书的企业签名稳定性其实非常不错,我手里有好几个客户用了三四年,平均一个季度才掉一两次,补签也很快,完全满足使用需求。然后是超级签名,超级签名是按设备数量收费的,正规渠道的价格大概是每台设备1到3元,一次性付费终身绑定,掉签补签不用再花钱,只要不新增设备就不用额外付费,如果你是几百台设备的内部应用,算下来也就几百块,能用终身,性价比非常高,超级签名的稳定性也不错,只要证书是正规申请的个人账号,一般大半年才会掉一次,我自己的内测应用用超级签名,200多台设备,快两年了也就掉过两次,补签完就好了。当然也有那种几毛钱一台设备的超低价超级签名,那种大多用的是被盗的黑号,没几天就会被封,根本没法用,我之前贪便宜试过一次,一个月掉了八次,最后还是换了正规的。然后就是TF签名,TF签名是苹果官方的测试渠道,稳定性是目前非上架签名里最高的,价格一般是按包收费,普通合规的包上架TF大概200到800元一次,有效期三个月到半年,长期更新的话一年大概1000到2000元,我见过很多人遇到TF苹果签名无法验证,其实大多是测试名额满了或者包被下架,很少是TF本身的问题,只要内容合规,TF签名能用好几个月甚至一两年都不出问题,我有一个客户做企业培训的应用,TF上架快两年了,从来没出过无法验证的问题,比很多企业签名都稳定。
最后不得不提官方上架,大家都知道,能官方上架App Store当然是最稳定的,永远不会掉签,用户下载也方便,但是苹果官方审核非常严格,很多内测应用、企业内部应用、还有不少H5封装的应用都过不了审,根本没法上架,所以才需要用各种IPA签名做分发,从我五年的使用经验来看,只要选对适合自己的签名类型,找正规靠谱的渠道,大部分场景下都能稳定使用,掉签补签也都是小问题,不用过于担心。