如何使用两个版本的iOS功能

时间:2017-12-12 22:32:07

标签: ios objective-c

作为iOS开发人员,我们始终需要了解iOS更新。有时在高版本的iOS中不推荐使用旧版本的特定方法。

但是我们需要支持多个版本的设备,因为我们的用户使用的是不同版本的iOS。所以我们需要实现新版本,同时我们仍然需要保留旧版本。但是,在编译应用程序时。使用新版本的警告确实困扰着开发人员。情况就是这样。

if ([application respondsToSelector:@selector(openURL:options:completionHandler:)]) {
    // iOS 10 +
    [application openURL:url options:@{} completionHandler:nil];
} else {
    // iOS 9
    [application openURL:url];
}

这里[application openURL:url]总是给我一个警告,我怎样才能摆脱警告?

2 个答案:

答案 0 :(得分:0)

如果你发现与warring相关的弃用,并且它属于clang或GCC,你可以更好地使用宏(Availability.h)。

    if ([application respondsToSelector:@selector(openURL:options:completionHandler:)]) {
        // iOS 10 +
        [application openURL:url options:@{} completionHandler:nil];
    } else {
        // iOS 9
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
        [application openURL:url];
#pragma clang diagnostic pop

    }

更多警告相关参考:http://fuckingclangwarnings.com/

答案 1 :(得分:0)

<强>目标C

我只是使用声明

#pragma clang diagnostic ignored "-Wdeprecated-declarations"

在使用任何弃用的API来抑制警告之前。

在您的情况下代码将是

    if ([UIApplication respondsToSelector:@selector(openURL:options:completionHandler:)]) {
        // iOS 10 +
        [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
    } else {
        // iOS 9
        #pragma clang diagnostic ignored "-Wdeprecated-declarations"
        [[UIApplication sharedApplication] openURL:url];
    }
}

<强>夫特

在swift中支持多个版本SDK API的最佳方法是使用available属性。

    if UIApplication.shared.canOpenURL(url){

        if #available(iOS 10.0, *) {
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
        } else {
            UIApplication.shared.openURL(url)
        }
    }