2012-04-27 9 views
3

__IPHONE_OS_VERSION_MIN_REQUIREDはデプロイメントターゲットの代わりに基本SDKを返すのはなぜですか?__IPHONE_OS_VERSION_MIN_REQUIREDはデプロイメントターゲットを返しません。

iOS 4.3以上でしか動作するが、それでも4.0以上をサポートするクラスを使用したいと考えています。これを達成するために、iOSバージョンが4.3より小さいデバイスでこのクラスを使用しようとすると私は主張します。アサーションを避けるために、4.3メソッドの可用性をチェックすることでコード内のクラスを回避します。展開ターゲットは現在4.0に設定されています。

ただし、アサートは古いデバイスでアプリケーションを実行するときにのみ発生するため、展開ターゲットが4.3未満の場合は警告を追加することも必要です。 __IPHONE_OS_VERSION_MIN_REQUIREDを使用しようとしています。しかし、これは何らかの形で43000よりも何かの代わりに50000(基本SDK)を返しています。理由を理解できません。

コード:

NSLog(@"Deployment target: %i", __IPHONE_OS_VERSION_MIN_REQUIRED); // Returns 50000 instead of 40000. 
#if __IPHONE_OS_VERSION_MIN_REQUIRED < 43000 
// Never gets here 
NSLog(@"%@", @"WARNING! NWMethodWrapper does not work on iOS versions below 4.3. If you insist on supporting older iOS versions, make sure you do not call NWMethodWrapper methods unless dlsym(RTLD_DEFAULT,\"imp_implementationWithBlock\") evaluates to true."); 
#endif 
NSAssert(dlsym(RTLD_DEFAULT,"imp_implementationWithBlock"), @"NWMethodWrapper uses methods that are only available from iOS 4.3 and later."); // Asserts, as appropriate (running on iOS 4.2.1). 

編集:私のデプロイメント・ターゲットはすでに私が質問をしています理由である、4.0に設定されています。

答えて

3

このように動作するクラスは、実際に問題のプロジェクトの一部であり、ワークスペースを通じてアクセスされる別のプロジェクトの一部ではないことを確認する必要があります。これらのプロジェクトは、独自のデプロイメントターゲットに設定することができます。デプロイメントターゲットは、メインプロジェクトで期待しているものと同じである必要はありません。

私の場合、クラスの展開ターゲットは5.0に設定されました(私のメインプロジェクトでは4.0に設定されていました)。これは__IPHONE_OS_VERSION_MIN_REQUIREDが期待通りに機能することを意味します。

+0

ありがとうございました!必要なファイルを含むプロジェクトの開発目標を設定する必要があります! :D – VietHung

3

自分で__IPHONE_OS_VERSION_MIN_REQUIREDを定義していない場合、__IPHONE_OS_VERSION_MIN_REQUIREDは、iphone OSの最小バージョンが設定されているものと一致するように最終的に(AvailabilityInternal.hのマクロを介して)コンパイラによって設定されます。デプロイメントターゲットはiOS 5.0よりも前のものに設定されています。

+0

プロジェクトの[ビルド設定]で、デプロイメントターゲットがiOS4.0に設定されています。それはそれがとても奇妙になるのです。それをクリアするために私の質問を編集しました。 – SpacyRicochet

+1

'__IPHONE_OS_VERSION_MIN_REQUIRED'を自分で' 40000'と定義するとどうなりますか? –

+0

ああ、それを考え出した。クラスには、障害のある展開ターゲットが設定されたワークスペース内の別のプロジェクトからアクセスします。とにかくありがとう! – SpacyRicochet

関連する問題