zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

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

iosApp集成搜索Core开发 内容 Framework
2023-09-14 08:57:28 时间

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

苹果官方有关Core Spotlight Framework的链接如下:

https://developer.apple.com/library/prerelease/ios/documentation/CoreSpotlight/Reference/CoreSpotlight_Framework/index.html#//apple_ref/doc/uid/TP40016250

一.Demo运行效果

还是通过一个Demo来进行介绍,Demo运行效果如下。我们App中有关于宫崎骏的的内容,然后在Spotlight中搜索宫崎骏,就可以搜索到相关内容,并且可以点击打开展示相关内容。具体运行效果如下:

二.集成Core Spotlight Framework

1.想在App中使用Spotlight,首先得引入Core Spotlight Framework,Targets - General - linked Frameworks and Libraries 点击加号添加CoreSpotlight.framework。如下截图所示。

 

2.在相应的视图控制器中引入 CoreSpotlight/CoreSpotlight.h 头文件,然后就开始写代码使自己的App内容支持Spotlight搜索了。下面是为Demo添加Spotlight的相关代码。Spotlight搜索出来的东西,每一项就是一个条目即CSSearchableItem的对象,而改对象又关联一个属性集合(CSSearchableItemAttributeSet )该集合中存储了CSSearchableItem对象的相关属性,如果title(标题), contentDescription(内容简介),

thumbnailData(图片)等所需内容。具体请看下方代码描述和代码注释。

代码描述:

(1).首先定义了一个temp数组,用来存储在Spotlight中搜索的关键字,也就是Spotlight可以搜索到的App内容。数组中的内容通过循环遍历经过一系列的步骤给Spotlight进行关联。

(2)在每次遍历内容数组的过程中,需要创建一个CSSearchableItemAttributeSet(属性集合),并给属性集合中的一些属性赋上值。然后再创建一个CSSearchableItem,创建CSSearchableItem时,把其对应的属性集合进行关联。把每次创建好的条目暂存到可变数组中,因为创建好所有的条目后还要和Spotlight的索引(CSSearchableIndex)进行关联。

(3)通过单例获取CSSearchableIndex的对象,并与我们创建好的CSSearchableItem数组进行关联。具体代码和步骤如下。

- (void)supportSpotlightSearch {

 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

 dispatch_async(queue, ^{

 @try {

 NSArray *temp = @[@"宫崎骏-龙猫", @"宫崎骏-千与千寻", @"宫崎骏-天空之城"];

 //创建SearchableItems的数组

 NSMutableArray *searchableItems = [[NSMutableArray alloc] initWithCapacity:temp.count];

 for (int i = 0; i temp.count; i ++) {

 //1.创建条目的属性集合

 CSSearchableItemAttributeSet * attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString*) kUTTypeImage];

 //2.给属性集合添加属性

 attributeSet.title = temp[i];

 attributeSet.contentDescription = [NSString stringWithFormat:@"宫崎骏与%@", temp[i]];

 attributeSet.thumbnailData = UIImagePNGRepresentation([UIImage imageNamed:[NSString stringWithFormat:@"%d.png", i+1]]);

 //3.属性集合与条目进行关联

 CSSearchableItem *searchableItem = [[CSSearchableItem alloc] initWithUniqueIdentifier:[NSString stringWithFormat:@"%d", i+1] domainIdentifier:@"ZeluLi.SpotlightSearchDemo" attributeSet:attributeSet];

 //把该条目进行暂存

 [searchableItems addObject:searchableItem];

 //4.吧条目数组与索引进行关联

 [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:searchableItems completionHandler:^(NSError * _Nullable error) {

 if (!error) {

 NSLog(@"%s, %@", __FUNCTION__, [error localizedDescription]);

 @catch (NSException *exception) {

 NSLog(@"%s, %@", __FUNCTION__, exception);

 @finally {

}

 

3.处理搜索后条目点击的事件,该事件的处理要在AppDelegate中下面的委托代理方法中进行处理。下面的idetifier就是属性集合与条目进行关联时指定的唯一标示。

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

 NSString *idetifier = userActivity.userInfo[@"kCSSearchableItemActivityIdentifier"];

 UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;

 ViewController *vc = [navigationController viewControllers][0];

 [vc.myImage setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@.png",idetifier]]];


StoreKit:iOS应用内推广其他App 在iOS应用中,要推广其他App有两种途径,一种是直接跳转到AppStore软件的对应App商品页,还有一种是在当前应用内内嵌一个App商品页。相比第一种方式,第二种方式的体验更好,并且不会打断用户对当前应用的使用。
iOS上架App Store详解(图文) APP专用密码app-specific password是专门用于上传ipa文件的一种密码,是一种苹果的安全机制! 现在苹果开发者账号开启了双重认证,提交ipa文件时候都需要这个密码!
Application Loader及Transporter App上传ipa外、可以在Windows上架iOS APP工具 随着xcode的更新,苹果公司已经不直接提供Application Loader这个工具上传IPA了,导致上传ipa比较难搞了。 这里分享介绍一个可以在Windows、跨平台申请iOS证书上传ipa的工具Appuploader,方面跨平台开发没有苹果电脑,或者还不熟悉iOS上架流程的开发者使用。 双重验证码登录,安全放心,已帮助上万开发者提交苹果APP!
一步一腳印的 iOS App 上架和更新流程 APP Uploader APP开发助手-iOS APP上架到App Store的辅助工具,解决iOS APP上架繁琐费时的情况,帮助跨平台APP开发者上架苹果应用,在没有配置Mac苹果机的情况,实现iOS证书申请,创建iOS开发者证书、iOS发布证书等各类证书,iOS开发者在Windows、Linux或Mac系统中上传IPA到App Store,简化iOS APP上架流程!在Windows pc中轻松快速上架你的APP。
如何增加 iOS APP 虚拟地址空间及内存上限?XNU 内核源码解读 1. 引言 最近一段时间在做钉钉 iOS 内存专项治理,解决内存不足时的 jetsam 事件及 malloc 的异常崩溃。在进程创建时系统会为每个 app 设定内存最大使用上限,内核会维护一个内存阈值优先级列表,当设备内存不足时低优先级的 app 会首先被内核中止进程。在阅读 XNU 内核源码过程中我们发现提供系统了两种能力可以扩展 App 的虚拟地址空间(com.apple.developer.kernel.extended-virtual-addressing)和增加内存使用上限(com.apple.developer.kernel.increased-memory-limit)。
《一步步了解iOS APP上架流程,让你的APP顺利进入App Store的大门》 随着Apple Store越来越成熟,以及越来越多的开发者和公司希望在该平台上投放自己的产品,iOS APP上架成为许多开发者和公司普遍关注的话题。但是,由于苹果App Store的审核政策日益严格,大多数开发者和公司都不太清楚iOS APP上架的具体流程。今天,我们将为您介绍iOS APP上架的具体流程,希望可以帮助您顺利的完成iOS APP的上架。
iOS APP上架流程(详细) Appuploader可以辅助在Windows、linux或mac系统直接申请iOS证书p12,及上传ipa到App Store,最方便在Windows开发上架没有苹果Mac电脑的开发者!配合本教程使用,可以快速掌握如何真机测试及上架!