【问题标题】:How do you create hybrid Xcode projects for Mac & iPhone?您如何为 Mac 和 iPhone 创建混合 Xcode 项目?
【发布时间】:2010-10-01 09:08:05
【问题描述】:

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

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

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

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

有人对我有什么建议吗? 我想要一个干净的项目结构和两个目标的绝对相同的代码库......配置是要走的路吗?

谢谢!

【问题讨论】:

    标签: iphone cocoa cocoa-touch xcode macos


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      可能最简单的(就你必须做的而言)方法是使用相同的资源集的两个项目(如果你愿意,你可以将它们包装为虚拟伞形项目的子项目)——一个针对 Mac OS X,另一个针对 iPhone OS。

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

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

      【讨论】:

      • 这正是问题所在。有两个具有不同 Base SDK 的目标,其中一个是 Mac OS X 不允许我包含 UIKit 框架。并且在两个平台上同名的安全框架的问题也仍然存在。但是“伞式项目”的想法可能还可以。
      【解决方案3】:

      只是为了让您知道:

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

      -framework Foundation -framework Security
      

      你可以在我在github做的项目中查看它。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2011-01-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多