[swift] Core Spotlight 프레임워크를 활용한 검색 기능 구현 방법

iOS 앱을 개발할 때, 사용자가 앱 내에서 콘텐츠를 효과적으로 검색할 수 있는 기능을 구현하는 것은 매우 중요합니다. Core Spotlight 프레임워크를 사용하면 iOS의 내장 검색 기능을 활용하여 앱 내 데이터를 색인화하고 검색할 수 있습니다.

이 블로그에서는 Core Spotlight 프레임워크를 활용하여 iOS 앱의 검색 기능을 구현하는 방법에 대해 알아보겠습니다.

Core Spotlight란?

Core Spotlight 프레임워크는 iOS 9부터 제공되는 프레임워크로, 앱 내의 콘텐츠를 사용자가 iOS의 내장 검색 기능을 통해 검색할 수 있도록 해줍니다. 코어 스포트라이트는 사용자가 앱 내부 콘텐츠에 대한 검색 결과를 표시하는 검색 유추기 커스텀화를 지원하며, iOS 환경에서의 데이터 색인화 및 검색에 편리한 인터페이스를 제공합니다.

Core Spotlight를 사용한 검색 기능 구현 방법

Core Spotlight를 사용하여 앱 내 데이터를 검색 가능하도록 만들기 위해서는 다음의 과정을 따릅니다.

1. Core Spotlight 프레임워크 추가

먼저, 프로젝트에 Core Spotlight 프레임워크를 추가합니다. Xcode에서 프로젝트를 열고 프로젝트 네비게이터에서 “General” 탭을 선택한 후 “Linked Frameworks and Libraries” 섹션에서 “+” 버튼을 클릭하여 “CoreSpotlight.framework”를 추가합니다.

2. NSUserActivity 나 CSSearchableItemAttributeSet 구현

Core Spotlight를 사용하여 앱 내 데이터를 검색 가능하도록 만들기 위해서는 NSUserActivity 나 CSSearchableItemAttributeSet을 구현해야 합니다.

NSUserActivity를 사용하면 사용자 액티비티를 캡쳐하고 iOS 검색 서비스에 전달할 수 있으며, CSSearchableItemAttributeSet는 데이터의 메타데이터 및 검색 가능한 콘텐츠를 정의합니다.

import CoreSpotlight
import MobileCoreServices

// NSUserActivity를 사용하여 사용자 액티비티를 구현
let userActivity = NSUserActivity(activityType: "com.example.app.search")
userActivity.title = "검색 결과 제목"
userActivity.userInfo = ["key": "value"]
userActivity.requiredUserInfoKeys = Set(arrayLiteral: "key")
userActivity.isEligibleForSearch = true
userActivity.isEligibleForPublicIndexing = true
userActivity.isEligibleForHandoff = false
userActivity.contentAttributeSet = attributeSet
userActivity.becomeCurrent()

3. 검색 가능 데이터 색인화

검색 가능한 데이터를 색인화하려면 CSSearchableItem을 사용하여 데이터를 생성하고 색인화해야 합니다.

import CoreSpotlight
import MobileCoreServices

// 검색 가능 데이터 생성
let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeText as String)
attributeSet.title = "검색 가능 데이터 제목"
attributeSet.contentDescription = "검색 가능 데이터 설명"
attributeSet.thumbnailData = UIImagePNGRepresentation(UIImage(named: "thumbnail.png"))

// 데이터 색인화
let searchableItem = CSSearchableItem(uniqueIdentifier: "com.example.app.content", domainIdentifier: "movies", attributeSet: attributeSet)
CSSearchableIndex.default().indexSearchableItems([searchableItem]) { error in
    if let error = error {
        print("색인화 에러: \(error.localizedDescription)")
    }
}

4. 검색 결과 표시

검색 결과 화면에서 검색 가능한 데이터를 표시하기 위해서는 NSUserActivity를 사용하여 검색 결과를 전달해야 합니다.

import CoreSpotlight
import MobileCoreServices

// 사용자 액티비티 생성
let userActivity = NSUserActivity(activityType: "com.example.app.search")
userActivity.title = "검색 결과 제목"
userActivity.userInfo = ["key": "value"]
userActivity.requiredUserInfoKeys = Set(arrayLiteral: "key")
userActivity.isEligibleForSearch = true
userActivity.isEligibleForPublicIndexing = true
userActivity.isEligibleForHandoff = true
userActivity.contentAttributeSet = attributeSet
userActivity.becomeCurrent()

// 검색 결과 전달
self.userActivity?.becomeCurrent()

마치며

이제 Core Spotlight 프레임워크를 사용하여 iOS 앱의 검색 기능을 구현하는 방법에 대해 알아보았습니다. Core Spotlight을 통해 iOS의 내장 검색 기능을 활용하여 앱 내 데이터를 효과적으로 검색할 수 있게 되었습니다. 앱의 사용자 경험과 효율성을 높이기 위해 Core Spotlight을 적극적으로 활용해보세요!