add ui-ux-pro-max skill for javafx design

This commit is contained in:
2026-08-27 23:29:27 +08:00
parent c3172a04b1
commit c907e52478
172 changed files with 88283 additions and 0 deletions
@@ -0,0 +1,51 @@
No,Category,Guideline,Description,Do,Don't,Code Good,Code Bad,Severity,Docs URL,Applies To,Status,Verified At
1,Views,Use struct for views,SwiftUI views are value types,struct MyView: View,class MyView: View,struct ContentView: View { var body: some View },class ContentView: View,High,https://developer.apple.com/documentation/swiftui/view,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
2,Views,Keep views small and focused,Single responsibility for each view,Extract subviews for complex layouts,Large monolithic views,Extract HeaderView FooterView,500+ line View struct,Medium,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
3,Views,Use body computed property,body returns the view hierarchy,var body: some View { },func body() -> some View,"var body: some View { Text(""Hello"") }",func body() -> Text,High,https://developer.apple.com/documentation/swiftui/view/body-swift.property,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
4,Views,Prefer composition over inheritance,Compose views using ViewBuilder,Combine smaller views,Inheritance hierarchies,VStack { Header() Content() },class SpecialView extends BaseView,Medium,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
5,State,Use @State for local state,Simple value types owned by view,@State for view-local primitives,@State for shared data,@State private var count = 0,@State var sharedData: Model,High,https://developer.apple.com/documentation/swiftui/state,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
6,State,Use @Binding for two-way data,Pass mutable state to child views,@Binding for child input,@State in child for parent data,@Binding var isOn: Bool,$isOn to pass binding,Medium,https://developer.apple.com/documentation/swiftui/binding,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
7,State,Use @StateObject for reference types,ObservableObject owned by view,@StateObject for view-created objects,@ObservedObject for owned objects,@StateObject private var vm = ViewModel(),@ObservedObject var vm = ViewModel(),High,https://developer.apple.com/documentation/swiftui/stateobject,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
8,State,Use @ObservedObject for injected objects,Reference types passed from parent,@ObservedObject for injected dependencies,@StateObject for injected objects,@ObservedObject var vm: ViewModel,@StateObject var vm: ViewModel (injected),High,https://developer.apple.com/documentation/swiftui/observedobject,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
9,State,Use @EnvironmentObject for shared state,App-wide state injection,@EnvironmentObject for global state,Prop drilling through views,@EnvironmentObject var settings: Settings,Pass settings through 5 views,Medium,https://developer.apple.com/documentation/swiftui/environmentobject,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
10,State,Use @Published in ObservableObject,Automatically publish property changes,@Published for observed properties,Manual objectWillChange calls,@Published var items: [Item] = [],var items: [Item] { didSet { objectWillChange.send() } },Medium,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
11,Observable,Use @Observable macro (iOS 17+),Modern observation without Combine,@Observable class for view models,ObservableObject for new projects,@Observable class ViewModel { },class ViewModel: ObservableObject,Medium,https://developer.apple.com/documentation/observation,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
12,Observable,Use @Bindable for @Observable,Create bindings from @Observable,@Bindable var vm for bindings,@Binding with @Observable,@Bindable var viewModel,$viewModel.name with @Observable,Medium,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
13,Layout,Use VStack HStack ZStack,Standard stack-based layouts,Stacks for linear arrangements,GeometryReader for simple layouts,VStack { Text() Image() },GeometryReader for vertical list,Medium,https://developer.apple.com/documentation/swiftui/vstack,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
14,Layout,Use LazyVStack LazyHStack for lists,Lazy loading for performance,Lazy stacks for long lists,Regular stacks for 100+ items,LazyVStack { ForEach(items) },VStack { ForEach(largeArray) },High,https://developer.apple.com/documentation/swiftui/lazyvstack,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
15,Layout,Use GeometryReader sparingly,Only when needed for sizing,GeometryReader for responsive layouts,GeometryReader everywhere,GeometryReader for aspect ratio,GeometryReader wrapping everything,Medium,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
16,Layout,Use spacing and padding consistently,Consistent spacing throughout app,Design system spacing values,Magic numbers for spacing,.padding(16) or .padding(),".padding(13), .padding(17)",Low,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
17,Layout,Use frame modifiers correctly,Set explicit sizes when needed,.frame(maxWidth: .infinity),Fixed sizes for responsive content,.frame(maxWidth: .infinity),.frame(width: 375),Medium,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
18,Modifiers,Order modifiers correctly,Modifier order affects rendering,Background before padding for full coverage,Wrong modifier order,.padding().background(Color.red),.background(Color.red).padding(),High,https://developer.apple.com/documentation/swiftui/configuring-views,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
19,Modifiers,Create custom ViewModifiers,Reusable modifier combinations,ViewModifier for repeated styling,Duplicate modifier chains,struct CardStyle: ViewModifier,.shadow().cornerRadius() everywhere,Medium,https://developer.apple.com/documentation/swiftui/viewmodifier,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
20,Modifiers,Use conditional modifiers carefully,Avoid changing view identity,if-else with same view type,Conditional that changes view identity,Text(title).foregroundColor(isActive ? .blue : .gray),if isActive { Text().bold() } else { Text() },Medium,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
21,Navigation,Use NavigationStack or NavigationSplitView (iOS 16+),Current single-column and multicolumn navigation,NavigationStack for single-column; NavigationSplitView for two- or three-column apps,NavigationView for new projects,NavigationStack { } or NavigationSplitView { ... },NavigationView { } (deprecated),Medium,https://developer.apple.com/documentation/swiftui/migrating-to-new-navigation-types,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
22,Navigation,Use navigationDestination,Type-safe navigation destinations,.navigationDestination(for:),NavigationLink(destination:),.navigationDestination(for: Item.self),NavigationLink(destination: DetailView()),Medium,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
23,Navigation,Use @Environment for dismiss,Programmatic navigation dismissal,@Environment(\.dismiss) var dismiss,presentationMode (deprecated),@Environment(\.dismiss) var dismiss,@Environment(\.presentationMode),Low,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
24,Lists,Use List for scrollable content,Built-in scrolling and styling,List for standard scrollable content,ScrollView + VStack for simple lists,List { ForEach(items) { } },ScrollView { VStack { ForEach } },Low,https://developer.apple.com/documentation/swiftui/list,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
25,Lists,Provide stable identifiers,Use Identifiable or explicit id,Identifiable protocol or id parameter,Index as identifier,ForEach(items) where Item: Identifiable,"ForEach(items.indices, id: \.self)",High,https://developer.apple.com/documentation/swiftui/foreach,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
26,Lists,Use onDelete and onMove,Standard list editing,onDelete for swipe to delete,Custom delete implementation,.onDelete(perform: delete),.onTapGesture for delete,Low,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
27,Forms,Use Form for settings,Grouped input controls,Form for settings screens,Manual grouping for forms,Form { Section { Toggle() } },VStack { Toggle() },Low,https://developer.apple.com/documentation/swiftui/form,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
28,Forms,Use @FocusState for keyboard,Manage keyboard focus,@FocusState for text field focus,Manual first responder handling,@FocusState private var isFocused: Bool,UIKit first responder,Medium,https://developer.apple.com/documentation/swiftui/focusstate,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
29,Forms,Validate input properly,Show validation feedback,Real-time validation feedback,Submit without validation,TextField with validation state,TextField without error handling,Medium,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
30,Async,Use .task for async work,Automatic cancellation on view disappear,.task for view lifecycle async,onAppear with Task,.task { await loadData() },onAppear { Task { await loadData() } },Medium,https://developer.apple.com/documentation/swiftui/view/task(priority:_:),swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
31,Async,Handle loading states,Show progress during async operations,ProgressView during loading,Empty view during load,if isLoading { ProgressView() },No loading indicator,Medium,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
32,Async,Use @MainActor for UI updates,Ensure UI updates on main thread,@MainActor on view models,Manual DispatchQueue.main,@MainActor class ViewModel,DispatchQueue.main.async,Medium,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
33,Animation,Use withAnimation,Animate state changes,withAnimation for state transitions,No animation for state changes,withAnimation { isExpanded.toggle() },isExpanded.toggle(),Low,https://developer.apple.com/documentation/swiftui/withanimation(_:_:),swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
34,Animation,Use .animation modifier,Apply animations to views,.animation(.spring()) on view,Manual animation timing,.animation(.easeInOut),CABasicAnimation equivalent,Low,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
35,Animation,Respect reduced motion,Check accessibility settings,Check accessibilityReduceMotion,Ignore motion preferences,@Environment(\.accessibilityReduceMotion),Always animate regardless,High,https://developer.apple.com/documentation/swiftui/environmentvalues/accessibilityreducemotion,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
36,Preview,Use #Preview macro (Xcode 15+),Modern preview syntax,#Preview for view previews,PreviewProvider protocol,#Preview { ContentView() },struct ContentView_Previews: PreviewProvider,Low,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
37,Preview,Create multiple previews,Test different states and devices,Multiple previews for states,Single preview only,"#Preview(""Light"") { } #Preview(""Dark"") { }",Single preview configuration,Low,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
38,Preview,Use preview data,Dedicated preview mock data,Static preview data,Production data in previews,Item.preview for preview,Fetch real data in preview,Low,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
39,Performance,Avoid expensive body computations,Body should be fast to compute,Precompute in view model,Heavy computation in body,vm.computedValue in body,Complex calculation in body,High,https://developer.apple.com/documentation/xcode/understanding-and-improving-swiftui-performance,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
40,Performance,Use Equatable views,Skip unnecessary view updates,Equatable for complex views,Default equality for all views,struct MyView: View Equatable,No Equatable conformance,Medium,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
41,Performance,Profile with Instruments,Measure before optimizing,Use SwiftUI Instruments,Guess at performance issues,Profile with Instruments,Optimize without measuring,Medium,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
42,Accessibility,Add accessibility labels,Describe UI elements,.accessibilityLabel for context,Missing labels,".accessibilityLabel(""Close button"")",Button without label,High,https://developer.apple.com/documentation/swiftui/view/accessibilitylabel(_:)-1d7jv,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
43,Accessibility,Support Dynamic Type,Respect text size preferences,Scalable fonts and layouts,Fixed font sizes,.font(.body) with Dynamic Type,.font(.system(size: 16)),High,https://developer.apple.com/documentation/swiftui/scaledmetric,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
44,Accessibility,Use semantic views,Proper accessibility traits,Correct accessibilityTraits,Wrong semantic meaning,Button for actions Image for display,Image that acts like button,Medium,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
45,Testing,Use ViewInspector for testing,Third-party view testing,ViewInspector for unit tests,UI tests only,ViewInspector assertions,Only XCUITest,Medium,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
46,Testing,Test view models,Unit test business logic,XCTest for view model,Skip view model testing,Test ViewModel methods,No unit tests,Medium,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
47,Testing,Use preview as visual test,Previews catch visual regressions,Multiple preview configurations,No visual verification,Preview different states,Single preview only,Low,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
48,Architecture,Use MVVM pattern,Separate view and logic,ViewModel for business logic,Logic in View,ObservableObject ViewModel,@State for complex logic,Medium,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
49,Architecture,Keep views dumb,Views display view model state,View reads from ViewModel,Business logic in View,view.items from vm.items,Complex filtering in View,Medium,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
50,Architecture,Use dependency injection,Inject dependencies for testing,Initialize with dependencies,Hard-coded dependencies,init(service: ServiceProtocol),let service = RealService(),Medium,,swiftui current; iOS 16+ baseline; Observation APIs iOS 17+,active,2026-08-13
1 No Category Guideline Description Do Don't Code Good Code Bad Severity Docs URL Applies To Status Verified At
2 1 Views Use struct for views SwiftUI views are value types struct MyView: View class MyView: View struct ContentView: View { var body: some View } class ContentView: View High https://developer.apple.com/documentation/swiftui/view swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
3 2 Views Keep views small and focused Single responsibility for each view Extract subviews for complex layouts Large monolithic views Extract HeaderView FooterView 500+ line View struct Medium swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
4 3 Views Use body computed property body returns the view hierarchy var body: some View { } func body() -> some View var body: some View { Text("Hello") } func body() -> Text High https://developer.apple.com/documentation/swiftui/view/body-swift.property swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
5 4 Views Prefer composition over inheritance Compose views using ViewBuilder Combine smaller views Inheritance hierarchies VStack { Header() Content() } class SpecialView extends BaseView Medium swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
6 5 State Use @State for local state Simple value types owned by view @State for view-local primitives @State for shared data @State private var count = 0 @State var sharedData: Model High https://developer.apple.com/documentation/swiftui/state swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
7 6 State Use @Binding for two-way data Pass mutable state to child views @Binding for child input @State in child for parent data @Binding var isOn: Bool $isOn to pass binding Medium https://developer.apple.com/documentation/swiftui/binding swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
8 7 State Use @StateObject for reference types ObservableObject owned by view @StateObject for view-created objects @ObservedObject for owned objects @StateObject private var vm = ViewModel() @ObservedObject var vm = ViewModel() High https://developer.apple.com/documentation/swiftui/stateobject swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
9 8 State Use @ObservedObject for injected objects Reference types passed from parent @ObservedObject for injected dependencies @StateObject for injected objects @ObservedObject var vm: ViewModel @StateObject var vm: ViewModel (injected) High https://developer.apple.com/documentation/swiftui/observedobject swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
10 9 State Use @EnvironmentObject for shared state App-wide state injection @EnvironmentObject for global state Prop drilling through views @EnvironmentObject var settings: Settings Pass settings through 5 views Medium https://developer.apple.com/documentation/swiftui/environmentobject swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
11 10 State Use @Published in ObservableObject Automatically publish property changes @Published for observed properties Manual objectWillChange calls @Published var items: [Item] = [] var items: [Item] { didSet { objectWillChange.send() } } Medium swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
12 11 Observable Use @Observable macro (iOS 17+) Modern observation without Combine @Observable class for view models ObservableObject for new projects @Observable class ViewModel { } class ViewModel: ObservableObject Medium https://developer.apple.com/documentation/observation swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
13 12 Observable Use @Bindable for @Observable Create bindings from @Observable @Bindable var vm for bindings @Binding with @Observable @Bindable var viewModel $viewModel.name with @Observable Medium swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
14 13 Layout Use VStack HStack ZStack Standard stack-based layouts Stacks for linear arrangements GeometryReader for simple layouts VStack { Text() Image() } GeometryReader for vertical list Medium https://developer.apple.com/documentation/swiftui/vstack swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
15 14 Layout Use LazyVStack LazyHStack for lists Lazy loading for performance Lazy stacks for long lists Regular stacks for 100+ items LazyVStack { ForEach(items) } VStack { ForEach(largeArray) } High https://developer.apple.com/documentation/swiftui/lazyvstack swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
16 15 Layout Use GeometryReader sparingly Only when needed for sizing GeometryReader for responsive layouts GeometryReader everywhere GeometryReader for aspect ratio GeometryReader wrapping everything Medium swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
17 16 Layout Use spacing and padding consistently Consistent spacing throughout app Design system spacing values Magic numbers for spacing .padding(16) or .padding() .padding(13), .padding(17) Low swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
18 17 Layout Use frame modifiers correctly Set explicit sizes when needed .frame(maxWidth: .infinity) Fixed sizes for responsive content .frame(maxWidth: .infinity) .frame(width: 375) Medium swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
19 18 Modifiers Order modifiers correctly Modifier order affects rendering Background before padding for full coverage Wrong modifier order .padding().background(Color.red) .background(Color.red).padding() High https://developer.apple.com/documentation/swiftui/configuring-views swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
20 19 Modifiers Create custom ViewModifiers Reusable modifier combinations ViewModifier for repeated styling Duplicate modifier chains struct CardStyle: ViewModifier .shadow().cornerRadius() everywhere Medium https://developer.apple.com/documentation/swiftui/viewmodifier swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
21 20 Modifiers Use conditional modifiers carefully Avoid changing view identity if-else with same view type Conditional that changes view identity Text(title).foregroundColor(isActive ? .blue : .gray) if isActive { Text().bold() } else { Text() } Medium swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
22 21 Navigation Use NavigationStack or NavigationSplitView (iOS 16+) Current single-column and multicolumn navigation NavigationStack for single-column; NavigationSplitView for two- or three-column apps NavigationView for new projects NavigationStack { } or NavigationSplitView { ... } NavigationView { } (deprecated) Medium https://developer.apple.com/documentation/swiftui/migrating-to-new-navigation-types swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
23 22 Navigation Use navigationDestination Type-safe navigation destinations .navigationDestination(for:) NavigationLink(destination:) .navigationDestination(for: Item.self) NavigationLink(destination: DetailView()) Medium swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
24 23 Navigation Use @Environment for dismiss Programmatic navigation dismissal @Environment(\.dismiss) var dismiss presentationMode (deprecated) @Environment(\.dismiss) var dismiss @Environment(\.presentationMode) Low swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
25 24 Lists Use List for scrollable content Built-in scrolling and styling List for standard scrollable content ScrollView + VStack for simple lists List { ForEach(items) { } } ScrollView { VStack { ForEach } } Low https://developer.apple.com/documentation/swiftui/list swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
26 25 Lists Provide stable identifiers Use Identifiable or explicit id Identifiable protocol or id parameter Index as identifier ForEach(items) where Item: Identifiable ForEach(items.indices, id: \.self) High https://developer.apple.com/documentation/swiftui/foreach swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
27 26 Lists Use onDelete and onMove Standard list editing onDelete for swipe to delete Custom delete implementation .onDelete(perform: delete) .onTapGesture for delete Low swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
28 27 Forms Use Form for settings Grouped input controls Form for settings screens Manual grouping for forms Form { Section { Toggle() } } VStack { Toggle() } Low https://developer.apple.com/documentation/swiftui/form swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
29 28 Forms Use @FocusState for keyboard Manage keyboard focus @FocusState for text field focus Manual first responder handling @FocusState private var isFocused: Bool UIKit first responder Medium https://developer.apple.com/documentation/swiftui/focusstate swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
30 29 Forms Validate input properly Show validation feedback Real-time validation feedback Submit without validation TextField with validation state TextField without error handling Medium swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
31 30 Async Use .task for async work Automatic cancellation on view disappear .task for view lifecycle async onAppear with Task .task { await loadData() } onAppear { Task { await loadData() } } Medium https://developer.apple.com/documentation/swiftui/view/task(priority:_:) swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
32 31 Async Handle loading states Show progress during async operations ProgressView during loading Empty view during load if isLoading { ProgressView() } No loading indicator Medium swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
33 32 Async Use @MainActor for UI updates Ensure UI updates on main thread @MainActor on view models Manual DispatchQueue.main @MainActor class ViewModel DispatchQueue.main.async Medium swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
34 33 Animation Use withAnimation Animate state changes withAnimation for state transitions No animation for state changes withAnimation { isExpanded.toggle() } isExpanded.toggle() Low https://developer.apple.com/documentation/swiftui/withanimation(_:_:) swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
35 34 Animation Use .animation modifier Apply animations to views .animation(.spring()) on view Manual animation timing .animation(.easeInOut) CABasicAnimation equivalent Low swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
36 35 Animation Respect reduced motion Check accessibility settings Check accessibilityReduceMotion Ignore motion preferences @Environment(\.accessibilityReduceMotion) Always animate regardless High https://developer.apple.com/documentation/swiftui/environmentvalues/accessibilityreducemotion swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
37 36 Preview Use #Preview macro (Xcode 15+) Modern preview syntax #Preview for view previews PreviewProvider protocol #Preview { ContentView() } struct ContentView_Previews: PreviewProvider Low swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
38 37 Preview Create multiple previews Test different states and devices Multiple previews for states Single preview only #Preview("Light") { } #Preview("Dark") { } Single preview configuration Low swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
39 38 Preview Use preview data Dedicated preview mock data Static preview data Production data in previews Item.preview for preview Fetch real data in preview Low swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
40 39 Performance Avoid expensive body computations Body should be fast to compute Precompute in view model Heavy computation in body vm.computedValue in body Complex calculation in body High https://developer.apple.com/documentation/xcode/understanding-and-improving-swiftui-performance swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
41 40 Performance Use Equatable views Skip unnecessary view updates Equatable for complex views Default equality for all views struct MyView: View Equatable No Equatable conformance Medium swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
42 41 Performance Profile with Instruments Measure before optimizing Use SwiftUI Instruments Guess at performance issues Profile with Instruments Optimize without measuring Medium swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
43 42 Accessibility Add accessibility labels Describe UI elements .accessibilityLabel for context Missing labels .accessibilityLabel("Close button") Button without label High https://developer.apple.com/documentation/swiftui/view/accessibilitylabel(_:)-1d7jv swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
44 43 Accessibility Support Dynamic Type Respect text size preferences Scalable fonts and layouts Fixed font sizes .font(.body) with Dynamic Type .font(.system(size: 16)) High https://developer.apple.com/documentation/swiftui/scaledmetric swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
45 44 Accessibility Use semantic views Proper accessibility traits Correct accessibilityTraits Wrong semantic meaning Button for actions Image for display Image that acts like button Medium swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
46 45 Testing Use ViewInspector for testing Third-party view testing ViewInspector for unit tests UI tests only ViewInspector assertions Only XCUITest Medium swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
47 46 Testing Test view models Unit test business logic XCTest for view model Skip view model testing Test ViewModel methods No unit tests Medium swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
48 47 Testing Use preview as visual test Previews catch visual regressions Multiple preview configurations No visual verification Preview different states Single preview only Low swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
49 48 Architecture Use MVVM pattern Separate view and logic ViewModel for business logic Logic in View ObservableObject ViewModel @State for complex logic Medium swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
50 49 Architecture Keep views dumb Views display view model state View reads from ViewModel Business logic in View view.items from vm.items Complex filtering in View Medium swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13
51 50 Architecture Use dependency injection Inject dependencies for testing Initialize with dependencies Hard-coded dependencies init(service: ServiceProtocol) let service = RealService() Medium swiftui current; iOS 16+ baseline; Observation APIs iOS 17+ active 2026-08-13