那会儿刚接完一个教育类小程序外包,客户要“能直接发链接、点开就用,但又得像原生APP那样调摄像头和定位”。我说行,H5封装+苹果签名,三天搞定。结果第三天凌晨,他发来截图:iOS端点开白屏,控制台报错“Invalid Signature”,设备重启后图标直接变灰。我翻出证书列表,发现其中一台测试机的UDID早被踢出描述文件了——掉签了。不是所有设备,就那台iPhone 12 Pro,系统17.4.1,连着Wi-Fi自动更新过一次后台服务,签名就断了。苹果没通知,它只是默默把你的设备从Provisioning Profile里划掉,像删一条微信好友,连个“对方已退出群聊”都不给你。
价格?真没法说死。最早我托朋友用他公司账号做IPA签名,680元/年,包50台设备,证书是Enterprise(企业签名),稳得很,半年没掉过。后来他账号被封了——苹果查到他给三家外部客户签过包,判定“非内部使用”,连带我那批APP全崩。再换渠道,找了个自称“深圳南山老司机”的中间商,微信语音里声音沙哑,说:“兄弟,现在都用个人号搞超级签名,便宜,灵活,但你得自己管Apple ID。”我信了。第一批付了320元,签了23台设备,含一个H5封装的轻量版英语背单词APP(Vue打包,WebView嵌套,加了本地缓存层)。结果第三天,7台设备集体失效——不是掉签,是Apple ID被风控锁了。他甩给我一个截图:iCloud登录异常,需要短信验证,但那个号根本没绑国内手机号。我问他为啥不绑,他说:“绑了容易被苹果盯上,我们走的是海外虚拟号通道……这次算我赔,重签,不收钱。”可重签后,新生成的IPA安装时提示“无法验证开发者”,点“信任”也没反应——原来他偷偷用了Ad Hoc证书,却没在设置里手动开启设备信任。我教他操作,他反问:“iOS 17还能手动信任吗?”那一刻我差点把奶茶泼他头像上。
技术原理?我现在能闭眼画出来。苹果签名本质不是加密,是链式授权:你用开发者账号生成CSR,苹果返回开发/发布证书;再把证书+设备UDID+App ID塞进一个.mobileprovision描述文件;最后用这个文件+私钥对IPA二进制逐块签名,生成一个嵌入式签名(_CodeSignature/CodeResources)。超级签名妙就妙在绕开了UDID白名单——它用的是个人开发者账号(99刀/年)配合无限设备注册的“假设备池”逻辑,靠频繁轮换Apple ID和描述文件续期来维持。但H5封装的APP特别吃这套:因为WebView加载的是远程URL,本地代码极薄,签名体积小,重签快,掉签后用户感知也弱——顶多是重启APP时弹个“正在加载”,不像原生APP直接闪退。
稳定性?我拿自己手机当观测站。iPhone 15 Plus,系统17.5,装了四款不同来源的超级签名APP:两个H5封装(一个是问卷工具,一个是社区团购入口),一个原生记账APP,一个Flutter写的健身打卡器。三个月下来,H5那俩掉签率最低——只掉过一次,原因是服务器域名证书过期,导致WebView加载失败,误判为签名异常;而原生记账APP掉了三次,每次都是系统升级后第二天。最离谱的是那个Flutter APP,某次夜间推送热更新后,签名校验突然失败,查日志才发现它偷偷往Bundle里写了个临时JS文件,触发了苹果的运行时完整性校验(Hardened Runtime),直接拒签。H5封装反而干净:它不改Bundle,只改index.html里的CDN地址,签名纹丝不动。
也有顺的时候。上周帮一个本地茶饮品牌做节日活动页封装,H5页面带AR扫码功能(用Three.js调用摄像头),他们要求“扫完立刻跳转会员页,不能有加载白屏”。我用Cordova封装,关掉所有调试开关,签名用的是新换的渠道——一个叫“青藤签名”的小站,399元/季度,承诺“设备掉签自动补签,超2小时未响应赔50元”。结果签完200台设备,跑了一周,只有一台iPad Air 4掉过,客服两分钟内发来新IPA链接,还附了句:“您这台设备昨天连过公共WiFi,可能触发了苹果的网络行为分析,下次建议用蜂窝数据首次安装。” 我愣了三秒,回了个“牛逼”。
当然,坑还在。前天客户问:“能不能让APP在苹果商城上架?我们想长期用。”我顿了顿,说:“可以,但流程完全不同。苹果Apple Store上架要走审核,H5封装大概率被拒——理由通常是‘功能过于简单’或‘内容需跳转至外部网页’。而且一旦上架,你就不能再用超级签名了,得彻底切到TestFlight或正式发布证书。”他沉默半天,说:“那算了,还是签名稳。”
其实我也这么觉得。比起在App Store里等七天审核、改五版隐私政策、被拒三次才上架,不如让H5页面每天迭代十次,签名一刷,200台设备十分钟同步完毕。掉签?那就掉呗。反正H5没本地数据,用户点开还是那个页面,只是图标亮一下暗一下。有时候我觉得,苹果签名像城市里那些没挂牌的小修车摊——不正规,但胎破了五分钟换好,空调坏了当场加氟。它不承诺百年基业,只管今天车轮转得圆。
奶茶凉透了。我合上笔记本,窗外电动车喇叭声一阵紧过一阵。下一批H5封装的订单刚进来,是个宠物医院预约系统,要求支持扫码打疫苗、上传电子病历PDF。我摸了摸口袋里的U盘,里面存着刚导出的最新签名IPA——这次用的是新Apple ID,绑了澳门手机号,描述文件有效期设成28天,比上次多撑了3天。
够用了。