2011-09-28 60 views
4

寻找版本升级到版本升级的具体细节,尤其是捆绑在新版本中删除的内容会发生什么情况?例如,如果版本1.0在软件包中有一个名为“foo.png”的文件,但版本2.0没有,那么iOS在升级过程中是否删除了现有的foo.png?还是它离开它?谢谢,亚历克斯iOS应用版本升级 - Bundle内容是否被删除?

回答

6

去想它的方式是这样的:

  1. 的旧的包(可执行文件,资源等)完全去除。
  2. 这个新的捆绑包在它的位置。
  3. 应用程序文件系统外的文件系统保持不变。

所有应用程序存储的数据,文档和用户默认值都保持在原来的位置。你的应用程序的新版本将醒来,发现所有状态仍然存在,并需要正确处理。但是,旧的应用程序包的资源都不存在 - 不需要担心看到这些事情的升级和版本控制。

+0

谢谢,这很有帮助。你有关于这个主题的任何Apple文档的链接?到目前为止,我所看到的关于原始内容的主题是模糊的。 – Alex

+2

当通过Xcode安装应用程序的新版本时,这种工作方式是否有所不同?我正在测试一个更新,令我惊讶的是刚刚发现旧版本中的旧资源仍然存在。 – radven

+2

Radven,是的,当您通过XCode进行部署时,它的工作方式会有所不同。他们似乎在这种情况下做了一个原地拷贝。为了真正测试升级,我们已经在发布版本上部署adhoc发布版本。 – Alex

4

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

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

+0

这一点是有效的,但我不认为NIB是“从简单地在文件系统中初始化”。它们都是明确加载的,即使只是在样板代码中。 (如果我错了,请告诉我。) –

+0

loadView'方法将查找与包中的视图控制器的类名相匹配的笔尖,即使使用'init'而不是'initWithNibName '。 –

+1

而且,在更新期间移除NIB文件是非常重要的,例如,由于本地化:您可以将您的NIB移动到en.lproj /文件夹,但默认的NIB加载器首先会查看主文件夹,并且仅在本地化目录中查看* then *。 – kuba