1

语境

我的应用在 Xcode 5.0 的 iOS 7 模拟器中的外观

我在 Xcode 5.0 中预览了一个为 iOS 5.1 构建的应用程序,并在 iOS 7 模拟器中运行它。一堆东​​西已经改变/“看起来很奇怪”。

例子:

  1. 我正在使用 aUINavigationControllernavigationBar使用: 将其颜色设置为黑色self.navigationController.navigationBar.tintColor = [UIColor blackColor],但是当我在模拟器中运行它时,导航栏现在是半透明的灰色
  2. 我在主屏幕上有许多按钮,在 iOS 6 中,这些按钮被导航栏按下,而在 iOS 7 中则不是这样,它们在屏幕上向上移动并位于导航栏后面。

这份名单可以继续使用。我意识到这是因为 iOS 7 更新了“核心”框架库,例如UINavigationController.

我的应用在运行 iOS 7 测试版的 iPod touch(第 5 代)上运行时的外观

当我在我的 iPod touch 上运行相同的应用程序时(但是在这种情况下,该应用程序是从应用商店下载的,已针对 iOS 5 发布),它看起来与在 iOS 6 中几乎相同,导航栏是黑色的,按钮位于主屏幕上的“正确位置”等。

问题

我假设当应用程序使用导航对象时,例如UINavigationController它希望在设备上找到该库,而不是将该库打包在应用程序中?我想情况并非如此。有人可以向我解释一下设备上访问了哪些库以及应用程序预先打包了什么,并更深入地解释了上述机制。

我的理解是,在 Xcode 中预览应用程序时,Xcode 将 iOS 7 库与我的应用程序捆绑在一起,因此发生了相当大的变化。当我在 iPod touch 上预览应用程序时,因为我使用的是应用程序的公共版本,它与 iOS 5/6 库捆绑在一起,它看起来是一样的。

4

1 回答 1

4

这里的问题是,Apple 试图小心一点,以确保现有的、已发布的应用程序在用户升级其操作系统时不会中断,因此运行时库正在检查您的应用程序是使用哪个版本的 SDK 构建的,并根据其修改其行为关于那个信息。基于最新的 SDK 构建,他们不考虑向后兼容性,因为他们希望您更新您的应用程序。

这些库未与您的应用程序捆绑在一起。它们与操作系统打包在一起——这允许 Apple 选择要普遍更新的行为;得到向后兼容的处理;并且是不变的。

于 2013-08-14T19:57:22.550 回答