3

__IPHONE_OS_VERSION_MIN_REQUIREDがデプロイメントターゲットではなくベースSDKを返すのはなぜですか?

iOS 4.3以降でのみ実行できるが、4.0以降をサポートするクラスを使用したい。これを実現するために、iOSバージョンが4.3より前のデバイスでこのクラスを使用しようとすると断言します。アサートを回避するために、4.3メソッドの可用性をチェックすることにより、コード内のクラスを回避します。現在、展開ターゲットは4.0に設定されています。

ただし、古いデバイスでアプリケーションを実行した場合にのみアサートが発生するため、展開ターゲットが4.3未満の場合にも警告を追加します。使用しようとしています__IPHONE_OS_VERSION_MIN_REQUIRED50000しかし、これはどういうわけか、以下のものではなく(ベースSDK)を返し続けており、その43000理由がわかりません。

コード:

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に設定されているため、質問をしています。

4

2 に答える 2

3

__IPHONE_OS_VERSION_MIN_REQUIRED自分自身を定義しない場合、__IPHONE_OS_VERSION_MIN_REQUIRED最終的にはコンパイラによって (「AvailabilityInternal.h」のマクロを介して) 設定され、最小の iPhone OS バージョンが設定されているものと一致するため、展開ターゲットが設定されていることを確認する必要があります。 iOS 5.0より前のもの。

于 2012-04-27T11:33:31.627 に答える
3

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

私の場合、クラスの配置ターゲットは 5.0 に設定されていました (4.0 に設定されたメイン プロジェクトとは対照的に)。これは、__IPHONE_OS_VERSION_MIN_REQUIRED期待どおりに動作することを意味します。

于 2012-04-27T13:01:58.643 に答える