这事得从上个月说起。我接了个H5封装项目,客户要推一个本地生活类小程序,但不想走苹果商城上架那套流程:等审三天、改图十次、被拒理由写得比情书还文艺。他甩来一句:“能签就签,稳定点,别动不动掉。” 我点头说没问题,心里却翻着白眼——哪有什么“别动不动掉”,只有“什么时候掉”和“掉得有多狠”。
我用的是苹果超级签名,不是企业证书那种老路子(去年试过一次,三周后全军覆没,连带三个合作商户一起骂我),也不是个人开发者账号那种玩具级签名(真拿它跑生产环境?你当用户手机是实验室温控箱?)。这次选的是第三方平台提供的IPA超级签名服务,背后绑的是正规的苹果开发者账号,UDID白名单+Ad Hoc分发逻辑,每个设备单独签名,证书用的是In-House类型,理论上支持1000台设备以内长期运行。
价格?第一次充了500块,按设备数计费,2.8元/台/月。我以为捡着便宜了——结果签完23台,第三天凌晨四点收到客户微信:“王哥,我家阿姨的iPhone 12 Pro Max打不开,她说图标像蒙了层雾。” 我爬起来查日志,发现那台设备的Apple ID刚在iCloud里登过新iPad,触发了苹果的隐性风控:系统判定该账号存在“跨设备高频验证行为”,自动吊销了关联的签名信任链。不是证书过期,不是配置错误,是苹果在后台悄悄给你判了死刑。
后来我换了家服务商,报价涨到4.3元/台/月,但加了“Apple ID行为监测提醒”功能——他们会在账号异常登录前12小时发短信预警。听起来玄乎,但真有用。上周我盯住一个客户账号,发现它连续在两台不同型号的iPhone上切换iCloud密码重置,立刻让他暂停所有操作,把那台正在重置密码的旧iPhone从白名单里踢出去,重新导出UDID再签。结果那批21台设备,撑了26天零掉签。比我家养的绿萝活得都规律。
说到IPA签名,很多人以为就是拖个IPA文件进去点一下“签名”按钮。其实不是。你得先解包,检查entitlements有没有包含keychain-access-groups、push-notifications这些敏感权限;得确认Bundle ID没和已上架App冲突(否则签名后安装会卡在“正在验证”);还得手动替换embedded.mobileprovision——有些平台自动生成的profile里时间戳是UTC+0,而你的服务器时区是东八区,差八小时,就可能让iOS系统误判证书“尚未生效”。我吃过这亏,在深圳办公室签的包,发给乌鲁木齐客户,对方手机显示“证书未激活”,查了三小时才发现是时区偏移导致的签名时间校验失败。
稳定性?现在这批用4.3元档的,平均掉签周期是34.6天。我手头有张Excel表,列了137台设备,每台都记着首次安装时间、最后一次正常启动时间、掉签时刻、是否重启修复成功。最离谱的一台是客户家孩子用的iPhone SE(第二代),装的是教育类APP,签了三个月没掉,直到孩子妈用同一Apple ID在MacBook上装了个Xcode插件,当天晚上整个设备签名失效。苹果不声不响,连个通知都不给,就像你往咖啡里加糖,它默默把糖换成盐。
也有顺的时候。上上周,我帮一个社区团购团长做了个简易下单工具,纯H5封装,用SafariViewController嵌套,签了89台安卓转iOS的老年机。结果这批设备特别抗造——最长一台跑了41天,中间经历了两次iOS小版本更新(17.4.1→17.4.2)、三次iCloud同步、一次整机恢复出厂设置。我猜是因为这群用户几乎不用App Store、不装第三方应用、不碰开发者选项,系统根本懒得“审查”这个签名。苹果的签名机制本质是动态信任模型:你越安静,它越宽容;你越折腾,它越警觉。
对了,别信什么“永久签名”。我在群里见过有人吹“证书十年有效”,结果点开链接是跳转到境外注册的开发者账号,用的是已被苹果回收的Team ID。签出来的IPA能装,但只要苹果某天批量吊销那批证书(比如发现该账号批量注册、无真实业务),所有设备瞬间变砖。我亲眼见过一个做健身打卡的小程序,一夜之间200多台设备全部失效,客户凌晨三点打电话过来,声音发颤:“王工,我妈今天没打上卡,血压高了。”
现在我的做法很土:每25天主动轮换一次签名证书,哪怕没掉,也提前重签。客户不理解,我说:“这不是修车,是给车定期换机油——你不等它冒烟,就得换。” 有时客户嫌麻烦,我就把重签流程录成30秒短视频,配上字幕:“点这里→上传IPA→选设备→等12秒→扫码安装”,发过去。他们看完笑:“原来这么简单?” 我没接话。简单的是操作,难的是背后那堆看不见的博弈:Apple ID的信任权重、设备激活策略、证书吊销列表CDN同步延迟、甚至iOS系统底层对未上架App的静默降权机制。
苹果商城上架?我劝过客户三次。他说:“等我跑通模式再说。” 我没再劝。因为我知道,当一个APP真正值钱的时候,它早就不靠签名活着了;而当它还靠签名续命的时候,掉签不是问题,是提醒——提醒你还活在临时通道里,风一吹,门就晃。
今天早上,我又上传了一个新包。签了17台,4.1元/台。付款时系统提示“当前证书余量仅支持89台设备”,我盯着那串数字看了五秒,点了确认。手机震了一下,通知栏跳出一行小字:“签名完成,有效期至2024-07-22”。
我把它截图发到了客户群。
没加任何说明。