Cocoa(OSX)和CocoaTouch(iPhone)组件在同一个Xcode项目文件中?

Cocoa(OSX)和CocoaTouch(iPhone)组件在同一个Xcode项目文件中?,iphone,cocoa,cocoa-touch,xcode,Iphone,Cocoa,Cocoa Touch,Xcode,是否可能有一个包含Cocoa(MacOSX)和CocoaTouch(iPhone)版本组件的Xcode项目文件 我以为我已经接近了,直到我意识到需要在项目设置中设置“所有配置的基本SDK”,以便调用交叉编译器(以及找到任何CocoaTouch框架并由Xcode正确处理) 由于这是一个项目范围的设置,我不知道如何将MacOSX和iPhoneOS目标放在同一个项目文件中 具体说明: SDKROOT = iphoneos3.0 在xcconfig文件中(仅由iPhone目标使用)似乎不起作用。是的,

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

我以为我已经接近了,直到我意识到需要在项目设置中设置“所有配置的基本SDK”,以便调用交叉编译器(以及找到任何CocoaTouch框架并由Xcode正确处理)

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

具体说明:

SDKROOT = iphoneos3.0

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

是的,可以,但存在一些小故障

好的,首先,您可以通过几种方式覆盖任何基本SDK。一个是,您可以在inspector底部的gear上添加“AddBuildSettingCondition”,它允许您根据目标体系结构等条件化任何构建设置

第二,即使您有一个项目范围的设置,它也可以被每个目标覆盖。因此,如果您有单独的目标,您可以将一个SDKROOT添加到中,并使用其SDKROOT将其添加到各个目标中

第三,在Xcode窗口的弹出窗口中选择的SDK将覆盖所有其他SDK。因此,如果您在弹出窗口中有“基本SDK”之外的内容,它将被使用。此外,如果您确实切换了该选项(比如从“基本SDK”切换到“iPhone模拟器”),然后将目标切换到不支持当前选择的SDK的目标,它将显示为取消选择,但实际上不会正确自动转换基本SDK,您需要在弹出窗口中重新选择它


我仍然无法始终将多个Arch构建作为聚合的一部分(例如,让一个OS X目标预处理一些构建的资源,以便在以后构建iPhone应用程序的目标中用作构建阶段)。

Hi jhoule,我想知道为什么您需要在单个项目中同时构建这两个Arch?这似乎是一个可以避免的场景,主要是代码组织的问题。假设我有LibA、LibB和LibC。我目前为每一个都有一个.xcodeproj文件,它们非常独立。如果我需要按平台进行拆分(OSX与iPhone),我最终会有6个项目文件。如果我从LibA添加/删除一个源文件,我需要更新2个项目文件。每当我需要设置预处理器定义、私有库等时,我都会这样做。我在一个独立的目标上有一个迷路的SDKROOT。另外,关于您的“重新选择”技巧,我注意到在Xcode中更改SDKROOT有点脆弱,每当我更改它时,我通常会关闭并重新打开我的项目文件。谢谢你的帮助!如果我曾经使用(并解决)您描述的多拱门情况,我将在这里添加注释。