iOS 9:快速让你的APP支持spotlight搜索

iOS9中支持为app中的内容做索引以支持spotlight搜索,感觉是个很有心意的功能。需要提到的是这些索引是存在本地设备中的,不会同步到icoloud中,更换了设备就没有了。

效果就是这样:

创建支持搜索的内容

支持搜索的内容的类是CSSearchableItem。

可以展示的属性有标题,一段描述文字,还有缩略图。这里建议给每个item设置一个过期时间(expirationDate)。

首先创建表示一个配置展示内容的对象CSSearchableItemAttributeSet

let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeData as String)
// Add metadata that supplies details about the item.
attributeSet.title = "July Report.Numbers"
attributeSet.contentDescription = "iWork Numbers Document"
attributeSet.thumbnailData = DocumentImage.jpg

attributeSet也支持电话号码,和地理坐标。右边会有对应的动作,如果是支持导航会有一个箭头。(因为我的app里不需要这功能,我自己没有试过)

attributeSet.phoneNumbers;
attributeSet.latitude;
attributeSet.longitude;

创建CSSearchableItem

uniqueIdentifier相当于这条数据的id。domainIdentifier则表示相关的域。苹果还提供了一组api对这些索引进行修改删除操作,domainIdentifier可以当做参数,比如可以讲一个域下的所有索引删除。

let item = CSSearchableItem(uniqueIdentifier: "1", domainIdentifier: "file-1", attributeSet: attributeSet)

将CSSearchableItem添加至系统

CSSearchableIndex.defaultSearchableIndex().indexSearchableItems([item]) { error in
  if error != nil {
     print(error?.localizedDescription)
  }
     else { 
         print("Item indexed.")
  }
}

tips

大部分的app可能还要兼容iOS8,这里介绍下swift下的判断方法。

如果是在一个方法里要使用iOS9的api,使用下面来判断(xcode7也会提醒你)。

   if #available(iOS 9.0, *) {
   }

如果是自己写的一整个方法想表示只在iOS9可用,用下面的关键字加在方法头表示

@available(iOS 9.0, *)

直接贴我的项目代码了。

用户搜索后选中打开app的处理

在app delegate里添加这个回调就好了。

func application(UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: [AnyObject]? -> Void) -> Bool {
}

在OC下的方法是这个

-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
}

通过这个可以取到创建CSSearchableItem时设置的identifier

NSString* identifier=userActivity.userInfo[CSSearchableItemActivityIdentifier];

接着就可以用这个identifier取出对应的数据,进行处理了。

时间: 2024-08-04 10:26:41

iOS 9:快速让你的APP支持spotlight搜索的相关文章

环信ios的push, inhouse类型的app支持吗?

问题描述 环信ios的push, inhouse类型的app支持吗? 解决方案 inhouse应该是指企业证书的,这个sdk不关注,只要推送证书对应配套就可以推送.

iOS开发之集成iOS9中的Core Spotlight Framework搜索App的内容

Spotlight在iOS9上做了一些新的改进, 也就是开放了一些新的API, 通过Core Spotlight Framework你可以在你的app中集成Spotlight.集成Spotlight的App可以在Spotlight中搜索App的内容,并且通过内容打开相关页面.因为接到开发任务,老大说让在App中支持Spotlight, 于是又搞了搞苹果的官方文档.可以说,集成Spotlight不算复杂,官网上讲的也挺明白的,今天博客就通过一个Demo来集成一下Spotlight. 苹果官方有关C

横屏-ios转屏问题,某个界面需要支持转屏

问题描述 ios转屏问题,某个界面需要支持转屏 我们在appdelegate 里面用代码把屏幕转向禁止 (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { return UIInterfaceOrientationMaskPortrait; } 现在想要某一个界面支持转屏后横屏(UIInterfaceOrientation

IOS应用程序发布到苹果APP STORE

参考: http://blog.csdn.net/mad1989/article/details/8167529(xcode APP 打包以及提交apple审核详细流程(新版本更新提交审核))  http://www.ttlsa.com/dev/how-to-publish-iosapp-to-appstore/  (如何发布IOS应用程序到苹果APP STORE)  开发环境:xcode5.1.1 iPhonesdk:7.1 开发机器:iMac 真机部署测试:apple个人开发者ID 向导:

iOS 10支持图片搜索?带你认识下安防领域的检索功能!

9月14日凌晨,比iPhone 7先来到的是苹果系统iOS 10的更新推送.根据苹果官方介绍,iOS 10 是 iOS发布史上的重磅之作,所以在功能上做了非常大的更新.其中,关于"照片"的更新引起了小编的注意: "照片"的更新 1.运用深度学习技术设计先进的人脸识别功能,可自动将相似的面孔分组 2.通过物体和场景的识别功能,使用先进的计算机视觉来扫描设备上的本地图库,可以通过照片内容智能搜索照片 3.通过"地点"相簿可在地图上查看您的所有照片.视

ios 环信3x, 语音视频是否支持voip , 后台接听? 若支持如何进行配置

问题描述 ios 环信3x, 语音视频是否支持voip , 后台接听? 若支持如何进行配置.我开启viop之后依旧不能支持后台来点通知, 不知道该如何配置, 环信长连接如何将socket设置成VOIP类? 若app在后台,或者退出的情况下, 直接报Remote is offline, 或者call failed. 解决方案 但app在后台没有被杀死,可以设置本地推送去提醒对方,但app杀死了是不支持接收实时音视频的.

iOS逆向工程使用dumpdecrypted工具给App脱壳_IOS

本篇以微信为例,给微信脱壳."砸壳"在iOS逆向工程中是经常做的一件事情,,因为从AppStore直接下载安装的App是加壳的,其实就是经过加密的,这个"砸壳"的过程就是一个解密的过程.未砸壳的App是无法在Class-dump.Hopper等工具中使用的.所以我们要将App进行砸壳处理.在Android开发中也存在App加壳的处理,比如什么360加固了,其实就是给App加一层壳. 本篇我们就以WeChat(微信)为例,从AppStore上下载微信并安装,然后使用d

超实用的IOS 8 快速设计参考指南

  这份IOS 8 快速设计参考指南是芒果道长百度无果,问了几个开发群仍是一无所获后一位加州朋友给的,幸福就这么突然地降临,忍不住分享给设计师呢,别花时间到处找了,来这里右键另存! 不管怎样,我们要相信土豪还是多的,iPhone 6 和 plus 出来后,道长就苦苦追寻IOS 8 在i6 和 plus 下面的设计尺寸,百度是找不到的,问过好几个开发群,也没有收获,幸好认识一位加州的伙伴,他给了我两个链接,简单粗暴,让我突然觉得幸福就这么简单,哈哈哈.为了不让伙伴们到处寻找,我花点时间整理下分享给

iOS写一个插件禁止在app内截屏和使用相机

问题描述 iOS写一个插件禁止在app内截屏和使用相机 ipad开发,现在app需要做到不能让用户使用截图和相机功能,这个插件怎么写啊? 解决方案 这个你应该没办法,截屏,拍照,都是在系统那一层做的,你的App控制不到