【问题标题】:Don't compile iOS in code for OSX on a cross-platform iOS/OSX module不要在跨平台 iOS/OSX 模块上的 OSX 代码中编译 iOS
【发布时间】:2015-01-28 07:07:29
【问题描述】:

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

客户坚持该模块在 iOS 和 OSX 上都可以工作。

我需要检查我在 iOS 和 OSX 上使用 UIDevice 所做的系统版本,我使用的是FTWDevice

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

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

我知道我可以这样做以仅在生产环境中编译一些东西:

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

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

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

【问题讨论】:

    标签: ios objective-c macos swift


    【解决方案1】:

    看看TargetConditionals.h。具体来说:

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

    【讨论】:

      【解决方案2】:

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

      您可以通过以下方式获取系统版本(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 }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        • 2015-02-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多