mcpField
A
appkit-interop

appkit-interop

github.com/openai開発7.6k62 回インストール3 週間前に更新
リポジトリ

appkit-interop について

SwiftUI だけでは足りない macOS ネイティブ機能を扱う開発者向けのスキルです。ビュー、ビューコントローラー、アプリレベルのフックから小さな AppKit ブリッジを選び、状態の所有権とライフサイクル境界を定めます。

主な機能

  1. 01要件に合う最小のブリッジ選択
  2. 02Representable による AppKit ビューのラップ
  3. 03ウィンドウ、メニュー、レスポンダーチェーンの処理
  4. 04SwiftUI と AppKit の状態境界の明確化
  5. 05コーディネーターとライフサイクル前提の確認

活用シーン

  1. 01SwiftUI への特定 AppKit コントロールの追加
  2. 02ウィンドウやパネルの動作実装
  3. 03メニュー検証とファーストレスポンダーの処理
  4. 04ドラッグ&ドロップやファイルパネルの追加

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/openai/plugins --skill appkit-interop

インストール後、Claude Code で/appkit-interopを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

agents/
openai.yaml
references/
drag-drop-pasteboard.md
representables.md
responder-menus.md
window-panels.md

詳細

AppKit 相互運用

クイックスタート

SwiftUI ではネイティブ macOS の動作を実現しきれない場合に、このスキルを使用します。 ブリッジはできるだけ小さく、明示的に保ちます。通常は SwiftUI を真実の情報源とし、 AppKit は命令型の処理を担います。

最小限のブリッジを選ぶ

  • 必要な動作がシーン、ツールバー、コマンド、インスペクタ、または標準コントロールですでに実現できる場合は、SwiftUI のみを使用します。
  • ライフサイクル要件が軽微で、特定の AppKit ビューが必要な場合は、NSViewRepresentable を使用します。
  • コントローラのライフサイクル、デリゲーション、または表示の調整が必要な場合は、NSViewControllerRepresentable を使用します。
  • NSWindow、レスポンダーチェーン、メニューの検証、パネル、またはアプリレベルの動作が必要な場合は、AppKit のウィンドウまたはアプリのフックを直接使用します。

ワークフロー

  1. 不足している機能を正確に特定します。

    • ウィンドウの動作
    • テキストシステムの動作
    • メニューの検証
    • ドラッグ&ドロップ
    • ファイルを開く/保存するパネル
    • ファーストレスポンダーの制御
  2. 解決に必要な最小限の境界を選びます。

    • ラップしたコントロールやコーディネーターで対応できる場合は、画面全体を AppKit に移行しないでください。
  3. 所有権を明確にします。

    • SwiftUI が値の状態、選択状態、監視可能なモデルを所有します。
    • AppKit オブジェクトは、Representable、コーディネーター、またはブリッジオブジェクトの内部に保持します。
  4. SwiftUI に戻すインターフェースを絞ります。

    • 編集可能な状態にはバインディング
    • イベントには小さなコールバック
    • 必要な場合に限り、用途を絞ったブリッジサービス
  5. ライフサイクルに関する前提を検証します。

    • SwiftUI は Representable を再作成する場合があります。
    • コーディネーターは、デリゲートやターゲット/アクションの連携を保持するためのものであり、第 2 のアプリケーションアーキテクチャではありません。

参考資料

  • references/representables.md:ビューラッパーとビューコントローララッパーの選択、およびコーディネーターパターンについて。
  • references/window-panels.md:ウィンドウへのアクセス、ユーティリティウィンドウ、ファイルを開く/保存するパネルについて。
  • references/responder-menus.md:ファーストレスポンダー、コマンドのルーティング、メニューの検証について。
  • references/drag-drop-pasteboard.md:ペーストボード、ファイル URL、デスクトップでのドラッグ&ドロップに関する注意点について。

ガードレール

  • SwiftUI と AppKit の間で真実の情報源を重複させないでください。
  • Coordinator を、整理されていない処理の置き場にしないでください。
  • 明確な所有権上の理由がない限り、長期間存続する NSView や NSWindow のインスタンスをグローバルに保存しないでください。
  • 機能を AppKit だけで書き直すより、小さくテスト済みのブリッジを優先してください。
  • パターンを完全に swiftui-patterns 内に留められる場合は、そのままにしてください。

出力の要件

以下を提示してください。

  • 対応する SwiftUI の具体的な制限
  • 推奨する最小限のブリッジの種類
  • SwiftUI と AppKit 間のデータフローの境界
  • 注意すべきライフサイクルまたは検証上のリスク

コメント