我创建了一个静态库,其部署目标为 iOS 10.2。该库集成在部署目标为 9.0 的应用中。
应用程序在 iOS 9.0 上构建和运行良好。这是为什么? 即使库仅针对 iOS 10.2 及更高版本,应用程序是否应该构建?
最佳答案
是的,如果您的应用的 Base sdk 等于或高于静态库的部署目标,您的构建将编译无误。
静态库 内部是一堆编译对象。在您的应用程序编译后,在链接时,它会检查静态库中使用的符号的可用性。如果您的项目的基础 sdk 等于或高于静态库的部署目标,您的项目将找到库中使用的所有符号的定义 - 所以 没有编译器错误。
在运行时,如果您在 ios 版本低于静态库的部署目标的设备上使用您的应用程序并且使用了该版本中不可用的符号,则可能会出错。
如果您的代码/库使用符号:
- 未在主项目的基础 SDK 中定义(例如,一个 来自库中较新操作系统的符号),你会得到一个编译时错误。
- 在基础 SDK 中定义但标记为已弃用,您会收到编译时警告。
在部署目标中定义,您的代码链接和构建正常。在运行时:
- 在运行操作系统早于部署目标的系统上,您的 如果您使用该操作系统中不可用的符号,代码可能无法加载。
- 在运行操作系统等于或晚于部署的系统上 target,你的代码有空指针指向那些不可用的符号 操作系统。
关于ios - 防止使用具有较低部署目标的 SDK 在 App 上构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42528043/