"if (@available(iOS 13.0, *))" 无法在 Xcode 10.3 中编译

"if (@available(iOS 13.0, *))" doesn't compile in Xcode 10.3

我有这样的代码:

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 )。

我怎样做才能让我的代码在 Xcode 中工作?

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

但是只有当您提供了一些支持多个 Xcode 的开源库时,您才应该使用此代码。

如果这是您项目的一部分,您应该迁移到新的 Xcode 并且 不会使用预处理器运算符使您的代码过于复杂。

最好用 Appium 解决问题而不是这个。