作为一名做了五年独立开发的iOS开发者,去年我接了本地一所职业技术学院的定制需求,开发一款用于移动端开发教学的实训演示工具,因为只供校内教学使用,不需要面向普通用户公开,我一开始就选择了业内常用的企业签名方案,这大半年来踩了大大小小不下十个坑,从掉签停课到证书被封,折腾了好长时间才摸出适合校园教学场景的稳定授权方案,今天把这些实战经验整理成避坑笔记,给同样做内部定制开发的同行做个参考。

最先要讲的就是P12证书的使用规范,这是我踩的第一个大坑,当时刚接需求,贪便宜找了个个人第三方签名商,对方张嘴就要我导出P12证书和密码给他,我没当回事就发了,结果不到一个月,我的证书直接被苹果封了,整个应用全军覆没,刚好赶上学校期中实训,一百多个学生要装工具做项目,直接掉签用不了,我折腾了整整一下午才恢复,后来才知道,对方拿我的P12证书给几十款违规IPA做了共享签名,触发苹果风控直接封了证书。 吃了这个亏之后我才整理出正规的P12使用规范:第一,一个苹果开发者账号最多只能生成2个企业证书,绝对不要重复生成多余证书,频繁生成证书很容易被苹果判定为滥用,直接触发风控封禁;第二,P12证书必须加密存储在本地,除非是自己操作签名,否则绝对不要把完整的P12文件和密码发给第三方,正规服务商只会要求你托管账号权限,不会索要完整证书文件;第三,P12证书和描述文件是一一绑定的,不同类型的证书不能混用,开发证书不能用来做分发签名,混用会大大增加掉签概率;第四,证书到期前至少30天要提前更新,不要等过期掉签了才应急处理,很容易耽误正事。

讲完规范,再说说不同证书分发方式的优劣,目前iOS分发常用的四种方式正好对应我们定制教学工具的不同场景:第一种就是企业证书分发,也就是我们说的企业签名,优势很明显,不需要提前绑定设备UDID,不限制安装设备数量,用户扫码就能下载,很适合学校这种几十上百台设备的教学场景,不需要一个个收集设备信息,分发成本低;劣势就是稳定性差,很容易因为证书滥用掉签,一旦被苹果检测到非授权分发,直接封证书,所有安装过的应用都会失效。 第二种是个人开发证书UDID分发,优势是苹果官方授权,稳定性远高于共享企业签名,成本也低,个人开发者账号一年只要688元;劣势是最多只能绑定100台设备,设备数量超过就只能重置设备列表,适合小范围小班教学使用。 第三种是TF内测也就是TestFlight签名,这是苹果官方的内测分发渠道,优势是稳定性极强,只要审核通过基本不会掉签,单版本最多支持1万台设备,足够绝大多数学校的教学使用;劣势是需要过苹果审核,虽然审核比AppStore松很多,但违规内容还是过不了,而且每一个版本有效期是90天,到期需要重新上传。 第四种就是AppStore上架,优势是最稳定,用户直接从AppStore下载,永远不会掉签,信任度最高;劣势是审核规则极严,像这种专供校内教学的定制工具,很多功能不符合公开上架要求,很容易被拒,而且就算过审,对于内部使用来说成本太高,完全没必要,我当时试着上架了三次,都因为“仅面向特定群体提供服务,不符合公共应用要求”被拒,最后直接放弃了。

接下来给大家讲清楚iOS设备授权的原理,还有UDID绑定的实操步骤,其实所有iOS应用能安装运行,本质都是苹果给应用做了IPA授权,只有经过签名授权的IPA,才能对应到允许安装的设备,每一台iOS设备都有一个唯一识别码就是UDID,苹果的授权机制就是,开发者把允许安装的设备UDID录入开发者后台,打包进描述文件,再用证书签名,这样只有录入的设备才能验证通过安装应用,这就是UDID绑定设备授权的核心原理。 我自己做UDID绑定踩了不少坑,这里把实操流程整理出来,新手直接用就行:第一步是收集UDID,最方便的方法就是做一个简单的H5封装收集页,用户用Safari打开网页,按照提示安装一个描述文件就能自动获取UDID,自动回传到你的服务器,不需要一个个教用户怎么在设置里找UDID,我当时就是用开源代码改了个H5收集页,一百多台设备一天就收集完了,省了好多事。 第二步是批量导入UDID,登录苹果开发者后台,找到设备列表,把收集到的UDID批量导入就行,这里要注意,个人开发者账号一年可以重置三次设备列表,如果你有超过100台设备,可以把已经毕业不用的设备删掉,腾出位置加新设备,我合作的学校一个年级120台设备,我每学期开学重置一次,刚好够用,完全满足教学需求。 第三步是生成新的描述文件重签IPA,每一次新增或者删除设备,都要重新生成描述文件,再给IPA重新签名,原来的安装包只能识别原来的UDID,新增设备一定要重签才能安装,我一开始不知道这个规则,加了新设备就直接发原来的安装包,结果二十多个新设备都装不上,折腾了半天才找到问题。

讲完原理和实操,再说说我试过不同渠道的价格体验,给大家做个参考:最便宜的是共享企业签名,我一开始找的那个,一个月30块,包年199,号称永不掉签,结果不到一周就掉了,找对方补发,说低价签名不保证补发,要稳定得升级超级签名,一个月要300,属于典型的低价引流加价,完全不可信。 中等价位的是稳定共享企业签名,我后来找的一家,一年800,承诺掉签2小时内免费补发,这个用了三个月,还是因为证书被封掉了一次,不过对方确实半小时就给我补发了新的安装包,没耽误太久,价格对小团队来说还能接受。 然后是UDID代绑,如果你自己没有开发者账号,找别人代绑一般是5块钱一台,一次收费,掉签免费补发,100台就是500,比企业签名包年还便宜,适合固定设备的教学场景,要是自己有账号,成本就是一年688,没有额外费用,更划算。 接下来是TF签名,现在市面上的价格一般是一个版本200到500,包更新的话一年也就多收200,我后来做的TF版本,花了300块,用了快半年都没掉过,稳定性远超共享企业签名,性价比非常高。 最贵的就是独享企业签名和AppStore代上架,独享企业签名一年大概1800左右,一个证书只给你一个应用用,掉签概率很低,适合设备超过一万台的大项目,AppStore代上架的话一般是1000到2000包过,要是涉及特殊功能还要加价,对于校内教学用的工具来说,完全没必要花这个钱。

最后给大家说我总结出来适合企业签名用于学校教学的稳定方案,核心就是按需选择,做好失效补发预案:第一,如果是小班教学,设备不超过100台,首选个人开发者账号UDID绑定签名,自己掌握证书和账号,完全可控,只要不违规,基本不会掉签,就算加新设备,自己十分钟就能操作完,成本一年才688,是最稳定省钱的方案,我现在就是用的这个方案,大半年从来没出过大问题。 第二,如果设备数量在100到10000台之间,直接选TF内测签名,苹果官方渠道,基本不会掉签,下载也方便,用户只要跳转到TestFlight就能安装,价格也就几百块一年,比企业签名稳定太多,就算90天到期,重新上传也就一天的事,完全不耽误教学。 第三,如果设备超过一万台,只能选企业签名,一定要选正规服务商的独享证书,不要贪便宜选共享证书,共享证书别人违规你跟着掉,稳不稳定全看运气,独享证书虽然贵一点,但一年也就一千多,掉签概率低很多,而且一定要提前确认好失效补发规则,必须要求免费4小时内补发,我见过太多低价渠道掉签之后要么加价要么失联,耽误教学就是大问题。

另外还要提醒大家,不管用什么方案,一定要做一个H5封装的统一下载页,把安装链接放进去,用户扫码就能下载,就算掉签补发,只要在后台替换一下链接就行,不用重新做二维码发通知,非常省心,很多新手以为H5封装不用签名,这里要纠正一下,H5封装只是把网页打包成IPA壳,本质还是需要IPA授权签名才能安装,没有签名的H5封装IPA根本装不上,这也是很多新手容易踩的坑。 我自己做内部工具这么久,最大的感受就是,企业签名用于学校教学,不需要追求花里胡哨的方案,适合自己的设备规模,可控性强才是最重要的,提前备份好证书和安装包,选对渠道,完全可以稳定用一年,不会掉签耽误事。