はじめに
前回の記事「App IntentsでShortcutsを作ってみる」では、SwiftUIで作成した簡単な「商品登録」アプリに対して、Shortcuts / Siri から商品を追加できるようにするまでの流れを整理しました。
今回はその続きとして、同じ商品登録アプリをベースにSpotlight検索対応を追加する方法をまとめます。Spotlightに登録すると、アプリを起動しなくてもiOSの検索画面から商品を探せます。そのままアプリ内の商品ページへ画面遷移することも可能です。
本記事では、Core Spotlightを使った基本的な登録方法から、実機での確認方法までを、実装手順に沿って整理します。
今回の前提
- Xcode 26.2
- Swift / SwiftUI
- 前回記事で作成した「商品登録アプリ(ItemLogger)」が存在していること
- 商品は
idとnameを持つシンプルなモデルで管理している想定
UI実装の詳細は省略し、Spotlight登録に関係する部分に焦点を当てます。
Spotlight検索の仕組みを簡単に整理
iOSでSpotlight検索を扱う場合、Core Spotlightフレームワークを使用します。基本構成は次の3つです。
CSSearchableItemAttributeSetCSSearchableItemCSSearchableIndex
アプリ内データを「検索可能なアイテムとしてインデックスに登録する」という考え方になります。
商品をSpotlightに登録する
ItemSpotlightIndexer を追加する
まずは、Spotlightへの登録・削除処理を1箇所にまとめるためのファイルを作成します。
ファイル作成
- Xcodeで New File > Swift File を選択
- ファイル名を ItemSpotlightIndexer.swift とする
- Appターゲットに追加されていることを確認
Spotlight登録はUIとは独立した責務になるため、View や Store とは分離しておくと後から見通しが良くなります。
実装例

実装のポイント
CSSearchableItemAttributeSetに検索対象となるメタ情報を設定するtitleとkeywordsに設定した文字列が、Spotlight検索時のヒット対象になるuniqueIdentifierには商品を一意に識別できるIDを設定する- 今回は
Item.id(UUID)を文字列化して使用
- 今回は
indexとdeleteを分けて定義しておくことで、商品追加・削除と連動させやすくなる
商品追加・削除時に呼び出す
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で商品を検索
といった、アプリを意識しない操作導線を構築できます。
既存アプリに対しても比較的追加しやすい機能なので、
データを扱うアプリであれば、一度試してみる価値はありそうです。








