做独立iOS开发快五年,从最开始蹲在开发者论坛啃教程到现在能从容搞定各种签名问题,踩过的坑能堆一箩筐。最近好多刚入行的朋友找我问,P12和cer到底有啥不一样,做签名的时候到底该用哪个,我就结合自己这么多年的实操经验,给大家唠点实在的。
最开始我也搞不清这俩的区别,第一次申请开发者证书的时候,苹果后台给我下发了cer文件,我导出的时候只导出了cer,拿去给IPA签名,结果签出来的包装到手机上直接闪退,折腾了一下午都没搞明白问题出在哪。后来找前辈问才懂,cer只是公钥证书,里面只存了公开的密钥信息,能用来给Xcode打包识别,但是做离线IPA签名的时候,必须要用到同时包含公钥和私钥的P12证书。
简单说,P12就是一个加密打包的容器,把你的cer公钥和本地生成的私钥封装在一起,还可以设置密码保护。做签名的时候,苹果服务器验证签名需要用到私钥解密,没有私钥的话,验签直接不通过,应用自然打不开。
说下P12证书的正确使用方式吧,我这些年总结的经验。首先你生成CSR请求文件的时候,是在你自己本地的钥匙串里生成密钥对,生成cer之后,一定要回到钥匙串里,找到对应的你的私钥,右键导出,导出格式选P12,这一步一定要设置强密码,千万别图省事不设密码。我刚入行的时候吃过这个亏,导出P12没设密码,不小心发给了找我帮忙签名的朋友,他转手就把这个P12给了好几个同行用,不到半个月我的开发者账号就收到了苹果的警告邮件,说我滥用证书分发权限,差点直接封号,从那之后我不管给谁用P12,都会设单独的密码,用完就回收,自己常用的P12更是牢牢存在加密云盘里,绝不随便外传。
讲完基础的区别和P12使用,再说说签名的核心原理吧。不管是什么类型的IPA签名,本质都是苹果允许你的应用在指定设备上运行,核心就是UDID绑定和证书分发机制。
UDID是什么?就是每一台iOS设备唯一的识别码,苹果的规则里,只有你把设备的UDID添加到你的开发者账号的绑定设备列表里,对应的证书签出来的应用,才能在这台设备上正常运行。我最开始做超级签名的时候,根本不知道还要收集用户UDID,H5封装完应用,导出IPA包直接扔给签名商,结果人家说没UDID签不了,我还跟人杠说不是企业签名不用绑UDID吗,后来才搞懂,不同的签名走的分发机制不一样。
苹果的证书分发机制其实分三类,第一类就是AppStore上架分发,你把应用提交到AppStore,审核通过后苹果会用自己的证书重新给你的IPA签名,用户直接从AppStore下载,任何设备都能用,不用你操心签名的事。但问题是AppStore审核太严,我做过好几个小众工具类应用,还有帮朋友做的定制类应用,要么是涉及一点小众需求不符合审核规则,要么是体量太小不值得折腾上架,两次审核被打回之后,我就老老实实转做外部分发签名了。
第二类就是Ad Hoc分发,也就是我们常说的超级签名走的分发渠道,这个渠道要求你必须把每一台要安装应用的设备UDID绑定到开发者账号,一个个人苹果开发者账号一年最多只能绑定100台设备,所以超级签名就是用多个个人开发者账号的名额,给每个用户的设备绑定UDID之后,再用对应的P12证书给IPA签名,这样苹果验签就能通过。第三类就是企业内部分发,用企业开发者账号生成的企业证书签名,不需要绑定UDID,任何设备都能安装,这就是我们说的企业签名的来源。
接下来给大家说一下我这些年接触到的不同渠道签名的真实价格,绝对不掺水。
先说企业签名,现在市场上分共享证书和专属证书两种,共享证书就是很多个开发者共用同一个P12证书,大家都签自己的IPA,价格非常便宜,我现在看到的市场价一般是30到80块钱一个月,我最早贪便宜买过30块一个月的共享企业签,结果第三天就掉签了,所有已经安装的用户全打不开,找商家补签,说共享证书掉签补一次要收15块,补完之后不到一周又掉了,前前后后补了三次,花了75块,比买一个月的稳定签名还贵,心态直接炸了。
专属企业签名就是你自己或者少数几个人用一个P12证书,不会随便给别人乱用,价格现在一般是一个月300到600块,我现在用的稳定专属签是400块一个月,用了快一年,平均三个月才掉一次,掉签之后商家免费补签,几个小时就能出新包,比共享签名稳太多。
然后是超级签名,超级签名是按装机设备收费,现在市场价大概是1块到3块钱一个设备,我最早做超级签名的时候,五六年前价格要五六块一个设备,现在便宜多了。要是你做小范围测试,几百台设备的话,几百块就能搞定,要是做千台以上的装机,大概就是两千多块。但这里要提醒大家,千万别找那种几毛钱一个设备的,那种基本都是用黑卡开的开发者账号,或者是已经被苹果标记过的账号,不到半个月账号就会被封,一账号封所有绑定的设备全掉签,我之前就踩过这个坑,一千多用户全掉,找商家都找不到人,最后只能自己通知用户重新下载,掉了三分之一的用户,心疼了好久。我现在找超级签名都是找1.5到2块一个设备的正规渠道,用正常个人信息注册的账号,稳很多,很少出问题。
然后是TF签名,TF签名就是把应用上架到苹果官方的TestFlight平台,用户通过TestFlight下载安装,本质是官方认可的测试分发,所以基本不会掉签。TF签名的价格现在分两种,一种是按次上架,一次200到300块,有效期90天,到期之后重新提交就行,原来安装的用户还能继续用;还有一种是包年的,大概800到1200块一年,我现在的主版本就是做的TF签名,花了800块包年,放了快一年了,从来没掉过签,真的是我用过最稳的签名方式,唯一的缺点就是用户下载需要跳转到TestFlight,有些小白用户嫌麻烦,不过只要稍微引导一下,大部分都能搞定,对于稳定来说,这点麻烦根本不算什么。
说到掉签,我真的一肚子话要说,印象最深的一次是前年,帮一个高中母校做了百年校庆的纪念APP,提前一周准备上线,当时想着就用一周,没必要花几百块买稳定签名,就花30块买了共享企业签,结果校庆前一天下午,我打开测试机发现APP直接闪退,证书掉了。当时我整个人都蒙了,已经有几千个校友下载了,全都用不了,新用户也装不了,我赶紧找商家,商家说共享证书被苹果吊销了,要补签得等两个小时,还说补完也不一定能稳到校庆结束。我当时急得满头汗,在出租屋里转圈圈,差点哭出来,后来赶紧联系我常合作的稳定签名商,加价100块,人家帮我优先处理,连夜用专属P12重新签了IPA,我一个个给已经下载的用户发短信通知重新下载,忙到凌晨两点才搞定,那天晚上我就发誓,再也不贪便宜用共享签名了,真的是要命。
掉签之后的补签,其实也分情况,企业签名掉签就是证书被苹果吊销了,必须用新的P12证书重新给IPA签名,然后重新分发,用户重新下载,稳定商家都是免费补签,共享签名基本都是补一次收一次钱,算下来比买稳定的还贵。超级签名掉签一般是开发者账号被封,所有绑定的UDID都失效,只能重新绑定重新签,要是找的靠谱商家,一般也会免费补,不靠谱的直接跑路。TF签名基本不用补签,除非应用违规被下架,不然一直能用,就算90天有效期到了,只要重新提交一下审核,很快就能过,原来的用户不受影响。
我平时也经常帮朋友做H5封装,很多客户不想做原生开发,就把做好的H5网页封装成IPA包,然后做IPA签名分发,成本低,上线快,适配也方便,封装完只要调整好权限,签完名和原生APP体验差不了多少。我第一次做H5封装的时候,不小心关了网络权限,结果封装完的IPA签好名装进去,一直打不开网页,我以为是签名出了问题,折腾了大半天,重新签了三次才发现是封装的时候配置错了,现在想想都好笑。
做独立开发这么久,我最大的感受就是,签名这行真的是一分钱一分货,你想要稳定,就别贪那点便宜,搞清楚P12和cer的区别,弄懂UDID绑定和分发原理,找对靠谱的渠道,比什么都强。我现在一般是核心版本放TF签名,稳得一批,测试版本用超级签名,按设备算钱不浪费,正式外部分发留一个稳定专属企业签名做备用,给那些不想用TF下载的用户,每天打开后台看到用户正常访问,就踏实得很,新入行的朋友要是搞不懂,慢慢来多试几次,别像我一开始一样瞎踩坑就好。