Overview
Apple에서는 3개의 검색 엔진을 제공.
- Spotlight
- Siri
- 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
기타 참고 사이트
NSUSERACTIVITY TUTORIAL HOW TO USE IOS 10 SEARCH API
iOS 10 Spotlight App Discovery: NSUserActivity and Search Relevancy
[Stack over Flow]NSUserActivity와 Core Spotlight의 차이