mcpField
A
axiom-uikit

axiom-uikit

github.com/charleswiltgen開発1.2k1.2k 回インストール今日更新
リポジトリ

axiom-uikit について

axiom-uikitは、UIKitを中心とするApple UI開発向けのルーティングスキルです。ブリッジ、レイアウト、アニメーション、Combine、TextKit、PencilKitなどの課題に応じた資料を案内します。

主な機能

  1. 01UIKitとSwiftUIのブリッジを案内
  2. 02アダプティブレイアウトとAuto Layoutの診断
  3. 03UIKitアニメーションとCombineのパターン
  4. 04TextKit、PencilKit、PaperKitのガイド
  5. 05モダナイズと画面サイズ対応の監査案内

活用シーン

  1. 01UIKitビューをSwiftUIに組み込む
  2. 02制約の競合やレイアウト不具合を調べる
  3. 03Combineの購読やアニメーションのタイミングを診断する
  4. 04TextKitやPencilKitの機能を追加する

インストール

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

$npx skills add https://github.com/charleswiltgen/axiom --skill axiom-uikit

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

同梱ファイル

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

skills/
adaptive-layout.md
auto-layout-debugging.md
combine-patterns.md
pencilkit-paperkit-ref.md
pencilkit-paperkit.md
resize-auditor.md
textkit-ref.md
uikit-animation-debugging.md
uikit-bridging.md
uikit-modernization.md

詳細

UIKit とブリッジング

UIKit のブリッジング、Auto Layout、Combine、TextKit、または UIKit アニメーションに関する作業では、必ずこのスキルを使用してください。

Axiom エージェントを起動できませんか? このルーターからエージェントに案内された場合は、その手順をインラインで実行してください。MCP 経由では、axiom_get_agent がエージェントを返します。それ以外の環境では、以下のファイルを読み込んでください。必要なのはファイルの検索と読み取りだけです。

ここで利用できるもの:skills/resize-auditor.md。

ほかのエージェントについても、MCP 経由では axiom_get_agent が返します。そのエージェントの xclog、xcsym、xcprof の手順を、axiom_xclog_*、axiom_xcsym_*、axiom_xcprof_* ツールで実行してください。それ以外の環境では、Axiom のスキルから skills/<agent>.md を検索してください。見つからない場合は、このスイートのスキルを使って自分で作業し、PATH 上にある Axiom ツールを利用してください。

クイックリファレンス

症状/タスク参照先
UIViewRepresentable、UIViewControllerRepresentableskills/uikit-bridging.md を参照
UIKit への SwiftUI の埋め込み(UIHostingController)skills/uikit-bridging.md を参照
Coordinator パターン、updateUIView のライフサイクルskills/uikit-bridging.md を参照
適応型 UIKit レイアウトの構築:ガイド、幅に応じた制約、コンポジショナルレイアウト、セルのサイズ自動調整skills/adaptive-layout.md を参照
「Unable to simultaneously satisfy constraints」skills/auto-layout-debugging.md を参照
制約の競合、曖昧なレイアウトskills/auto-layout-debugging.md を参照
ビューが表示されない、または配置が正しくないskills/auto-layout-debugging.md を参照
CAAnimation の完了ハンドラーが呼び出されないskills/uikit-animation-debugging.md を参照
デバイス上でスプリングの物理挙動が不適切、アニメーション時間が一致しないskills/uikit-animation-debugging.md を参照
アニメーションのカクつき、CATransaction のタイミングskills/uikit-animation-debugging.md を参照
Combine パブリッシャー、AnyCancellable のライフサイクルskills/combine-patterns.md を参照
@Published プロパティ、Combine と async/await の連携skills/combine-patterns.md を参照
Combine と async/await の使い分けskills/combine-patterns.md を参照
UIScene のライフサイクルが必要な場合、サイズ変更可能なアプリ、サイズクラス、タブのサイドバー OS27skills/uikit-modernization.md を参照
iPhone ミラーリングの互換性:間接入力、コンパニオンの Face ID、縦向きの制約skills/uikit-modernization.md を参照
シーンの境界:終了処理、アクティベーション要求、シーンごとの復元、外部ディスプレイ、activeAppearanceskills/uikit-modernization.md を参照
ナビゲーションバーのタイトルとサブタイトル:UINavigationItem.subtitle、largeSubtitleView、attributedTitle/attributedSubtitle、サブタイトルのテキスト属性(iOS 26)skills/uikit-modernization.md を参照
自動サイズ変更対応スキャン(シーンのライフサイクル、UIScreen.main、固定キャンバス、ミラーリング入力、iPhone Duo)resize-auditor エージェントを起動するか、/axiom:audit resize を実行
UIKit での iPhone Duo:縦向きバー、折り目、外側ディスプレイでのウィンドウ要求axiom-swiftui(skills/iphone-duo.md)を参照 — UIKit 版は各 SwiftUI API の隣にあります
TextKit 2 のアーキテクチャ、NSTextLayoutManagerskills/textkit-ref.md を参照
Writing Tools の統合(iOS 26)skills/textkit-ref.md を参照
ビューポートの描画サーフェス、アタッチメントの再利用、折りたたみ可能なテキスト OS27skills/textkit-ref.md を参照
SwiftUI TextEditor、TextKit 1 からの移行skills/textkit-ref.md を参照
文法チェック(UITextChecker)、エッジごとのテキストブロックの枠線 OS27skills/textkit-ref.md を参照
PencilKit キャンバス、PKToolPicker、描画の永続化skills/pencilkit-paperkit.md を参照
Apple Pencil Pro(スクイーズ、バレルロール、ホバー、触覚フィードバック)skills/pencilkit-paperkit.md を参照
手書き認識(PKStrokeRecognizer)、ストロークの識別/分割 OS27skills/pencilkit-paperkit-ref.md を参照
PaperKit マークアップキャンバス(図形、画像、テキストと描画)skills/pencilkit-paperkit-ref.md を参照
PaperKit のプログラムによるマークアップモデル(サブ要素、装飾要素) OS27skills/pencilkit-paperkit-ref.md を参照

判断ツリー

digraph uikit {
    start [label="UIKit task" shape=ellipse];
    what [label="What do you need?" shape=diamond];

    start -> what;
    what -> "skills/uikit-bridging.md" [label="wrap UIKit in SwiftUI\nor SwiftUI in UIKit"];
    what -> "skills/adaptive-layout.md" [label="build adaptive layout\n(guides, constraint sets,\ncompositional)"];
    what -> "skills/auto-layout-debugging.md" [label="constraint errors,\nlayout issues"];
    what -> "skills/uikit-animation-debugging.md" [label="CAAnimation bugs,\nspring physics,\ncompletion handlers"];
    what -> "skills/combine-patterns.md" [label="publishers, sinks,\n@Published,\nasync/await bridge"];
    what -> "skills/textkit-ref.md" [label="text layout,\nWriting Tools,\nTextKit migration"];
    what -> "skills/pencilkit-paperkit.md" [label="drawing canvas,\nApple Pencil,\nPaperKit markup"];
    what -> "skills/uikit-modernization.md" [label="scene lifecycle (required 27),\nresizable apps,\nsize classes"];
}
  1. シーンのライフサイクルの移行、「27 でアプリが起動しない」、サイズ変更可能性、サイズクラス、タブサイドバー? → skills/uikit-modernization.md 0b. iPhone ミラーリングでアプリの動作がおかしい(ジェスチャが反応しない、Face ID がブロックされる、レイアウトが縦向きのまま固定される)? → skills/uikit-modernization.md 0c. iPhone Duo/折りたたみ式 iPhone(縦のバー、折り目、外側ディスプレイのウィンドウ要求)? → axiom-swiftui(skills/iphone-duo.md)
  2. UIViewRepresentable/UIViewControllerRepresentable/UIHostingController? → skills/uikit-bridging.md
  3. 「Unable to simultaneously satisfy constraints」/レイアウトの不具合? → skills/auto-layout-debugging.md 2b. 状況に応じて適応するレイアウトを構築する(レイアウトガイド、サイズクラスの制約セット、コンポジション列の計算、自動サイズ調整セル)? → skills/adaptive-layout.md
  4. CAAnimation の完了通知がない/スプリング物理が不正/アニメーションがカクつく? → skills/uikit-animation-debugging.md
  5. Combine パブリッシャー/AnyCancellable/@Published/Combine と async のブリッジ? → skills/combine-patterns.md
  6. TextKit 2/Writing Tools/TextEditor/TextKit 1 からの移行? → skills/textkit-ref.md
  7. PencilKit キャンバス/Apple Pencil/PaperKit のマークアップ? → skills/pencilkit-paperkit.md
  8. 純粋な SwiftUI ビューに関する質問(UIKit とのブリッジなし)? → /skill axiom-swiftui
  9. デザイン上の判断、HIG、Liquid Glass、SF Symbols、タイポグラフィ? → /skill axiom-design
  10. UIKit コールバックで保持サイクルを防ぐ? → axiom-performance を参照(skills/objc-block-retain-cycles.md)
  11. Combine サブスクリプションによるメモリリーク? → まず skills/combine-patterns.md を確認し、リークが続く場合は axiom-performance を参照

競合の解決

uikit と swiftui:UI コードを扱う場合:

  • uikit を使用:UIKit を SwiftUI でラップする場合、または UIKit 固有の問題(Auto Layout、CAAnimation)をデバッグする場合
  • swiftui を使用:純粋な SwiftUI ビュー、ナビゲーション、レイアウト、アニメーションの場合

uikit と concurrency:Combine が async/await と連携する場合:

  • uikit を使用(skills/combine-patterns.md):Combine パイプラインを async/await とブリッジする場合
  • concurrency を使用:純粋な async/await パターン、アクター、Sendable の場合

uikit と performance:アニメーションやレイアウトがパフォーマンスの問題を引き起こす場合:

  1. まず uikit を試してください — アニメーションのカクつきの大半は、プロファイリングの問題ではなく、CATransaction のタイミングやレイヤーの状態が原因です
  2. アニメーションのロジックは正しいのに描画が遅い場合に限り、performance を使用してください

uikit と axiom-data:@Published プロパティがデータの永続化に関係する場合:

  • uikit を使用:Combine パブリッシャーのパターンと @Published のライフサイクルの場合
  • axiom-data を使用:SwiftData/Core Data のモデル層に関する問題の場合

もっともらしい理由付けを避ける

考え実際のところ
「UIHostingController を使えばいいだけ。簡単だ」ホスティングには、サイズ調整、ライフサイクル、ナビゲーションに関するエッジケースがあります。よくある落とし穴については skills/uikit-bridging.md を参照してください。
「Auto Layout のエラーはただの警告だから、無視しよう」制約が満たされないと、実行時に予測不能なレイアウトになります。今すぐ修正してください。
「CAAnimation の仕組みは分かっている」CAAnimation の不具合の 90% は Core Animation ではなく、CATransaction のタイミングが原因です。skills/uikit-animation-debugging.md を確認してください。
「Combine はもう使われていない。async/await で書き直せばいい」Combine に非推奨の告知はありません。動作中のパイプラインを書き直すのは時間の無駄です。移行するか維持するかについては skills/combine-patterns.md を参照してください。
「TextKit 1 は今でも問題なく使える」TextKit 1 は Writing Tools との統合に対応しておらず、Apple が修正しないことが分かっているレイアウトの不具合もあります。skills/textkit-ref.md を参照してください。
「cancellable をローカル変数に保存しよう」ローカル変数の AnyCancellable はすぐに解放され、サブスクリプションが終了します。
「描画を保存するために PKCanvasView をアーカイブしよう」ビューをアーカイブすると編集できなくなります。drawing.dataRepresentation() を永続化してください。skills/pencilkit-paperkit.md を参照してください。
「ツールピッカーが表示されない。API が壊れているに違いない」setVisible(_:forFirstResponder:) の後に、キャンバスで becomeFirstResponder() を呼び出す必要があります。skills/pencilkit-paperkit.md を参照してください。

呼び出し例

ユーザー:「UIKit のビューを SwiftUI でラップするにはどうすればよいですか?」 → 読む:skills/uikit-bridging.md

ユーザー:「『Unable to simultaneously satisfy constraints』というエラーが発生します」 → 読む:skills/auto-layout-debugging.md

ユーザー:「CAAnimation の完了ハンドラーがまったく呼び出されません」 → 読む:skills/uikit-animation-debugging.md

ユーザー:「これには Combine と async/await のどちらを使うべきですか?」 → 読む:skills/combine-patterns.md

ユーザー:「Writing Tools をテキストエディタに統合するにはどうすればよいですか?」 → 読む:skills/textkit-ref.md

ユーザー:「ツールピッカーを使った Apple Pencil の描画キャンバスを追加するにはどうすればよいですか?」 → 読む:skills/pencilkit-paperkit.md

ユーザー:「図形やテキストを使った PaperKit のマークアップキャンバスを追加するにはどうすればよいですか?」 → 読む:skills/pencilkit-paperkit-ref.md

ユーザー:「SwiftUI のビューで、Combine のサブスクリプションによるメモリリークが発生しています」 → 読む:skills/combine-patterns.md

ユーザー:「UIKit アプリに SwiftUI を埋め込むにはどうすればよいですか?」 → 読む:skills/uikit-bridging.md

ユーザー:「画面サイズ変更のサポートについてアプリを監査してください」 → resize-auditor エージェントを起動します(または /axiom:audit resize)

ユーザー:「カスタムのピンチジェスチャが、iPhone ミラーリングの実行中に動作しなくなります」 → 読む:skills/uikit-modernization.md

ユーザー:「ウィンドウ幅に応じてコレクションビューの列数を変えるにはどうすればよいですか?」 → 読む:skills/adaptive-layout.md

コメント