(추후 만들어진 유튜브 링크 추가)
앱을 열지 않고도 색인된 정보를 빠르게 확인하고 접근할 수 있는 기술
Indexing
Core Spotlight를 활용하여, 사용자가 작성한 정보를 색인시킬 수 있다. 사용자는 이를 활용하여 앱을 열지 않고도 필요한 정보에 빠르게 접근할 수 있다.
앱 단축어
App Intents를 사용하여, 사용자는 앱을 열지 않고도 앱의 일부 기능을 빠르게 사용할 수 있다.
Indexing
색인을 통해 사용자가 기록한 정보에 빠르게 접근할 수 있도록 한다.
운동일지
운동일지를 쓴 뒤 Spotlight을 통해 앱을 열지 않고도 원하는 기록에 빠르게 접근할 수 있게 하자!
/// Core Spotlight를 통해 데이터를 색인합니다.
private func indexData(diary: PTDiary) {
// 1. Core Spotlight에 색인시킬 아이템을 저장할 배열을 정의합니다.
var searchableItems = [CSSearchableItem]()
// 2. 어떻게 색인시킬지 정합니다. Spotlight에 직접적으로 나타나는 항목입니다.
let attributeSet = CSSearchableItemAttributeSet(contentType: .text) // Tip: ContentType을 정확히 설정하면 검색 정확도가 올라갑니다!
attributeSet.title = diary.title // 제목
attributeSet.displayName = diary.title // 나타나는 값(제목) cf) ios 17에서 색인 동작이 잘 되지 않아, 추가된 Property 입니다.
attributeSet.contentDescription = diary.date.dateFormat // 내용 설명; 제목 텍스트 밑에 나타납니다.
attributeSet.alternateNames = diary.exercises // 대체 텍스트; 설명 텍스트 밑에 나타납니다.
attributeSet.keywords = diary.exercises // 검색 키워드; 사용자가 해당 키워드를 Spotlight에 입력하면 해당 데이터가 나타납니다. cf) ios 17에서 해당 기능이 동작하지 않습니다. 하단에 링크 첨부.
// 키워드가 동작하지 않는 문제: https://forums.developer.apple.com/forums/thread/734996
// 3.색인시킬 아이템을 초기화합니다.
let searchableItem = CSSearchableItem(
uniqueIdentifier: diary.id.uuidString, d
omainIdentifier: "exerciseDiary",
attributeSet: attributeSet
)
searchableItems.append(searchableItem)
// 4. 인덱스 범위를 정합니다. cf) 민감 정보인 경우 default를 사용하지 않고 보호화된 인덱스를 사용합니다.
// let secureIndex = CSSearchableIndex(name: "운동 일지", protectionClass:.complete)
let defaultIndex = CSSearchableIndex.default() // 기본 인덱스
// 5. 색인시킬 아이템을 인덱스에 포함시킵니다; 색인 완료
defaultIndex.indexSearchableItems(searchableItems) { error in
if let error = error {
print("Spotlight 색인 시도: \(error.localizedDescription)")
} else {
print("Spotlight 색인 성공")
}
}
}