SDK バージョンとランタイムバージョンの判別方法について

最近思うようにアプリ開発が進まず、少々焦っている @masa711115 です。

今回はこのブログで初めての技術ネタを書いてみようと思います。
※以前のブログではごくまれに書いていましたが…

iOS アプリに限らず、アプリケーションの開発を行う際に SDK やランタイムのバージョンによって処理をわけたいことがあると思います。特に新しいバージョンの OS の新機能を使う場合や廃止予定の機能がある場合に現在のバージョンと新しいバージョンで互換性を保持しなければならない場合などです。
例えば、iOS 5.0 以上とそれ以外で実装を切り替えたい場合は以下のようになります。

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 50000
// iOS 5.0 以上で実装する処理
#else
// iOS 5.0 未満で実装する処理
#endif

ところが、これではコンパイル時に内容が決定してしまうため不便な場合が出てきます。
その場合は以下の様にすることで実行されるデバイスの OS バージョンに応じて処理内容を変更することが可能となります。

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 5.0) {
// iOS 5.0 以上で実装する処理
} else {
// iOS 5.0 未満で実装する処理
}

これ以外にもクラスをチェックする方法やフレームワークのバージョンで判定する方法もあります。
ネット上にたくさん情報がありますので、探してみてください!