在部署目标 iOS 8 的 iOS 应用中使用 Spotlight

Using spotlight in iOS app with deployment target iOS 8

我有 iOS 应用程序,最小部署目标设置为 iOS 8.0,我想在其中启用 Spotlight 搜索。我知道 Spotlight 搜索只能在 iOS 9 及更高版本中使用。这就是为什么在我的 AppDelegate 中我使用 available

@available(iOS 9.0, *)
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
    if userActivity.activityType == CSSearchableItemActionType {
        if let uniqIdentifier = userActivity.userInfo?[CSSearchableItemActivityIdentifier] as? String {
            print(uniqIdentifier)
        }
    }
    return true
}

Xcode 给我这个错误

Protocol 'UIApplicationDelegate' requires 'application(_:continue:restorationHandler:)' to be available on iOS 8.0 and newer

我能用它做什么

我找到了解决方案,所以我决定 post 它可能对其他开发人员有用。导入 CoreSpotlight 后

import CoreSpotlight

如果您的目标是 iOS 8.0 及更高版本,则应添加 application(_:continue:restorationHandler:) 方法。但由于 'CSSearchableItemActionType' 仅适用于 iOS 9.0 或更高版本,您应该在方法中添加版本检查。

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {

    if #available(iOS 9.0, *) {
        if userActivity.activityType == CSSearchableItemActionType {
            if let uniqIdentifier = userActivity.userInfo?[CSSearchableItemActivityIdentifier] as? String {
                print(uniqIdentifier)
            }
        }
    }
    return true
}