这是中小团队很常问的一个问题:我们先用签名把 App 发出去做内测、跑投放,等产品稳定了再上 App Store(苹果官方应用商店)。那么之前那个用企业证书签过的包,能不能直接拿去提交审核?
答案分两层:技术上,审核看的是工程产物而不是你之前怎么分发的;但实操上,签名分发用的那个包,几乎肯定不是上架该用的那个包。
一句话结论
能不能上架,跟这个包之前有没有被企业证书签过没有直接关系。苹果审核的是你提交的那份二进制文件和配套元数据是否符合规范。但签名分发的包通常带着一堆为绕过上架限制而做的配置,直接拿去提交,大概率会在审核或后续运行中出问题。
两套通道的本质差别
企业证书签名的分发,属于「企业内部分发」通道——它的设计初衷是给企业内部员工装自用工具用,不需要经过苹果审核,代价是只能发给授权范围内的人、且随时可能被吊销。
上架分发走的是另一条路:提交给苹果审核,通过后面向所有用户公开。审核会检查内容合规、隐私合规、功能完整、没有调用私有接口等等。
这两条路对包的要求是不一样的。前者只要能装上能跑,后者要满足一整套规范。用同一份产物走两条路,等于让一个产物同时满足两套标准,容易两头不讨好。
直接提交会踩的三个坑
第一个坑:权限声明不一致。签名分发时为了图省事,往往会开一些宽松的权限,或者用了只在企业通道下才有效的授权方式。上架时这些声明要重新对齐,否则审核会问,或者上架后某些功能表现异常。
第二个坑:内置的分发和更新逻辑。很多签名分发的包里塞了自己的更新模块、渠道统计模块、甚至绕过商店的支付入口。这些在审核视角下是敏感项,轻则要求整改,重则直接拒。企业通道没人查,上架通道一定会查。
第三个坑:证书和描述文件的残留。虽然审核主要看二进制,但包里如果还留着企业分发用的描述文件、或者专门为那个通道打的渠道标识,都属于需要清理的东西。带着一堆历史包袱提交,等于主动给审核员增加疑问点。
正确的做法:两条线从一开始就分开
比较稳的工程实践是:同一套代码,维护两套构建配置。
- 分发线:走企业证书或按设备注册的方式,用于内测、渠道测试、投放验证。可以开调试日志,可以内置更新模块,可以用测试环境的接口地址。
- 上架线:走标准的上架流程,关掉调试开关,接正式环境,去掉一切为绕过商店而做的东西,补齐隐私清单和权限说明。
两套配置共用业务逻辑代码,只在上层开关和构建参数上做区分。这样既能保证两条线的功能一致,又不会让分发的临时配置污染上架产物。
时间节奏上的建议
如果产品确定将来要上架,建议在上架前预留一到两周做「上架线」的整理,主要做三件事:把分发期为了省事加的东西逐个摘掉;把所有第三方 SDK(软件开发工具包)升到提供完整合规材料的版本;按审核要求补齐隐私说明、权限用途文案、演示账号。
不要指望「先签着,到时候再说」。分发期越长,包里积累的临时逻辑越多,最后一刻清理的成本越高,也越容易漏。
几个常见疑问
问:签过名的包,苹果会不会因为这件事拒我?不会因为「曾经被企业证书签过」而拒。拒的一定是包里的具体内容不合规范。
问:能不能同一个版本两边同时发?可以,而且很常见——内测渠道走签名,正式渠道走商店。只要两条线的产物各自干净,互不影响。要注意的是版本号和更新逻辑别打架,否则用户会收到混乱的更新提示。
问:上架之后,之前签名装的用户怎么办?需要引导迁移。签名版和商店版的包名(Bundle ID,应用唯一标识)如果一致,用户装商店版会覆盖签名版,但数据能否继承取决于沙盒机制和存储位置,跟签名本身关系更大。这一点要提前测。
小结
签名分发和上架不是「先和后」的关系,而是两条并行的通道。别把签名用的包当成上架产物的前身,从第一天起就当两条线维护,后面会省掉大量返工。
我是本期作者小思,想解决苹果企业签名、超级签名、TF签名问题?可以在微信公众号对话框找到我哦~(QQ:822404920 微信:A-mk5888)