因爲我正在學習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