2012-02-27 12 views
1

私はOS Xの開発を学んでいるので、ここで私は10.6より上のターゲットのためのアプリを構築する方法を見つけ出す必要がある奇妙な状況に遭遇しました。いくつかの新しく追加されたメソッドまたは列挙型。そのような方法はないかもしれないが、それを聞くと思った。Mac OS Xバージョン固有のAPI使用

マクロスなどを使用して使用する方法があるはずです。 OS固有のビルドを作成したくありません。どんな助けもありがとう。そのような方法はないかもしれませんが、それを聞くと考えました。あなたはプロパティファイルからバージョンを読み取ることができ

よろしく、 M P.

答えて

0

:このように

/System/Library/CoreServices/SystemVersion.plist 

、あなたは#ifdefine

によって異なるバージョンせずに動的コードを構築することができます編集:@まあ、あなたはバージョン固有のコードを生成したくないと思った。 とすれば、それは簡単です。単純に使用します。

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

お返事ありがとうございます。だから、私は#ifdefineの助けを借りて、10.7の特定の列挙型とメソッドを使用して、10.6より上のターゲットに対してコンパイルすることができますか? #ifdefineの例が参考になります。 –

+0

ちょっとチューニングしてくれてありがとう。 –

+0

実際には、この目的のために__MAC_10_7マクロを確実に使用できるとは限りません。 10.7より前の現在のSDKではこの定数が定義されていませんが、10.4 SDKの最新バージョンでは__MAC_10_5も定義されています。 – Tobias

1

一つのアプローチは、NSFoundationVersionNumber10_*NSFoundationVersionNumberを比較することである - 利用可能なバージョンのためのFoundation/NSObjCRuntime.hを参照してください。

時々、-[NSObject respondsToSelector:]を試すことができます。

+0

それを指摘してくれてありがとうしかし、私はまた、私はそれらのものを列挙型を利用する方法を追加し#ifdefineを使用してする必要があります推測するので、10.7列挙型を使用することを確認する必要があります。 if defineを使用すると、私はGoessはコンパイル時エラーを生成しません。 –

+0

@MPあなたが10.7に 'SDKROOT'を設定している場合、あなたは目に見えるこれらのヘッダと列挙型で構築することができます。 – justin