更新应用程序后加载错误的 xib

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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 构建和安装之前从设备中删除应用程序。 好的,如果我理解的话,如果它是这样工作的,它将适用于所有更新的用户?

以上是关于更新应用程序后加载错误的 xib的主要内容,如果未能解决你的问题,请参考以下文章

即使在更新 SHA 1 指纹以获取发布密钥后,Google 地图也无法在 Play 商店中发布后加载

SonarQube 8.9 无法启动,登录后加载页面被阻止

MpMoviePlayer 在停止事件后加载音频

JPA 实体中的预/后加载更新

viewdidappear 发生后加载 uitableview 数据?

当枢轴选择更改时,如何在枢轴项目中加载图像后加载音频文件