【问题标题】:Mac OS X version specific API usageMac OS X 版本特定的 API 使用
【发布时间】:2012-03-17 03:05:23
【问题描述】:

当我正在学习 OS X 开发时,我遇到了一种奇怪的情况,我需要找到一种方法来为 10.6 以上的目标构建应用程序,如果是 10.7,那么我需要调用一些新添加的方法或枚举。可能没有这样的办法,只是想问问吧。

我想一定有办法通过宏或类似的东西来使用它。我不想创建特定于操作系统的构建。任何帮助将不胜感激。可能没有这样的办法,只是想问问吧。

问候, M P.

【问题讨论】:

    标签: macos xcode4.2 osx-lion osx-snow-leopard


    【解决方案1】:

    您可以从属性文件中读取版本:

      /System/Library/CoreServices/SystemVersion.plist
    

    这样你就可以通过#ifdefine构建没有不同版本的动态代码

    编辑:@MP 好吧,我知道您不想生成特定于版本的代码。 如果您准备好这样做,那么这很容易。只需使用:

      #include <Availability.h>
      #ifdef __MAC_10_7
          /* 10.7 only code */
      #else
          /* not 10.7 code */
      #endif
    

    【讨论】:

    • 感谢您的回复。所以你的意思是在 i #ifdefine 的帮助下,我可以使用 10.7 特定的枚举和方法,然后为 10.6 以上的目标编译它? #ifdefine 的任何示例都会有所帮助。
    • 实际上,不能保证您能够可靠地为此目的使用 __MAC_10_7 宏。虽然 10.7 之前的当前 SDK 未定义此常量,但 10.4 SDK 的最新版本也定义了 __MAC_10_5。
    【解决方案2】:

    一种方法是将NSFoundationVersionNumberNSFoundationVersionNumber10_* 进行比较——有关可用版本,请参阅Foundation/NSObjCRuntime.h

    有时候,你可以试试-[NSObject respondsToSelector:]

    【讨论】:

    • 感谢您指出,但我还必须使用 10.7 枚举,所以我想我将不得不使用#ifdefine,然后添加使用这些枚举的方法。使用 if define,i gos 不会产生编译时错误。
    • @MP 如果您将SDKROOT 设置为 10.7,那么您可以在这些标头和枚举可见的情况下进行构建。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2015-03-20
    • 1970-01-01
    • 2011-01-02
    • 2014-12-02
    • 2011-02-20
    相关资源
    最近更新 更多