我接触苹果签名行业快六年了,从最早帮身边做开发的朋友处理内测包签名,到后来自己研究把P12企业签名集成到自己的网站做自助签名服务,踩过的坑攒起来能写满一个笔记本,也攒下了不少实打实的使用经验,今天就把这些干货整理出来,给刚入行或者需要签名服务的朋友做个参考。
先从最基础的签名技术原理说起,很多刚接触iOS签名的朋友都搞不懂,为什么非得签名才能安装应用?其实这是iOS闭源系统的安全机制决定的:iOS安装任何应用前,都会对安装包做签名验证,只有经过苹果信任的证书签名过的IPA包,才能通过系统验证正常安装。整个签名逻辑基于非对称加密:苹果用自己的私钥给开发者申请的证书做签名,用户的手机系统里预装了苹果的公钥,安装应用时会先验证证书是不是苹果官方签发的,验证通过后再用证书公钥验证IPA包的完整性,确认包没有被篡改过,才会允许安装。我们常说的IPA签名,本质就是用苹果给开发者签发的合法证书,给需要安装的包做一遍符合规则的签名,让系统认可这个包。而P12文件就是把证书公钥和开发者私钥打包加密后的文件,拿到P12文件才能给IPA做签名,这也是我能把P12企业签名集成到自己网站的基础,通过代码调用签名工具就能自动完成整个签名流程。
接下来说说大家很少听到但对稳定性至关重要的证书池机制。我刚做签名的时候,手里只有两三本企业证书,所有用户的应用都往里面放,结果有一次其中一本证书被苹果吊销,一百多个应用集体掉签,我那天补签到凌晨两点,还被十几个用户追着骂,后来才慢慢懂了证书池的重要性。证书池简单说就是把多本不同的P12证书整合管理,按照应用类型、流量规模做分流,核心就是分散风险,不会因为一本证书出问题导致所有应用掉签。我现在自己的证书池里有26本企业证书、19本做超级签名用的个人开发证书,还有一套成熟的运营规则:新申请下来的证书会先观察一周,确认没有被苹果标记风控才会投入使用;每本证书最多放20个应用,总装机量控制在5000以内,绝对不超载;绝对不接色情、赌博、违规金融这类违规应用,从源头避免触发苹果的风控规则。这套规则跑下来,我这边90%以上的证书能稳定运行超过一年,很少出问题,就算偶尔一本证书出问题,也只会影响少数应用,不会波及整个平台的用户。
然后再说说UDID绑定,很多人分不清不同签名的UDID绑定规则,这里我讲清楚:UDID是iOS设备的唯一识别码,苹果的AdHoc格式签名天生要求绑定UDID,我们常说的超级签名,本质就是用个人开发者的AdHoc证书签名,所以每一个安装应用的设备,都必须把UDID添加到苹果开发者后台的设备列表里,一个个人开发者账号最多只能绑定100台设备,满了就要删除旧设备才能加新设备。而P12企业签名默认是不需要UDID绑定的,任何设备都可以直接安装,这也是企业签名最大的优势之一,不需要用户提前获取UDID,点击链接就能直接下载安装,体验流畅很多。当然现在也有很多服务商做企业签名的时候会主动加UDID绑定,用来控制装机量,降低证书被封的风险,这个都是可以自定义的。我之前也遇到过UDID相关的问题:苹果之前修改过UDID自动获取的接口,那段时间很多超级签名用户安装失败,我折腾了三天才修复接口问题;还有一些用户还原设备后UDID会变更,原来绑定的签名就用不了,必须重新签名补签,这是UDID绑定机制天生的小问题,没法完全避免,只能给用户做好教程引导。
再讲讲完整的重签流程,我自己网站集成P12企业签名后,整个流程都是自动化的:首先用户可以选择两种方式,一种是直接上传已经打包好的IPA包,另一种是用网站自带的H5封装功能,输入H5网址、应用名称、上传图标,一键生成IPA包——现在很多做H5应用的个人开发者不会封装,我这个功能帮了大家很大的忙,五分钟就能从H5变成可签名的IPA包。选好签名类型后,系统会自动解压IPA包,提取原包的权限文件,然后从证书池里分配对应的可用P12证书,重新计算签名信息,替换原包的无效签名,再重新打包生成新的IPA,用户就能直接下载了。如果是已经签过名的应用掉签,用户不需要重新上传包,直接在后台点补签,系统自动调用原来保存的安装包,一分钟就能出新的下载链接,非常方便。我也遇到过不少签名失败的问题:有些用户的IPA是从App Store扒下来的,本身有FairPlay加密,没法解压修改,就会签名失败;还有一些应用开了不该开的权限,比如推送、iCloud、Apple登录,权限不匹配就会签名后闪退,现在我在系统里加了自动检测功能,提前把这些问题告诉用户,出错率下降了80%,大部分应用都能一次签名成功。
接下来聊聊大家最关心的,超级签名与企业签名的真实稳定性对比,还有不同渠道的价格差异。首先我先把几种常见的签名方式都说清楚:官方上架是把应用上传到App Store,通过苹果审核后用苹果官方签名,这是最稳定的,永远不会掉签,但是审核规则非常严,很多内测应用、企业内部工具、不符合规则的应用根本没法上架,所以才会用第三方签名;TF签名是TestFlight内测签名,属于苹果官方的内测渠道,稳定性也很高,掉签率不到1%,但是也需要过审核,而且每个应用最多只能有10000个测试用户,超过就要重新发包,用户安装还要跳转到TestFlight,步骤比较繁琐。
价格方面,不同渠道不同类型的签名价格差很大:企业签名分共享版和独立版,共享版就是很多服务商很多用户共用一本证书,价格非常便宜,一个月只要十几到几十块,但是掉签率极高,三五天掉一次都很正常;独立证书企业签名,正规渠道一个月大概300到800元,我自己把P12企业签名集成到自己网站,没有中间商,给用户的价格一个月只要200到500元,比外面便宜三分之一左右。超级签名一般按设备数收费,一个设备1到3元不等,是一次性收费,绑定UDID后只要不掉就能一直用,一千个设备就是1000到3000元。TF签名一般按次收费,签一次200到500元,能用三个月到半年,很多服务商也会按年收费,大概1000到2000元一年。
说到稳定性,我拿自己平台过去一年的数据说真话:我平台过去一年一共上线了327个签名应用,企业签名只有19个应用遇到过掉签,掉签率不到6%,大部分掉签还是因为用户偷偷上传违规应用被举报,或者证书正常到期,算下来稳定率超过94%,只要合规做应用,真的很少掉签。很多人说企业签名容易掉,其实都是贪便宜用了共享证书,几百个应用挤一本证书,流量大还很多违规应用,不被苹果吊销才怪。而超级签名我这边过去一年的掉签率大概是12%,比企业签名高出一倍,因为个人开发证书天生更容易触发苹果风控,只要批量添加设备很容易被封号,一封号所有绑定过的设备全掉,而且超级签名按设备收费,用户增量大的话,长期成本比企业签名高很多,一千个活跃用户,企业签名一年最多六千,超级签名每年新增几百个用户,成本也差不多,要是增量大,成本会高出好几倍。
我自己也遇到过掉签问题,去年苹果清理违规企业证书,我这边一下子三本证书被吊销,涉及四十多个应用,我当天就给所有用户发了通知,免费补签,因为证书池有备用证书,当天就全部处理完了,大部分用户都没有感觉到明显影响。做签名这么久,其实掉签不是最可怕的,可怕的是小服务商收了钱跑了,掉签了找不到人补签,我自己掌控证书,不管什么时候掉签都能随时补,这点比找第三方服务商靠谱太多。
总的来说,现在签名行业已经很成熟了,只要选对方式,做好证书管理,P12企业签名的稳定性完全能满足大部分内测、企业内部应用、小型项目的需求,能上官方上架肯定优先上,没法上的话,合规应用选企业签名性价比最高,小用户量可以选超级签名,能过审核的选TF签名也很稳,我自己把P12企业签名集成到自己网站后,不管是自己用还是给朋友做服务,都方便了太多,这么多年用下来,也确实验证了稳定靠谱的结论。