{"id":"7c269e91-a1af-4a05-8c9f-23cb1441ed3f","shortId":"eXJYe4","kind":"skill","title":"structure-swift-sources","tagline":"Organize Swift source trees and oversized Swift files by feature, layer, and declaration group; split large files, normalize `// MARK:` sections, enforce plain-language block-comment file headers, and move TODO and FIXME text into ledger files. Use after `format-swift-sources` ha","description":"# Structure Swift Sources\n\n## Purpose\n\nUse this skill as the top-level workflow for structural cleanup inside existing Swift repositories. It governs file splitting, file moves, section grouping, plain-language file headers, and TODO or FIXME ledger extraction. `scripts/run_workflow.py` is the runtime wrapper for repo-shape detection, cleanup-kind classification, header-policy loading, split-threshold loading, and clean handoffs to DocC or Xcode execution workflows. It is not the formatter or linter integration authority, and it is not the DocC authoring authority. Use `format-swift-sources` before this skill starts mutating source layout, use `author-swift-docc-docs` when the request becomes symbol-doc or DocC-content work, and run `format-swift-sources` again after this skill finishes.\n\n## When To Use\n\n- Use this skill when the user wants to split oversized Swift files or move files into a clearer repo layout.\n- Use this skill when the user wants high-signal `// MARK:` sections, declaration grouping, or view-modifier extraction in SwiftUI code.\n- Use this skill when the user wants consistent block-comment file headers that describe a file's purpose and area of concern in plain terms.\n- Use this skill when the user wants structured project-and-file banner headers with deterministic project, filename, copyright, and optional cross-reference fields.\n- Use this skill when the user wants TODO or FIXME text moved out of source files into repo ledger files.\n- Use this skill when a Swift package or Xcode app repo has drifted away from the intended feature-plus-layer directory shape.\n- Recommend `format-swift-sources` first when formatter or linter setup is missing, unclear, or stale.\n- Recommend `author-swift-docc-docs` when the task becomes symbol documentation, DocC article work, landing-page structure, topic groups, or DocC-oriented review.\n- Recommend `swift-package-build-run-workflow` or `swift-package-testing-workflow` when structural cleanup in a plain package repo turns into ordinary package execution or SwiftPM validation.\n- Recommend `xcode-build-run-workflow` when structural cleanup turns into active Xcode execution, scheme validation, file-membership follow-through, or guarded project mutation work.\n- Recommend `xcode-testing-workflow` when structural cleanup turns into active Xcode test validation or test-target diagnosis.\n- Recommend `sync-xcode-project-guidance` or `sync-swift-package-guidance` when the real need is repo-level `AGENTS.md` alignment rather than source-structure cleanup.\n\n## Single-Path Workflow\n\n1. Classify the request:\n   - repo layout cleanup\n   - large-file split\n   - section and MARK normalization\n   - file-header normalization\n   - TODO or FIXME ledger extraction\n   - combined source-hygiene pass\n2. Run or confirm `format-swift-sources` first:\n   - use it to establish a clean baseline before file moves or file splits\n   - if the repo does not have a clear formatter or linter path yet, stop and set that up first\n3. Resolve the repo shape:\n   - `swift-package`\n   - `xcode-app-project`\n   - `mixed`\n4. Read the relevant references:\n   - `references/glossary.md`\n   - `references/layout-rules.md`\n   - `references/source-organization-rules.md`\n   - `references/file-headers.md`\n   - `references/todo-fixme-ledgers.md`\n   - `references/automation-prompts.md`\n   - `references/customization-flow.md`\n5. Apply the structure rules:\n   - strongly consider splitting a file once it exceeds the configured soft split threshold and clearly holds `2` or more separate concerns\n   - always split a file once it exceeds the configured hard split threshold\n   - when the underlying type is still one coherent type, extract grouped concerns into extension files such as `<Original>+Models.swift` or `<Original>+<Concern>.swift`\n   - add `// MARK:` groups only when a file is large enough or varied enough that the grouping materially improves navigation, concern ownership, or declaration discovery\n   - skip `// MARK:` groups entirely when a short file or an already-obvious declaration run does not present meaningful navigation ambiguity\n   - when groups are warranted, use explicit `// MARK: - <Heading>` sections that name a real responsibility boundary instead of restating declaration kinds or symbol names in slightly different words\n   - add a secondary `// MARK: <Comment>` line only when it answers a useful navigation question such as why this section exists, what job it serves, or how it differs from nearby sections\n   - never use headings or secondary comments that just restate an obvious type, symbol, or method name, narrate intuitive code in a small file, or pad the file with redundant structure\n   - require or recommend the documented project-and-file banner header according to the effective header policy\n   - keep `Concern` and `Purpose` text in plain terms that explain what the file owns and what job it does, instead of repeating the filename or symbol names as jargon\n   - treat `Key Types` and `See Also` as optional high-signal fields rather than mandatory filler\n   - move TODO and FIXME text into `TODO.md` and `FIXME.md`, keeping only ticket IDs in source comments\n   - when the task is TODO or FIXME normalization, use `scripts/normalize_todo_fixme_ledgers.py` for the deterministic ledger rewrite pass across supported Swift and Objective-C source forms\n   - when the task is file-header normalization or a full cleanup pass that includes headers, use `scripts/normalize_swift_file_headers.py` to audit or apply the documented header shape\n6. Apply repo-shape rules:\n   - for Swift packages, prefer directories grouped by layer and feature, such as `API/<Feature>/<Concern>.swift` and `Features/<Feature>/<Concern>.swift`\n   - for Xcode app projects, ensure important app-facing source directories such as `Views/`, `Controllers/`, and `Models/`\n   - for SwiftUI views, keep view files in `Views/` and pair them with `<Name>+Model.swift` and `<Name>+Modifier.swift` files when those concerns exist\n7. Finish with `format-swift-sources` again so the moved or split files end in a normalized state.\n\n## Inputs\n\n- `cleanup_kind`: one of the request classes above\n- `repository_kind`: `swift-package`, `xcode-app-project`, or `mixed`\n- `target_scope`: optional narrowed scope such as one file, one feature directory, or the whole repo\n- `split_mode`: optional; use values such as `advisory`, `required`, or `full-pass`\n- `todo_fixme_mode`: optional; use values such as `report-only`, `rewrite-ledgers`, or `normalize-existing`\n- `file_header_mode`: optional; use values such as `advisory` or `required`\n- `file_header_style`: optional; currently `project-banner`\n- Defaults:\n  - run `format-swift-sources` before and after structural mutation\n  - prefer feature-plus-layer layout over flat buckets when the repo has meaningful feature boundaries\n  - prefer extracted extensions before inventing new wrapper types\n  - prefer `TODO.md` and `FIXME.md` as separate ledger files\n  - prefer the project-and-file banner header described in `references/file-headers.md`\n\n## Outputs\n\n- `status`\n  - `success`: a supported structure path was selected and explained\n  - `handoff`: another skill should take the next step\n  - `blocked`: the request lacks a safe structural path or the repo shape is too unclear\n- `path_type`\n  - `primary`: the documented structure path completed\n  - `fallback`: a narrower safe pass was chosen\n- `output`\n  - `cleanup_kind`\n  - `repository_kind`\n  - `recommended_path`\n  - `layout_targets`\n  - `split_targets`\n  - `ledger_files`\n  - `header_policy`\n  - `helper_scripts`\n  - `caveats`\n  - `verification`\n\n## Guards and Stop Conditions\n\n- Do not split files purely by line count when the code still represents one small, coherent concern and the real problem is formatting or comments.\n- Do not invent new abstraction layers just to make a file shorter.\n- Do not move files across Xcode-managed boundaries without accounting for project membership and validation.\n- Do not treat file-header automation as permission to invent vague or generic purpose text. Header content must come from the actual code understanding or an explicit inventory.\n- Do not make end users reverse-engineer the file-header inventory shape from prose or tests. Point them at `references/file-header-inventory.template.yaml` when `--apply --inventory` is the right path.\n- Do not rewrite TODO or FIXME comments into ledger IDs unless the ledger files are updated in the same pass.\n- Do not absorb symbol-doc or DocC-content work; hand that off to `author-swift-docc-docs`.\n- Stop with `blocked` when the repo shape is too ambiguous to choose feature-first versus layer-first layout safely.\n- Stop with `handoff` when project-file mutation or Xcode membership updates need guarded execution through `xcode-build-run-workflow`.\n\n## Fallbacks and Handoffs\n\n- If the repo lacks a clear formatter or linter baseline, hand off to `format-swift-sources` before any structural mutation.\n- If a broad repo-wide cleanup is too risky, fall back to one feature directory or one oversized file at a time.\n- If the request becomes symbol-doc or DocC-content work, hand off to `author-swift-docc-docs`.\n- If Xcode project integrity must be revalidated after file moves, hand off to `xcode-build-run-workflow`.\n- `scripts/run_workflow.py` is the top-level runtime entrypoint and converts repo inspection plus request inference into the documented JSON contract.\n- Recommend `sync-xcode-project-guidance` or `sync-swift-package-guidance` when the request is really about durable repo rules rather than current-file cleanup.\n\n## Customization\n\n- Use `references/customization-flow.md`.\n- `scripts/customization_config.py` stores and reports customization state.\n- `scripts/run_workflow.py` loads the runtime-enforced header policy and split thresholds before shaping the final workflow contract.\n\n## References\n\n### Workflow References\n\n- `references/glossary.md`\n- `references/layout-rules.md`\n- `references/source-organization-rules.md`\n- `references/file-headers.md`\n- `references/todo-fixme-ledgers.md`\n\n### Contract References\n\n- `references/automation-prompts.md`\n- `references/customization-flow.md`\n\n### Support References\n\n- Recommend `format-swift-sources` first for formatter or linter setup and again after structural edits complete.\n- Recommend `references/layout-rules.md` when the user needs the package-versus-app directory contract explained.\n\n### Script Inventory\n\n- `scripts/customization_config.py`\n- `scripts/run_workflow.py`\n- `scripts/normalize_todo_fixme_ledgers.py`\n- `scripts/normalize_swift_file_headers.py`\n- `references/file-header-inventory.template.yaml`","tags":["structure","swift","sources","apple","dev","skills","gaelic-ghost","agent-skills","apple-development","apple-docs","apple-docs-mcp","codex"],"capabilities":["skill","source-gaelic-ghost","skill-structure-swift-sources","topic-agent-skills","topic-apple-development","topic-apple-docs","topic-apple-docs-mcp","topic-codex","topic-codex-app","topic-codex-cli","topic-codex-skills","topic-dash-docsets","topic-ios","topic-macos","topic-swift"],"categories":["apple-dev-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/gaelic-ghost/apple-dev-skills/structure-swift-sources","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add gaelic-ghost/apple-dev-skills","source_repo":"https://github.com/gaelic-ghost/apple-dev-skills","install_from":"skills.sh"}},"qualityScore":"0.453","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 7 github stars · SKILL.md body (10,663 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-05-18T19:13:58.687Z","embedding":null,"createdAt":"2026-05-18T13:21:10.980Z","updatedAt":"2026-05-18T19:13:58.687Z","lastSeenAt":"2026-05-18T19:13:58.687Z","tsv":"'1':466 '2':495,582 '3':536 '4':549 '5':561 '6':879 '7':939 'absorb':1303 'abstract':1199 'accord':761 'account':1217 'across':844,1211 'activ':399,425 'actual':1245 'add':619,690 'advisori':1001,1033 'agents.md':454 'align':455 'alreadi':654 'already-obvi':653 'also':801 'alway':587 'ambigu':663,1330 'anoth':1110 'answer':698 'api':897 'app':303,546,904,909,974,1562 'app-fac':908 'appli':562,874,880,1275 'area':243 'articl':346 'audit':872 'author':128,135,136,151,335,1317,1426 'author-swift-docc-doc':150,334,1316,1425 'autom':1229 'away':307 'back':1398 'banner':261,759,1043,1093 'baselin':510,1375 'becom':158,342,1413 'block':30,232,1117,1323 'block-com':29,231 'boundari':677,1070,1215 'broad':1389 'bucket':1063 'build':363,391,1360,1445 'c':850 'caveat':1164 'choos':1332 'chosen':1146 'class':965 'classif':102 'classifi':467 'clean':112,509 'cleanup':65,100,374,396,422,461,472,864,959,1148,1393,1494 'cleanup-kind':99 'clear':524,580,1371 'clearer':198 'code':222,738,1180,1246 'coher':606,1185 'combin':490 'come':1242 'comment':31,233,725,827,1194,1287 'complet':1139,1551 'concern':245,586,610,638,768,937,1186 'condit':1169 'configur':575,595 'confirm':498 'consid':567 'consist':230 'content':165,1240,1310,1420 'contract':1467,1520,1529,1564 'control':916 'convert':1457 'copyright':267 'count':1177 'cross':271 'cross-refer':270 'current':1040,1492 'current-fil':1491 'custom':1495,1502 'declar':17,213,641,656,681 'default':1044 'describ':237,1095 'detect':98 'determinist':264,840 'diagnosi':433 'differ':688,716 'directori':315,889,912,989,1402,1563 'discoveri':642 'doc':154,161,338,1306,1320,1416,1429 'docc':115,134,153,164,337,345,356,1309,1319,1419,1428 'docc-cont':163,1308,1418 'docc-ori':355 'document':344,754,876,1136,1465 'drift':306 'durabl':1486 'edit':1550 'effect':764 'end':953,1255 'enforc':25,1509 'engin':1259 'enough':628,631 'ensur':906 'entir':646 'entrypoint':1455 'establish':507 'exceed':573,593 'execut':118,384,401,1356 'exist':67,708,938,1024 'explain':776,1108,1565 'explicit':669,1250 'extens':612,1073 'extract':88,219,489,608,1072 'face':910 'fall':1397 'fallback':1140,1363 'featur':14,312,894,900,988,1057,1069,1334,1401 'feature-first':1333 'feature-plus-lay':311,1056 'field':273,807 'file':12,21,32,42,72,74,81,192,195,234,239,260,289,293,405,475,482,512,515,570,590,613,625,650,742,746,758,779,858,924,934,952,986,1025,1036,1086,1092,1159,1173,1205,1210,1227,1262,1294,1348,1406,1438,1493 'file-head':481,857,1226,1261 'file-membership':404 'filenam':266,790 'filler':811 'final':1518 'finish':177,940 'first':322,503,535,1335,1339,1540 'fixm':38,86,283,487,815,834,1008,1286 'fixme.md':820,1082 'flat':1062 'follow':408 'follow-through':407 'form':852 'format':46,139,170,319,500,943,1047,1192,1380,1537 'format-swift-sourc':45,138,169,318,499,942,1046,1379,1536 'formatt':124,324,525,1372,1542 'full':863,1005 'full-pass':1004 'generic':1236 'govern':71 'group':18,77,214,353,609,621,634,645,665,890 'guard':411,1166,1355 'guidanc':439,445,1473,1479 'ha':49 'hand':1312,1376,1422,1440 'handoff':113,1109,1344,1365 'hard':596 'head':722 'header':33,82,104,235,262,483,760,765,859,868,877,1026,1037,1094,1160,1228,1239,1263,1510 'header-polici':103 'helper':1162 'high':209,805 'high-sign':208,804 'hold':581 'hygien':493 'id':824,1290 'import':907 'improv':636 'includ':867 'infer':1462 'input':958 'insid':66 'inspect':1459 'instead':678,786 'integr':127,1433 'intend':310 'intuit':737 'invent':1075,1197,1233 'inventori':1251,1264,1276,1567 'jargon':795 'job':710,783 'json':1466 'keep':767,821,922 'key':797 'kind':101,682,960,968,1149,1151 'lack':1120,1369 'land':349 'landing-pag':348 'languag':28,80 'larg':20,474,627 'large-fil':473 'layer':15,314,892,1059,1200,1338 'layer-first':1337 'layout':148,200,471,1060,1154,1340 'ledger':41,87,292,488,841,1020,1085,1158,1289,1293 'level':61,453,1453 'line':694,1176 'linter':126,326,527,1374,1544 'load':106,110,1505 'make':1203,1254 'manag':1214 'mandatori':810 'mark':23,211,479,620,644,670,693 'materi':635 'meaning':661,1068 'membership':406,1220,1352 'method':734 'miss':329 'mix':548,977 'mode':995,1009,1027 'model':918 'model.swift':931 'models.swift':616 'modifi':218 'modifier.swift':933 'move':35,75,194,285,513,812,949,1209,1439 'must':1241,1434 'mutat':146,413,1054,1349,1386 'name':673,685,735,793 'narrat':736 'narrow':981,1142 'navig':637,662,701 'nearbi':718 'need':449,1354,1557 'never':720 'new':1076,1198 'next':1115 'normal':22,480,484,835,860,956,1023 'normalize-exist':1022 'object':849 'objective-c':848 'obvious':655,730 'one':605,961,985,987,1183,1400,1404 'option':269,803,980,996,1010,1028,1039 'ordinari':382 'organ':5 'orient':357 'output':1098,1147 'overs':10,190,1405 'own':780 'ownership':639 'packag':300,362,369,378,383,444,543,887,971,1478,1560 'package-versus-app':1559 'pad':744 'page':350 'pair':928 'pass':494,843,865,1006,1144,1300 'path':464,528,1104,1124,1132,1138,1153,1280 'permiss':1231 'plain':27,79,247,377,773 'plain-languag':26,78 'plus':313,1058,1460 'point':1270 'polici':105,766,1161,1511 'prefer':888,1055,1071,1079,1087 'present':660 'primari':1134 'problem':1190 'project':258,265,412,438,547,756,905,975,1042,1090,1219,1347,1432,1472 'project-and-fil':257,755,1089 'project-bann':1041 'project-fil':1346 'prose':1267 'pure':1174 'purpos':53,241,770,1237 'question':702 'rather':456,808,1489 'read':550 'real':448,675,1189 'realli':1484 'recommend':317,333,359,388,415,434,752,1152,1468,1535,1552 'redund':748 'refer':272,553,1521,1523,1530,1534 'references/automation-prompts.md':559,1531 'references/customization-flow.md':560,1497,1532 'references/file-header-inventory.template.yaml':1273,1572 'references/file-headers.md':557,1097,1527 'references/glossary.md':554,1524 'references/layout-rules.md':555,1525,1553 'references/source-organization-rules.md':556,1526 'references/todo-fixme-ledgers.md':558,1528 'relev':552 'repeat':788 'repo':96,199,291,304,379,452,470,519,539,882,993,1066,1127,1326,1368,1391,1458,1487 'repo-level':451 'repo-shap':95,881 'repo-wid':1390 'report':1016,1501 'report-on':1015 'repositori':69,967,1150 'repres':1182 'request':157,469,964,1119,1412,1461,1482 'requir':750,1002,1035 'resolv':537 'respons':676 'restat':680,728 'revalid':1436 'revers':1258 'reverse-engin':1257 'review':358 'rewrit':842,1019,1283 'rewrite-ledg':1018 'right':1279 'riski':1396 'rule':565,884,1488 'run':168,364,392,496,657,1045,1361,1446 'runtim':92,1454,1508 'runtime-enforc':1507 'safe':1122,1143,1341 'scheme':402 'scope':979,982 'script':1163,1566 'scripts/customization_config.py':1498,1568 'scripts/normalize_swift_file_headers.py':870,1571 'scripts/normalize_todo_fixme_ledgers.py':837,1570 'scripts/run_workflow.py':89,1448,1504,1569 'secondari':692,724 'section':24,76,212,477,671,707,719 'see':800 'select':1106 'separ':585,1084 'serv':712 'set':532 'setup':327,1545 'shape':97,316,540,878,883,1128,1265,1327,1516 'short':649 'shorter':1206 'signal':210,806 'singl':463 'single-path':462 'skill':56,144,176,183,203,225,251,276,296,1111 'skill-structure-swift-sources' 'skip':643 'slight':687 'small':741,1184 'soft':576 'sourc':4,7,48,52,141,147,172,288,321,459,492,502,826,851,911,945,1049,1382,1539 'source-gaelic-ghost' 'source-hygien':491 'source-structur':458 'split':19,73,108,189,476,516,568,577,588,597,951,994,1156,1172,1513 'split-threshold':107 'stale':332 'start':145 'state':957,1503 'status':1099 'step':1116 'still':604,1181 'stop':530,1168,1321,1342 'store':1499 'strong':566 'structur':2,50,64,256,351,373,395,421,460,564,749,1053,1103,1123,1137,1385,1549 'structure-swift-sourc':1 'style':1038 'success':1100 'support':845,1102,1533 'swift':3,6,11,47,51,68,140,152,171,191,299,320,336,361,368,443,501,542,618,846,886,898,901,944,970,1048,1318,1381,1427,1477,1538 'swift-packag':541,969 'swift-package-build-run-workflow':360 'swift-package-testing-workflow':367 'swiftpm':386 'swiftui':221,920 'symbol':160,343,684,732,792,1305,1415 'symbol-doc':159,1304,1414 'sync':436,442,1470,1476 'sync-swift-package-guid':441,1475 'sync-xcode-project-guid':435,1469 'take':1113 'target':432,978,1155,1157 'task':341,830,855 'term':248,774 'test':370,418,427,431,1269 'test-target':430 'text':39,284,771,816,1238 'threshold':109,578,598,1514 'ticket':823 'time':1409 'todo':36,84,281,485,813,832,1007,1284 'todo.md':818,1080 'top':60,1452 'top-level':59,1451 'topic':352 'topic-agent-skills' 'topic-apple-development' 'topic-apple-docs' 'topic-apple-docs-mcp' 'topic-codex' 'topic-codex-app' 'topic-codex-cli' 'topic-codex-skills' 'topic-dash-docsets' 'topic-ios' 'topic-macos' 'topic-swift' 'treat':796,1225 'tree':8 'turn':380,397,423 'type':602,607,731,798,1078,1133 'unclear':330,1131 'under':601 'understand':1247 'unless':1291 'updat':1296,1353 'use':43,54,137,149,180,181,201,223,249,274,294,504,668,700,721,836,869,997,1011,1029,1496 'user':186,206,228,254,279,1256,1556 'vagu':1234 'valid':387,403,428,1222 'valu':998,1012,1030 'vari':630 'verif':1165 'versus':1336,1561 'view':217,915,921,923,926 'view-modifi':216 'want':187,207,229,255,280 'warrant':667 'whole':992 'wide':1392 'without':1216 'word':689 'work':166,347,414,1311,1421 'workflow':62,119,365,371,393,419,465,1362,1447,1519,1522 'wrapper':93,1077 'xcode':117,302,390,400,417,426,437,545,903,973,1213,1351,1359,1431,1444,1471 'xcode-app-project':544,972 'xcode-build-run-workflow':389,1358,1443 'xcode-manag':1212 'xcode-testing-workflow':416 'yet':529","prices":[{"id":"69a62b1b-cbae-43ea-a8aa-3693d5964ba1","listingId":"7c269e91-a1af-4a05-8c9f-23cb1441ed3f","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"gaelic-ghost","category":"apple-dev-skills","install_from":"skills.sh"},"createdAt":"2026-05-18T13:21:10.980Z"}],"sources":[{"listingId":"7c269e91-a1af-4a05-8c9f-23cb1441ed3f","source":"github","sourceId":"gaelic-ghost/apple-dev-skills/structure-swift-sources","sourceUrl":"https://github.com/gaelic-ghost/apple-dev-skills/tree/main/skills/structure-swift-sources","isPrimary":false,"firstSeenAt":"2026-05-18T13:21:10.980Z","lastSeenAt":"2026-05-18T19:13:58.687Z"}],"details":{"listingId":"7c269e91-a1af-4a05-8c9f-23cb1441ed3f","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"gaelic-ghost","slug":"structure-swift-sources","github":{"repo":"gaelic-ghost/apple-dev-skills","stars":7,"topics":["agent-skills","apple-development","apple-docs","apple-docs-mcp","codex","codex-app","codex-cli","codex-skills","dash-docsets","ios","macos","swift","swift-package-manager","swift-toolchain","swiftly","swiftpm","xcode","xcode-mcp","xcodebuild","xcrun"],"license":"apache-2.0","html_url":"https://github.com/gaelic-ghost/apple-dev-skills","pushed_at":"2026-05-13T01:26:51Z","description":"Apple Dev Workflows for Codex | Now Available in Socket Marketplace","skill_md_sha":"2f4446e12e696c8756fc0deacbef0a84ae44a44b","skill_md_path":"skills/structure-swift-sources/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/gaelic-ghost/apple-dev-skills/tree/main/skills/structure-swift-sources"},"layout":"multi","source":"github","category":"apple-dev-skills","frontmatter":{"name":"structure-swift-sources","description":"Organize Swift source trees and oversized Swift files by feature, layer, and declaration group; split large files, normalize `// MARK:` sections, enforce plain-language block-comment file headers, and move TODO and FIXME text into ledger files. Use after `format-swift-sources` has established a clean formatting baseline."},"skills_sh_url":"https://skills.sh/gaelic-ghost/apple-dev-skills/structure-swift-sources"},"updatedAt":"2026-05-18T19:13:58.687Z"}}