【问题标题】:Loading wrong xib after updating the app更新应用程序后加载错误的 xib
【发布时间】:2013-09-29 14:40:10
【问题描述】:

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

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

【问题讨论】:

    标签: iphone ios objective-c xib


    【解决方案1】:

    会发生这种情况:在您的旧版本中,应用程序包中有一个 .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 部署到开发设备时不会删除旧文件。

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

    【讨论】:

    • 非常感谢您的回答。但是如何安装没有旧文件的干净包?为了测试我的版本:)
    • 在使用 Xcode 构建和安装之前从设备中删除应用程序。
    • 好的,如果我理解的话,如果它是这样工作的,它将适用于所有更新的用户?
    猜你喜欢
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    相关资源
    最近更新 更多