因为我正在学习OS X开发,在这里我遇到了奇怪的情况,我需要找到一种方法来构建10.6以上的目标应用程序,如果它是10.7,那么我需要致电一些新添加的方法或枚举。可能是没有这样的方式,但想到问它。Mac OS X版本特定的API使用
我想必须有方法通过宏或类似的东西来使用它。我不想创建特定于操作系统的版本。任何帮助将不胜感激。可能是没有这样的方式,但想到问它。
问候, 中号P.
因为我正在学习OS X开发,在这里我遇到了奇怪的情况,我需要找到一种方法来构建10.6以上的目标应用程序,如果它是10.7,那么我需要致电一些新添加的方法或枚举。可能是没有这样的方式,但想到问它。Mac OS X版本特定的API使用
我想必须有方法通过宏或类似的东西来使用它。我不想创建特定于操作系统的版本。任何帮助将不胜感激。可能是没有这样的方式,但想到问它。
问候, 中号P.
您可以从属性文件读取的版本:
/System/Library/CoreServices/SystemVersion.plist
通过这种方式,可以通过#ifdefine
建立一个没有不同版本的动态代码编辑:@MP好了,我明白你不想生成特定于版本的代码。 如果你准备好了,那么这很容易。只需使用:
#include <Availability.h>
#ifdef __MAC_10_7
/* 10.7 only code */
#else
/* not 10.7 code */
#endif
一种方法是用NSFoundationVersionNumber10_*
比较NSFoundationVersionNumber
- 看到Foundation/NSObjCRuntime.h
的可用版本。您可以尝试-[NSObject respondsToSelector:]
。
感谢您指出它,但我也必须利用10.7枚举,所以我想我将不得不使用#ifdefine,然后添加那些使用这些枚举的方法。如果使用define,我不会生成编译时错误。 – 2012-02-28 01:18:37
@MP如果您将'SDKROOT'设置为10.7,那么您可以使用这些标头和枚举来构建可见。 – justin 2012-02-28 03:12:35
感谢您的回复。所以,你的意思是在#ifdefine的帮助下,我可以使用10.7特定的枚举和方法,然后将它编译为10.6以上的目标?任何#ifdefine的例子都会有帮助。 – 2012-02-28 01:13:36
感谢它通过调整一点点。 – 2012-02-29 03:56:55
实际上,您无法保证能够可靠地使用__MAC_10_7宏用于此目的。虽然10.7之前的当前SDK不定义此常数,但最新版本的10.4 SDK也定义了__MAC_10_5。 – Tobias 2012-05-22 16:59:12