axiom-ios-integration について
Siriやウィジェットからカメラ、位置情報、カレンダー、連絡先まで、iOSのシステム連携を扱う開発者向けルーティングスキルです。課題に応じた専門スキルへ案内し、複数領域にまたがる問題の連携先も示します。
主な機能
- 01幅広いiOS連携領域を網羅
- 02テーマ別の専門スキルへ案内
- 03複数領域の問題をルーティング
- 04連携課題の判断ツリー
活用シーン
- 01Siriやウィジェットの問題に使うスキルの選定
- 02カメラ権限やプライバシー連携の対応
- 03カレンダー、連絡先、位置情報の問題の振り分け
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ charleswiltgen/ axiom --skill axiom-ios-integrationインストール後、Claude Code で/axiom-ios-integrationを入力して読み込まれたか確認します。
詳細
iOS システム統合ルーター
Siri、Shortcuts、ウィジェット、アプリ内課金、カメラ、フォトライブラリ、オーディオ、axiom-haptics など、あらゆる iOS システム統合には、このスキルを必ず使用してください。
使用する場面
以下の場合は、このルーターを使用してください。
- Siri と Shortcuts(App Intents)
- Apple Intelligence の統合
- ウィジェットと Live Activities
- アプリ内課金(StoreKit)
- カメラ撮影(AVCaptureSession)
- フォトライブラリとピッカー(PHPicker、PhotosPicker)
- オーディオ、触覚フィードバック、オーディオ認識(ShazamKit)
- ローカライズ
- プライバシーと権限
- Spotlight 検索
- アプリの見つけやすさ
- アラーム(AlarmKit)
- バックグラウンド処理(BGTaskScheduler)
- 位置情報サービス(Core Location)
- マップと MapKit(Map、MKMapView、アノテーション、検索、経路案内)
- パスキーと認証(ASAuthorizationController、WebAuthn)
- アプリの完全性と不正利用の防止(App Attest、DeviceCheck)
- カレンダーのイベントとリマインダー(EventKit、EventKitUI)
- 連絡先と連絡先ピッカー(Contacts、ContactsUI、ContactProvider)
クロスドメインルーティング
統合に関する問題が他のドメインと重なる場合:
ウィジェットとデータ同期に関する問題(ウィジェットに更新済みデータが表示されない):
- ウィジェットのタイムラインが更新されない → ios-integration にとどまります(extensions-widgets)
- SwiftData/Core Data がエクステンションと共有されない → ios-data も呼び出します — App Groups と共有コンテナはデータレイヤーの問題です
- バックグラウンド更新のタイミング → 非同期パターンが関係する場合は ios-concurrency も呼び出します
Live Activity とプッシュ通知に関する問題:
- ActivityKit のプッシュトークン設定、Live Activity が更新されない → ios-integration にとどまります(extensions-widgets)
- プッシュ通知の配信失敗、APNs エラー → ios-networking も呼び出します(networking-diag)
- Entitlements/証明書の設定ミス → ios-build も呼び出します(xcode-debugging)
カメラ、権限、プライバシー:
- カメラコードの問題 → ios-integration にとどまります(camera-capture)
- プライバシーマニフェストまたは Info.plist の問題 → ios-integration にとどまります(privacy-ux)
- ビルド/エンタイトルメントのエラー → ios-build も呼び出します
MapKit と位置情報に関する問題(地図にユーザーの位置が表示されない):
- 地図の表示、アノテーション、検索 → ios-integration にとどまります(mapkit)
- 位置情報の認証、モニタリング、バックグラウンド位置情報 → ios-performance または ios-integration も呼び出します(core-location)
- アノテーションが多数ある場合の地図のパフォーマンス → プロファイリングが必要な場合は ios-performance も呼び出します
プッシュ通知と Live Activity に関する問題(プッシュ通知で Live Activity が更新されない):
- プッシュのトランスポート、APNs ヘッダー、トークン管理 → ios-integration にとどまります(push-notifications、push-notifications-diag)
- ActivityKit の UI、属性、Dynamic Island → ios-integration も呼び出します(extensions-widgets)
- バックグラウンド実行のタイミング → 非同期パターンが関係する場合は ios-concurrency も呼び出します
プッシュ通知とバックグラウンド処理に関する問題(サイレントプッシュでバックグラウンド処理が実行されない):
- プッシュペイロードと配信 → ios-integration にとどまります(push-notifications-diag)
- バックグラウンド実行、BGTaskScheduler → ios-integration も呼び出します(background-processing)
カレンダーとデータ同期に関する問題(イベントが同期されない、カレンダーデータが古い):
- EventKit ストアの変更、EKEventStoreChanged → ios-integration にとどまります(eventkit)
- App Groups を介したウィジェットとのデータ共有 → 共有コンテナのパターンについて ios-data も呼び出します
- カレンダー同期のバックグラウンド更新 → ios-integration も呼び出します(background-processing)
連絡先とプライバシーに関する問題(連絡先へのアクセスが拒否される、制限付きアクセスについての混乱):
- 連絡先の権限モデル、Contact Access Button → ios-integration にとどまります(contacts)
- 連絡先に関するプライバシーマニフェストまたは Info.plist → ios-integration にとどまります(privacy-ux)
- Contact Provider エクステンションのアーキテクチャ → エクステンションターゲットの問題であれば ios-build も呼び出します
ShazamKit とマイクの権限(一致する結果がない、権限が拒否される):
- マイクの NSMicrophoneUsageDescription / Info.plist → ios-integration にとどまります(privacy-ux)
- ShazamKit App Service が有効になっていない → ios-integration にとどまります(shazamkit)
ShazamKit と AVFoundation(AVAudioEngine バッファーを使ったカスタム SHSession):
- オーディオエンジンの設定、バッファー形式、セッションの設定 → ios-integration にとどまります(shazamkit)
- AVAudioEngine のパイプライン、オーディオセッションのカテゴリ、形式変換 → avfoundation-ref も呼び出します
ShazamKit と MusicKit(Apple Music で一致した曲を再生する):
- appleMusicID/appleMusicURL を含む一致結果 → ios-integration にとどまります(shazamkit)
- MusicKit の再生、ApplicationMusicPlayer → ios-integration も呼び出します(now-playing-musickit)
ルーティングロジック
Apple Intelligence と Siri
App Intents → /skill axiom-app-intents-ref
App Shortcuts → /skill axiom-app-shortcuts-ref
App の見つけやすさ → /skill axiom-app-discoverability
Core Spotlight → /skill axiom-core-spotlight-ref
ウィジェットと拡張機能
ウィジェット/ライブアクティビティ → /skill axiom-extensions-widgets
ウィジェットのリファレンス → /skill axiom-extensions-widgets-ref
アプリ内課金
IAP の実装 → /skill axiom-in-app-purchases
StoreKit 2 のリファレンス → /skill axiom-storekit-ref
IAP の監査 → iap-auditor エージェントを起動します(transaction.finish() の呼び出し漏れ、レシート検証の不備、復元機能の欠如、サブスクリプションの追跡)
IAP の完全な実装 → iap-implementation エージェントを起動します(StoreKit の設定、StoreManager、トランザクション処理、購入の復元)
カメラと写真
カメラ撮影の実装 → /skill axiom-camera-capture
カメラ API のリファレンス → /skill axiom-camera-capture-ref
カメラのデバッグ → /skill axiom-camera-capture-diag
カメラの監査 → camera-auditor エージェントまたは /axiom:audit camera を起動します(非推奨 API、割り込みハンドラーの欠如、スレッド処理違反、権限に関するアンチパターン)
写真ピッカーとライブラリ → /skill axiom-photo-library
写真ライブラリ API のリファレンス → /skill axiom-photo-library-ref
オーディオ、触覚フィードバック、オーディオ認識
オーディオ(AVFoundation) → /skill axiom-avfoundation-ref
触覚フィードバック → /skill axiom-haptics
再生中 → /skill axiom-now-playing
CarPlay の再生中 → /skill axiom-now-playing-carplay
MusicKit の統合 → /skill axiom-now-playing-musickit
ShazamKit の実装 → /skill axiom-shazamkit
- 楽曲認識(Shazam カタログ)、カスタムオーディオ照合
- SHManagedSession(最新)と SHSession(レガシー)の使い分け
- カスタムカタログ、シグネチャ生成、Shazam CLI
- ライブラリ管理(SHLibrary)
ShazamKit API のリファレンス → /skill axiom-shazamkit-ref
- SHManagedSession、SHSession、SHCustomCatalog、SHSignatureGenerator
- SHMediaItem、SHMatchedMediaItem、SHLibrary、SHError
- プロパティキーとエラーコードの完全な一覧
ローカライズとプライバシー
ローカライズ → /skill axiom-localization
プライバシー UX → /skill axiom-privacy-ux
認証と認証情報
パスキー/WebAuthn サインイン → /skill axiom-passkeys
アプリの整合性と不正利用防止
App Attest/DeviceCheck → /skill axiom-app-attest
アラーム
AlarmKit(iOS 26 以降) → /skill axiom-alarmkit-ref
- アラームのスケジュール設定と認証
- ライブアクティビティとの統合
- SwiftUI によるアラーム管理ビュー
カレンダーとリマインダー(EventKit)
EventKit の実装 → /skill axiom-eventkit
- 権限モデル(アクセス不可、書き込みのみ、フルアクセス)
- イベント作成のパターン(EventKitUI と直接の EventKit)
- リマインダーのパターン(DateComponents、EKSource の選択)
- ストアのライフサイクル(シングルトン、変更通知)
- iOS 17 より前の API からの移行
EventKit API のリファレンス → /skill axiom-eventkit-ref
- EKEventStore、EKEvent、EKReminder、EKAlarm、EKRecurrenceRule
- EventKitUI のビューコントローラー
- Siri のイベント候補(INReservation の提供)
- バーチャル会議の拡張機能
- 位置情報に基づくリマインダー
連絡先
連絡先の実装 → /skill axiom-contacts
- 権限モデル(限定アクセスとフルアクセス)
- 連絡先アクセスボタン(iOS 18 以降)
- ピッカーとストアアクセスの使い分け
- CNContactStore のパターン
- 連絡先プロバイダーの拡張機能
連絡先 API のリファレンス → /skill axiom-contacts-ref
- CNContactStore、CNMutableContact、CNSaveRequest
- CNContactFormatter、CNContactVCardSerialization
- CNContactPickerViewController、ContactAccessButton
- ContactProvider フレームワーク
- 変更履歴(CNChangeHistoryFetchRequest)
バックグラウンド処理
BGTaskScheduler の実装 → /skill axiom-background-processing
バックグラウンドタスクのデバッグ → /skill axiom-background-processing-diag
バックグラウンドタスク API のリファレンス → /skill axiom-background-processing-ref
プッシュ通知
プッシュ通知の実装 → /skill axiom-push-notifications
プッシュ通知 API のリファレンス → /skill axiom-push-notifications-ref
プッシュ通知のデバッグ → /skill axiom-push-notifications-diag
位置情報サービス
実装パターン → /skill axiom-core-location
API リファレンス → /skill axiom-core-location-ref
位置情報の問題のデバッグ → /skill axiom-core-location-diag
マップと MapKit
MapKit の実装パターン → /skill axiom-mapkit
- SwiftUI Map と MKMapView の選択
- 件数別のアノテーション戦略
- 検索と経路案内
- 8 つのアンチパターン
MapKit API リファレンス → /skill axiom-mapkit-ref
- SwiftUI Map API
- MKMapView デリゲート
- MKLocalSearch、MKDirections、Look Around
- プラットフォーム対応状況一覧
MapKit のトラブルシューティング → /skill axiom-mapkit-diag
- アノテーションが表示されない
- 領域のジャンプ/無限ループ
- クラスタリングの問題
- 検索の失敗
判断ツリー
- App Intents/Siri/Apple Intelligence? → app-intents-ref
- App Shortcuts? → app-shortcuts-ref
- アプリの見つけやすさ/Spotlight? → app-discoverability、core-spotlight-ref
- ウィジェット/ライブアクティビティ? → extensions-widgets、extensions-widgets-ref
- アプリ内購入/StoreKit? → in-app-purchases、storekit-ref
- IAP の監査(finish の漏れ、レシートの検証など)が必要? → iap-auditor(エージェント)
- IAP の完全な実装が必要? → iap-implementation(エージェント)
- カメラ撮影? → camera-capture(パターン)、camera-capture-diag(デバッグ)、camera-capture-ref(API)
- カメラコードの監査が必要? → camera-auditor(エージェント)
- 写真ピッカー/ライブラリ? → photo-library(パターン)、photo-library-ref(API)
- オーディオ/AVFoundation? → avfoundation-ref
- 再生中? → now-playing、now-playing-carplay、now-playing-musickit
- 触覚フィードバック? → haptics
- オーディオ認識/ShazamKit/曲の識別? → shazamkit(パターン)、shazamkit-ref(API)
- カスタムオーディオカタログ/セカンドスクリーンとの同期/オーディオの照合? → shazamkit(パターン)、shazamkit-ref(API)
- ローカライズ? → localization
- プライバシー/権限? → privacy-ux
- バックグラウンド処理? → background-processing(パターン)、background-processing-diag(デバッグ)、background-processing-ref(API)
- プッシュ通知の実装、APNs、またはリモート通知の処理? → push-notifications(パターン)、push-notifications-ref(API)、push-notifications-diag(デバッグ)
- APNs のペイロード形式、ヘッダー、または JWT 認証の詳細が必要? → push-notifications-ref
- プッシュ通知が届かない、トークンの問題、または配信の失敗? → push-notifications-diag
- 位置情報サービス? → core-location(パターン)、core-location-diag(デバッグ)、core-location-ref(API)
- マップ/MapKit/アノテーション/経路案内? → mapkit(パターン)、mapkit-ref(API)、mapkit-diag(デバッグ)
- アラーム/AlarmKit? → alarmkit-ref
- パスキー/WebAuthn/パスワードの置き換え/ASAuthorizationController? → passkeys
- App Attest/DeviceCheck/不正行為の防止/アプリの整合性? → app-attest
- カレンダーイベント/EventKit/EventKitUI/カレンダーへの追加? → eventkit(パターン)、eventkit-ref(API)
- リマインダー/EKReminder/リマインダーリスト? → eventkit(パターン)、eventkit-ref(API)
- Siri のイベント候補/INReservation? → eventkit-ref(API、Part 9)
- 仮想会議拡張機能/EKVirtualConferenceProvider? → eventkit-ref(API、Part 8)
- 連絡先/連絡先ピッカー/CNContactStore? → contacts(パターン)、contacts-ref(API)
- Contact Access Button/限定アクセス/iOS 18 の連絡先? → contacts(パターン)、contacts-ref(API)
- Contact Provider 拡張機能/連絡先をシステムに公開? → contacts-ref(API、Part 10)
反合理化
| 考え | 実際のところ |
|---|---|
| "App Intents は単なるプロトコル準拠です" | App Intents には、パラメーターの検証、エンティティのクエリ、バックグラウンド実行があります。app-intents-ref ですべて網羅しています。 |
| "ウィジェットは簡単です。以前作ったことがあります" | ウィジェットには、毎年進化するタイムライン、インタラクティブ機能、Live Activity のパターンがあります。現在の情報は extensions-widgets にあります。 |
| "簡単な API 呼び出しで触覚フィードバックを追加できます" | 触覚の設計には、インタラクションの種類ごとにパターンがあります。haptics スキルは HIG のガイドラインに沿っています。 |
| "ローカライズは String Catalogs だけです" | Xcode 26 には、型安全なローカライズ、生成されるシンボル、#bundle マクロがあります。最新情報は localization スキルにあります。 |
| "カメラのキャプチャは AVCaptureSession の設定だけです" | カメラには、中断ハンドラー、回転、スレッド処理の要件があります。camera-capture ですべて網羅しています。 |
| "MKMapView を使えばよいです。もう使い方はわかっています" | 標準的なマップ機能なら、SwiftUI Map を使うとコード量を 10 分の 1 にできます。mapkit に判断フローチャートがあります。 |
| "MapKit の検索は動かないので、Google Maps SDK を使います" | MapKit の検索では、region bias と resultTypes の設定が必要です。mapkit-diag なら 5 分で修正できます。 |
| "アラームのスケジュール設定は UNNotificationRequest だけです" | AlarmKit(iOS 26 以降)には、専用のアラーム UI、認証、Live Activity との連携があります。alarmkit-ref でフレームワークを網羅しています。 |
| "プッシュ通知に必要なのはペイロードとトークンだけです" | トークンのライフサイクル、Focus の割り込みレベル、サービス拡張の落とし穴、サンドボックス環境と本番環境の不一致が、プッシュ通知の不具合の 80%を引き起こします。push-notifications ですべて網羅しています。 |
| "ユーザーはまだパスキーに対応できません" | Apple、Google、Microsoft は、すべてのプラットフォームでパスキーを提供しています。ユーザーが暗号技術を理解する必要はなく、タップするだけです。passkeys で移行方法を網羅しています。 |
| "App Attest はアプリには過剰です" | サーバー側に価値のあるもの(プレミアムコンテンツ、仮想通貨、ユーザーアカウントなど)を持つアプリは、すべて不正利用の標的になります。app-attest には段階的な導入戦略があります。 |
| "カレンダーへのフルアクセスをリクエストすればよいです" | ほとんどのアプリが必要とするのはイベントの追加だけです。EventKitUI なら権限なしで実現できます。eventkit にアクセスレベルの判断フローチャートがあります。 |
| "ShazamKit は SHSession とデリゲートだけです" | iOS 17 以降には SHManagedSession があり、AVAudioEngine の定型コードが不要になります。shazamkit に世代ごとの判断フローチャートがあります。 |
| "連絡先の選択には CNContactStore を直接使います" | CNContactPickerViewController は認証が不要で、すべての連絡先を表示します。contacts にアクセスレベルの判断フローチャートがあります。 |
| "連絡先へのアクセスは簡単です。リクエストして取得するだけです" | iOS 18 の限定アクセスでは、アプリから一部の連絡先しか見えない場合があります。ContactAccessButton を使えば、これに適切に対応できます。contacts で仕組み全体を網羅しています。 |
使用例
ユーザー:「アプリに Siri のサポートを追加するにはどうすればよいですか?」
→ 呼び出し:/skill axiom-app-intents-ref
ユーザー:「ウィジェットが更新されません」
→ 呼び出し:/skill axiom-extensions-widgets
ユーザー:「更新された SwiftData のコンテンツがウィジェットに表示されません」
→ 呼び出し:/skill axiom-extensions-widgets + App Group/共有コンテナの設定について ios-data ルーターも呼び出します
ユーザー:「Live Activity が更新されず、プッシュ通知のエラーが発生します」
→ ActivityKit について /skill axiom-extensions-widgets を呼び出し、プッシュ通知の配信について ios-networking ルーターも呼び出します
ユーザー:「StoreKit 2 でアプリ内課金を実装する」
→ 呼び出し:/skill axiom-in-app-purchases
ユーザー:「アプリの文字列をローカライズするにはどうすればよいですか?」
→ 呼び出し:/skill axiom-localization
ユーザー:「ボタンをタップしたときの触覚フィードバックを実装する」
→ 呼び出し:/skill axiom-haptics
ユーザー:「カメラのプレビューを設定するにはどうすればよいですか?」
→ 呼び出し:/skill axiom-camera-capture
ユーザー:「電話がかかってくるとカメラがフリーズします」
→ 呼び出し:/skill axiom-camera-capture-diag
ユーザー:「RotationCoordinator とは何ですか?」
→ 呼び出し:/skill axiom-camera-capture-ref
ユーザー:「SwiftUI で写真を選択できるようにするにはどうすればよいですか?」
→ 呼び出し:/skill axiom-photo-library
ユーザー:「アクセスを許可したのに写真が表示されません」
→ 呼び出し:/skill axiom-photo-library
ユーザー:「写真をカメラロールに保存するにはどうすればよいですか?」
→ 呼び出し:/skill axiom-photo-library
ユーザー: 「バックグラウンドタスクがまったく実行されません」
→ 実行: /skill axiom-background-processing-diag
ユーザー: 「BGTaskScheduler はどう実装すればいいですか?」
→ 実行: /skill axiom-background-processing
ユーザー: 「BGAppRefreshTask と BGProcessingTask の違いは何ですか?」
→ 実行: /skill axiom-background-processing-ref
ユーザー: 「ジオフェンシングはどう実装すればいいですか?」
→ 実行: /skill axiom-core-location
ユーザー: 「バックグラウンドで位置情報の更新が動作しません」
→ 実行: /skill axiom-core-location-diag
ユーザー: 「CLServiceSession とは何ですか?」
→ 実行: /skill axiom-core-location-ref
ユーザー: 「アプリ内課金の実装をレビューしてください」
→ 実行: iap-auditor エージェント
ユーザー: 「アプリにアプリ内課金を実装してください」
→ 実行: iap-implementation エージェント
ユーザー: 「カメラのコードに問題がないか確認してください」
→ 実行: camera-auditor エージェント
ユーザー: 「SwiftUI アプリに地図を追加するにはどうすればいいですか?」
→ 実行: /skill axiom-mapkit
ユーザー: 「アノテーションが地図に表示されません」
→ 実行: /skill axiom-mapkit-diag
ユーザー: 「地図上でオートコンプリート付きの検索はどう実装すればいいですか?」
→ 実行: /skill axiom-mapkit-ref
ユーザー: 「スクロールすると地図のリージョンが飛び続けます」
→ 実行: /skill axiom-mapkit-diag
ユーザー: 「2 点間の経路を追加するにはどうすればいいですか?」
→ 実行: /skill axiom-mapkit-ref
ユーザー: 「iOS 26 でアラームをスケジュールするにはどうすればいいですか?」
→ 実行: /skill axiom-alarmkit-ref
ユーザー: 「AlarmKit を Live Activities と統合するにはどうすればいいですか?」
→ 実行: /skill axiom-alarmkit-ref
ユーザー: 「プッシュ通知はどう実装すればいいですか?」
→ 実行: /skill axiom-push-notifications
ユーザー: 「必要な APNs ヘッダーは何ですか?」
→ 実行: /skill axiom-push-notifications-ref
ユーザー: 「プッシュ通知は開発環境では動作しますが、本番環境では動作しません」
→ 実行: /skill axiom-push-notifications-diag
ユーザー: 「Live Activity がプッシュで更新されません」
→ 実行: /skill axiom-push-notifications-diag + /skill axiom-extensions-widgets
ユーザー: 「FCM と直接 APNs のどちらを使うべきですか?」
→ 実行: /skill axiom-push-notifications
ユーザー: 「Live Activities で pushTokenUpdates を使うにはどうすればいいですか?」
→ 実行: /skill axiom-extensions-widgets(プッシュトークンの監視は ActivityKit API が担当します)
ユーザー: 「実際のサーバーなしでプッシュ通知をテストするにはどうすればいいですか?」
→ 実行: /skill axiom-push-notifications-ref(コマンドラインテストのセクション)
ユーザー: 「パスキーサインインはどう実装すればいいですか?」
→ 実行: /skill axiom-passkeys
ユーザー: 「パスワードをパスキーに置き換えるにはどうすればいいですか?」
→ 実行: /skill axiom-passkeys
ユーザー: 「アプリが改ざんされていないことを検証するにはどうすればいいですか?」
→ 実行: /skill axiom-app-attest
ユーザー: 「プロモーションの不正を防ぐにはどうすればいいですか?」
→ 実行: /skill axiom-app-attest
ユーザー: 「ユーザーのカレンダーに予定を追加するにはどうすればいいですか?」
→ 実行: /skill axiom-eventkit
ユーザー: 「書き込み専用アクセスと完全なカレンダーアクセスの違いは何ですか?」
→ 実行: /skill axiom-eventkit
ユーザー: 「リマインダーをプログラムで作成するにはどうすればいいですか?」
→ 実行: /skill axiom-eventkit
ユーザー: 「EKEventEditViewController とは何ですか?」
→ 実行: /skill axiom-eventkit-ref
ユーザー: 「Siri Event Suggestions はどう実装すればいいですか?」
→ 実行: /skill axiom-eventkit-ref
ユーザー: 「ユーザーに連絡先を選択させるにはどうすればいいですか?」
→ 実行: /skill axiom-contacts
ユーザー: 「Contact Access Button とは何ですか?」
→ 実行: /skill axiom-contacts
ユーザー: 「連絡先を検索して取得するにはどうすればいいですか?」
→ 実行: /skill axiom-contacts-ref
ユーザー: 「Contact Provider 拡張機能を構築するにはどうすればいいですか?」
→ 実行: /skill axiom-contacts-ref
ユーザー: 「同期のために連絡先の変更を検出するにはどうすればいいですか?」
→ 実行: /skill axiom-contacts-ref