更新应用后加载错误的xib

时间:2013-09-29 14:40:11

标签: iphone ios objective-c xib

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

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

1 个答案:

答案 0 :(得分: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部署到开发设备时,不会删除旧文件。

但是,您的用户不会遇到此问题。当用户安装您的应用更新时,应用包将完全被您的新捆绑包取代。因此,如果您上传没有旧文件的“干净”软件包,并且此版本在您的设备上进行全新安装时仍然有效,那么它也适用于您用户的设备。