“ if(@available(iOS 13.0,*))”未在Xcode 10.3中编译

时间:2019-09-24 15:08:27

标签: ios objective-c xcode preprocessor-directive

我有这样的代码:

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中都能工作?

1 个答案:

答案 0 :(得分:1)

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

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

如果这是您项目的一部分,则应仅迁移到新的Xcode,然后 不会使您的代码与预处理器运算符过度复杂。

更好地解决Appium问题,而不是这个。