我玩iOS签名机制快八年了,最早接触P12格式证书还是做个人站长的时候,那时候给网站部署HTTPS,购买的SSL证书导出就是P12格式,用来做网站身份验证和传输加密,那时候我完全没想到,后来我研究iOS内测签名,用到的核心也是带私钥的P12签名证书,同一个格式适配完全不同的场景,这种奇妙的关联也让我对签名机制越来越感兴趣,这么多年踩过无数坑,也实测过各种渠道不同类型的签名,也算攒下了不少实打实的经验。
今天就从最基础的逻辑开始说,首先是iOS的设备签名逻辑,iOS本身是闭源封闭系统,苹果对所有安装到设备上的应用都有权限校验,没有经过苹果授权签名的应用,根本无法启动安装。所谓的设备签名,本质就是利用苹果开发者计划开放的内测权限,把我们自己开发或者封装好的应用,和苹果开发者账号绑定的证书做关联,让iOS系统校验时认为这个应用是合法开发者的内测应用,从而允许安装启动。不管是我们常说的IPA签名,还是TF签名、企业签名,核心逻辑都绕不开这一步,应用启动时系统会主动向苹果服务器校验证书状态,如果证书被吊销或者失效,应用就会直接闪退,也就是行业里常说的“掉签”。我最早帮朋友做H5封装应用的时候,就是因为不懂这个逻辑,踩了第一个大坑,那时候只想着能装上就行,完全没想过证书稳定性的问题。
接下来说说证书分发原理,苹果给开发者开放的证书分不同类型,个人开发者、公司开发者账号最多支持绑定100台测试设备,企业开发者账号则可以生成不限制设备的分发证书,适合做大规模的内测分发。我们做IPA签名用到的,就是企业开发者账号生成的生产分发证书,开发者申请证书后,导出带私钥的证书文件就是P12格式,再配合对应的描述文件,就能给未签名的IPA包做重签名,这个过程就是我们常说的IPA签名。所谓证书分发,就是持有企业开发者账号的服务商,把签名权限开放给有需求的开发者,不同的分发模式也就衍生出了后来的共享证书和独享证书。
这些年我感受最深的就是苹果的Apple ID风控越来越严,早几年苹果的风控没这么紧,共享证书都能稳一两个月不掉,现在苹果用机器学习做动态风控,会从几十个维度检测账号风险:比如账号申请用的身份是否合规、证书签名的应用数量有多少、应用内容是否合规、短时间内安装量是否异常、证书是否在多个不同IP地址登录使用,这些都是风控的考核点,只要触发其中一个,就会直接吊销证书甚至封禁整个开发者账号。我之前就遇到过黑号的坑,有些不良服务商用来签名的企业开发者账号是盗用身份申请的黑号,用了不到半个月就被苹果检测到封号,所有签过的应用全部掉签,找不到地方说理。
说到这里就不得不提独享证书和共享证书的区别,这也是很多新手最容易搞混的点。共享证书就是一个企业开发者账号的P12证书,分给几十个甚至上百个开发者共用,签名几百个不同的IPA包,什么类型的应用都有,只要其中有一个应用是违规内容,比如赌博、色情之类的,苹果检测到之后整个证书都会被牵连吊销,所有应用集体掉签。而独享证书就是一个企业开发者账号的P12证书只给一个客户用,只签名客户自己的应用,只要客户的应用本身不违规,几乎不会触发风控,稳定性差着好几个等级。
关于价格我也聊几句这些年的感受,不同渠道的价格差异真的很大,我也几乎把各个渠道都试了个遍。最早我找个人买共享签名,十块钱就能签一个IPA用一个月,当时觉得占了大便宜,结果当天下午就掉签,那个人直接失联,钱打了水漂。后来去淘宝找,三十块钱一个月的共享签名,掉签了说可以免费补,但是平均一周掉两三次,每次掉签都要重新发安装包给用户,用户怨声载道,根本没法商用。稍微好一点的高端共享签名,一个月要一百多,平均十几天掉一次,还是没法给正式对外的产品用。独享证书的价格差异也不小,小工作室的独享一年三千多,大平台的稳定独享一年四千到六千,我也遇到过花了独享的钱,结果服务商偷偷把证书共享给别人用的情况,还是频繁掉签,后来查了证书绑定的应用才发现里面有十几个别的第三方应用,当场就退款换了平台。TF签名的价格又不一样,一般是包审核两三百块,然后按安装量收费,从两毛到一块钱一个安装不等,小批量内测用起来挺划算。
去年我专门花了三个月做稳定性实测,用同一个H5封装的门店管理IPA包,分别放在四个不同渠道做测试,记录掉签情况:第一个是淘宝99块季付的普通共享签名,三个月一共掉了17次,最短一次存活只有1天,最长一次也才12天,每次掉签都要折腾大半天重新分发,用户体验差到极点。第二个是某平台199一个月的高端共享签名,三个月掉了5次,平均十八天掉一次,比普通共享好不少,但还是满足不了商用需求。第三个是大平台499一个月的独享证书,三个月只掉了一次,还是因为我不小心上传了带敏感内容的测试包触发了风控,删掉测试包重新签名后,一直到现在快一年了都没再掉过。第四个是TF签名,整整三个月完全没有掉签,因为TF本身就是苹果官方的TestFlight内测渠道,签名是苹果官方认可的,所以稳定性本来就高。
这段实测也让我对不同签名的适用场景有了更清晰的认知,TF签名确实稳定,但是也有局限性,首先TF有审核,比企业签名严很多,我之前有个H5封装的本地生活应用,就是因为没加测试版提示,第一次提交直接被打回,改了三次才过审,而且违规一点的内容根本过不了,其次TF一个应用最多只能有一万个测试设备,满了就要重新打包提审,对用户量大的产品不太友好,而且安装需要用户先下载TestFlight才能装应用,不少普通用户觉得麻烦会放弃。如果是用户量大、没法过TF审核、又没法上AppStore的应用,独享企业签名就是最好的选择。
很多人一开始都想问,为什么不直接上AppStore?其实我接触的客户百分之八十都是没法上AppStore的,要么是内测阶段不想正式上架,要么就是资质不全,比如很多小商家做的H5封装应用,没有对应的文网文或者运营资质,根本过不了AppStore的审核,还有一些就是企业内部用的办公APP,不需要上架给外部用户,所以才会选择IPA签名分发。AppStore确实是最稳定最正规的渠道,只要上架成功几乎不会出问题,但是门槛太高,不是所有开发者都能达到要求。
我印象最深的一次踩坑是2022年给一个社区团购客户做签名,客户一开始图便宜,说要省成本,选了30块一个月的共享签名,结果上线第三天正好是他们首单补贴拉新的活动日,当天上午证书就掉了,上千个新用户扫码安装不了,老用户打开直接闪退,我找对应的渠道,那是个个人代理,周末出去钓鱼联系不上,整整一天多才恢复,那次客户光补贴损失和流失的用户加起来就有近十万,就为了省一年几千块的签名钱,亏了十倍都不止,从那以后我给客户推签名,永远把稳定性放在第一位,价格放在后面,便宜没好货这句话在这个行业真的是真理。
这么多年玩下来我最大的感受就是,iOS签名这个行业水很深,新手很容易贪便宜踩坑,如果只是自己几个人做测试,用便宜的共享签名没问题,如果是要对外给用户用,一定要选稳定的,要么独享证书,要么TF签名,只要选对正规渠道,稳定使用一两年根本不是问题。P12证书从网站HTTPS用到iOS签名,本质都是公钥私钥的信任校验,原理相通,用途不同,也让我对签名机制有了更深刻的理解,只要摸透苹果的规则,选对适合自己的签名方式,就能满足大部分内测和分发需求。