2012-02-27 83 views
1

因为我正在学习OS X开发,在这里我遇到了奇怪的情况,我需要找到一种方法来构建10.6以上的目标应用程序,如果它是10.7,那么我需要致电一些新添加的方法或枚举。可能是没有这样的方式,但想到问它。Mac OS X版本特定的API使用

我想必须有方法通过宏或类似的东西来使用它。我不想创建特定于操作系统的版本。任何帮助将不胜感激。可能是没有这样的方式,但想到问它。

问候, 中号P.

回答

0

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

/System/Library/CoreServices/SystemVersion.plist 

通过这种方式,可以通过#ifdefine

建立一个没有不同版本的动态代码编辑:@MP好了,我明白你不想生成特定于版本的代码。 如果你准备好了,那么这很容易。只需使用:

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

感谢您的回复。所以,你的意思是在#ifdefine的帮助下,我可以使用10.7特定的枚举和方法,然后将它编译为10.6以上的目标?任何#ifdefine的例子都会有帮助。 – 2012-02-28 01:13:36

+0

感谢它通过调整一点点。 – 2012-02-29 03:56:55

+0

实际上,您无法保证能够可靠地使用__MAC_10_7宏用于此目的。虽然10.7之前的当前SDK不定义此常数,但最新版本的10.4 SDK也定义了__MAC_10_5。 – Tobias 2012-05-22 16:59:12

1

一种方法是用NSFoundationVersionNumber10_*比较NSFoundationVersionNumber - 看到Foundation/NSObjCRuntime.h的可用版本。您可以尝试-[NSObject respondsToSelector:]

+0

感谢您指出它,但我也必须利用10.7枚举,所以我想我将不得不使用#ifdefine,然后添加那些使用这些枚举的方法。如果使用define,我不会生成编译时错误。 – 2012-02-28 01:18:37

+0

@MP如果您将'SDKROOT'设置为10.7,那么您可以使用这些标头和枚举来构建可见。 – justin 2012-02-28 03:12:35