更新应用程序后加载错误的 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 商店中发布后加载