[iOS] Search Spotlight

naljin
5 min readAug 25, 2019

--

Overview

Apple에서는 3개의 검색 엔진을 제공.

  1. Spotlight
  2. Siri
  3. Safari

Search Spotlight

App Search를 위해 3개의 API를 제공. 각각 다른 상황을 위해 디자인 되었지만 연관된 점도 존재.

1. NSUserActivity [자세히 보기]

  • iOS 8 에서 등장한 Handoff 의 확장된 형태.
  • 어플리케이션의 현재 상태를 저장하고, 이후에 복원시킬 수 있음. 웹 브라우저에서 브라우징 이력이나 유저의 액티비티를 유지하는 것과 같이 앱의 히스토리 형태(앱 상태나 네비게이션 포인트)를 유지하고 검색 가능하게 함. 검색 결과를 탭했을 때 해당 activity 나 location 으로 돌아오도록 도와줌.
  • iOS 10부터는 SiriKit을 사용하여 앱과 Siri 간의 상호 작용을 조정하는데도 사용 가능

2. Core Spotlight [자세히 보기]

  • 어플리케이션 내의 content를 검색 가능하게 만듦으로써 유저가 해당 아이템에 접근하도록 도와줌. 어떠한 콘텐츠든 포괄적으로 인덱싱 가능하게 함. 즉, 앱의 데이터를 위한 범용 인덱싱 생성법.
  • DB API처럼 아이템을 추가, 삭제 및 업데이트 할 수 있음.
  • 어플리케이션에 있는 유저의 private content를 인덱스하는 가장 좋은 방법 (on-device index). 개인 유저의 디바이스에서만 검색 가능 (모든 유저에게 검색되게 할 데이터는 NSUserActivity을 이용할 수 있음)
  • 사진이나, 연락처, 구매한 아이템들과 같은 지속적인 유저 데이터를 라벨링하고 관리하는 API 제공
  • iOS의 메일, 캘린더 등의 어플리케이션 모두 Core Spotlight 사용.

3. Web Markup

  • 어플리케이션의 콘텐츠를 웹에서도 제공하는 서비스를 위한 것.

NSUserActivity vs Core Spotlight

Core Spotlight와 NSUserActivity 모두 CSSearchableItemAttributeSet 을 사용함으로써 검색 결과에 노출 되는 풍부한 메타 데이터를 제공하고 검색 결과에서의 중복된 값을 방지함. 하지만 NSUserActivity와 달리 Core Spotlight 는 이전에 index 되었던 컨텐츠에 대해 유저의 방문을 요구하지는 않음.

두 기능 모두 사용할 때는 검색 결과에서 아이템의 랭킹을 향상시키고, NSUserActivity의 realatedUniqueIdentifier과 CSSearchableItem의 uniqueIdentifier 에 같은 값을 명시함으로써 item의 중복을 방지할 수 있음. 만약 activity가 관련되어있는 unique identifier가 Core Spotlight 를 통해 index 되지 않았다면 activity는 index 되지 않을 것. weakRelatedUniqueIdentifier(액티비티들은 unique identifier를 가진 item 과 연관되어있지만 linked 되진 않음)와 다르게 아이템이 삭제 될때 연관된 activity도 함께 삭제되는 것에 유의.

<예시 코드>

let searchItemAttributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeText as String)searchItemAttributeSet.relatedUniqueIdentifier = "relatedUniqueIdentifier"activity.contentAttributeSet = searchItemAttributeSet

이런식으로 activity 의 contentAttributeSet 속성에 할당.

참고로 NSUserActivity 의 검색 기능과 Core Spotlight는 iPhone 4s, iPad 2, iPad (3rd generation), iPad mini, and iPod touch (5th generation)에서 지원되지 않음

Reference

공식문서

Apple Developer Documentation — Core Spotlight

Apple Developer Documentation — NSUserActivity

Apple Developer Documentation — WKNavigationDelegate

Apple Developer Documentation — App Search Programming Guide

2015 WWDC — Search API

Apple Developer — Search

기타 참고 사이트

[민소네]Search API를 사용해보자

[Zeddios]Task Management

NSUSERACTIVITY TUTORIAL HOW TO USE IOS 10 SEARCH API

iOS9과 앱 인덱싱

iOS 10 Spotlight App Discovery: NSUserActivity and Search Relevancy

[Stack over Flow]NSUserActivity와 Core Spotlight의 차이

iOS 9 App Search Tutorial: Introduction to App Search

Core Spotlight 구현 방법

How to use Core Spotlight to index content in your app

--

--

No responses yet