2017-01-05 6 views
0

Availability.hのマクロがsdk検出に使用されていることに気付いています。しかし、彼らは_attribute_私は自分の目的のために使用する方法がわからない型宣言になります。この上xcode:コンパイル時にsdkを検出する方法

#include "Availability.h" 

#if IS_USING_SDK(__MAC_10_10) 
do some declarations here 
#endif 

#if CURRENT_SDK < __MAC_10_12 
do some declarations here 
#endif 

すべてのヘルプ:

私はこのような定期的な定義を使用できるようにしたいですか?

編集:私はC++

+1

最終的な目的は何ですか?いくつかのケースは 'respondsToSelector:'などで解決する必要があります。 – Larme

+0

ありがとうございます、私の最終的な目的は、QTKitが利用可能かどうかを判断することです。私はQuickTimeを使用するカメラクラスを使用していますが、10.12 SDKでは使用できません。 avfoundationを使用することになっていますが、ライブラリはまだ変換されていません。ソフトウェアを使用して10.12でコンパイルする人は、カメラを無効にする必要があります。私はopを編集して、私がC++を使っていると言っています。 –

答えて

1

あなたはこのようにプリプロセッサディレクティブを使用することができます。

#include <AvailabilityMacros.h> 
#if defined(MAC_OS_X_VERSION_10_12) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_12 
// code that requires the 10.12 or later SDK 
#endif 

またはその逆:

#if !defined(MAC_OS_X_VERSION_10_12) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_12 
// code for SDKs 10.11 and earlier 
#endif 

違った名前のマクロを定義し、新しい可用性、マクロヘッダ、Availability.hは、あります:

#include <Availability.h> 
#if defined(__MAC_10_12) && __MAC_OS_X_VERSION_MAX_ALLOWED >= __MAC_10_12 
// code that requires the 10.12 or later SDK 
#endif 

#if !defined(__MAC_10_12) || __MAC_OS_X_VERSION_MAX_ALLOWED < __MAC_10_12 
// code for SDKs 10.11 and earlier 
#endif 
+0

ベースを10.11に設定すると、MAC_OSX_VERSION_10_12が定義されたままになる –

+0

そして?それはなぜ問題なのですか?また、基本SDKをどのように10.11に設定していますか? –

+0

私は、10.11または10.12にsdkを設定するかどうかにかかわらず、MAC_OSX_VERSION_10_12が定義されていないと言っていたはずです。私は 'Build Settings'の 'Base SDK'にあるリストからベースSDKを設定しています。 –

0

一つの方法を使用してい__MAC_10_12が定義されているかどうかを確認することです。これは、sdkが少なくとも10.12であることを示します。これは、とにかく本当に必要なものです。

関連する問題