我正在为Mac OS X和iOS编写一个类库,作为OS X的Cocoa Framework和iOS的静态库发布。为了简化问题,我打算在Xcode中使用多个目标。但是,Mac OS X上的类链接到Cocoa.h,而在iOS上它们链接到Foundation.h。
我的问题基本上是:
或者我可以在头文件中使用预处理器指令来控制框架包含,例如。
#ifdef MacOSX
#import <Cocoa/Cocoa.h>
#else
#import <Foundation/Foundation.h>
#endif
答案 0 :(得分:21)
您可以使用这些来分隔平台相关代码(请参阅TargetConditionals.h
):
#ifdef TARGET_OS_IPHONE
// iOS
#elif defined TARGET_IPHONE_SIMULATOR
// iOS Simulator
#elif defined TARGET_OS_MAC
// Other kinds of Mac OS
#else
// Unsupported platform
#endif
这是useful chart。
答案 1 :(得分:8)
它就像一个魅力:
#ifdef __APPLE__
#include "TargetConditionals.h"
#if TARGET_IPHONE_SIMULATOR
// ios simulator
#elif TARGET_OS_IPHONE
// ios device
#elif TARGET_OS_MAC
// mac os
#else
// Unsupported platform
#endif
#endif
答案 2 :(得分:2)
- Mac OS X框架可以链接到Foundation.framework吗?框架中使用的类是NSString,NSMutableString和NSMutableArray。
试一试,看看。如果编译失败,没有。如果成功,是的。
- 或者我可以在头文件中使用预处理器指令来控制框架包含,例如
是的,你可以。事实上,我认为这是唯一的方式。
答案 3 :(得分:1)
这对我很有用:
#ifdef __IPHONE_OS_VERSION_MAX_ALLOWED
//iOS
#else
//Mac
#endif