objective-c – 你如何有条件地在Xcode项目中包含一个框架?

是否有可能有一个
Xcode项目(理想情况下是单个目标),当针对特定版本的OS X / Xcode构建时有条件地包含框架,但是当针对另一个版本构建时不包括那些框架?

我想开始在我正在开发的应用程序中添加对El Capitan的支持,但我想到的一些支持需要链接到Yosemite中没有的框架.有没有办法配置Xcode项目,以便可以使用框架在10.11 / Xcode 7下构建相同的项目,但也可以在没有框架的情况下在10.10 / Xcode 6下构建(并且不会抛出错误)?

我知道如何在运行时检查类或方法是否存在,但我不清楚如何控制框架链接而不创建第二个Xcode项目,第二个源代码控制分支或总是针对Xcode 7构建(我不想做任何事情.

最佳答案 “其他版本”本质上是另一个目标 – 它以这种方式设置,以准确地完成您所询问的内容.一个基本的例子就是右键单击原始目标并从当前目标中选择副本;然后对Build Phases部分中的链接框架进行任何更改.

目标

在Build Phases中,您会注意到我已将三个框架链接到我的
原始目标:

After right-clicking on the original target and creating a duplicate
I’m able to link it differently:

MyApp的重复版本使用与原始版本相同的类和标题,但需要排除框架的版本除外.也可以导入不同的框架,更改诸如部署目标之类的内容(例如,为不同版本的OS X构建),或者可能使用哪些SDK,等等.

一旦您更熟悉标准构建过程,您就可以创建自定义构建脚本来处理特定任务,例如保持目标名称相同或甚至创建安装程序包 – 一切皆有可能.

点赞