Swift 3和Xcode 8.2中用户通知的条件编译
我们有一个支持iOS 9+的应用程序,它正在Swift 3和Xcode 8.2.x中开发。 iOS 10引入了一种注册推送通知的新方法, 在本文中有详细描述。 由于iOS 9不了解用户通知框架,因此我们希望在设备为iOS 9时使用iOS 9方法,并在iOS 10上使用UserNotifications.framework
。在目标C中,我们将通过条件编译实现此目的(例如#ifdef
语句)。
在Swift 3中,有一些条件编译工具#available
和#if
。 我们尝试将通知注册码的分支包含在这些指令中的任何一个中,并且应用程序将不会编译。 #available
生成类似的结果
在针对通用/真实设备时就是这种情况。 该应用程序将针对模拟器进行编译。
根据您上面的评论,您需要运行时检查,而不是条件编译,而#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)) }
UIUserNotificationSettings
在iOS 10中已弃用,但它实际上仍然存在。 Apple通常不会删除API,直到它们被弃用了很长时间。
我怀疑你还有其他一些构建问题。 我的头脑:您是否正确设置了Base SDK和部署目标?