Swift 3和Xcode 8.2中用户通知的条件编译

时间:2017-03-03 20:22:37

标签: ios iphone swift xcode

我们有一个支持iOS 9+的应用程序,它正在Swift 3和Xcode 8.2.x中开发。 iOS 10引入了一种注册推送通知的新方法,很好地描述了in this post。由于iOS 9不了解User Notifications框架,因此我们希望在设备为iOS 9时使用iOS 9方法,并在iOS 10上使用UserNotifications.framework。在目标C中,我们将通过条件编译(例如#ifdef语句)来实现这一点。

在Swift 3中,有一些条件编译工具#available#if。我们尝试将通知注册码的分支包含在这些指令中的任何一个中,并且应用程序将无法编译。compilation error   #available生成类似的结果

定位通用/真实设备时就是这种情况。该应用程序将针对模拟器进行编译。

1 个答案:

答案 0 :(得分:1)

根据您的上述评论,您需要运行时检查,而不是条件编译,#available就是这样。

这对我来说很好用:

if #available(iOS 10.0, *) {
    UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .alert, .sound]) {
        (granted, error) in
    }
}
else {
    UIApplication.shared.registerUserNotificationSettings(UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil))
}
在iOS 10中不推荐使用

UIUserNotificationSettings,但它实际上仍然存在。 Apple通常不会删除API,直到它们被弃用了很长时间。

我怀疑你还有其他类型的构建问题。我的头脑:您是否正确设置了Base SDK和部署目标?