{"id":"fb706e14-4569-4b5d-a909-f621fa80f754","shortId":"V6uK7H","kind":"skill","title":"swiftui-expert-skill","tagline":"Write, review, or improve SwiftUI code following best practices for state management, view composition, performance, and iOS 26+ Liquid Glass adoption. Use when building new SwiftUI features, refactoring existing views, reviewing code quality, or adopting modern SwiftUI patterns.","description":"# SwiftUI Expert Skill\n\n## When to Use\n- You are building, reviewing, or refactoring SwiftUI code and need current best practices.\n- The task involves state management, view composition, performance, accessibility, or iOS 26+ Liquid Glass adoption.\n- You need a fact-based SwiftUI guidance layer without locking into a specific application architecture.\n\n## Overview\nUse this skill to build, review, or improve SwiftUI features with correct state management, optimal view composition, and iOS 26+ Liquid Glass styling. Prioritize native APIs, Apple design guidance, and performance-conscious patterns. This skill focuses on facts and best practices without enforcing specific architectural patterns.\n\n## Workflow Decision Tree\n\n### 1) Review existing SwiftUI code\n- **First, consult `references/latest-apis.md`** to ensure only current, non-deprecated APIs are used\n- Check property wrapper usage against the selection guide (see `references/state-management.md`)\n- Verify view composition follows extraction rules (see `references/view-structure.md`)\n- Check performance patterns are applied (see `references/performance-patterns.md`)\n- Verify list patterns use stable identity (see `references/list-patterns.md`)\n- Check animation patterns for correctness (see `references/animation-basics.md`, `references/animation-transitions.md`)\n- Review accessibility: proper grouping, traits, Dynamic Type support (see `references/accessibility-patterns.md`)\n- Inspect Liquid Glass usage for correctness and consistency (see `references/liquid-glass.md`)\n- Validate iOS 26+ availability handling with sensible fallbacks\n\n### 2) Improve existing SwiftUI code\n- **First, consult `references/latest-apis.md`** to replace any deprecated APIs with their modern equivalents\n- Audit state management for correct wrapper selection (see `references/state-management.md`)\n- Extract complex views into separate subviews (see `references/view-structure.md`)\n- Refactor hot paths to minimize redundant state updates (see `references/performance-patterns.md`)\n- Ensure ForEach uses stable identity (see `references/list-patterns.md`)\n- Improve animation patterns (use value parameter, proper transitions, see `references/animation-basics.md`, `references/animation-transitions.md`)\n- Improve accessibility: use `Button` over tap gestures, add `@ScaledMetric` for Dynamic Type (see `references/accessibility-patterns.md`)\n- Suggest image downsampling when `UIImage(data:)` is used (as optional optimization, see `references/image-optimization.md`)\n- Adopt Liquid Glass only when explicitly requested by the user\n\n### 3) Implement new SwiftUI feature\n- **First, consult `references/latest-apis.md`** to use only current, non-deprecated APIs for the target deployment version\n- Design data flow first: identify owned vs injected state (see `references/state-management.md`)\n- Structure views for optimal diffing (extract subviews early, see `references/view-structure.md`)\n- Keep business logic in services and models for testability (see `references/layout-best-practices.md`)\n- Use correct animation patterns (implicit vs explicit, transitions, see `references/animation-basics.md`, `references/animation-transitions.md`, `references/animation-advanced.md`)\n- Use `Button` for tappable elements, add accessibility grouping and labels (see `references/accessibility-patterns.md`)\n- Apply glass effects after layout/appearance modifiers (see `references/liquid-glass.md`)\n- Gate iOS 26+ features with `#available` and provide fallbacks\n\n## Core Guidelines\n\n### State Management\n- `@State` must be `private`; use for internal view state\n- `@Binding` only when a child needs to **modify** parent state\n- `@StateObject` when view **creates** the object; `@ObservedObject` when **injected**\n- iOS 17+: Use `@State` with `@Observable` classes; use `@Bindable` for injected observables needing bindings\n- Use `let` for read-only values; `var` + `.onChange()` for reactive reads\n- Never pass values into `@State` or `@StateObject` — they only accept initial values\n- Nested `ObservableObject` doesn't propagate changes — pass nested objects directly; `@Observable` handles nesting fine\n\n### View Composition\n- Extract complex views into separate subviews for better readability and performance\n- Prefer modifiers over conditional views for state changes (maintains view identity)\n- Keep view `body` simple and pure (no side effects or complex logic)\n- Use `@ViewBuilder` functions only for small, simple sections\n- Prefer `@ViewBuilder let content: Content` over closure-based content properties\n- Keep business logic in services and models; views should orchestrate UI flow\n- Action handlers should reference methods, not contain inline logic\n- Views should work in any context (don't assume screen size or presentation style)\n\n### Performance\n- Pass only needed values to views (avoid large \"config\" or \"context\" objects)\n- Eliminate unnecessary dependencies to reduce update fan-out\n- Check for value changes before assigning state in hot paths\n- Avoid redundant state updates in `onReceive`, `onChange`, scroll handlers\n- Minimize work in frequently executed code paths\n- Use `LazyVStack`/`LazyHStack` for large lists\n- Use stable identity for `ForEach` (never `.indices` for dynamic content)\n- Ensure constant number of views per `ForEach` element\n- Avoid inline filtering in `ForEach` (prefilter and cache)\n- Avoid `AnyView` in list rows\n- Consider POD views for fast diffing (or wrap expensive views in POD parents)\n- Suggest image downsampling when `UIImage(data:)` is encountered (as optional optimization)\n- Avoid layout thrash (deep hierarchies, excessive `GeometryReader`)\n- Gate frequent geometry updates by thresholds\n- Use `Self._logChanges()` or `Self._printChanges()` to debug unexpected view updates\n\n### Animations\n- Use `.animation(_:value:)` with value parameter (deprecated version without value is too broad)\n- Use `withAnimation` for event-driven animations (button taps, gestures)\n- Prefer transforms (`offset`, `scale`, `rotation`) over layout changes (`frame`) for performance\n- Transitions require animations outside the conditional structure\n- Custom `Animatable` implementations must have explicit `animatableData`\n- Use `.phaseAnimator` for multi-step sequences (iOS 17+)\n- Use `.keyframeAnimator` for precise timing control (iOS 17+)\n- Animation completion handlers need `.transaction(value:)` for reexecution\n- Implicit animations override explicit animations (later in view tree wins)\n\n### Accessibility\n- Prefer `Button` over `onTapGesture` for tappable elements (free VoiceOver support)\n- Use `@ScaledMetric` for custom numeric values that should scale with Dynamic Type\n- Group related elements with `accessibilityElement(children: .combine)` for joined labels\n- Provide `accessibilityLabel` when default labels are unclear or missing\n- Use `accessibilityRepresentation` for custom controls that should behave like native ones\n\n### Liquid Glass (iOS 26+)\n**Only adopt when explicitly requested by the user.**\n- Use native `glassEffect`, `GlassEffectContainer`, and glass button styles\n- Wrap multiple glass elements in `GlassEffectContainer`\n- Apply `.glassEffect()` after layout and visual modifiers\n- Use `.interactive()` only for tappable/focusable elements\n- Use `glassEffectID` with `@Namespace` for morphing transitions\n\n## Quick Reference\n\n### Property Wrapper Selection\n| Wrapper | Use When |\n|---------|----------|\n| `@State` | Internal view state (must be `private`) |\n| `@Binding` | Child modifies parent's state |\n| `@StateObject` | View owns an `ObservableObject` |\n| `@ObservedObject` | View receives an `ObservableObject` |\n| `@Bindable` | iOS 17+: Injected `@Observable` needing bindings |\n| `let` | Read-only value from parent |\n| `var` | Read-only value watched via `.onChange()` |\n\n### Liquid Glass Patterns\n```swift\n// Basic glass effect with fallback\nif #available(iOS 26, *) {\n    content\n        .padding()\n        .glassEffect(.regular.interactive(), in: .rect(cornerRadius: 16))\n} else {\n    content\n        .padding()\n        .background(.ultraThinMaterial, in: RoundedRectangle(cornerRadius: 16))\n}\n\n// Grouped glass elements\nGlassEffectContainer(spacing: 24) {\n    HStack(spacing: 24) {\n        GlassButton1()\n        GlassButton2()\n    }\n}\n\n// Glass buttons\nButton(\"Confirm\") { }\n    .buttonStyle(.glassProminent)\n```\n\n## Review Checklist\n\n### Latest APIs (see `references/latest-apis.md`)\n- [ ] No deprecated modifiers used (check against the quick lookup table)\n- [ ] API choices match the project's minimum deployment target\n\n### State Management\n- [ ] `@State` properties are `private`\n- [ ] `@Binding` only where child modifies parent state\n- [ ] `@StateObject` for owned, `@ObservedObject` for injected\n- [ ] iOS 17+: `@State` with `@Observable`, `@Bindable` for injected\n- [ ] Passed values NOT declared as `@State` or `@StateObject`\n- [ ] Nested `ObservableObject` avoided (or passed directly to child views)\n\n### Sheets & Navigation (see `references/sheet-navigation-patterns.md`)\n- [ ] Using `.sheet(item:)` for model-based sheets\n- [ ] Sheets own their actions and dismiss internally\n\n### ScrollView (see `references/scroll-patterns.md`)\n- [ ] Using `ScrollViewReader` with stable IDs for programmatic scrolling\n\n### View Structure (see `references/view-structure.md`)\n- [ ] Using modifiers instead of conditionals for state changes\n- [ ] Complex views extracted to separate subviews\n- [ ] Container views use `@ViewBuilder let content: Content`\n\n### Performance (see `references/performance-patterns.md`)\n- [ ] View `body` kept simple and pure (no side effects)\n- [ ] Passing only needed values (not large config objects)\n- [ ] Eliminating unnecessary dependencies\n- [ ] State updates check for value changes before assigning\n- [ ] Hot paths minimize state updates\n- [ ] No object creation in `body`\n- [ ] Heavy computation moved out of `body`\n\n### List Patterns (see `references/list-patterns.md`)\n- [ ] ForEach uses stable identity (not `.indices`)\n- [ ] Constant number of views per ForEach element\n- [ ] No inline filtering in ForEach\n- [ ] No `AnyView` in list rows\n\n### Layout (see `references/layout-best-practices.md`)\n- [ ] Avoiding layout thrash (deep hierarchies, excessive GeometryReader)\n- [ ] Gating frequent geometry updates by thresholds\n- [ ] Business logic kept in services and models (not in views)\n- [ ] Action handlers reference methods (not inline logic)\n- [ ] Using relative layout (not hard-coded constants)\n- [ ] Views work in any context (context-agnostic)\n\n### Animations (see `references/animation-basics.md`, `references/animation-transitions.md`, `references/animation-advanced.md`)\n- [ ] Using `.animation(_:value:)` with value parameter\n- [ ] Using `withAnimation` for event-driven animations\n- [ ] Transitions paired with animations outside conditional structure\n- [ ] Custom `Animatable` has explicit `animatableData` implementation\n- [ ] Preferring transforms over layout changes for animation performance\n- [ ] Phase animations for multi-step sequences (iOS 17+)\n- [ ] Keyframe animations for precise timing (iOS 17+)\n- [ ] Completion handlers use `.transaction(value:)` for reexecution\n\n### Accessibility (see `references/accessibility-patterns.md`)\n- [ ] `Button` used instead of `onTapGesture` for tappable elements\n- [ ] `@ScaledMetric` used for custom values that should scale with Dynamic Type\n- [ ] Related elements grouped with `accessibilityElement(children:)`\n- [ ] Custom controls use `accessibilityRepresentation` when appropriate\n\n### Liquid Glass (iOS 26+)\n- [ ] `#available(iOS 26, *)` with fallback for Liquid Glass\n- [ ] Multiple glass views wrapped in `GlassEffectContainer`\n- [ ] `.glassEffect()` applied after layout/appearance modifiers\n- [ ] `.interactive()` only on user-interactable elements\n- [ ] Shapes and tints consistent across related elements\n\n## References\n- `references/latest-apis.md` - **Required reading for all workflows.** Version-segmented guide of deprecated-to-modern API transitions (iOS 15+ through iOS 26+)\n- `references/state-management.md` - Property wrappers and data flow\n- `references/view-structure.md` - View composition, extraction, and container patterns\n- `references/performance-patterns.md` - Performance optimization techniques and anti-patterns\n- `references/list-patterns.md` - ForEach identity, stability, and list best practices\n- `references/layout-best-practices.md` - Layout patterns, context-agnostic views, and testability\n- `references/accessibility-patterns.md` - Accessibility traits, grouping, Dynamic Type, and VoiceOver\n- `references/animation-basics.md` - Core animation concepts, implicit/explicit animations, timing, performance\n- `references/animation-transitions.md` - Transitions, custom transitions, Animatable protocol\n- `references/animation-advanced.md` - Transactions, phase/keyframe animations (iOS 17+), completion handlers (iOS 17+)\n- `references/sheet-navigation-patterns.md` - Sheet presentation and navigation patterns\n- `references/scroll-patterns.md` - ScrollView patterns and programmatic scrolling\n- `references/image-optimization.md` - AsyncImage, image downsampling, and optimization\n- `references/liquid-glass.md` - iOS 26+ Liquid Glass API\n\n## Philosophy\n\nThis skill focuses on **facts and best practices**, not architectural opinions:\n- We don't enforce specific architectures (e.g., MVVM, VIPER)\n- We do encourage separating business logic for testability\n- We optimize for performance and maintainability\n- We follow Apple's Human Interface Guidelines and API design patterns\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["swiftui","expert","skill","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-swiftui-expert-skill","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/swiftui-expert-skill","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34460 github stars · SKILL.md body (13,876 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T06:51:57.452Z","embedding":null,"createdAt":"2026-04-18T21:45:42.334Z","updatedAt":"2026-04-22T06:51:57.452Z","lastSeenAt":"2026-04-22T06:51:57.452Z","tsv":"'1':144 '15':1411 '16':985,994 '17':457,786,794,945,1057,1306,1313,1480,1484 '2':231 '24':1000,1003 '26':22,73,113,225,417,869,977,1358,1361,1414,1505 '3':330 'accept':491 'access':70,204,294,401,813,1321,1454 'accessibilityel':840,1347 'accessibilitylabel':847 'accessibilityrepresent':856,1352 'across':1389 'action':575,1096,1236 'add':300,400 'adopt':25,39,76,320,871 'agnost':1258,1449 'anim':196,283,385,729,731,749,766,795,804,807,1259,1265,1276,1280,1296,1299,1308,1463,1466,1478 'animat':772,1285,1473 'animatabledata':777,1288 'anti':1434 'anti-pattern':1433 'anyview':679,1206 'api':119,159,243,345,1015,1028,1408,1508,1552 'appl':120,1546 'appli':184,407,892,1374 'applic':91 'appropri':1354 'architectur':92,139,1519,1526 'ask':1588 'assign':625,1166 'assum':592 'asyncimag':1498 'audit':248 'avail':226,420,975,1359 'avoid':605,630,670,678,707,1074,1213 'background':989 'base':82,560,1091 'basic':969 'behav':862 'best':12,60,134,1442,1516 'better':517 'bind':437,469,927,949,1043 'bindabl':464,943,1061 'bodi':534,1140,1176,1182 'boundari':1596 'broad':742 'build':28,51,98 'busi':373,564,1226,1534 'button':296,396,750,815,884,1007,1008,1324 'buttonstyl':1010 'cach':677 'chang':499,528,623,760,1122,1164,1294 'check':162,180,195,620,1022,1161 'checklist':1013 'child':441,928,1046,1079 'children':841,1348 'choic':1029 'clarif':1590 'class':462 'clear':1563 'closur':559 'closure-bas':558 'code':10,36,56,148,235,644,1249 'combin':842 'complet':796,1314,1481 'complex':258,511,542,1123 'composit':18,68,110,174,509,1423 'comput':1178 'concept':1464 'condit':524,769,1119,1282 'config':607,1154 'confirm':1009 'conscious':126 'consid':683 'consist':220,1388 'constant':663,1193,1250 'consult':150,237,336 'contain':581,1129,1426 'content':555,556,561,661,978,987,1134,1135 'context':589,609,1255,1257,1448 'context-agnost':1256,1447 'control':792,859,1350 'core':424,1462 'cornerradius':984,993 'correct':105,199,218,252,384 'creat':450 'creation':1174 'criteria':1599 'current':59,155,341 'custom':771,827,858,1284,1335,1349,1471 'data':312,352,701,1419 'debug':725 'decis':142 'declar':1067 'deep':710,1216 'default':849 'depend':613,1158 'deploy':349,1035 'deprec':158,242,344,736,1019,1405 'deprecated-to-modern':1404 'describ':1567 'design':121,351,1553 'dif':366,688 'direct':503,1077 'dismiss':1098 'doesn':496 'downsampl':309,698,1500 'driven':748,1275 'dynam':208,303,660,834,1341,1457 'e.g':1527 'earli':369 'effect':409,540,971,1147 'element':399,669,820,838,889,904,997,1199,1331,1344,1384,1391 'elimin':611,1156 'els':986 'encount':703 'encourag':1532 'enforc':137,1524 'ensur':153,275,662 'environ':1579 'environment-specif':1578 'equival':247 'event':747,1274 'event-driven':746,1273 'excess':712,1218 'execut':643 'exist':33,146,233 'expens':691 'expert':3,44,1584 'explicit':325,389,776,806,873,1287 'extract':176,257,367,510,1125,1424 'fact':81,132,1514 'fact-bas':80 'fallback':230,423,973,1363 'fan':618 'fan-out':617 'fast':687 'featur':31,103,334,418 'filter':672,1202 'fine':507 'first':149,236,335,354 'flow':353,574,1420 'focus':130,1512 'follow':11,175,1545 'foreach':276,656,668,674,1187,1198,1204,1437 'frame':761 'free':821 'frequent':642,715,1221 'function':546 'gate':415,714,1220 'geometri':716,1222 'geometryread':713,1219 'gestur':299,752 'glass':24,75,115,215,322,408,867,883,888,966,970,996,1006,1356,1366,1368,1507 'glassbutton1':1004 'glassbutton2':1005 'glasseffect':880,893,980,1373 'glasseffectcontain':881,891,998,1372 'glasseffectid':906 'glasspromin':1011 'group':206,402,836,995,1345,1456 'guid':169,1402 'guidanc':84,122 'guidelin':425,1550 'handl':227,505 'handler':576,638,797,1237,1315,1482 'hard':1248 'hard-cod':1247 'heavi':1177 'hierarchi':711,1217 'hot':266,628,1167 'hstack':1001 'human':1548 'id':1107 'ident':192,279,531,654,1190,1438 'identifi':355 'imag':308,697,1499 'implement':331,773,1289 'implicit':387,803 'implicit/explicit':1465 'improv':8,101,232,282,293 'indic':658,1192 'initi':492 'inject':358,455,466,946,1055,1063 'inlin':582,671,1201,1241 'input':1593 'inspect':213 'instead':1117,1326 'interact':900,1378,1383 'interfac':1549 'intern':434,921,1099 'involv':64 'io':21,72,112,224,416,456,785,793,868,944,976,1056,1305,1312,1357,1360,1410,1413,1479,1483,1504 'item':1087 'join':844 'keep':372,532,563 'kept':1141,1228 'keyfram':1307 'keyframeanim':788 'label':404,845,850 'larg':606,650,1153 'later':808 'latest':1014 'layer':85 'layout':708,759,895,1210,1214,1245,1293,1445 'layout/appearance':411,1376 'lazyhstack':648 'lazyvstack':647 'let':471,554,950,1133 'like':863 'limit':1555 'liquid':23,74,114,214,321,866,965,1355,1365,1506 'list':188,651,681,1183,1208,1441 'lock':87 'logic':374,543,565,583,1227,1242,1535 'lookup':1026 'maintain':529,1543 'manag':16,66,107,250,427,1038 'match':1030,1564 'method':579,1239 'minim':269,639,1169 'minimum':1034 'miss':854,1601 'model':378,569,1090,1232 'model-bas':1089 'modern':40,246,1407 'modifi':412,444,522,898,929,1020,1047,1116,1377 'morph':910 'move':1179 'multi':782,1302 'multi-step':781,1301 'multipl':887,1367 'must':429,774,924 'mvvm':1528 'namespac':908 'nativ':118,864,879 'navig':1082,1489 'need':58,78,442,468,601,798,948,1150 'nest':494,501,506,1072 'never':482,657 'new':29,332 'non':157,343 'non-deprec':156,342 'number':664,1194 'numer':828 'object':452,502,610,1155,1173 'observ':461,467,504,947,1060 'observableobject':495,937,942,1073 'observedobject':453,938,1053 'offset':755 'onchang':478,636,964 'one':865 'onrec':635 'ontapgestur':817,1328 'opinion':1520 'optim':108,317,365,706,1430,1502,1539 'option':316,705 'orchestr':572 'output':1573 'outsid':767,1281 'overrid':805 'overview':93 'own':356,935,1052 'pad':979,988 'pair':1278 'paramet':287,735,1269 'parent':445,695,930,956,1048 'pass':483,500,599,1064,1076,1148 'path':267,629,645,1168 'pattern':42,127,140,182,189,197,284,386,967,1184,1427,1435,1446,1490,1493,1554 'per':667,1197 'perform':19,69,125,181,520,598,763,1136,1297,1429,1468,1541 'performance-consci':124 'permiss':1594 'phase':1298 'phase/keyframe':1477 'phaseanim':779 'philosophi':1509 'pod':684,694 'practic':13,61,135,1443,1517 'precis':790,1310 'prefer':521,552,753,814,1290 'prefilt':675 'present':596,1487 'priorit':117 'privat':431,926,1042 'programmat':1109,1495 'project':1032 'propag':498 'proper':205,288 'properti':163,562,914,1040,1416 'protocol':1474 'provid':422,846 'pure':537,1144 'qualiti':37 'quick':912,1025 'reactiv':480 'read':474,481,952,959,1395 'read-on':473,951,958 'readabl':518 'receiv':940 'rect':983 'reduc':615 'redund':270,631 'reexecut':802,1320 'refactor':32,54,265 'refer':578,913,1238,1392 'references/accessibility-patterns.md':212,306,406,1323,1453 'references/animation-advanced.md':394,1263,1475 'references/animation-basics.md':201,291,392,1261,1461 'references/animation-transitions.md':202,292,393,1262,1469 'references/image-optimization.md':319,1497 'references/latest-apis.md':151,238,337,1017,1393 'references/layout-best-practices.md':382,1212,1444 'references/liquid-glass.md':222,414,1503 'references/list-patterns.md':194,281,1186,1436 'references/performance-patterns.md':186,274,1138,1428 'references/scroll-patterns.md':1102,1491 'references/sheet-navigation-patterns.md':1084,1485 'references/state-management.md':171,256,361,1415 'references/view-structure.md':179,264,371,1114,1421 'regular.interactive':981 'relat':837,1244,1343,1390 'replac':240 'request':326,874 'requir':765,1394,1592 'review':6,35,52,99,145,203,1012,1585 'rotat':757 'roundedrectangl':992 'row':682,1209 'rule':177 'safeti':1595 'scale':756,832,1339 'scaledmetr':301,825,1332 'scope':1566 'screen':593 'scroll':637,1110,1496 'scrollview':1100,1492 'scrollviewread':1104 'section':551 'see':170,178,185,193,200,211,221,255,263,273,280,290,305,318,360,370,381,391,405,413,1016,1083,1101,1113,1137,1185,1211,1260,1322 'segment':1401 'select':168,254,916 'self._logchanges':721 'self._printchanges':723 'sensibl':229 'separ':261,514,1127,1533 'sequenc':784,1304 'servic':376,567,1230 'shape':1385 'sheet':1081,1086,1092,1093,1486 'side':539,1146 'simpl':535,550,1142 'size':594 'skill':4,45,96,129,1511,1558 'skill-swiftui-expert-skill' 'small':549 'source-sickn33' 'space':999,1002 'specif':90,138,1525,1580 'stabil':1439 'stabl':191,278,653,1106,1189 'state':15,65,106,249,271,359,426,428,436,446,459,486,527,626,632,920,923,932,1037,1039,1049,1058,1069,1121,1159,1170 'stateobject':447,488,933,1050,1071 'step':783,1303 'stop':1586 'structur':362,770,1112,1283 'style':116,597,885 'substitut':1576 'subview':262,368,515,1128 'success':1598 'suggest':307,696 'support':210,823 'swift':968 'swiftui':2,9,30,41,43,55,83,102,147,234,333 'swiftui-expert-skil':1 'tabl':1027 'tap':298,751 'tappabl':398,819,1330 'tappable/focusable':903 'target':348,1036 'task':63,1562 'techniqu':1431 'test':1582 'testabl':380,1452,1537 'thrash':709,1215 'threshold':719,1225 'time':791,1311,1467 'tint':1387 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'trait':207,1455 'transact':799,1317,1476 'transform':754,1291 'transit':289,390,764,911,1277,1409,1470,1472 'treat':1571 'tree':143,811 'type':209,304,835,1342,1458 'ui':573 'uiimag':311,700 'ultrathinmateri':990 'unclear':852 'unexpect':726 'unnecessari':612,1157 'updat':272,616,633,717,728,1160,1171,1223 'usag':165,216 'use':26,48,94,161,190,277,285,295,314,339,383,395,432,458,463,470,544,646,652,720,730,743,778,787,824,855,878,899,905,918,1021,1085,1103,1115,1131,1188,1243,1264,1270,1316,1325,1333,1351,1556 'user':329,877,1382 'user-interact':1381 'valid':223,1581 'valu':286,476,484,493,602,622,732,734,739,800,829,954,961,1065,1151,1163,1266,1268,1318,1336 'var':477,957 'verifi':172,187 'version':350,737,1400 'version-seg':1399 'via':963 'view':17,34,67,109,173,259,363,435,449,508,512,525,530,533,570,584,604,666,685,692,727,810,922,934,939,1080,1111,1124,1130,1139,1196,1235,1251,1369,1422,1450 'viewbuild':545,553,1132 'viper':1529 'visual':897 'voiceov':822,1460 'vs':357,388 'watch':962 'win':812 'withanim':744,1271 'without':86,136,738 'work':586,640,1252 'workflow':141,1398 'wrap':690,886,1370 'wrapper':164,253,915,917,1417 'write':5","prices":[{"id":"23194866-52ab-4b56-ab8e-a636334888dd","listingId":"fb706e14-4569-4b5d-a909-f621fa80f754","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:45:42.334Z"}],"sources":[{"listingId":"fb706e14-4569-4b5d-a909-f621fa80f754","source":"github","sourceId":"sickn33/antigravity-awesome-skills/swiftui-expert-skill","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/swiftui-expert-skill","isPrimary":false,"firstSeenAt":"2026-04-18T21:45:42.334Z","lastSeenAt":"2026-04-22T06:51:57.452Z"}],"details":{"listingId":"fb706e14-4569-4b5d-a909-f621fa80f754","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"swiftui-expert-skill","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34460,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-22T06:40:00Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"04bb4c13df25aed1072afd6d817f383032d3d374","skill_md_path":"skills/swiftui-expert-skill/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/swiftui-expert-skill"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"swiftui-expert-skill","description":"Write, review, or improve SwiftUI code following best practices for state management, view composition, performance, and iOS 26+ Liquid Glass adoption. Use when building new SwiftUI features, refactoring existing views, reviewing code quality, or adopting modern SwiftUI patterns."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/swiftui-expert-skill"},"updatedAt":"2026-04-22T06:51:57.452Z"}}