«if (@available (iOS 13.0, *))» не компилируется в Xcode 10.3 - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть такой код:

if (@available(iOS 13.0, *)) {
    if([getMetalDevice() supportsFamily:MTLGPUFamilyApple3])
        pixelFormat = MTLPixelFormatBGRA10_XR;
    else
        pixelFormat =  MTLPixelFormatBGRA8Unorm;
}

Он работает в Xcode 11, но не работает в Xcode 10.3.Препроцессор говорит, что не знает, что такое MTLGPUFamilyApple3 (что было представлено в iOS 13).

Я пытался использовать макрос препроцессора:

#define isIOS13 (floor(NSFoundationVersionNumber) >= NSFoundationVersionNumber_iOS_13_0)  

, но препроцессор жалуется Function-like macro 'floor' is not defined.

То же самое для

#define isIOS13 (int(NSFoundationVersionNumber) >= NSFoundationVersionNumber_iOS_13_0)

Мне нужно использовать Xcode 10.3 (iOS 12.4) и Xcode 11 (iOS 13.0) из соображений стабильности.

Что можно сделатьсделать так, чтобы мой код работал в обоих Xcodes?

1 Ответ

1 голос
/ 24 сентября 2019
#ifdef __IPHONE_13_0
if (@available(iOS 13.0, *)) {
    if([getMetalDevice() supportsFamily:MTLGPUFamilyApple3])
        pixelFormat = MTLPixelFormatBGRA10_XR;
    else
#else
{
#endif
        pixelFormat =  MTLPixelFormatBGRA8Unorm;
}

Но вы должны использовать этот код только в том случае, если вы предоставляете некоторую библиотеку с открытым исходным кодом, которая поддерживает несколько кодов X.

Если это часть вашего проекта, вам следует просто перейти на новый Xcode и не перегружать егоВаш код с операторами препроцессора.

Лучше решать проблемы с Appium вместо этого.

...