1

NSAppKitVersionNumber実行時に Cocoa フレームワークによって提供される新機能をチェックするためにを使用することは、一般的なアドバイスです。

https://developer.apple.com/library/mac/releasenotes/AppKit/RN-AppKit/

これの典型的な使用方法の 1 つは、値を floor() して、NSApplication.h で提供されている値と照合することです。例えば:

if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_8) {
  /* On a 10.8.x or earlier system */
} else if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_9) {
  /* On a 10.9 - 10.9.x system */
} else {
  /* 10.10 or later system */
}

OS X 10.10 および Xcode 6.2 では、NSApplication.h以下が含まれます。

/* The version of the AppKit framework */
APPKIT_EXTERN const double NSAppKitVersionNumber;

#define NSAppKitVersionNumber10_0 577
#define NSAppKitVersionNumber10_1 620
#define NSAppKitVersionNumber10_2 663
#define NSAppKitVersionNumber10_2_3 663.6
#define NSAppKitVersionNumber10_3 743
#define NSAppKitVersionNumber10_3_2 743.14
#define NSAppKitVersionNumber10_3_3 743.2
#define NSAppKitVersionNumber10_3_5 743.24
#define NSAppKitVersionNumber10_3_7 743.33
#define NSAppKitVersionNumber10_3_9 743.36
#define NSAppKitVersionNumber10_4 824
#define NSAppKitVersionNumber10_4_1 824.1
#define NSAppKitVersionNumber10_4_3 824.23
#define NSAppKitVersionNumber10_4_4 824.33
#define NSAppKitVersionNumber10_4_7 824.41
#define NSAppKitVersionNumber10_5 949
#define NSAppKitVersionNumber10_5_2 949.27
#define NSAppKitVersionNumber10_5_3 949.33
#define NSAppKitVersionNumber10_6 1038
#define NSAppKitVersionNumber10_7 1138
#define NSAppKitVersionNumber10_7_2 1138.23
#define NSAppKitVersionNumber10_7_3 1138.32
#define NSAppKitVersionNumber10_7_4 1138.47
#define NSAppKitVersionNumber10_8 1187
#define NSAppKitVersionNumber10_9 1265

特に欠けているのはNSAppKitVersionNumber10_10、OS X 10.10 Yosemite です。

その10_10バージョンは明確に除外されていますか? また、その理由は何ですか?

これらの定数は通常、現在のバージョンになった後にのみバージョンに表示されますか?

それとも、バージョン番号を確認するこの方法は時代遅れですか? もしそうなら、代わりは何ですか?

4

2 に答える 2

2

これらの定数は通常、現在のバージョンになった後にのみバージョンに表示されますか?

はい。同様に、10.9 SDK は までしか定義しませんNSAppKitVersionNumber10_8

引用したコード スニペットには、10.10 の明示的なチェックが含まれていないことに気付くでしょう。これは、他のすべてのチェックの後の暗黙的なフォールバックです。

于 2015-04-01T00:06:46.510 に答える