【问题标题】:Application Upgrade Issues应用程序升级问题
【发布时间】:2011-10-21 14:48:31
【问题描述】:

我正在尝试对我的应用程序进行重大升级。升级太重要了,我其实是从零开始写代码的,新版本中没有包含原始代码库。我只是从旧版本中复制了 *-Info.plist,并更新了 Bundle 版本标识符。

当我尝试从较旧的(当前 App Store)版本升级时遇到问题。当我通过 XCode 在设备上启动应用程序时,我收到消息:

启动可执行文件“应用程序名称”时出错 启动远程程序时出错:无法获取进程 699 的任务。

如果我在终止应用程序后再次尝试运行它,我会在输出窗口中显示以下内容:

2011-10-21 15:40:27.996 Application Name[713:707] Unknown class Application_Name_NewAppDelegate in Interface Builder file.
2011-10-21 15:40:28.013 Application Name[713:707] Unknown class myTabBarController in Interface Builder file.
2011-10-21 15:40:28.019 Application Name[713:707] Unknown class SelectViewController in Interface Builder file.
2011-10-21 15:40:28.037 Application Name[713:707] Unknown class AddDateViewController in Interface Builder file.
2011-10-21 15:40:28.047 Application Name[713:707] Unknown class DisplayViewController in Interface Builder file.
2011-10-21 15:40:28.063 Application Name[713:707] Unknown class AboutViewController in Interface Builder file.
2011-10-21 15:40:28.125 Application Name[713:707] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UICustomObject 0x16cae0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key window.'
*** First throw call stack:
(0x3200c8bf 0x31d7c1e5 0x3200c5f5 0x35ba1333 0x35ba0e33 0x35b7af19 0x31f6b803 0x31f6c491 0x32d384bf 0x32d39bb9 0x32c72a45 0x32afc227 0x32af6313 0x32ac4921 0x32ac43bf 0x32ac3d2d 0x3206fe13 0x31fe0553 0x31fe04f5 0x31fdf343 0x31f624dd 0x31f623a5 0x32af5457 0x32af2743 0x21b9 0x2178)

这些类实际上是当前版本的一部分,根本不包含在我尝试升级到的新版本中。所以在我看来,升级失败的原因不明。

有没有人对此有任何启示?

【问题讨论】:

  • 这种情况是每次发生还是只发生一次?我在运行新版本时也遇到了一些问题,但它真的很少见,第二次启动它运行良好

标签: ios iphone


【解决方案1】:

对我来说,这听起来像是一个 NIB 缓存问题(错误以“...在 Interface Builder 文件中”结尾)。当我重命名 NIB 时,我看到了类似的问题,没有在代码中的某个地方更正它,但随后惊讶地发现,由于出现了 NIB 缓存,不正确的名称仍然有效。不是直接并行,但它说明了除了当前代码构建之外还有应用程序数据被缓存的观点,并且在您的错误的情况下,它指的是接口构建器,所以大概是感兴趣的 NIB 缓存。

通常,执行“干净构建”可以解决此问题,但如果您完全从头开始,则没有任何旧的构建文件夹内容,因此这似乎不是问题。因此,一种可能性是尝试自己手动清除 NSCachesDirectory 并查看是否可以解决问题。 (谁能确认 NIB 缓存存储在 NSCachesDirectory 中?)

其次,从 Xcode 构建的过程似乎不能直接反映真正的 AppStore 升级,因为在实际的 AppStore 升级中,除了用户数据目录之外,整个应用程序都会被删除,因此应该删除所有缓存的数据。 One answer on this question 提出了一个有趣的想法,即构建您的应用程序然后通过 iTunes 安装可能更接近真实的升级过程,从而告诉您问题是否存在于真正的升级中,而不是从 Xcode 构建。值得研究,因为所有报告都是更新时清除了 NIB 缓存。

【讨论】:

  • 感谢您的帮助,Duncan,今晚我会考虑您的建议
【解决方案2】:

假设您使用的是 XCode 4,在 Project Navigator 中,选择您的项目,然后选择您的目标。选择 Build Phases,然后验证:

您的所有 nib 都列在“复制捆绑资源”下。

您的所有“.m”文件都列在“编译源”下。

(如果您使用的是 Xcode 3,您可以在 Project Navigator 本身的“targets”下找到这些内容。)

有时由于某些奇怪的原因,nib 文件没有进入构建阶段。

如果这不能解决问题,在 Interface Builder 中,对于每个有问题的 nib,单击文件所有者,选择身份检查器,并检查类是否设置为适当的 nib。

【讨论】:

  • 项目中不存在 nib 文件,这就是为什么我发现引用它们很奇怪
  • 您是否完全删除了之前的项目?确保它也从 User/Library/Developer/Xcode/DerivedData & Snapshots 中删除。还要确保它实际上是在一个新的项目文件夹中,因为它可能有旧文件,例如本地 git 存储库等。
  • 这是一个全新的项目,只是使用了与之前版本相同的 bundle id。
猜你喜欢
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
  • 2017-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多