1. ホーム
  2. ios

OS XまたはiOSのランタイムにOSバージョンを判断するには(Gestaltを使用せずに)どうすればよいですか?

2023-10-23 20:51:38

質問

にある Gestalt() 関数は CarbonCore/OSUtils.h は OS X 10.8 Mountain Lion で非推奨となりました。

私はよく、実行時に OS X オペレーティング システムのバージョンをテストするためにこの関数を使用します(以下のおもちゃの例を見てください)。

CocoaアプリケーションでOS Xオペレーティングシステムのバージョンを実行時にチェックするために、他にどのようなAPIを使用することができるでしょうか?

int main() {
    SInt32 versMaj, versMin, versBugFix;
    Gestalt(gestaltSystemVersionMajor, &versMaj);
    Gestalt(gestaltSystemVersionMinor, &versMin);
    Gestalt(gestaltSystemVersionBugFix, &versBugFix);

    printf("OS X Version: %d.%d.%d\n", versMaj, versMin, versBugFix);
}

どのように解決するのですか?

OS X 10.10(およびiOS 8.0)では [[NSProcessInfo processInfo] operatingSystemVersion] を返します。 NSOperatingSystemVersion と定義された構造体を返します。

typedef struct {
    NSInteger majorVersion;
    NSInteger minorVersion;
    NSInteger patchVersion;
} NSOperatingSystemVersion;

また NSProcessInfo というメソッドもあり、これはあなたのために比較をしてくれます。

- (BOOL)isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion)version

注意 OS X 10.10 以降で利用可能であることが文書化されていますが、両方の operatingSystemVersionisOperatingSystemAtLeastVersion: は OS X 10.9 に存在します ( おそらく 10.9.2 ) に存在し、期待通りに動作します。これは、もし NSProcessInfo がこれらのセレクタに反応するかどうか、OS X 10.9 または 10.10 で動作しているかどうかを確認するためにテストしてはいけないということです。

iOS では、これらのメソッドは事実上 iOS 8.0 以降でのみ利用可能です。