【问题标题】:iOS App Version Upgrade - Does Bundle content get deleted?iOS 应用程序版本升级 - 捆绑内容是否会被删除?
【发布时间】:2011-09-29 05:49:09
【问题描述】:

正在寻找有关 iOS 中版本升级如何工作的一些具体细节,特别是在新版本中已删除的捆绑内容会发生什么情况?例如,如果 1.0 版本的包中有一个名为“foo.png”的文件,但 2.0 版本没有,iOS 是否会在升级过程中删除现有的 foo.png?还是把它留在那里?谢谢,亚历克斯

【问题讨论】:

    标签: objective-c ios


    【解决方案1】:

    思考方式是这样的:

    1. 旧捆绑包(可执行文件、资源等)已完全删除。
    2. 新的捆绑包在它的位置被插入。
    3. 捆绑包外的应用文件系统保持不变。

    您在应用程序中存储的所有数据、文档和用户默认设置都准确无误。您的应用程序的新版本将唤醒以发现所有状态仍然存在并且需要正确处理它。但是,旧的 app bundle 的资源都不在那里——您不必担心看到这些东西的升级和版本控制。

    【讨论】:

    • 谢谢,这很有帮助。你有关于这个主题的任何 Apple 文档的链接吗?到目前为止,我看到的内容对原始内容的主题很模糊。
    • 在通过 Xcode 安装新版本的应用程序时,这是否会有所不同?我正在测试更新,令我惊讶的是,我发现以前版本的旧资源仍然存在。
    • Radven,是的,当您通过 XCode 部署时,这会有所不同。在这种情况下,他们似乎做了一个就地复制。为了真正测试升级,我们一直在发布版本之上部署临时分发版本。
    【解决方案2】:

    升级会删除所有旧文件。更新后,您将只拥有属于您的目标的文件。

    这实际上是至关重要的。假设你删除了一个笔尖。如果它实际上没有被删除,它仍然会从简单地在包的文件系统中初始化。而且您的视图控制器中可能没有 IBOutlets 等用于您删除的 xib 中的连接。这将导致应用程序在初始化 nib 时崩溃。

    【讨论】:

    • 这一点是正确的,但我不相信 NIB 是“从简单地在文件系统中初始化的”。它们都在某个地方显式加载,即使只是在样板代码中。 (如果我错了,请告诉我。)
    • loadView 方法将在包中查找与视图控制器的类名匹配的 nib,即使您使用的是 init 而不是 initWithNibName
    • 此外,在更新期间删除 NIB 文件至关重要,例如因为本地化:您可以将您的 NIB 移动到 en.lproj/ 文件夹,但默认的 NIB 加载程序首先查看主文件夹,并且仅在本地化目录中 然后
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 2011-12-20
    • 2013-02-24
    • 1970-01-01
    相关资源
    最近更新 更多