しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

Search APIを使ってSpotlightの検索結果にアプリを表示

Core Spotlight APIsという機能を使ってアプリの検索結果にコンテンツを表示してみようと思います。

f:id:llcc:20160521230712p:plain

まずはCoreSpotlight.frameworkをプロジェクトに追加します。

f:id:llcc:20160521230508p:plain

次はどこか適当なタイミングでCSSearchableIndexへインデックスを追加します。 MobileCoreServicesをimportするのを忘れるとkUTTypeTextが使えないので気をつけて下さい。

import UIKit
import CoreSpotlight
import MobileCoreServices

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if #available(iOS 9.0, *) {
            let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeText as String)
            attributeSet.title = "タイトル"
            attributeSet.contentDescription = "説明"
            attributeSet.thumbnailData = UIImagePNGRepresentation(UIImage(named: "icon")!)
            
            let item = CSSearchableItem(uniqueIdentifier: "UniqID",
                                        domainIdentifier: nil, attributeSet: attributeSet)
            CSSearchableIndex.defaultSearchableIndex().indexSearchableItems([item]) { _ in }
        }
    }
}

検索した時に引っかかるようになりました。

f:id:llcc:20160521231529p:plain

contentDescriptionの値も引っかかります。

f:id:llcc:20160521231620p:plain

検索結果を押下するとapplication:continueUserActivity:restorationHandlerメソッドが呼ばれます。

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?

    func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {
        
        return true
    }
}