作为做了五年的独立iOS开发者,我大半时间都在和各种苹果签名打交道。说出来不怕笑,刚入行那两年,光是掉签补签就能把我折腾得半宿睡不着。

很多刚做开发的朋友,一开始总想着赶紧把App做完上架AppStore就完事了,哪能想到,在正式上架之前,大半年的内部测试,全都要靠苹果签名证书才能分发出去给测试用户用。

我先说说P12证书的使用吧,我一开始完全摸不着头脑,以为P12就是个随便下载的文件,拿到就能用。后来自己在苹果开发者后台折腾才搞明白,P12其实就是我们导出的包含证书和对应私钥的文件,你要做签名,要么自己开发者账号生成属于自己的P12,要么用第三方给你的P12证书导入钥匙串,配合对应的描述文件才能给IPA包签名。我第一次导出P12的时候,设置了密码转头就忘,折腾了三个小时重新生成,最后把密码写在便签上才搞定。那时候图省事找第三方买签名,对方给我发的P12,我导入之后一直报错,后来才知道,对方是把一个P12卖给了十几个人,重复签名早就被苹果标记了,能不出问题吗。

聊点大家最关心的,现在不同渠道苹果签名的真实价格,我踩过这么多坑,摸得门清。如果是自己做内部测试,人数在100以内,自己买个苹果个人开发者账号,一年688块,自己生成P12自己签名,成本就是这688,能用一整年,这是最划算也最稳的。如果不想自己折腾,找第三方,超级签名一般按UDID点数算,便宜的三块钱一个点,贵的八块十块都有,算下来100个设备也要大几百,其实不比自己买账号划算。然后是企业签名,共享版的就是好多人共用一个企业证书,包月一般一百到三百块,这种就是我之前踩的最大的坑,便宜是便宜,掉签掉得你怀疑人生。独占企业签名就是一个证书只给你自己用,一个月价格大概一千到两千,稳定性好很多,掉签率低,掉了一般也能当天补签。然后是TF签名,也就是TestFlight签名,这个一般按次收费,正常价格一次两百到五百,包上架包链接,如果是包一年更新的话大概一千多,这个价格我觉得完全能接受,稳定性真的没话说。

接下来聊聊设备签名原理,其实说穿了一点都不复杂,苹果为了管控非AppStore的应用,要求所有能安装的应用都必须有合法签名,核心就是UDID绑定。UDID是每一台iOS设备唯一的标识符,苹果靠这个识别,只有你把设备的UDID添加到对应的证书描述文件里,这台设备才能安装你签名后的应用,这就是最基础的原理。不管是个人签名还是超级签名,本质上都是这个逻辑,很多销售说什么不用UDID就能签名,那都是骗新手的,除了企业证书,哪有不绑UDID就能安装的?我一开始找测试好友要UDID,还要让他们一个个去网上查,然后截图标注发给我,半天才能收齐十几个,后来我做了H5封装的下载页,里面集成了自动获取UDID的功能,用户点一下就能自动把UDID发给我,省了不知道多少事,原来一下午的活,现在十分钟就能搞定。

说到证书分发机制,苹果现在的证书分好几种,对应的分发规则也不一样。个人开发者证书和公司开发者证书,一年分别是688人民币和99美元,最多只能绑定100台测试设备,分发只能给绑定过UDID的设备安装。企业开发者证书是给企业内部分发自用应用用的,不需要绑定UDID,任何设备都能安装,但是苹果对企业证书查得越来越严,只要证书上有一个违规应用,或者装机量太大被检测到,苹果直接吊销证书,所有签过的应用全都掉签,这就是为什么共享企业签名这么容易掉的原因——一个证书上挂了几百个应用,哪个碰了红线,全证书跟着完蛋。我之前买99块包月的共享签名,就是对方证书上有个违规应用被举报了,苹果直接封了证书,我那个正经的本地相册工具也跟着掉签,找卖家补签,卖家说证书没了,要补就得加钱换证书,那时候真的气得我直接把聊天框关了,再也没理过这个人。

掉签补签这回事,我真的有一肚子话要说。做了这么多年开发,我遇到过各种各样的掉签情况,最坑的就是年末跑路的小渠道,去年快过年那会,我的一个测试版本掉签,找卖家补签,发现对方已经把我拉黑了,朋友圈也屏蔽了,那时候十几个核心测试用户等着用新出的批量整理功能,我熬了一整夜,重新申请账号,生成P12证书,重新做IPA签名,重新改H5封装的下载链接,折腾到凌晨四点才弄好,洗完脸坐在电脑前,真的想过要不放弃算了,做个独立开发怎么连签名这点事都搞不定。后来慢慢摸出规律,也就知道该选什么样的签名了,稳定永远比便宜重要,掉一次签耽误的时间精力,都够你买三个稳定签名了,这点账算过来,根本没必要贪那点小便宜。

说回IPA签名,其实我们用Xcode打包出来的开发包,默认是只能自己手机调试用的,要给其他测试用户安装,就得重新做IPA签名,替换掉原来的调试签名信息。我一开始自己用命令行签名,各种权限报错,查了无数教程才弄成,现在有很多第三方平台,上传IPA就能自动签名,确实方便,就是选平台的时候一定要擦亮眼睛,别选那种便宜得离谱的,多半是坑。我现在做IPA签名,小版本内部测就用自己的证书签,人多就弄TF签名,从来不出大问题。

说到AppStore上架,我现在不管做什么应用,都会先做两三个月的内部签名测试,改完大部分bug,调好体验再提交上架。我去年做那个相册整理工具,一开始急着上架,结果因为隐私声明没写清楚相册访问的用途,被苹果打回来三次,前前后后耗了一个多月,耽误了不少上线时间,后来我就学乖了,新功能先放签名测试版给核心用户用,大家都测没问题了,体验都顺了,再整理好材料提交上架,一次性就过了,省了好多审核折腾的时间。就算上线之后,我测新功能还是会用内部签名,不可能改个小功能就提交AppStore审核,等个三五天才能用上,太耽误测试进度了。

重点说下TF签名,我现在内部测试基本都用这个,真的是稳定好用到爆炸。TF是苹果官方推出的测试渠道,签名本身就是苹果认可的,只要你不下架TF上的包,一年两年都不会掉签,我之前一个测试版放在TF上,八个月没管,打开还能正常用,从来没有掉签过。很多人说TF下载要跳TestFlight,用户麻烦,可是内部测试都是自己人或者核心用户,多两步操作根本不是问题,总比用两天掉一次签,一个个给用户解释重下要强吧?TF唯一的限制就是一个版本最多加1000个测试设备,对于内部测试来说,一百几十个人完全够用,就算要做千人外测也够了,真的要几万人那另说,大部分独立开发者的内部测试哪有那么多人,这个限制完全不影响。

H5封装我也用得很多,不管是IPA签名后的安装包链接,还是TF的下载链接,我都会放到H5封装的下载页里,加一些应用介绍和更新日志,用户打开就能看到,点一下就能获取UDID或者跳转下载,比发一堆杂乱的链接给用户要规范太多,用户体验也好多了。我自己租的小服务器放个静态H5也没几个钱,一年几十块的服务器费用就搞定了,比放第三方平台还稳定,不用担心平台跑路链接失效。

我现在选签名,一百人以内的内部测试,要么自己弄个人证书生成P12签名,要么用TF签名,这两个是我用过最稳定的,人再多一点就找正规渠道的独占企业签名,贵是贵点,但是省心,真掉了也能及时补签,不会找不到人。那种几十块一百多的共享签名,我是碰都不会再碰了,掉签掉得心态都炸,省那点钱不够折腾的。

前几天还有个刚入行的小朋友找我,问我内部测试用什么签名好,我把我的经验告诉他,他嫌TF贵,非要去买那个99块的企业签名,结果一周掉了三次,天天在测试群里被人问怎么打不开应用,后来又来找我求推荐渠道,换了TF之后,过来给我说终于能安安稳稳测版本了,再也不用天天回用户消息解释掉签的事。其实做开发就是这样,很多坑总得自己踩过才知道痛,但是能提前避开的话,何必浪费那个时间呢,省下来的时间,多改两个bug,多优化一点体验,比什么都强。