我是做H5封装起家的。最早接单,客户说“老板,我们小程序要上架苹果,但没时间走审核”,我说“那咱套个壳”,结果发现:壳好套,签不上等于白套。第一次自己搞苹果签名,花680买了个“终身超级签名”服务,客服发来个链接,点进去填设备号、上传IPA、选证书类型——界面像2012年的淘宝后台。签完发给客户,他回:“能打开,但三天后打不开了。”我查日志,才发现那个证书是个人开发者账号生成的Ad Hoc,有效期90天,但设备列表只绑了20台,第21台装上去就自动踢掉最早的。我没敢说,默默退了300块。
后来我转头去租苹果开发者账号。不是买,是租——按月付,298/月,带UDID管理后台和自动续签钩子。账号主是深圳一个做教育APP的团队,他们不用企业证书,只用标准的Developer Program账号配Development证书+Provisioning Profile。好处是:每台设备单独签名,不共用profile;坏处是,你得手动导出每个设备的UDID,再批量上传。我试过用爱思助手一键抓UDID,结果导出的文件里混进了两行乱码,导致其中一台iPhone SE(第二代)死活签不上,反复报错“device not in provisioning profile”。最后发现是客户老婆的手机——她顺手点开我发的测试链接,浏览器自动上报了她的设备信息,但没授权,系统记了个残缺UDID。
说到技术原理,其实没那么玄。苹果签名本质就是三把锁:第一把是代码签名(Code Signing),用你的私钥对IPA里的可执行文件做哈希加密;第二把是配置描述文件(.mobileprovision),它像一张电子通行证,写明了哪些设备ID、哪些Bundle ID、用哪个证书签的;第三把是Apple ID绑定——iOS 12之后,非App Store安装必须经过Apple ID二次确认,也就是你点“信任此开发者”那一步。但很多人不知道:这个“信任”不是永久的。一旦你换Apple ID、刷机、甚至系统升级到新beta版,信任链就断了。我们有批老用户,用的是iOS 16.6.1,签名稳如老狗;结果一升17.4,当天掉签率飙到47%。不是证书过期,是苹果悄悄收紧了LocalAuthentication框架的校验逻辑。
价格?真没法统一说。上个月帮一个跨境电商客户做H5封装+苹果签名,他们要推300台内部销售机,我找了三家渠道比价:A家报12元/台/月(含UDID录入+自动续签),但要求预付半年;B家8.5元/台/月,不限设备数,但掉签后重签要加收2元/次——我们那周掉了11次,光补签就花了22块;C家最狠,一口价399包年,不限设备、不限重签次数,但只支持iOS 15–17.3,17.4以上不保。我咬牙选了C,结果客户第二天就全员升级到了17.5,我连夜改方案,把H5封装层加了一层Service Worker缓存兜底,至少页面还能离线加载——签名掉了,功能没全崩,算捡回半条命。
最崩溃的一次是“双签失效”。客户同时用了我们的超级签名+他们自己买的苹果商城上架权限,想AB测试。结果他们的技术同事把Bundle ID设成一样的,导致App Store版本和签名版冲突。iOS系统认准了App Store那个签名更“权威”,本地签名的图标直接变灰,点开就闪退。查了六小时,翻遍Xcode的Signing & Capabilities面板,才发现是Entitlements里多勾了一个“Associated Domains”,而App Store审核通过的版本没开这个——系统判定两个包不是同源,拒绝共存。
但说实话,现在用熟了,苹果签名真挺香。上周上线一个政务类H5应用,嵌了人脸识别、PDF生成、离线地图,全用Web技术写的。原生开发排期要三个月,我们两周封完壳、签完名、铺满217台社区工作站的iPad。稳定性?除了两台老年iPad Air 2(iOS 12.5.7)偶尔弹证书警告,其余全在线。我甚至把签名流程写进脚本,每天凌晨自动轮询设备在线状态,掉签的立刻推通知给管理员,附带一键重签链接。客户说:“比我们OA系统还稳。”
当然也有翻车时刻。前天一个客户说“能不能让签名APP看起来像原生一样?”我脑子一热,把LaunchScreen.storyboard全替换成他们官网首屏截图,连字体都抠出来重做了。结果签名后发现——iOS 17.5对Launch Image缓存机制改了,冷启动时先读取旧缓存图,闪一下才切新图。用户以为卡顿,投诉率涨了18%。我删掉所有自定义启动图,换回系统默认的黑底白图标,投诉当天清零。
现在我的桌面贴着张便签:“签名不是万能的,但没签名,H5在iOS里就是PPT。”
底下还有一行小字:“别信‘永久不掉’,信‘掉得慢’;别信‘全系统兼容’,信‘17.3以下稳如狗’。”
苹果签名这事,像养猫——你得天天喂、定期梳毛、留意它哪天突然不理人。但它真陪你熬过需求变更、审核驳回、服务器宕机那些夜。只要它还亮着那个小图标,我就知道,那串H5代码,正稳稳地躺在某个口袋里,等被点开。