我们有一个支持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
。我们尝试将通知注册码的分支包含在这些指令中的任何一个中,并且应用程序将无法编译。
#available
生成类似的结果
定位通用/真实设备时就是这种情况。该应用程序将针对模拟器进行编译。
答案 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和部署目标?