【问题标题】:Cocoa (OSX) and CocoaTouch (iPhone) components in the same Xcode project file?Cocoa (OSX) 和 CocoaTouch (iPhone) 组件在同一个 Xcode 项目文件中?
【发布时间】:2009-07-22 18:59:13
【问题描述】:

是否可以有一个包含 Cocoa (MacOSX) 和 CocoaTouch (iPhone) 版本的组件的 Xcode 项目文件?

我以为我已经接近了,直到我意识到您需要在项目设置中设置“Base SDK for All Configurations”才能调用交叉编译器(以及找到并正确处理任何 CocoaTouch 框架通过 Xcode)。

由于这是一个项目范围的设置,我不知道如何在同一个项目文件中同时拥有 MacOSX 和 iPhoneOS 目标。

指定:

SDKROOT = iphoneos3.0

在 xcconfig 文件中(仅限 iPhone 目标使用)似乎不起作用。

【问题讨论】:

  • 您好 jhoule,我想知道为什么您需要在一个项目中同时拥有这两者?这似乎是一种可以避免的情况。
  • 主要是代码组织的问题。假设我有 LibA、LibB 和 LibC。我目前每个都有一个 .xcodeproj 文件,它们几乎是独立的。如果我需要按平台拆分(OSX 与 iPhone),我最终将拥有 6 个项目文件。如果我从 LibA 添加/删除源文件,我需要更新 2 个项目文件。每当我需要设置预处理器定义、私有库等时,同上。

标签: iphone cocoa cocoa-touch xcode


【解决方案1】:

是的,你可以,但有一些小故障。

首先,您可以通过多种方式覆盖任何 Base SDK。一个是您可以在检查器底部的齿轮和“添加构建设置条件”上根据目标架构等条件对任何构建设置进行条件化。

其次,即使您有项目范围的设置,也可以按目标覆盖它。因此,如果您有单独的目标,您只需将 SDKROOT 添加到具有 SDKROOT 的各种目标。

第三,在 Xcode 窗口的弹出窗口中选择的 SDK 会覆盖其他所有内容。因此,如果您在该弹出窗口中除了“Base SDK”之外还有其他内容,它将被使用。此外,如果您确实进行了切换(比如说从“Base SDK”切换到“iPhone Simulator”),然后您将目标切换到不支持当前选择的 SDK 的目标,它似乎会取消选择,但实际上并没有正确自动还原 Base SDK,您需要在弹出窗口中重新选择它。

我仍然不能始终如一地将多个拱门作为聚合的一部分正确构建在一起(例如,有一个 OS X 目标来预处理某些构建的资源,以便它可以用作稍后构建目标的构建阶段iPhone 应用程序)。

【讨论】:

  • 让它工作。我在依赖目标中有一个流浪的 SDKROOT。另外,关于您的“重新选择”技巧,我注意到在 Xcode 中更改 SDKROOT 有点脆弱,我通常在更改时关闭+重新打开我的项目文件。谢谢您的帮助!如果我曾经使用(并解决)您描述的多拱情况,我会在这里添加评论。
猜你喜欢
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多