本文へ移動
cccskills
無料GitHub で公開

ios-application-dev

Build native iOS apps with SwiftUI, UIKit, SnapKit, Apple HIG, accessibility, and platform UI patterns.

インストール方法を見る

含まれるファイル(10)

  • SKILL.md10.2 KB
  • references/accessibility.md6.7 KB
  • references/graphics-animation.md8.9 KB
  • references/layout-system.md6.6 KB
  • references/metal-shader.md5.8 KB
  • references/navigation-patterns.md4.9 KB
  • references/swift-coding-standards.md14.8 KB
  • references/swiftui-design-guidelines.md32.1 KB
  • references/system-integration.md9.4 KB
  • references/uikit-components.md8.3 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

iOS Application Development Guide

A practical guide for building iOS applications using UIKit, SnapKit, and SwiftUI. Focuses on proven patterns and Apple platform conventions.

Routing Boundary

Use this skill for native iOS/iPadOS apps, Swift, SwiftUI, UIKit, SnapKit, Apple platform APIs, App Store UI expectations, and iOS accessibility. Use android-native-dev for native Android, flutter-dev for Flutter/Dart, react-native-dev for React Native/Expo, and frontend web skills for browser React/Next/Vue UI.

Quick Reference

Implementation Workflow

  1. Inspect the app boundary: identify SwiftUI vs UIKit ownership, deployment target, package manager, navigation root, design system, accessibility patterns, and nearest tests before editing.
  2. Choose SwiftUI or UIKit with the decision table below; keep mixed apps at their existing seam instead of moving screens across frameworks.
  3. Implement one screen/flow at a time: data model or view model first, navigation/presentation second, layout third, accessibility/privacy states fourth.
  4. Build and test: run the narrowest available Xcode scheme/test target; for UI-only changes, also inspect Dynamic Type, Dark Mode, VoiceOver labels, and reduced motion behavior.
  5. Report platform evidence: include scheme/device or simulator used, tests run, and any manual checks that could not be executed.

🔴 CHECKPOINT · 🛑 STOP before changing navigation roots, permission timing, authentication/sign-in behavior, App Store-facing privacy behavior, or converting a screen between SwiftUI and UIKit. These are product/API decisions, not local UI cleanup.

SwiftUI vs UIKit Decision Table

SituationUseAvoid
New simple screen in SwiftUI appView + @StateObject/@Observable pattern already presentIntroducing UIKit controller just for layout convenience
Existing UIKit featureUIViewController, UICollectionView, SnapKit, existing coordinatorRewriting to SwiftUI unless migration is requested
Complex collection/gridExisting UIKit compositional layout or SwiftUI Grid/List if app already uses itMixing two list systems in one screen
Deep navigation/state restorationExisting UINavigationController/coordinator or NavigationStack patternAd-hoc modal chains without back path
Custom drawing/animationCore Animation/UIKit when precision is needed; SwiftUI animation for simple state transitionsDecorative motion that ignores Reduce Motion

Failure Modes and Fallbacks

TriggerFirst responseIf still failing
Xcode build fails from signing/provisioningSeparate code errors from signing errors; verify compile diagnostics firstReport signing as environment-blocked; do not change bundle IDs or teams
SwiftUI preview failsRun the scheme/tests instead of treating preview failure as runtime truthMark preview-only issue separately if app builds
Auto Layout warnings appearIdentify the exact conflicting constraint and adjust local priorities/anchorsDo not silence by lowering many priorities; stop if layout ownership is unclear
Dynamic Type truncates contentReflow layout, allow multiline text, or adjust stack prioritiesReport if product copy/visual design must change
Permission prompt behavior is unclearInspect existing permission wrapper and Info.plist stringsStop before changing request timing or privacy copy
UI test is flakyRe-run once, check accessibility identifiers and async waitsReport flake evidence; do not add arbitrary sleeps

Do Not Do This

  • Do not use hamburger/drawer navigation in native iOS flows.
  • Do not override system back gestures or remove standard dismissal paths.
  • Do not request camera/location/notification permissions at launch unless explicitly required.
  • Do not use hard-coded colors/fonts that break Dark Mode or Dynamic Type.
  • Do not change signing, entitlements, bundle identifiers, or privacy prompts as a side effect of UI work.

UIKit

PurposeComponent
Main sectionsUITabBarController
Drill-downUINavigationController
Focused taskSheet presentation
Critical choiceUIAlertController
Secondary actionsUIContextMenuInteraction
List contentUICollectionView + DiffableDataSource
Sectioned listDiffableDataSource + headerMode
Grid layoutUICollectionViewCompositionalLayout
SearchUISearchController
ShareUIActivityViewController
Location (once)CLLocationButton
FeedbackUIImpactFeedbackGenerator
Linear layoutUIStackView
Custom shapesCAShapeLayer + UIBezierPath
GradientsCAGradientLayer
Modern buttonsUIButton.Configuration
Dynamic textUIFontMetrics + preferredFont
Dark modeSemantic colors (.systemBackground, .label)
PermissionsContextual request + AVCaptureDevice
LifecycleUIApplication notifications

SwiftUI

PurposeComponent
Main sectionsTabView + tabItem
Drill-downNavigationStack + NavigationPath
Focused task.sheet + presentationDetents
Critical choice.alert
Secondary actions.contextMenu
List contentList + .insetGrouped
Search.searchable
ShareShareLink
Location (once)LocationButton
FeedbackUIImpactFeedbackGenerator
Progress (known)ProgressView(value:total:)
Progress (unknown)ProgressView()
Dynamic text.font(.body) semantic styles
Dark mode.primary, .secondary, Color(.systemBackground)
Scene lifecycle@Environment(\.scenePhase)
Reduce motion@Environment(\.accessibilityReduceMotion)
Dynamic type@Environment(\.dynamicTypeSize)

Core Principles

Layout

  • Touch targets >= 44pt
  • Content within safe areas (SwiftUI respects by default, use .ignoresSafeArea() only for backgrounds)
  • Use 8pt spacing increments (8, 16, 24, 32, 40, 48)
  • Primary actions in thumb zone
  • Support all screen sizes (iPhone SE 375pt to Pro Max 430pt)

Typography

  • UIKit: preferredFont(forTextStyle:) + adjustsFontForContentSizeCategory = true
  • SwiftUI: semantic text styles .headline, .body, .caption
  • Custom fonts: UIFontMetrics / Font.custom(_:size:relativeTo:)
  • Adapt layout at accessibility sizes (minimum 11pt)

Colors

  • Use semantic system colors (.systemBackground, .label, .primary, .secondary)
  • Asset catalog variants for custom colors (Any/Dark Appearance)
  • No color-only information (pair with icons or text)
  • Contrast ratio >= 4.5:1 for normal text, 3:1 for large text

Accessibility

  • Labels on icon buttons (.accessibilityLabel())
  • Reduce motion respected (@Environment(\.accessibilityReduceMotion))
  • Logical reading order (.accessibilitySortPriority())
  • Support Bold Text, Increase Contrast preferences

Navigation

  • Tab bar (3-5 sections) stays visible during navigation
  • Back swipe works (never override system gestures)
  • State preserved across tabs (@SceneStorage, @State)
  • Never use hamburger menus

Privacy & Permissions

  • Request permissions in context (not at launch)
  • Custom explanation before system dialog
  • Support Sign in with Apple
  • Respect ATT denial

Checklist

Layout

  • Touch targets >= 44pt
  • Content within safe areas
  • Primary actions in thumb zone (bottom half)
  • Flexible widths for all screen sizes (SE to Pro Max)
  • Spacing aligns to 8pt grid

Typography

  • Semantic text styles or UIFontMetrics-scaled custom fonts
  • Dynamic Type supported up to accessibility sizes
  • Layouts reflow at large sizes (no truncation)
  • Minimum text size 11pt

Colors

  • Semantic system colors or light/dark asset variants
  • Dark Mode is intentional (not just inverted)
  • No color-only information
  • Text contrast >= 4.5:1 (normal) / 3:1 (large)
  • Single accent color for interactive elements

Accessibility

  • VoiceOver labels on all interactive elements
  • Logical reading order
  • Bold Text preference respected
  • Reduce Motion disables decorative animations
  • All gestures have alternative access paths

Navigation

  • Tab bar for 3-5 top-level sections
  • No hamburger/drawer menus
  • Tab bar stays visible during navigation
  • Back swipe works throughout
  • State preserved across tabs

Components

  • Alerts for critical decisions only
  • Sheets have dismiss path (button and/or swipe)
  • List rows >= 44pt tall
  • Destructive buttons use .destructive role

Privacy

  • Permissions requested in context (not at launch)
  • Custom explanation before system permission dialog
  • Sign in with Apple offered with other providers
  • Basic features usable without account
  • ATT prompt shown if tracking, denial respected

System Integration

  • App handles interruptions gracefully (calls, background, Siri)
  • App content indexed for Spotlight
  • Share Sheet available for shareable content

References

TopicReference
Touch Targets, Safe Area, CollectionViewLayout System
TabBar, NavigationController, ModalNavigation Patterns
StackView, Button, Alert, Search, ContextMenuUIKit Components
CAShapeLayer, CAGradientLayer, Core AnimationGraphics & Animation
Dynamic Type, Semantic Colors, VoiceOverAccessibility
Permissions, Location, Share, Lifecycle, HapticsSystem Integration
Metal Shaders & GPUMetal Shader Reference
SwiftUI HIG, Components, Patterns, Anti-PatternsSwiftUI Design Guidelines
Optionals, Protocols, async/await, ARC, Error HandlingSwift Coding Standards

Swift, SwiftUI, UIKit, SF Symbols, Metal, and Apple are trademarks of Apple Inc. SnapKit is a trademark of its respective owners.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Review a single academic paper, preprint, DOI, arXiv link, or user-provided PDF/text with source-grounded critique. Use for paper summaries, methodology review, novelty checks, reproducibility concerns, or "review this paper" requests; do not use for multi-paper surveys, systematic literature reviews, citation management, or implementation from a paper.

日本語の概要は準備中です。原文の説明を表示しています。

Rosetears520/aili-workflows22026年9月27日 更新

AI regression scouting routing. Use when agents, prompts, skills, model/tool routing, harness fixtures, or generated-output expectations change and need regression scenarios; do not use for ordinary product-code regressions.

日本語の概要は準備中です。原文の説明を表示しています。

Rosetears520/aili-workflows22026年9月27日 更新

Run the AILI delivery lifecycle from natural-language IDEATE, DEFINE, BUILD, and SHIP intent or the equivalent slash shortcuts; use for idea shaping, spec/test definition, bounded BUILD package queues, review-repair closeout, or adapter routing without exposing internal stage commands.

日本語の概要は準備中です。原文の説明を表示しています。

Rosetears520/aili-workflows22026年9月27日 更新

Android native Kotlin/Compose app development, Material 3 UI, accessibility, and Gradle builds.

日本語の概要は準備中です。原文の説明を表示しています。

Rosetears520/aili-workflows22026年9月27日 更新

Guides stable API and interface design. Use when designing APIs, module boundaries, or any public interface. Use when creating REST or GraphQL endpoints, defining type contracts between modules, or establishing boundaries between frontend and backend.

日本語の概要は準備中です。原文の説明を表示しています。

Rosetears520/aili-workflows22026年9月27日 更新

Route an explicitly requested independent/delegated browser QA assignment or durable E2E evidence need; do not trigger for direct Playwright/DOM/console/network inspection, ordinary UI implementation, backend-only work, or production-mutating flows.

日本語の概要は準備中です。原文の説明を表示しています。

Rosetears520/aili-workflows22026年9月27日 更新

Rosetears520 のスキルをすべて見る

このスキルの問題を報告する