多设备H5封装场景下iOS签名实战心得
我接触iOS签名机制快七年了,从最早的企业签萌芽时代到现在各种签名方案分层,见过太多同行起起落落,也帮上百个做业务的朋友处理过多设备H5封装的签名需求,踩过的坑攒起来能写满满一本笔记,今天就以我自己的实际经验,把里面的逻辑、坑点和实测感受整理出来,给需要的朋友做个参考。
先从最基础的设备签名逻辑说起,我刚入门的时候也以为签名就是给IPA文件盖个“苹果认可”的章,实际上没这么简单。iOS系统本身是闭源的,所有安装在设备上的第三方应用,都必须经过符合苹果规范的代码签名,系统在启动应用的时候,会自动校验签名里的证书链、描述文件权限,和苹果服务器存储的信息比对不上,直接就会闪退或者提示“无法验证应用”,这就是大家常说的掉签。针对设备的签名逻辑,核心其实是设备权限授权:如果是UDID类的签名,需要把每台设备的唯一识别码UDID提前加到签名用的描述文件里,苹果服务器记录了这个授权,对应的设备才能正常启动应用;如果是企业In-House签名,则是苹果给企业开发者证书开放了不限设备安装的权限,不需要提前录入UDID,只要证书有效,所有设备都能安装。我做最多的多设备H5封装,本质就是先把客户的H5站点套原生壳打包成未签名的IPA文件,再按照需求选择对应方案做IPA签名,才能让几十上百台iOS设备正常安装使用。
再聊证书分发原理,很多新手搞不懂为什么不同证书价格差这么多,其实核心就是苹果给不同开发者账号的分发权限不一样。目前苹果的开发者账号分三类:个人开发者账号、公司开发者账号、企业开发者账号,不同账号出的证书权限完全不同。个人和公司开发者账号,如果要分发应用,要么是提交审核上架AppStore,所有用户都能从应用商店下载,要么就是做AdHoc测试分发,也就是我们常说的TF签名的基础,AdHoc描述文件最多只能绑定100台测试设备,后来TestFlight把这个上限提升到了10000台,这就是TF签名能做中小批量设备分发的核心原理。而企业开发者账号的In-House证书,天生就支持不限设备数量的内部分发,不需要把应用提交到AppStore,也不需要提前上架TestFlight,只要做好IPA签名就能直接分发,所以很多需要不限设备安装的需求都会选择企业证书签名。
接下来聊我踩坑最多的Apple ID风控,这也是现在影响签名稳定性最核心的因素,没有之一。苹果的风控机制最近几年越来越严,早几年一个企业证书挂十几个应用都没事,现在随便操作不当就会被吊销证书。我总结下来,触发风控主要有几种情况:第一是同一个Apple ID下面挂载的应用数量过多,尤其是混装了违规应用,只要有一个应用被举报或者被苹果检测到违规,整个ID下的所有证书都会被吊销,所有签过名的应用全部掉签;第二是短时间内安装量暴涨,比如一个新证书刚出来,一天之内就有几百上千台设备安装,苹果的风控系统会直接判定证书被滥用,直接拉入黑名单吊销;第三就是证书主体信息异常,很多共享证书用的是黑户或者被盗的企业信息申请的账号,苹果一复查就直接封掉。我印象最深的一次是前年,一个客户要做80台设备的内部多设备H5封装,当时图便宜找了一个100块钱三个月的共享签名,结果刚给所有设备安装完第二天,全掉了,找签名商才说那个证书的ID被封了,要等补发,客户当时正要开全国区域培训会,应用打不开差点耽误了大事,最后我连夜给他重做了独享签名,折腾到凌晨三点才搞定,从那之后我再也不碰低价共享签了。
说到这里就正好聊独享证书和共享证书的区别,我做过无数次对比,两者的稳定性差的不是一点半点。共享证书说白了就是很多个客户、很多个应用共用同一个开发者证书,签名商把一个证书拆成几十上百份卖给不同客户,来摊薄证书成本,所以价格能压得很低,我见过最便宜的共享企业签只要69元一个月,还承诺掉签补发。但缺点也非常明显,刚才说的风控问题,一个证书上面几十甚至上百个应用,只要有一个客户的应用违规,整个证书所有应用全掉,而且很多共享证书本身就是被苹果标记过的,风控评分本来就低,掉签概率本来就高。而独享证书就是整个证书只给一个客户用,证书下面只放客户自己的应用,最多也就两三个,不会混装其他无关客户的应用,所以触发风控的概率低很多,稳定性自然也就上去了。
我去年专门花了一个月做稳定性实测,测试对象就是同一个正规的多设备H5封装IPA,分别用四种主流方案签名,装在50台常用iOS设备上,连续运行30天记录掉签情况,结果非常直观:第一种是低价共享企业IPA签名,第三天就有12台设备掉签,第七天整个证书被吊销,50台设备全部打不开,补发之后第五天又掉了三分之二,一个月下来总共掉了4次,平均不到一周掉一次,基本没法正常用;第二种是独享企业IPA签名,30天里只掉了一次,还是因为我当时测试不小心多加了一个违规的测试应用进去,触发了轻度风控,把违规应用删掉重新签名之后,一直稳定运行到现在,快一年了都没再掉过;第三种是独享TF签名,这个是苹果官方的测试分发渠道,30天测试下来一次都没掉,而且用户安装的时候不会弹出“未受信任的企业开发者”的提示,直接就能安装打开,体验比企业签好太多,唯一的限制就是每个TF版本最多只能有10000个测试设备,不过对于绝大多数做几百台以内多设备H5封装的客户来说,这个容量完全够用;第四种是直接上架AppStore,这个当然是最稳定的,只要审核通过能上架,基本不会出问题,但是绝大多数做H5封装的内部应用、业务应用,要么不符合AppStore的审核规则,要么不需要对外公开上架,而且审核周期长,一次审核要三到五天,不过审还要反复修改,成本和时间都太高,所以大部分客户都会优先选签名方案,不会直接上架AppStore。
最后聊不同渠道的价格感受,我这么多年下来最大的体会就是一分钱一分货,签名这块真的不能贪便宜。目前市场上的价格大概是这样的:共享企业IPA签名,一般一个应用几十到一百多块钱一个月,共享TF签名大概一百到两百块钱一个季度,看起来很便宜,但是平均掉签一次,给几十上百台设备重新安装就要花大半天的人工时间,要是赶上业务关键期,应用打不开带来的业务损失,远远超过省下来的那几百块签名钱。独享签名的价格就要高一些,独享企业IPA签名一般一个月三百到一千多不等,要看证书的年限和稳定性,独享TF签名一般三百到五百块钱一个季度,比共享贵两三百块钱,但是带来的稳定性提升是质的变化。我现在给客户做多设备H5封装,只要是正规内容,我都优先推荐独享TF签名,价格不高,稳定性比共享企业签好太多,基本半年都不用管,客户用着省心,我也不用天天处理掉签的售后;如果是设备量超过一万,需要不限设备安装,就推荐独享企业IPA签名,虽然价格高一些,但是只要不违规,稳定性也完全能满足需求。
这么多年玩iOS签名,我最大的感悟就是,对于做业务的用户来说,稳定才是核心需求,再低的价格,再多的承诺,应用动不动打不开就是没用。尤其是多设备H5封装,大多是用来支撑业务运行的,掉一次签影响的不只是体验,还有实际的业务收入,与其贪便宜省几百块钱,不如多花一点钱选独享稳定的渠道,省心又靠谱。