不要在跨平台的iOS / OSX模块上为OSX编译iOS

时间:2014-11-30 00:27:59

标签: ios objective-c macos swift

我正在构建一个将在iOS / OSX应用中使用的模块。

客户端坚持认为该模块适用于iOS和OSX。

我需要检查我在iOS和OSX上使用FTWDevice进行UIDevice的系统版本。

问题在于,当我尝试在OSX上编译它时,它抱怨OSX不支持UIDevice。

我想知道是否有一种方法可以告诉编译器在iOS上编译一行代码但不在OSX上编译?

我知道我可以用这个来编译生产的东西:

#ifndef DEBUG
[Crashlytics startWithAPIKey:CRASHLYTICSKEY];
#endif

是否有解决方案,或者我应该告诉客户他们需要2个完全相同的模块,除了一行?

另一个可接受的解决方案是在iOS上查找并不涉及使用UIDevice的系统版本的解决方法。

2 个答案:

答案 0 :(得分:2)

看看TargetConditionals.h。具体做法是:

#if TARGET_OS_MAC
 // Mac-only code here
#endif

#if TARGET_OS_IPHONE
 // iOS-only code here
#endif

答案 1 :(得分:1)

  

另一个可接受的解决方案是找到解决办法   iOS上的系统版本,不涉及使用UIDevice。

您可以按照以下步骤获取系统版本(OS X和iOS):

func majorVersion() -> Int    { return NSProcessInfo.processInfo().operatingSystemVersion.majorVersion }
func minorVersion() -> Int    { return NSProcessInfo.processInfo().operatingSystemVersion.minorVersion }
func patchVersion() -> Int    { return NSProcessInfo.processInfo().operatingSystemVersion.patchVersion }
func myOSVersion()  -> String { return NSProcessInfo.processInfo().operatingSystemVersionString }