1

我已经在 App Store 上有了我的应用,我想发布一个新的国际化版本。因此,我为英文版创建了一个 xib,为法语版创建了一个 xib(本地化在好的 en.lproj 和 fr.lproj 文件夹中)。当我在已经有第一个非国际化版本的 iPhone 上设置应用程序时,界面出现了一些问题:应用程序不会更新 UI 上的所有更改,即使我设置了法国标签iPhone语言转英文(应用程序不会自动选择好的xib)。

如果我只清理项目并再次构建,它仍然无法正常工作,但是当我清理我的项目,删除手机的应用程序并再次构建时,一切都像一个魅力。我不希望问题发生在已经拥有该应用程序并通过 App Store 更新它的人身上:/有没有办法了解发生了什么?

4

1 回答 1

2

会发生这种情况:在旧版本中,应用程序包中有一个 .xib 文件,包如下所示:

 <bundle-path>/interface.xib

在新版本中,您拥有该文件的两个本地化版本,并且您的包如下所示:

 <bundle-path>/fr.lproj/interface.xib
 <bundle-path>/en.lproj/interface.xib

当应用程序尝试加载 xib 文件时,它首先直接在 bundle 目录中查找,如果在该目录中找不到该文件,则在具有本地化文件的子目录中查找该文件。

如果您在设备上有旧版本,然后从 Xcode 构建并运行新版本,则不会删除旧文件,因此您最终会得到这个捆绑包

 <bundle-path>/interface.xib
 <bundle-path>/fr.lproj/interface.xib
 <bundle-path>/en.lproj/interface.xib

并且应用程序加载未本地化的文件,因为它永远不需要查看本地化子目录。

出于性能原因,我假设当您从 Xcode 部署到开发设备时不会删除遗留文件。

但是,您的用户不会遇到此问题。当用户安装您的应用程序更新时,应用程序包将完全被您的新包替换。因此,如果您上传一个没有遗留文件的“干净”捆绑包,并且当您在设备上进行全新安装时,此版本可以正常工作,它也可以在您用户的设备上工作。

于 2013-09-29T20:05:56.080 回答