objective-c - 如何有条件地将框架包含在 Xcode 项目中?

标签 objective-c xcode macos

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

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

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

最佳答案

“其他版本”本质上是另一个 target — 它以这种方式设置以准确执行您的要求。一个基本的例子就是右键单击您的原始目标并从当前目标中选择 duplicate;然后对 Build Phases 部分中的链接框架进行任何更改。

目标

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

original

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

enter image description here

MyApp 的重复版本使用与原始版本相同的类和 header ,但那些需要排除的框架的除外。也可以导入不同的框架,更改诸如 Deployment Target 之类的东西(例如,为不同版本的 OS X 构建),或者可能是哪个 SDK 每个人都可能使用,等等。

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

关于objective-c - 如何有条件地将框架包含在 Xcode 项目中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31434974/

相关文章:

ios - Webview 中的应用程序传输安全问题

ios - 是否可以在真正的 ios 设备中创建本地文件夹?

ios - 更改选取器 View 内的字体颜色

macos - Mac代码签名: Bypass the Keychain Access private key prompt from Terminal

c++ - C++、Mac OS X 10.6.8 中的串口问题

ios - 访问在几个不同的可能类中设置的 BOOL 标志

ios - UIApplicationSignificantTimeChangeNotification

iPhone游戏编程: Multiple UIImageViews in a UIViewController or UIImages in a UIView?

ios - 导航栏宽度的 Xcode 8 Storyboard 警告

java - OS X Mavericks 中的 Aptana Studio 3 菜单栏