From mobile-plugin
iOSアプリのデザイン哲学とクリエイティブディレクション。Apple Human Interface Guidelinesに基づく Clarity/Deference/Depthの原則、SwiftUIによる実装パターン、アクセシビリティ設計を包括的にガイド。 使用タイミング: (1) 新規アプリのUI/UX設計時、(2) デザインシステム構築時、(3) SwiftUIコンポーネント設計時、 (4) 「iOSらしいデザインにしたい」「HIGに準拠したい」、(5) アクセシビリティ対応時、 (6) アニメーション・インタラクション設計時、(7) 複数プラットフォーム(iOS/iPadOS/watchOS/visionOS)対応時
How this skill is triggered — by the user, by Claude, or both
Slash command
/mobile-plugin:ios-design-directionThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Apple Human Interface Guidelinesに基づくiOSアプリデザインの哲学と実装ガイド。
Apple Human Interface Guidelinesに基づくiOSアプリデザインの哲学と実装ガイド。
デザイン作業を開始する前に、以下の情報を確認する。
以下をユーザーに確認:
ターゲットプラットフォーム
プロジェクトの性質
既存資産の有無
アクセシビリティ要件
パフォーマンス制約
デザインの方向性
何を作成するか確認:
確認完了後、以下のガイドラインを適用して作業を進める。
| 原則 | 意味 | 実践 |
|---|---|---|
| Clarity | テキスト・アイコン・装飾の明瞭性 | 読みやすいフォント、意味のあるアイコン、機能的な装飾 |
| Deference | コンテンツを主役に | UIは控えめに、コンテンツを邪魔しない、流動的な動き |
| Depth | 視覚的階層で理解を促進 | レイヤー、リアルな動き、発見の喜び |
Primary → ユーザーの注目を集める要素(CTA、重要情報)
Secondary → 補助的情報(サブテキスト、メタデータ)
Tertiary → 背景・コンテナ要素
| フォント | 用途 |
|---|---|
| SF Pro | iOS/macOSのシステムフォント |
| SF Compact | watchOS、小さいスペース |
| SF Mono | コード、等幅テキスト |
| New York | セリフ体、読み物コンテンツ |
// Dynamic Type対応
Text("Title")
.font(.largeTitle) // 自動的にDynamic Type対応
// カスタムフォントでもDynamic Type
@ScaledMetric var fontSize: CGFloat = 17
Text("Body").font(.system(size: fontSize))
.primary, .secondary, .accent を使用// ✅ Semantic Color(推奨)
Text("Label").foregroundStyle(.primary)
Rectangle().fill(.background)
// ✅ Asset Catalogでダークモード対応
Color("BrandColor")
// 基本
Image(systemName: "heart.fill")
// 可変シンボル
Image(systemName: "speaker.wave.3.fill")
.symbolVariableValue(0.7)
// レンダリングモード
Image(systemName: "cloud.sun.fill")
.symbolRenderingMode(.multicolor)
詳細は references/visual-elements.md を参照。
| ジェスチャー | 標準的な用途 |
|---|---|
| Tap | 選択・アクティベート |
| Long Press | コンテキストメニュー |
| Swipe | ナビゲーション・アクション |
| Pinch | ズーム |
| Rotate | 回転 |
// Haptic Feedback
let generator = UIImpactFeedbackGenerator(style: .medium)
generator.impactOccurred()
// SwiftUIでのsensoryFeedback
Button("Tap") { }
.sensoryFeedback(.impact(weight: .medium), trigger: tapCount)
| 操作 | Duration |
|---|---|
| 軽い切り替え | 0.2-0.3秒 |
| 画面遷移 | 0.3-0.5秒 |
| 複雑なアニメーション | 0.5-0.8秒 |
// Spring Animation(推奨)
withAnimation(.spring(response: 0.3, dampingFraction: 0.7)) {
isExpanded.toggle()
}
// 明示的なタイミング
.animation(.easeInOut(duration: 0.25), value: selection)
詳細は references/swiftui-patterns.md を参照。
| Platform | 特徴 |
|---|---|
| iOS | タッチ中心、片手操作考慮、Safe Area |
| iPadOS | マルチタスク、ポインタ対応、サイズクラス |
| watchOS | グランス可能、Digital Crown、小画面 |
| visionOS | 空間UI、視線+ジェスチャー、奥行き |
詳細は references/platform-considerations.md を参照。
// Adaptive Layout
ViewThatFits {
HStack { content } // 横に収まれば
VStack { content } // 縦にフォールバック
}
// Size Class対応
@Environment(\.horizontalSizeClass) var sizeClass
var body: some View {
if sizeClass == .compact {
CompactLayout()
} else {
RegularLayout()
}
}
struct FeatureCard: View {
let feature: Feature
var body: some View {
VStack(alignment: .leading, spacing: 12) {
// Icon
Image(systemName: feature.icon)
.font(.title)
.foregroundStyle(.accent)
// Title
Text(feature.title)
.font(.headline)
// Description
Text(feature.description)
.font(.subheadline)
.foregroundStyle(.secondary)
}
.padding()
.background(.regularMaterial)
.clipShape(RoundedRectangle(cornerRadius: 16))
}
}
// VoiceOver
Button(action: save) {
Image(systemName: "square.and.arrow.down")
}
.accessibilityLabel("保存")
.accessibilityHint("現在の編集内容を保存します")
// Dynamic Type
Text("Body")
.dynamicTypeSize(...DynamicTypeSize.accessibility3)
// Color Contrast
// 4.5:1以上のコントラスト比を確保
詳細は references/accessibility-guide.md を参照。
drawingGroup()で最適化LazyVStack/LazyHGridを使用taskで非同期初期化AsyncImage(url: imageURL) { phase in
switch phase {
case .empty:
ProgressView()
case .success(let image):
image.resizable().aspectRatio(contentMode: .fit)
case .failure:
Image(systemName: "photo")
@unknown default:
EmptyView()
}
}
enum DesignTokens {
enum Spacing {
static let xs: CGFloat = 4
static let sm: CGFloat = 8
static let md: CGFloat = 16
static let lg: CGFloat = 24
static let xl: CGFloat = 32
}
enum CornerRadius {
static let small: CGFloat = 8
static let medium: CGFloat = 12
static let large: CGFloat = 16
static let extraLarge: CGFloat = 24
}
enum Shadow {
static let subtle = ShadowStyle(color: .black.opacity(0.1), radius: 4, y: 2)
static let medium = ShadowStyle(color: .black.opacity(0.15), radius: 8, y: 4)
}
}
npx claudepluginhub caphtech/claude-marketplace --plugin mobile-pluginGuides iOS app design and SwiftUI implementation following Human Interface Guidelines, with layouts, navigation patterns, accessibility, and adaptive UI for iPhone/iPad.
Generates SwiftUI and UIKit components for iOS apps following Apple's HIG. Validates designs, ensures accessibility compliance for iPhone, iPad, and Apple Watch.
Provides Apple Human Interface Guidelines design foundations for iOS/macOS apps, covering principles on content priority, accessibility, system colors, fonts, icons, motion, privacy, and internationalization.