Base SDKが7.0以上の場合にのみコードの特定の部分をコンパイルするプリプロセッサマクロはありますか? 「__IPHONE_7_0」定義された定数は、iOS開発ターゲットにリンクされているようです(ベースSDKにリンクされていないようです)。
IOS 7およびiOS 6.1がインストールされたXCode 5を使用しています。
私がこれを求めている理由は、現在アプリをiOS 6からiOS 7に移行しているからです。調整することはかなりありますが、現在もiOS 6.1をベースSDKとしてアプリをコンパイルしたいです(そして開発ターゲットiOS 6.0)を使用しますが、iOS 7 SDKでコンパイルするたびに必要なコードを既に追加したいと考えていますが、ベースSDKがiOS 6.1の場合はコンパイルしません。
例:
if ([_tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[_tableView setSeparatorInset:UIEdgeInsetsZero];
}
上記のコードは、UITableViewに対してsetSeparatorInsetが定義されていないことを訴えているため、iOS 6.1ベースのSDKではコンパイルされません。したがって、このコードの一部を、条件付きでベースSDKのプリプロセッサディレクティブに含めたいと思います。
はい、__IPHONE_7_0
defineを使用できます:
#ifdef __IPHONE_7_0
if ([_tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[_tableView setSeparatorInset:UIEdgeInsetsZero];
}
#endif
また、このマクロを使用できます
_#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:(v) options:NSNumericSearch] != NSOrderedAscending)
_
例:if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.1")) {[self doSomething];} else {[self doSomethingElse];}
SDKをテストするのではなく、メソッド/クラスIMHOの可用性をテストする必要があります。プリコンパイル済みではない