Skip to main content

settings-screen

Generates a complete settings screen for iOS/macOS apps with common sections. Use when user wants to add settings, preferences, or configuration UI.

소스 정보

저장소
rshankras/claude-code-apple-skills
최근 소스 활동
2026년 7월 16일 12:36
감지된 SKILL.md 언어
영어
스타
770
포크
74

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
10 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
settings-screen
description
Generates a complete settings screen for iOS/macOS apps with common sections. Use when user wants to add settings, preferences, or configuration UI.
allowed-tools
["Read","Write","Edit","Glob","Grep","Bash","AskUserQuestion"]
last_verified
2026-07-16T00:00:00.000Z
review_by
2027-06-22T00:00:00.000Z
# Settings Screen Generator Generates a production-ready settings screen with modular sections for iOS and macOS apps. ## When This Skill Activates - User asks to "add settings" or "create settings screen" - User mentions "preferences", "app settings", or "configuration UI" - User wants to add dark mode toggle, notifications settings, or about screen ## Pre-Generation Checks (CRITICAL) ### 1. Project Context Detection Before generating, ALWAYS check: ``` # Find existing settings implementations rg -l "SettingsView|PreferencesView|SettingsScreen" --type swift # Check deployment target cat Package.swift | grep -i "platform" # Or check project.pbxproj for deployment target # Detect architecture pattern rg -l "Observable|ObservableObject|@EnvironmentObject" --type swift | head -5 # Check platform (iOS vs macOS) rg "UIKit|UIApplication" --type swift | head -1 # iOS rg "AppKit|NSApplication" --type swift | head -1 # macOS ``` ### 2. Conflict Detection If existing settings implementation found: - Ask user: Extend existing, replace, or create separate? - Check for naming conflicts with existing files ## Configuration Questions Ask user via AskUserQuestion: 1. **Which sections do you need?** - Account (sign out, delete account) - Appearance (dark mode, app icon) - Notifications (push settings) - About (version, developer info) - Legal (terms, privacy) 2. **Platform?** - iOS (NavigationStack) - macOS (Settings scene / NavigationSplitView) - Both (adaptive) 3. **Additional features?** - App icon selector - Language selector - Data export - Cache clearing ## Generation Process ### Step 1: Create Core Files Generate these files (customize based on answers): ``` Sources/Settings/ ├── SettingsView.swift # Main container ├── AppSettings.swift # @AppStorage wrapper ├── Components/ │ └── SettingsRow.swift # Reusable row component └── Sections/ ├── AppearanceSettingsView.swift ├── AccountSettingsView.swift ├── NotificationsSettingsView.swift ├── AboutSettingsView.swift └── LegalSettingsView.swift ``` ### Step 2: Read Templates Read templates from this skill: - `templates/SettingsView.swift` - `templates/AppSettings.swift` - `templates/SettingsRow.swift` - `templates/AppearanceSettingsView.swift` - `templates/AccountSettingsView.swift` - `templates/NotificationsSettingsView.swift` - `templates/AboutSettingsView.swift` - `templates/LegalSettingsView.swift` ### Step 3: Customize for Project Adapt templates to match: - Project naming conventions - Existing architecture patterns - Selected sections only - Platform-specific code ### Step 4: Integration **iOS Integration:** ```swift // In any view NavigationLink("Settings") { SettingsView() } // Or as sheet .sheet(isPresented: $showSettings) { NavigationStack { SettingsView() } } ``` **macOS Integration:** ```swift // In App.swift @main struct MyApp: App { var body: some Scene { WindowGroup { ContentView() } Settings { SettingsView() } } } ``` ## Platform-Specific Considerations ### iOS - Use `NavigationStack` with `List` - Use `Form` for grouped appearance - Link to Settings app for notifications: `UIApplication.openSettingsURLString` ### macOS - Use `Settings` scene for standard preferences window - Consider `TabView` for multiple sections - Use `Form` with appropriate styling - Support keyboard shortcut (⌘,) ### Cross-Platform - Use conditional compilation for platform-specific features - Abstract platform differences in AppSettings ## Generated Code Patterns ### AppStorage Wrapper ```swift @Observable final class AppSettings { static let shared = AppSettings() @AppStorage("appearance") var appearance: Appearance = .system @AppStorage("notificationsEnabled") var notificationsEnabled = true enum Appearance: String, CaseIterable { case system, light, dark } } ``` ### Settings Row Component ```swift struct SettingsRow<Content: View>: View { let icon: String let iconColor: Color let title: String let content: () -> Content var body: some View { HStack { Image(systemName: icon) .foregroundStyle(iconColor) .frame(width: 28) Text(title) Spacer() content() } } } ``` ## Verification Checklist After generation, verify: - [ ] Settings accessible from main UI - [ ] All selected sections present - [ ] AppStorage persists between launches - [ ] Dark mode toggle works correctly - [ ] Links to external URLs work (privacy, terms) - [ ] Platform-appropriate navigation - [ ] Accessibility labels present - [ ] VoiceOver navigation works ## Common Customizations ### Adding Custom Sections ```swift // In SettingsView Section("Custom") { NavigationLink("My Feature") { MyFeatureSettingsView() } } ``` ### Conditional Features ```swift #if DEBUG Section("Debug") { DebugSettingsView() } #endif ``` ### Subscription Integration ```swift if !subscriptionStatus.hasAccess { Section { Button("Upgrade to Pro") { showPaywall = true } } } ``` ## Related Skills - `paywall-generator` - For subscription upgrade prompts in settings - `auth-flow` - For account management integration - `review-prompt` - Trigger review from settings (sparingly) ## References - [Apple HIG: Settings](https://developer.apple.com/design/human-interface-guidelines/settings) - [SwiftUI Settings Scene](https://developer.apple.com/documentation/swiftui/settings) - [AppStorage Documentation](https://developer.apple.com/documentation/swiftui/appstorage)
GitHub에서 보기