ごんれのラボ

iOS、Android、Adobe系ソフトの自動化スクリプトのことを書き連ねています。

Objective-C で OS バージョン判定を簡潔に行う方法

Objective-C で OS バージョン判定を簡潔に行う方法

概要

Qiita に投稿した下記記事と同じ内容です。
qiita.com

OS のバージョンを調べる方法が、Objective-C だと面倒くさい方法しかないのかと思ってて、うんざりしてたら、そんなことなかったので紹介。

環境

  • MacOS 10.12.6
  • Xcode 9.0.1

従来の方法

記述量が多くて面倒だった。

if ([UIDevice currentDevice].systemVersion.floatValue >= 11.0) {
    NSLog(@"iOS11以上だよ");
} else {
    NSLog(@"iOS11未満だよ");
}

簡潔な方法

記述量が少なくて良い。

if (@available(iOS 11.0, *)) {
    NSLog(@"iOS11以上だよ");
} else {
    NSLog(@"iOS11未満だよ");
}

注意点

@available(〜) と他の条件を一緒に記載すると warning が出る。
ネストすれば大丈夫。

NG

Bool isClose = YES;
if (@available(iOS 11.0, *) && isClose) {
    NSLog(@"iOS11以上だよ");
}

OK

Bool isClose = YES;
if (@available(iOS 11.0, *)) {
    if (isClose) {
        NSLog(@"iOS11以上だよ");
    }
}

ネストせずに書けたらいいなぁ。

参考:Negating Objective-C's @available keyword

まとめ

新しいやり方がないか、定期的に確認しないとダメだね。