os_log_error
とos_log_fault
のマクロは、いずれも10.13 SDKで変更され、より複雑な動作をします。他は残された。参考のため、以下の更新されたマクロを貼り付けました。
#if OS_LOG_TARGET_HAS_10_13_FEATURES
#define os_log_error(log, format, ...) __extension__({ \
os_log_t _log_tmp = (log); \
os_log_type_t _type_tmp = OS_LOG_TYPE_ERROR; \
if (os_log_type_enabled(_log_tmp, _type_tmp)) { \
OS_LOG_CALL_WITH_FORMAT(_os_log_error_impl, \
(&__dso_handle, _log_tmp, _type_tmp), format, ##__VA_ARGS__); \
} \
})
#else
#define os_log_error(log, format, ...) \
os_log_with_type(log, OS_LOG_TYPE_ERROR, format, ##__VA_ARGS__)
#endif // OS_LOG_TARGET_HAS_10_13_FEATURES
私の目標は、フレームワークであるので、それはどの選択条件付きで、その後ターゲットが古いのOSからそれを使用することができますので、私は見ることができました。この周りの唯一の方法は、OSのバージョンのランタイムチェックを行うことです、そして可能ですマクロを呼び出します。
BOOL isAtLeast10_13SDK;
#define MyLogError(format, ...) \
if (isAtLeast10_13SDK) os_log_error(my_log, format, ##__VA_ARGS__); \
else os_log_with_type(my_log, OS_LOG_TYPE_ERROR, format, ##__VA_ARGS__);
#define MyLogFault(format, ...) \
if (isAtLeast10_13SDK) os_log_fault(my_log, format, ##__VA_ARGS__); \
else os_log_with_type(my_log, OS_LOG_TYPE_FAULT, format, ##__VA_ARGS__);
+ (void)initialize {
NSOperatingSystemVersion minVersion;
#if TARGET_OS_IPHONE
minVersion.majorVersion = 11;
minVersion.minorVersion = 0;
minVersion.patchVersion = 0;
#else
minVersion.majorVersion = 10;
minVersion.minorVersion = 13;
minVersion.patchVersion = 0;
#endif
isAtLeast10_13SDK = [[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:minVersion];
}
出典
2017-10-05 12:42:05
Dov