你如何为Mac和Mac创建混合Xcode项目?苹果手机?

时间:2009-01-14 14:13:58

标签: iphone cocoa cocoa-touch xcode macos

我正在开展一个包含两个目标的项目。一个用于构建在Mac开发中使用的框架,另一个用于创建在iPhone开发中使用的静态库。

在通用代码中,平台之间的#ifdef没问题,但我无法正确获得目标和依赖。

第一个问题是,使用哪个基础SDK? 例如,如果我使用Mac 10.5,我不能包含UIKit框架(它标记为红色,如果我展开它,则不显示头文件)。即使实际链接它的目标是为iPhone OS构建的..

另一个问题是,Foundation.framework或Security.framework之类的东西怎么样?如何处理它们,因为我只能包含其中一个版本(Mac或iPhone SDK)......

有人对我有建议吗? 我希望有一个干净的项目结构,并且两个目标的代码库完全相同......配置是否可行?

谢谢!

4 个答案:

答案 0 :(得分:5)

只是为了让你知道:

我最终得到了一个针对不同平台的不同目标的项目。 但是我没有在目标本身中包含我依赖的框架,而是将它们添加到 Other Linker Flags 构建设置中:

-framework Foundation -framework Security

您可以在github上的项目中查看。

答案 1 :(得分:3)

可能最简单的(就你必须做的事)这样做的方法是两个项目(如果你愿意的话你可以把它们包装成一个假伞项目的子项目),这些项目使用相同的资源集 - 一个针对Mac OS X,另一个针对iPhone OS。

或者,您是否可以在同一个项目中创建两个单独的目标,并从每个“获取信息”窗口的“构建”选项卡中更改“基础SDK”?我没有在我面前检查Xcode,但我认为它会让你这样做。

(当然,无论使用哪种方法,您都可以添加第三个目标:模拟器的静态库,在测试时非常有用!)

答案 2 :(得分:3)

实际上并没有那么糟糕。只需创建相应类型的第二个目标,然后更改“Base SDK”构建设置。然后确保添加所有必要的文件。如果要同时构建两者,请创建聚合目标。有关实际示例,请参阅我的项目SSPromise

答案 3 :(得分:-3)

你不能使用PIMPL idiom吗?和/或两者都有一个共同的标题,但是根据目标架构或SDK使用不同的实现文件?