晚上九点半,朋友把两张截图甩过来。一张是上个月的拒信,一张是昨天刚收到的。除了日期,一个字都不差。
都是 4.3。
他说我什么都换了,图标换了,应用名换了,描述重写了,连启动图都重画了一张。他说这话的时候语速特别快,能听出来是憋了一下午。
我没接话,先问了一句:包还是在那台机器上打的吗?
他那边停了大概五六秒,回过来两个字:一直是。
先搞清楚 4.3 在管什么
App Store 审核指南第 4.3 条管的是重复应用。同一个开发者账号底下提交一堆功能雷同的 App,把别人的应用套一层皮再提一遍,或者用一套模板批量生成,都可能落进这一条。
这条最难受的地方是它不给线索。信里就一句话,不告诉你哪一处重合了,也不告诉你是跟谁重合。你想改,得自己倒着查。改完再提,等三天,又是一封信。
比被拒更消耗人的是这种循环:你不知道自己在修什么,只知道又没过。
从结果往回摸,四个方向
我一般按这个顺序查,从最便宜的一步开始。
第一层,构建环境。 同一台机器连着打十几个包,钥匙串里的证书、编译缓存、上一轮构建剩下的资源,全都留在原地。从审核那一侧看,这些包之间会带上一些本来不该有的相似。这个说法听着有点玄,但换一台干净的机器重新构建一次,是所有排查里成本最低的一步,值得先做。
第二层,账号和证书。 一张证书签了几个应用,一批描述文件被反复用,同一组测试设备的 UDID 出现在好几个包里——这些东西会把几个本来独立的 App 串成一条线。有人以为换个开发者账号就切断了,其实签名的链条、打包的机器、提交的出口还连在一起。
第三层,元数据。 描述文案、截图、关键词,几个应用如果共用一套模板,机器扫一眼就出来了。这一层改起来最快,也最容易被当成唯一的原因。改了三天,发现没用,人就泄气了。
第四层,功能本身。 如果应用就是个壳,里面套的是同一套页面、同一套接口,前三层都做完也没用。这一层没有工具能替你解决,只能回到产品上,认真想清楚这个 App 到底解决了谁的什么麻烦。
干净机器这件事,卡住的人最多
说到「换一台干净的机器」,很多人就停在这儿了。手上只有 Windows,团队里没人管 Mac,为了重打一个包去临时买一台,算下来不划算。于是一直拖着,一直在原来那台机器上改图标。
自助远程 Mac 打包接的就是这一段:网页上把工程传上去,挑一个环境,打包,下载 ipa。整个过程在云端跑,用完就走,下一个工程进来是一台新机器,不带你上一个项目的缓存和钥匙串。初雪云这项服务按次计费,50 元起,适合那种「就想干净地重打一次」的场景。
听起来简单,但真正省事的不是省了那台机器,是不用再猜「这次到底是不是环境带过来的」。猜的成本比机器贵得多。
三个常见的自我安慰
- 改了图标和应用名,就以为换了个应用。包还是那个包,里面构建出来的东西没变。
- 换了个开发者账号,就以为切断了关联。设备、证书、打包环境还在原处,线没断。
- 上了代码混淆,就以为不重复了。混淆解决的是可读性,不是同质化。两个功能一样的应用,混淆完了还是两个功能一样的应用。
这三条我都见过有人笃定地跟我讲,讲完隔两周又拿着同一封信回来。他们不是不努力,是力气用在了最不痛的地方。
顺序别搞反
4.3 不给你答案,所以别指望改一处就过。真要排,顺序是:先换一台干净机器重打一次,再查账号和证书有没有串,然后才动文案和图标。前三步没做完就去改第四步,改多少遍都容易回到同一封信上。
有个细节值得记一下:如果是同一批应用一起出问题,别一个一个单独改。它们之间是有关联的,一起处理比逐个试要省时间。
那天晚上我给朋友回了三条:把工程传上去,用干净环境重打一次,拿到新包之前别动任何文案。他第二天照做了,第三天那个包过了。
可能有运气,但至少那一次,他是在修东西,而不是在赌。