【问题标题】:Understanding what libraries are packaged with an iOS app了解 iOS 应用打包了哪些库
【发布时间】:2013-08-14 19:39:18
【问题描述】:

上下文

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

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

例子:

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

列表可以继续。我意识到这是因为 iOS 7 更新了“核心”框架库,例如 UINavigationController

我的应用在运行 iOS 7 beta 的 iPod touch(第 5 代)上运行的样子

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

问题

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

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

【问题讨论】:

标签: ios sdk ios7


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 2019-12-27
    • 2012-09-08
    • 1970-01-01
    相关资源
    最近更新 更多