在编译期间检查iOS10或更低版本

时间:2016-08-12 10:47:33

标签: xcode notifications swift2 ios10

我正在使用UNUserNotificationCenter实施新通知。但我需要保持向后兼容,因此我在所有地方都进行了检查:

if #available(iOS 10.0, *) { ... }
else { ... }

这似乎在iOS10中运行良好。为了能够使用UNUserNotificationCenter框架,我必须导入:

import NotificationCenter

但它崩溃了iOS9.3,因为它不知道它是什么。 它是一个编译时动作,而不是运行时动作 - 所以它意味着我不能在imports上放置条件。如果我创建一个单独的类,并放入

@available(iOS 10.0, *)
class ....

在类实现之前也会发生导入。 我应该如何解决此问题?

2 个答案:

答案 0 :(得分:1)

尝试导航到Build Phases-> Link Binary with Libraries并添加NotificationCenter并将状态设置为" optional"而不是"要求"。

答案 1 :(得分:0)

首先你必须使用:

导入UserNotifications 用于本地通知。

条件:Xcode 8 beta 6和Sierra beta6

一些测试代码:

a)iOS 10仅适用于swift 3:

override func viewDidLoad() {
    super.viewDidLoad()

    // ADC site: 
    // Listing 1
    // Requesting authorization for user interactions

/ * let center = UNUserNotificationCenter.currentNotificationCenter()         center.requestAuthorizationWithOptions([.Alert,.Sound]){(授予,错误)in         } * /

    // swift 3.0:
    let center = UNUserNotificationCenter.current()
    center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in
        // Enable or disable features based on authorization.
    }

2)支持iOS 9 :(我已更改部署目标)

    // swift 3.0:

    if #available(iOS 10.0, *) {
        let center = UNUserNotificationCenter.current()
        center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in
            // Enable or disable features based on authorization.
        }

    } else {
        // Fallback on earlier versions
    }