我有一个带有mac目标和iOS目标的Xcode项目。该项目包含一个类IPhoneOnlyClass,仅在iOS目标中使用。我从mac目标中取消选中了IPhoneOnlyClass.m,因此它不会编译该文件。
现在IphoneOnlyClass.h包含行
#import <GameKit/GameKit.h>
当我编译mac目标时,Xcode给了我一个错误:
错误:GameKit / GameKit.h:没有这样的文件或目录
我可以使用#ifdef解决这个问题,但还有更好的方法吗?在编译mac目标时,我宁愿告诉Xcode完全忽略标题。
答案 0 :(得分:3)
您不应该首先在Mac特定或多平台源文件中导入仅限iPhone的类标题。
如果这是不可避免的,那么您将需要使用预处理器宏(例如TARGET_OS_MAC与TARGET_OS_IPHONE)来确定何时为仅iPhone类导入标头。
此外,请确保您没有意外地将任何仅限iPhone的类添加到Mac目标的Compile Sources构建阶段。
答案 1 :(得分:0)
我不认为#ifdef是不好的解决方案。如果您查看UIKit头文件,您会看到Apple使用了很多“#if”,例如:
#if __IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED
和
#if TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)
(最后一行是从NSObjCRuntime.h复制的)
答案 2 :(得分:-2)
您需要将框架添加到Xcode项目中。
Frameworks / Linked Frameworks, Add -> Existing Frameworks
了解更详细的信息,只需谷歌add framework to xcode