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

Tit*_*eul 6 xcode ios

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

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

Dar*_*ana 8

是的, 如果您的应用程序的Base sdk等于或高于静态库的Deployment目标,那么您的构建将无错误地编译.

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

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

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

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

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

资料来源:developer.apple.com

这里是来自上面链接的图像,解释了您可以使用哪些符号,具体取决于部署目标和基本sdk 来自上面链接的图像,解释了您可以使用哪些符号,具体取决于部署目标和基本sdk.