はじめに

前回の記事「App IntentsでShortcutsを作ってみる」では、SwiftUIで作成した簡単な「商品登録」アプリに対して、Shortcuts / Siri から商品を追加できるようにするまでの流れを整理しました。

今回はその続きとして、同じ商品登録アプリをベースにSpotlight検索対応を追加する方法をまとめます。Spotlightに登録すると、アプリを起動しなくてもiOSの検索画面から商品を探せます。そのままアプリ内の商品ページへ画面遷移することも可能です。

本記事では、Core Spotlightを使った基本的な登録方法から、実機での確認方法までを、実装手順に沿って整理します。

今回の前提

  • Xcode 26.2
  • Swift / SwiftUI
  • 前回記事で作成した「商品登録アプリ(ItemLogger)」が存在していること
  • 商品は idname を持つシンプルなモデルで管理している想定

UI実装の詳細は省略し、Spotlight登録に関係する部分に焦点を当てます。

Spotlight検索の仕組みを簡単に整理

iOSでSpotlight検索を扱う場合、Core Spotlightフレームワークを使用します。基本構成は次の3つです。

  • CSSearchableItemAttributeSet
  • CSSearchableItem
  • CSSearchableIndex

アプリ内データを「検索可能なアイテムとしてインデックスに登録する」という考え方になります。

商品をSpotlightに登録する

ItemSpotlightIndexer を追加する

まずは、Spotlightへの登録・削除処理を1箇所にまとめるためのファイルを作成します。

ファイル作成
  • Xcodeで New File > Swift File を選択
  • ファイル名を ItemSpotlightIndexer.swift とする
  • Appターゲットに追加されていることを確認

Spotlight登録はUIとは独立した責務になるため、ViewStore とは分離しておくと後から見通しが良くなります。

実装例

実装のポイント

  • CSSearchableItemAttributeSet に検索対象となるメタ情報を設定する
  • titlekeywords に設定した文字列が、Spotlight検索時のヒット対象になる
  • uniqueIdentifier には商品を一意に識別できるIDを設定する
    • 今回は Item.id(UUID)を文字列化して使用
  • indexdelete を分けて定義しておくことで、商品追加・削除と連動させやすくなる

商品追加・削除時に呼び出す

Spotlight登録は一度行えば終わりではなく、アプリ内データのライフサイクルと同期させる必要があります。

例えば ItemStore では、次のように呼び出します。

  • 商品追加時

ItemSpotlightIndexer.index(item: item)

  • 商品削除時

ItemSpotlightIndexer.delete(item: item)

この対応を行わないと、削除済みの商品がSpotlight検索に残り続けてしまうため注意が必要です。

Spotlight検索結果からアプリを開く

Spotlight検索結果をタップすると、アプリは NSUserActivity 経由で起動されます。

SwiftUI App では、以下のように受け取ります。

実機でSpotlight検索を確認する

1.アプリを実機にインストールする

2.商品をいくつか登録する

3.ホーム画面を下にスワイプしてSpotlight検索を表示する

4.商品名を入力する

5.アプリ名と一緒に商品が表示されることを確認する

6.検索結果をタップすると、該当商品を表示した状態でアプリが起動します。

※ シミュレータでは挙動が不安定な場合があるため、実機確認を推奨します。

おわりに

App Intents / Shortcuts と同様に、Spotlight検索も「アプリ外から機能やデータに触れる入口」を増やす仕組みです。

前回の記事で追加した Shortcuts と組み合わせることで、

  • 音声で商品を追加
  • Spotlightで商品を検索

といった、アプリを意識しない操作導線を構築できます。

既存アプリに対しても比較的追加しやすい機能なので、
データを扱うアプリであれば、一度試してみる価値はありそうです。



ギャップロを運営しているアップフロンティア株式会社では、一緒に働いてくれる仲間を随時、募集しています。 興味がある!一緒に働いてみたい!という方は下記よりご応募お待ちしております。
採用情報をみる