被 Guideline 2.3.8(准确的元数据) 拒审,常见原因是上架页面的名字和装机后主屏图标下的名字对不上,至少在某一个语言里不一致。修法是定一个规范拼写,传播到每个本地化的显示名和每个语言的商店名,重提前逐字符比对。
在我们自己的送审里,这是 2.3.8 最常见的形态,而不是关键词堆砌:两处名称对不上,一处是上架页面展示的名字,一处是装进设备后主屏图标下的名字。两边各自合法,构建全绿,拼在一起却通不过人工审核。对齐到一个规范拼写后重提,通过了。拒信写得不一样的话,可以先把拒信粘贴到 App 审核拒信解读。
为什么看不见
同一个名字活在好几处互不校验的地方:每个语言的商店名、每个本地化的显示名键、App 内的关于页、文案里的提法,甚至内购商品的显示名。构建对每一处都亮绿灯,因为每一处单看都成立。没有任何本地检查会去比对“页面承诺的身份”和“安装后实际的身份”,这个 join 只有审核会做,而且可能在提交几周之后才暴露。
还有两个细节让它更隐蔽:
- 按语言漂移。 英文一致、中文漂移,只有设备语言恰好落在漂移的那个语言上才会被撞破。单语言的检查对此天生是盲的。
- 只差一个字。 我们发现过两个表面的名字只差一个近义词。人工校对时大脑会把两个读成同一个词,不知不觉抹平。
修复顺序
- 先定唯一的规范拼写, 标点、空格、大小写都算。一切以它为前提。
- 列全每个落点: 各语言的显示名、各语言的商店名字段、官网、App 内字符串、内购显示名。用 grep 找,不要靠回忆,第一遍 grep 总是漏。
- 从来源向所有表面传播。 只改一边让它“看起来像”另一边不行,你对齐的目标可能本身就是猜测。
- 提交前双向对照。 每个用户可见表面都等于规范值,并且在构建产物里搜旧拼写,结果为零。比对必须精确相等;模糊匹配正是那一个字能溜过去的原因。
顺序不能反:先写检查再统一来源,只会把今天的漂移固化成基线。
常见问题
2.3.8 名称不一致被拒怎么改?
先定一个规范拼写,标点、空格、大小写都算,再把它传播到每个本地化的显示名和每个语言的商店名。重提前,每个用户可见的地方都和这个值做精确比对。
2.3.8 被拒后能用同一个构建重提吗?
看你改的是哪一边。改商店名是元数据修改;主屏图标下的名字来自构建里各 .lproj 的 InfoPlist 字符串,改这一边就要出新构建。
主屏图标下的名字是从哪来的?
来自构建里每个本地化的显示名,也就是各 .lproj 里的 InfoPlist 字符串。它要和对应语言的商店名逐字符一致,标点和空格都算。
名字对不上,我自己为什么没发现?
每处名字单看都成立,本地也没有任何检查去比对它们。漂移可能只出现在某一个语言里,或者只差一个近义词,人工校对时会读成同一个词。
一分钟自检
从构建产物里读出每个本地化的显示名(各 .lproj 里的 InfoPlist 字符串),和对应语言的商店名逐字符比对,标点、空格、每个在售语言都算。这一分钟不花的话,执行它的将是几周后的一位审核员。
以上来自 Obelisk Club 自己的送审记录。Apple 的措辞会变,请以当前 App Review 指南和你收到的消息为准。