objective-c - 为什么 iOS SDK 和 iOS 操作系统版本会相互影响?或者 : What IS an iOS SDK?

标签 objective-c ios sdk xamarin.ios

EDIT:

The answer below from H2CO3 makes me almost happy. But it does not explain one thing: why do I get a runtime exception when building the app against SDK6 (UIPageViewController requires one child controller before adding it to a parent controller) but not when building against SDK5? The answer from Rolf explains what is going on: the device knows the SDK an app was built with and behaves differently to ensure maximum compatibility.

在与 iOS SDK 版本、MonoTouch 版本和不同的 iOS 版本作斗争时,我开始想:到底什么是 iOS SDK

我的意思是,我安装 Xcode 4.4 并获得 iOS SDK 5。如果我安装 Xcode 4.5,我获得 iOS SDK 6。到目前为止没问题。

  • 现在假设我构建了一个针对 iOS 5 并且不使用任何特定于 iOS 6 的应用程序。我只是使用 iOS SDK 6 构建了这个应用。
  • 然后我构建相同的应用,但使用 iOS SDK 5

然后我在 iOS 6 设备上运行该应用程序的两个版本。

为什么他们的行为不同?存在细微差别,例如,如果在将页面 View Controller 作为子 Controller 添加到父 Controller 之前未设置子 Controller ,UIPageViewController 将抛出异常。

据我了解,回调、功能和一切都来自 iOS 操作系统,而不是来自 SDK。但是两种情况下的操作系统是相同的。

我完全理解,如果我想使用 iOS 6 的特定功能,我需要使用 iOS SDK 6,因为 SDK 5 中不存在 UICollectionView。但是这个 View 的 UI 代码显然没有包含在我的应用程序,否则它也可以在 iOS5 上运行。所以 Collection View 来自操作系统提供的共享库。

除此之外还有 MonoTouch。如果我们假设每个 MonoTouch 版本只不过是绑定(bind)的扩展而不修复任何错误,那么我使用哪个 MT 版本应该无关紧要。

我的问题的简短回顾是:iOS 版本、iOS SDK 版本、MonoTouch 版本和应用程序的目标版本如何协同工作?

最佳答案

iOS SDK 由两个组件组成:工具链(作为编译器的 Clang 和/或 GCC,作为链接器的 ld(64) 和 cctools 包的其他部分(GNU 人称之为 binutils) 以及库和头文件。

工具链(编译器)版本与iOS版本号没有严格关系。理论上,任何足够的交叉编译器都可以为任何 iOS 构建代码(尽管在实践中,由于 Apple 在设计编译器时所犯的错误,包括硬编码库函数名称、类和方法选择器等,因此存在异常(exception)和限制) .).

头文件和库(包括 Apple 特定的“框架”类型的库)本质上是 /usr/include/usr/lib 的副本和 iOS 上的 /System/Library/Frameworks 目录。 (即使这也不完全正确 - 在 iOS 上,头文件不存在于 iOS 3 和库中 iOS 3.1,因为引入了 dyld shared cache)。它们基本上告诉编译器和链接器哪些函数、类和方法可用于特定版本的 iOS。头文件用于编译时验证,库用于链接时验证。基本上,在不需要交叉编译代码的普通非嵌入式系统(即桌面系统)上,“SDK”基本上意味着操作系统本身,它不会被称为“SDK”;它更愿意被称为“系统根”。

关于objective-c - 为什么 iOS SDK 和 iOS 操作系统版本会相互影响?或者 : What IS an iOS SDK?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13118783/

相关文章:

ios - Objective C 解析问题

ios Objective-C 如何在大屏幕上显示不同的视频提要

jakarta-ee - 关于 Java SE 和 Java EE 的混淆

iphone - UITabBarController presentmodal 自动旋转问题

objective-c - 使用 NSBundle 加载我的资源

ios - 为 iPhoneOS 构建静态库 Graphviz。什么剧本?

java - Kindle-我可以从kindle paperwhite中获取数据吗?

android - RE:运行android项目时出错

objective-c - iOS 应用程序在使用 Xcode 4.2 和 iOS 5 进入 main() 之前崩溃

iOS:后台定位应用耗电过多