Xcode打包有bug,会遗漏源语言,导致App Store显示的支持语言数量缺失

前几天,我收到一封用户邮件。他问我:我的应用到底支不支持英文?因为他在 App Store 的语言支持列表里,只看到了简体中文。

这让我有点意外。应用明明有英文界面,为什么 App Store 上只显示中文?我先检查了归档包,里面确实只有 zh-Hans.lproj,没有英文资源目录。看起来像是商店语言信息填错了,但继续查下去,问题出在 Xcode 编译字符串目录的过程里。

我的 Localizable.xcstrings 里,英文是源语言,中文翻译状态是 translated,英文条目却是 new。我一直觉得这只是“尚未审核”的标记,英文既然是源语言,打包时理应保留。实际情况却不是这样:用当前字符串目录编译,只生成了中文资源;把一个英文条目标记为 translated 后,英文目录就出现了。

这让我觉得,Xcode 这里的行为有问题。源语言条目处于 new,不等于应用没有这种语言的内容。可编译结果却把英文资源目录整个省掉了。归档里没有英文目录,App Store 自然也就可能把应用显示成只支持中文。

我也给那位用户回了邮件。感谢他把这个问题告诉我,我送了他一个高级账户,永久购买的那种。对我来说,这不只是一次客服回复:如果没有他的提问,我可能还不会注意到 App Store 展示的语言信息和实际应用体验对不上。

这次复现能说明,Xcode 的字符串目录编译会受条目状态影响;App Store 的语言列表如何读取归档,还需要结合上传后的结果确认。但至少,问题不只是“我忘了添加英文翻译”这么简单。

临时处理办法是审核英文条目的状态,再重新编译和归档,确认包里确实包含 en.lproj。我也准备了一个最小 Xcode 项目提交给 Apple Feedback,让他们能直接复现这个行为。

结论

源语言明明存在,却因为状态是 new 而没被打进包里,这个行为不合理。Xcode 至少应该明确提示,而不是悄悄遗漏资源,最后让 App Store 上的支持语言数量也跟着少了。