ios-application-dev について
ios-application-devは、UIKit、SnapKit、SwiftUIを使ったiOSアプリ開発の実践ガイドです。Appleプラットフォームの慣例に沿ったコンポーネントの指針と、レイアウト、アクセシビリティ、ナビゲーション、プライバシー、システム連携のチェック項目を提供します。
主な機能
- 01UIKitとSwiftUIのコンポーネント資料
- 02レイアウトとタイポグラフィの実践指針
- 03アクセシビリティと色の指針
- 04ナビゲーションと状態保持のパターン
- 05プライバシーと権限のチェック項目
- 06システム連携の推奨事項
活用シーン
- 01アプリ画面に使うUIKitまたはSwiftUIのコンポーネント選び
- 02アクセシビリティと画面サイズ対応のレイアウト確認
- 03タブ間のナビゲーションと状態管理の計画
- 04権限要求とプライバシー動作の確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ minimax-ai/ skills --skill ios-application-devインストール後、Claude Code で/ios-application-devを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/accessibility.mdgraphics-animation.mdlayout-system.mdmetal-shader.mdnavigation-patterns.mdswift-coding-standards.mdswiftui-design-guidelines.mdsystem-integration.mduikit-components.md詳細
iOS アプリケーション開発ガイド
UIKit、SnapKit、SwiftUI を使って iOS アプリケーションを開発するための実践的なガイドです。実績あるパターンと Apple プラットフォームの規約に焦点を当てています。
クイックリファレンス
UIKit
| 目的 | コンポーネント |
|---|---|
| メインセクション | UITabBarController |
| 階層をたどる画面遷移 | UINavigationController |
| 集中して取り組むタスク | シート表示 |
| 重要な選択 | UIAlertController |
| 追加のアクション | UIContextMenuInteraction |
| リストコンテンツ | UICollectionView + DiffableDataSource |
| セクション分けされたリスト | DiffableDataSource + headerMode |
| グリッドレイアウト | UICollectionViewCompositionalLayout |
| 検索 | UISearchController |
| 共有 | UIActivityViewController |
| 位置情報(一度限り) | CLLocationButton |
| フィードバック | UIImpactFeedbackGenerator |
| 線形レイアウト | UIStackView |
| カスタムシェイプ | CAShapeLayer + UIBezierPath |
| グラデーション | CAGradientLayer |
| モダンなボタン | UIButton.Configuration |
| 動的なテキスト | UIFontMetrics + preferredFont |
| ダークモード | セマンティックカラー(.systemBackground、.label) |
| 権限 | コンテキストに応じたリクエスト + AVCaptureDevice |
| ライフサイクル | UIApplication の通知 |
SwiftUI
| 目的 | コンポーネント |
|---|---|
| メインセクション | TabView + tabItem |
| 階層をたどる画面遷移 | NavigationStack + NavigationPath |
| 集中して取り組むタスク | .sheet + presentationDetents |
| 重要な選択 | .alert |
| 追加のアクション | .contextMenu |
| リストコンテンツ | List + .insetGrouped |
| 検索 | .searchable |
| 共有 | ShareLink |
| 位置情報(一度限り) | LocationButton |
| フィードバック | UIImpactFeedbackGenerator |
| 進捗(既知) | ProgressView(value:total:) |
| 進捗(不明) | ProgressView() |
| 動的なテキスト | .font(.body) のセマンティックスタイル |
| ダークモード | .primary、.secondary、Color(.systemBackground) |
| シーンのライフサイクル | @Environment(\.scenePhase) |
| モーションを抑える | @Environment(\.accessibilityReduceMotion) |
| ダイナミックタイプ | @Environment(\.dynamicTypeSize) |
基本原則
レイアウト
- タッチターゲットは 44pt 以上にします
- コンテンツはセーフエリア内に配置します(SwiftUI ではデフォルトで考慮されます。背景にのみ
.ignoresSafeArea()を使用してください) - 8pt 単位の間隔を使用します(8、16、24、32、40、48)
- 主要なアクションは親指が届く範囲に配置します
- すべての画面サイズに対応します(iPhone SE の 375pt から Pro Max の 430pt まで)
タイポグラフィ
- UIKit:
preferredFont(forTextStyle:)+adjustsFontForContentSizeCategory = true - SwiftUI:セマンティックなテキストスタイル
.headline、.body、.caption - カスタムフォント:
UIFontMetrics/Font.custom(_:size:relativeTo:) - アクセシビリティサイズではレイアウトを調整します(最小 11pt)
カラー
- セマンティックなシステムカラーを使用します(
.systemBackground、.label、.primary、.secondary) - カスタムカラーにはアセットカタログのバリエーションを使用します(任意/ダークの外観)
- 色だけで情報を伝えないでください(アイコンまたはテキストを併用します)
- コントラスト比は通常のテキストで 4.5:1 以上、大きなテキストで 3:1 以上にします
アクセシビリティ
- アイコンボタンにラベルを設定します(
.accessibilityLabel()) - モーションを抑える設定に対応します(
@Environment(\.accessibilityReduceMotion)) - 読み上げ順序を論理的にします(
.accessibilitySortPriority()) - 「さらに大きな文字」と「コントラストを上げる」の設定に対応します
ナビゲーション
- タブバー(3〜5 セクション)は画面遷移中も表示したままにします
- 戻るスワイプを動作させます(システムジェスチャを上書きしないでください)
- タブ間で状態を保持します(
@SceneStorage、@State) - ハンバーガーメニューは使用しないでください
プライバシーと権限
- 権限は適切なコンテキストでリクエストします(起動時にはリクエストしません)
- システムダイアログの前に独自の説明を表示します
- Sign in with Apple に対応します
- ATT の拒否を尊重します
チェックリスト
レイアウト
- タッチターゲットは 44pt 以上
- コンテンツはセーフエリア内
- 主要なアクションは親指が届く範囲(画面の下半分)
- すべての画面サイズ(SE から Pro Max まで)に対応する柔軟な幅
- 間隔が 8pt グリッドに沿っている
タイポグラフィ
- セマンティックなテキストスタイル、または UIFontMetrics で拡大縮小されるカスタムフォント
- ダイナミックタイプがアクセシビリティサイズまでサポートされている
- 大きなサイズでもレイアウトが再配置される(テキストが切り詰められない)
- テキストサイズの最小値が 11pt
色
- セマンティックカラーシステムまたはライト/ダーク用のアセットバリエーション
- ダークモードが意図的に設計されている(単に反転しただけではない)
- 色だけに依存した情報がない
- テキストのコントラスト比が 4.5:1 以上(通常サイズ)/3:1 以上(大きいサイズ)
- インタラクティブ要素には単一のアクセントカラーを使用
アクセシビリティ
- すべてのインタラクティブ要素に VoiceOver ラベルを設定
- 読み上げ順序が論理的
- 太字テキストの設定を尊重
- 視差効果を減らす設定で装飾的なアニメーションを無効化
- すべてのジェスチャーに代替のアクセス方法を用意
ナビゲーション
- 最上位のセクションが 3~5 個の場合はタブバーを使用
- ハンバーガー/ドロワーメニューを使用しない
- ナビゲーション中もタブバーを表示したままにする
- どの画面でもスワイプで戻れる
- タブ間で状態を保持
コンポーネント
- アラートは重要な判断が必要な場合にのみ使用
- シートに閉じる方法(ボタンおよび/またはスワイプ)を用意
- リストの行の高さを 44pt 以上にする
- 破壊的なボタンには
.destructiveロールを使用
プライバシー
- 権限は状況に応じてリクエストする(起動時にはリクエストしない)
- システムの権限ダイアログの前に、独自の説明を表示
- ほかのプロバイダーとともに「Apple でサインイン」を提供
- アカウントなしで基本機能を利用可能
- トラッキングを行う場合は ATT の確認を表示し、拒否を尊重
システムとの統合
- 通話、バックグラウンド移行、Siri などの割り込みをアプリが適切に処理
- Spotlight でアプリのコンテンツをインデックス化
- 共有可能なコンテンツで共有シートを利用可能にする
参考資料
| トピック | 参考資料 |
|---|---|
| タッチターゲット、安全領域、CollectionView | レイアウトシステム |
| TabBar、NavigationController、モーダル | ナビゲーションパターン |
| StackView、ボタン、アラート、検索、ContextMenu | UIKit コンポーネント |
| CAShapeLayer、CAGradientLayer、Core Animation | グラフィックスとアニメーション |
| Dynamic Type、セマンティックカラー、VoiceOver | アクセシビリティ |
| 権限、位置情報、共有、ライフサイクル、触覚フィードバック | システムとの統合 |
| Metal シェーダーと GPU | Metal シェーダーリファレンス |
| SwiftUI HIG、コンポーネント、パターン、アンチパターン | SwiftUI デザインガイドライン |
| Optional、Protocol、async/await、ARC、エラー処理 | Swift コーディング規約 |
Swift、SwiftUI、UIKit、SF Symbols、Metal、および Apple は Apple Inc. の商標です。SnapKit は各所有者の商標です。
コメント
Markdown 対応