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

时间:2017-03-01 09:32:32

标签: ios xcode

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

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

1 个答案:

答案 0 :(得分:7)

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

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

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

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

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

    • 在运行早于部署目标的操作系统的系统上,您的 如果您使用该操作系统中不可用的符号,则代码可能无法加载。
    • 在运行等于或晚于部署的OS的系统上 目标,您的代码具有空指针,用于不可用的符号 OS。
  4. 来源:developer.apple.com

    这里是来自上面链接的图片,解释了您可以使用哪些符号,具体取决于部署目标和基本sdk Image from above link, explaining what symbols you can use depending on deployment target and base sdk.