ios - 防止使用具有较低部署目标的 SDK 在 App 上构建

标签 ios xcode

我创建了一个静态库,其部署目标为 iOS 10.2。该库集成在部署目标为 9.0 的应用中。

应用程序在 iOS 9.0 上构建和运行良好。这是为什么? 即使库仅针对 iOS 10.2 及更高版本,应用程序是否应该构建?

最佳答案

是的,如果您的应用的 Base sdk 等于或高于静态库的部署目标,您的构建将编译无误。

静态库 内部是一堆编译对象。在您的应用程序编译后,在链接时,它会检查静态库中使用的符号的可用性。如果您的项目的基础 sdk 等于或高于静态库的部署目标,您的项目将找到库中使用的所有符号的定义 - 所以 没有编译器错误

在运行时,如果您在 ios 版本低于静态库的部署目标的设备上使用您的应用程序并且使用了该版本中不可用的符号,则可能会出错。

如果您的代码/库使用符号:

  1. 未在主项目的基础 SDK 中定义(例如,一个 来自库中较新操作系统的符号),你会得到一个编译时错误。
  2. 在基础 SDK 中定义但标记为已弃用,您会收到编译时警告。
  3. 在部署目标中定义,您的代码链接和构建正常。在运行时:

    • 在运行操作系统早于部署目标的系统上,您的 如果您使用该操作系统中不可用的符号,代码可能无法加载。
    • 在运行操作系统等于或晚于部署的系统上 target,你的代码有空指针指向那些不可用的符号 操作系统。

来源:developer.apple.com

这是来自上面链接的图片,解释了根据部署目标和基础 sdk 可以使用的符号 Image from above link, explaining what symbols you can use depending on deployment target and base sdk.

关于ios - 防止使用具有较低部署目标的 SDK 在 App 上构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42528043/

相关文章:

ios - 使用 PureLayout 自定义 UIButton

objective-c - 我如何知道 View 是否可见?

objective-c - 在 Xcode 中将 RSS 日期格式转换为德语日期

iPhone SDK-调试器错误 : The program being debugged is not being run

swift - UIButtons 在所有设备上的形状都不正确

iphone - 模态视图中的淡出过渡

ios - CAShapelayer 在 UIView 子层中的位置错误

ios - 我缺少有关 NSURLSessionConfiguration.HTTPMaximumConnectionsPerHost 的内容吗?

ios - 如何通过 Swift 从 Google 搜索结果页面 URL 中提取搜索关键字?

iphone - Paint 和 OpenGL - 深色无法正常工作