
iOS シミュレータにプッシュ通知を送る
プッシュ通知を受信し、通知をタップしたときの処理を実装したい場合、APNsから直接通知を受け取る方法もあるが、意図せず遅延が発生したり狙ったタイミングで通知を受け取れないことがある。そこで、本記事ではターミナルからiOSシミュレータに対してプッシュ通知を送る方法を紹介する。
検証環境
- macOS 15.5(24F74)
- Xcode 16.2
- Xcode Command Line Tools インストール済み
- 対象アプリがプッシュ通知に対応していること(Capabilitiesの設定)
- iOS 17.5 / iOS 18.5 シミュレータ
iOS シミュレータにプッシュ通知を送る
1. プッシュ通知のペイロードを作成する
任意の場所に以下のファイルを保存する。ここではファイル名を notification.json
とする。
{
"aps": {
"alert": {
"title": "テスト通知",
"body": "これはテスト用のプッシュ通知です"
},
"badge": 1,
"sound": "default"
},
"app_notification_type": "quax",
"item_id": 200
}
ペイロードの説明:
badge
: アプリアイコンのバッジ数sound
: 通知音("default"または音声ファイル名)app_notification_type
,item_id
: アプリ固有のカスタムデータ
2. iOSシミュレータでデバッグ実行する
iOSシミュレータを起動して、Xcodeからデバッグ実行を開始する。
3. 実行中のシミュレータのUUIDを調べる
xcrun simctl list devices | grep Booted
で調べることができる。このコマンドで、現在起動しているiOSシミュレータのリストを取得できる。
% xcrun simctl list devices | grep Booted
iPhone SE (3rd generation) (3A75CEC5-1779-4C1E-A17E-E375DED83626) (Booted)
4. プッシュ通知を送信する
以下のフォーマットで実行する。
xcrun simctl push <device_id> <bundle_identifier> notification.json
たとえば、先ほど調べたデバイスにインストール済みのアプリ jp.ch3cooh.NSEasyConnect
にプッシュ通知を送信する場合は以下のようになる。
xcrun simctl push 3A75CEC5-1779-4C1E-A17E-E375DED83626 jp.ch3cooh.NSEasyConnect notification.json
また、booted
を利用してUUIDを省略する方法もある。
xcrun simctl push booted jp.ch3cooh.NSEasyConnect notification.json
ただし、複数のシミュレータが起動している場合は動作が不安定になる可能性があるため、確実性を求める場合はUUIDを明示的に指定した方が良い。
以上で、iOSシミュレータに対してプッシュ通知を送ることができる。シミュレータ専用の機能ではあるが、開発時にこの方法を使うことで、プッシュ通知のテストを効率的に行えるだろう。