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

ken*_*nyc 5 macos xcode objective-c

是否有可能有一个 Xcode 项目(最好是单个目标),在针对特定版本的 OS X / Xcode 构建时有条件地包含框架,但在针对另一个版本构建时不包含这些框架?

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

我知道如何在运行时检查类或方法是否存在,但我不清楚如何在不创建第二个 Xcode 项目、第二个源代码控制分支或始终针对 Xcode 7 构建的情况下控制框架链接(我还不想做这些)。

l'L*_*L'l 2

“其他版本”本质上是另一个target\xe2\x80\x94,它的设置方式正是为了精确执行您所要求的操作。一个基本的例子就是右键单击原始目标并duplicate从当前目标中进行选择;然后对该部分中的链接框架进行任何更改Build Phases

\n\n

目标

\n\n

在构建阶段,您会注意到我已将三个框架链接到我的\原始目标:

\n\n

原来的

\n\n
\n

右键单击原始目标并创建副本\n后,我可以以不同的方式链接它:

\n
\n\n

在此输入图像描述

\n\n

MyApp 的重复版本使用与原始版本相同的类和标头,但需要排除框架的类和标头除外。还可以导入不同的框架,更改诸如Deployment Target(例如为不同版本的构建OS X)或SDK每个框架可能使用的内容等。

\n\n

一旦您更熟悉标准构建过程,您就可以创建自定义构建脚本来处理专门的任务,例如保持目标名称相同,甚至创建安装程序包 \xe2\x80\x94 一切皆有可能。

\n

  • 谢谢。我希望有一种方法不必创建第二个目标,这样我就不必担心保持两个单独的目标同步。(WRT 添加/删除文件、常见构建设置等...) (4认同)
  • 好吧,这正是我感兴趣的,无论是否存在某种 Xcode 或构建技巧,可能涉及 xcconfig 文件、预构建脚本、条件构建设置等,并且不需要第二个目标。(例如:xcconfig 文件是否可以检测到它正在 Xcode 7 / 10.11 下构建并有条件地链接到框架中?)如果没有,是否可以添加一个构建阶段来运行脚本来检查正在构建的内容并修改构建环境?也许不是,但这正是我好奇的。 (3认同)