一、CoreSpotlight 简介
iOS9 推出了 CoreSpotlight 框架,这个框架可以为 iOS 的搜索 App 内部的数据,能够使我们在 iPhone 上下拉出现得搜索框中,搜索我们使用的 App 里面的内容(当然App必须做了适配我们才能搜索到)。而在 iOS 9 之前这是一个私有的API,只有系统自己能搜索,并且无法搜索到我们 App 里面的内容。如下图:我们输入一个“海”字,就能搜索到哪些 App 中包含“海”的信息。
对于 CoreSpotlight 可以类比 NSUserDefault,都是全局的存储空间。不同的是 CoreSpotlight 是系统的存储空间,而
NSUserDefault 是每个 App 私有的,其他 App 无法访问。另外对于存储的内容
CoreSpotlight 存储的是 item,即 CSSearchableItem,而每个
CSSearchableItem 又有许多属性,这些属性是通过
CSSearchableItemAttributeSet 进行设置。
二、Core Spotlight 使用样例
1. 基本使用
1 | // 创建索引属性 |
注意:这里没有设置Logo,会自动默认用 App 的 icon 作为 Logo。
2. 图片与星评
1 | let set = CSSearchableItemAttributeSet(itemContentType: kUTTypeData as String) |
3. 显示时间
1 | // 注意类型 |
4. 导航
1 | set.latitude = 123 |
5. 拨打电话
1 | set.phoneNumbers = ["18300000000", "17300000000"] |
注意:虽然 phoneNumbers 属性是一个数组,但是在测试中发现,当点击电话按钮时,只会拨打第一个电话,并且只在真机上有效,模拟器无效
6. 删除索引
1 | func deleteSearchableItems(withIdentifiers identifiers: [String], completionHandler: ((Error?) -> Swift.Void)? = nil) |
7. 监听点击
在 AppDelegate
中实现以下代理方法:
1 | func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Swift.Void) -> Bool |