{"id":"f259b8a9-89c3-415e-8625-b13028e9d0f4","shortId":"xXS6N3","kind":"skill","title":"swiftlint","tagline":"Configures and enforces SwiftLint in Swift projects using build tool plugins, run scripts, and CI. Covers .swiftlint.yml configuration, disabled_rules, opt_in_rules, only_rules, analyzer_rules, baselines, autocorrect, swiftlint:disable suppressions, reporter formats (sarif, json,","description":"# SwiftLint\n\nSwiftLint enforces Swift style and conventions by linting source files against a configurable rule set. It is the most widely adopted Swift linter. This skill covers setup, configuration, rule selection, suppression, CI integration, and rollout strategy.\n\nSwiftLint is a **style enforcement tool**, not a style guide. For underlying Swift naming and design conventions, see `swift-api-design-guidelines`. For architecture patterns, see `swift-architecture`.\n\n## Contents\n\n- [Recommended Setup](#recommended-setup)\n- [Configuration](#configuration)\n- [Rule Selection Strategy](#rule-selection-strategy)\n- [Suppressions](#suppressions)\n- [Baselines](#baselines)\n- [Autocorrect](#autocorrect)\n- [CI Integration](#ci-integration)\n- [Integration Decision Tree](#integration-decision-tree)\n- [Multiple Configurations](#multiple-configurations)\n- [Common Mistakes](#common-mistakes)\n- [Review Checklist](#review-checklist)\n- [References](#references)\n\n---\n\n## Recommended Setup\n\n**Default: build tool plugin via `SimplyDanny/SwiftLintPlugins`.**\n\nAdd the plugin package to `Package.swift` or via Xcode's package dependencies:\n\n```swift\n// Package.swift\ndependencies: [\n  .package(url: \"https://github.com/SimplyDanny/SwiftLintPlugins\", from: \"<reviewed-version>\")\n]\n```\n\nFor SwiftPM targets, apply the plugin:\n\n```swift\n.target(\n    name: \"MyApp\",\n    plugins: [.plugin(name: \"SwiftLintBuildToolPlugin\", package: \"SwiftLintPlugins\")]\n)\n```\n\nFor Xcode projects without a `Package.swift`, add the package dependency in the project settings, then enable the plugin under the target's Build Phases or the package's plugin trust dialog.\n\nThe build tool plugin runs SwiftLint automatically on every build. No run script required.\n\n> **First build**: Xcode prompts to trust the plugin. Select \"Trust & Enable All\" for the SwiftLintPlugins package.\n\nFor alternatives (run scripts, command plugin, Homebrew CLI), see [references/plugins-run-scripts-and-integrations.md](references/plugins-run-scripts-and-integrations.md).\n\n## Configuration\n\nCreate `.swiftlint.yml` at the project root. SwiftLint discovers this file by walking up from each source file's directory.\n\n```yaml\n# .swiftlint.yml — conservative starter config\ndisabled_rules:\n  - trailing_whitespace\n  - todo\n\nopt_in_rules:\n  - empty_count\n  - closure_spacing\n  - force_unwrapping\n  - sorted_imports\n  - vertical_whitespace_opening_braces\n  - private_swiftui_state\n  - unhandled_throwing_task\n  - accessibility_label_for_image\n\nincluded:\n  - Sources\n  - Tests\n\nexcluded:\n  - .build\n  - DerivedData\n  - \"**/.build\"\n  - \"**/Generated\"\n\nline_length:\n  warning: 140\n  error: 200\n\ntype_body_length:\n  warning: 300\n  error: 500\n\nfile_length:\n  warning: 500\n  error: 1000\n```\n\nKey configuration options:\n\n| Key | Purpose |\n|-----|---------|\n| `disabled_rules` | Turn off default-enabled rules |\n| `opt_in_rules` | Turn on rules not enabled by default |\n| `only_rules` | Use _only_ the listed rules (mutually exclusive with `disabled_rules`/`opt_in_rules`) |\n| `analyzer_rules` | Rules requiring compiler logs (run via `swiftlint analyze`) |\n| `baseline` | Path to an existing baseline file used to suppress known violations |\n| `write_baseline` | Path where SwiftLint should write a new baseline file |\n| `included` | Paths to lint (default: current directory) |\n| `excluded` | Paths to skip |\n| `strict` | Elevate all warnings to errors |\n| `lenient` | Downgrade all errors to warnings |\n| `allow_zero_lintable_files` | Suppress the error when no Swift files are found |\n| `reporter` | Output format: `xcode` (default), `json`, `checkstyle`, `sarif`, `csv`, `emoji`, etc. |\n\nFor full configuration details including severity tuning, environment-variable interpolation, and nested/remote configs, see [references/adoption-and-configuration.md](references/adoption-and-configuration.md).\n\n## Rule Selection Strategy\n\nSwiftLint ships with three rule categories:\n\n1. **Default rules** — enabled automatically, cover widely accepted conventions\n2. **Opt-in rules** — disabled by default, enable selectively via `opt_in_rules`\n3. **Analyzer rules** — require compiler logs, enabled via `analyzer_rules`\n\nBrowse the full categorized list at <https://realm.github.io/SwiftLint/rule-directory.html>.\n\n**Recommended approach for new projects:**\n\n1. Start with defaults. Run `swiftlint rules` to see which rules are enabled.\n2. Disable rules that conflict with your team's established conventions.\n3. Add opt-in rules one at a time. Review violations before committing each addition.\n4. Do not use `only_rules` unless you have a specific reason to start from zero.\n\n**Recommended approach for existing codebases:**\n\n1. Start with the default rule set.\n2. Create a baseline (see [Baselines](#baselines)) to suppress all existing violations.\n3. Enforce zero new violations in CI.\n4. Burn down baseline violations incrementally.\n\nDo not transcribe or memorize the rule directory. Look up rule identifiers and configuration options at the official rule directory when needed.\n\n## Suppressions\n\nSuppress SwiftLint for specific lines when a rule produces a false positive or when the violation is intentional and reviewed.\n\n```swift\n// swiftlint:disable:next force_cast\nlet view = object as! UIView\n\nlet legacy = try! JSONDecoder().decode(T.self, from: data) // swiftlint:disable:this force_try\n\n// swiftlint:disable:previous large_tuple\n```\n\nDisable for a region:\n\n```swift\n// swiftlint:disable cyclomatic_complexity\nfunc complexRouter(...) { ... }\n// swiftlint:enable cyclomatic_complexity\n```\n\nDisable all rules (use sparingly):\n\n```swift\n// swiftlint:disable all\n// ... generated or legacy code ...\n// swiftlint:enable all\n```\n\n**Policy:**\n- Prefer targeted single-rule suppressions over `all`.\n- Always re-enable after the region ends.\n- For generated code, prefer `excluded` paths in `.swiftlint.yml` over inline suppressions.\n- For test targets with different tolerance, use a child configuration (see [Multiple Configurations](#multiple-configurations)).\n\nFor full suppression syntax, see [references/rules-suppressions-and-baselines.md](references/rules-suppressions-and-baselines.md).\n\n## Baselines\n\nBaselines let you adopt SwiftLint in an existing codebase without fixing every legacy violation first.\n\n**Create a baseline:**\n\n```sh\nswiftlint --write-baseline .swiftlint.baseline\n```\n\nThis records all current violations. Future runs compare against this baseline and only report new violations.\n\n**Use the baseline:**\n\n```sh\nswiftlint --baseline .swiftlint.baseline\n```\n\nIn CI, pass `--baseline` so only new violations fail the build. Burn down the baseline over time by fixing legacy violations and regenerating.\n\nFor baseline workflows and rollout strategy, see [references/rules-suppressions-and-baselines.md](references/rules-suppressions-and-baselines.md).\n\n## Autocorrect\n\nSwiftLint can fix some violations automatically:\n\n```sh\nswiftlint --fix\n# or the legacy alias:\nswiftlint --autocorrect\n```\n\n**Warnings:**\n\n- **Never run `--fix` as a pre-compile build phase.** Auto-fixes modify source files. If run automatically on every build, this creates an unpredictable edit-build loop and can mask real issues.\n- Run `--fix` manually or in a dedicated CI step, then review the diff.\n- Not all rules support autocorrect. Check `swiftlint rules` — the \"Correctable\" column shows which rules can auto-fix.\n- Always commit or stash before running `--fix`.\n\n## CI Integration\n\nCI is the primary enforcement surface. A CI check ensures no one merges code that increases the violation count.\n\n**Recommended CI pattern:**\n\n```yaml\n# GitHub Actions example\n- name: Lint\n  run: |\n    brew install swiftlint\n    swiftlint --strict --reporter sarif > swiftlint.sarif\n```\n\nKey CI options:\n\n| Flag | Effect |\n|------|--------|\n| `--strict` | Exits non-zero on warnings (not just errors) |\n| `--reporter sarif` | GitHub Advanced Security compatible output |\n| `--reporter json` | Machine-readable output |\n| `--reporter checkstyle` | Jenkins/SonarQube compatible |\n| `--baseline .swiftlint.baseline` | Only fail on new violations |\n\nFor SARIF upload to GitHub code scanning, add `github/codeql-action/upload-sarif` after the lint step.\n\nFor full CI recipes and reporter details, see [references/plugins-run-scripts-and-integrations.md](references/plugins-run-scripts-and-integrations.md).\n\n## Integration Decision Tree\n\nChoose how to run SwiftLint based on project shape:\n\n| Scenario | Recommended integration |\n|----------|------------------------|\n| SwiftPM package or Xcode project with `Package.swift` | Build tool plugin via `SwiftLintPlugins` |\n| SwiftPM project needing CLI flags (`--fix`, `--baseline`) | Command plugin: `swift package plugin swiftlint` |\n| Xcode project without SwiftPM, team uses Homebrew | Run script build phase |\n| CI/CD pipeline | Homebrew or Docker install, run `swiftlint` directly |\n| Pre-commit hook | Homebrew install + `.pre-commit-config.yaml` or git hook script |\n\nThe build tool plugin is preferred for local development because it requires no PATH configuration, pins the SwiftLint version via package resolution, and runs automatically on build.\n\nFor detailed setup instructions for each integration, see [references/plugins-run-scripts-and-integrations.md](references/plugins-run-scripts-and-integrations.md).\n\n## Multiple Configurations\n\nSwiftLint supports layered configuration files. A `.swiftlint.yml` in a subdirectory inherits from and overrides the parent config.\n\nCommon patterns:\n\n- **Relaxed test config**: place a `.swiftlint.yml` in `Tests/` that disables `force_unwrapping` and raises `file_length`\n- **Strict module config**: place a stricter `.swiftlint.yml` in a shared module directory\n- **Remote config**: use `parent_config` with an HTTPS URL to pull a shared team config (caching supported)\n\n```yaml\n# Tests/.swiftlint.yml — child config\ndisabled_rules:\n  - force_unwrapping\n  - force_try\n\nfile_length:\n  warning: 800\n```\n\nYou can also pass multiple configs on the CLI:\n\n```sh\nswiftlint --config .swiftlint.yml --config .swiftlint-extra.yml\n```\n\nLater configs override earlier ones for overlapping keys.\n\nFor nested config resolution, remote configs, and CLI multi-config details, see [references/adoption-and-configuration.md](references/adoption-and-configuration.md).\n\n## Common Mistakes\n\n1. **Running `--fix` in a build phase.** Auto-fixing on every build creates unpredictable source modifications. Run `--fix` manually.\n\n2. **Using `only_rules` without understanding the implication.** This disables all rules except those listed. Most teams should use `disabled_rules` + `opt_in_rules` instead.\n\n3. **Suppressing with `// swiftlint:disable all` and forgetting to re-enable.** This silently disables all linting for the rest of the file.\n\n4. **Not pinning the SwiftLint version.** Different versions have different default rules. Use the build tool plugin (version pinned via SPM) or pin in your `Brewfile` / CI config.\n\n5. **Excluding too broadly.** Excluding `Tests/` entirely means test code gets no linting. Use a child config with relaxed rules instead.\n\n6. **Ignoring the toolchain mismatch.** SwiftLint must be built with (or compatible with) the same Swift toolchain used to compile your project. Mismatches cause parsing errors. See [references/plugins-run-scripts-and-integrations.md](references/plugins-run-scripts-and-integrations.md) for multi-toolchain guidance.\n\n7. **Adopting too many opt-in rules at once in a large codebase.** This creates an overwhelming number of violations. Add rules incrementally and use baselines.\n\n8. **Not configuring `included` paths.** Without `included`, SwiftLint scans the working directory recursively, which may pick up vendored or generated code.\n\n## Review Checklist\n\n- [ ] `.swiftlint.yml` exists at the project root with explicit `included`/`excluded` paths\n- [ ] SwiftLint version is pinned (via SPM plugin resolution, Brewfile, or CI config)\n- [ ] Build tool plugin is enabled for each target that should be linted\n- [ ] CI runs `swiftlint --strict` (or with `--baseline` for incremental adoption)\n- [ ] No `--fix` / `--autocorrect` in build phases\n- [ ] Inline suppressions target specific rules, not `all`\n- [ ] Inline suppressions include a comment explaining why\n- [ ] Test targets have appropriate config (relaxed rules via child config, not excluded entirely)\n- [ ] Autocorrect changes are reviewed in a separate commit\n- [ ] New opt-in rules are added one at a time with team consensus\n\n## References\n\n- [references/adoption-and-configuration.md](references/adoption-and-configuration.md) — Installation paths, `.swiftlint.yml` deep dive, severity tuning, environment variables, nested/remote configs, rollout strategy\n- [references/plugins-run-scripts-and-integrations.md](references/plugins-run-scripts-and-integrations.md) — Build tool plugin, command plugin, run scripts, CI recipes, multi-toolchain guidance, VS Code, Fastlane, Docker, pre-commit\n- [references/rules-suppressions-and-baselines.md](references/rules-suppressions-and-baselines.md) — Default vs opt-in vs analyzer rules, suppression syntax, baseline workflows, false-positive handling\n- [references/rule-reference.md](references/rule-reference.md) — Bundled exhaustive rule index for local lookup; verify current details with `swiftlint rules` or the official rule directory\n- [references/custom-rules-and-analyze.md](references/custom-rules-and-analyze.md) — Regex custom rules, Swift custom rules (brief), `swiftlint analyze`, compiler-log workflow\n- [SwiftLint documentation](https://realm.github.io/SwiftLint/) — Official docs\n- [SwiftLint rule directory](https://realm.github.io/SwiftLint/rule-directory.html) — Full categorized rule list\n- [SimplyDanny/SwiftLintPlugins](https://github.com/SimplyDanny/SwiftLintPlugins) — Recommended plugin package","tags":["swiftlint","swift","ios","skills","dpearson2699","accessibility","agent-skills","ai-coding","apple","claude-code","codex-skills","cursor-skills"],"capabilities":["skill","source-dpearson2699","skill-swiftlint","topic-accessibility","topic-agent-skills","topic-ai-coding","topic-apple","topic-claude-code","topic-codex-skills","topic-cursor-skills","topic-ios","topic-ios-development","topic-liquid-glass","topic-localization","topic-mapkit"],"categories":["swift-ios-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/dpearson2699/swift-ios-skills/swiftlint","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add dpearson2699/swift-ios-skills","source_repo":"https://github.com/dpearson2699/swift-ios-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 599 github stars · SKILL.md body (13,790 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-18T18:53:45.418Z","embedding":null,"createdAt":"2026-04-27T00:53:48.583Z","updatedAt":"2026-05-18T18:53:45.418Z","lastSeenAt":"2026-05-18T18:53:45.418Z","tsv":"'/.build':333 '/generated':334 '/simplydanny/swiftlintplugins':182 '/simplydanny/swiftlintplugins)':1703 '/swiftlint/)':1687 '/swiftlint/rule-directory.html':539 '/swiftlint/rule-directory.html)':1695 '1':498,545,606,1291 '1000':353 '140':338 '2':507,558,613,1311 '200':340 '3':521,569,625,1336 '300':345 '4':585,632,1359 '5':1387 '500':347,351 '6':1408 '7':1442 '8':1469 '800':1250 'accept':505 'access':323 'action':988 'ad':1584 'add':163,206,570,1047,1463 'addit':584 'adopt':59,796,1443,1536 'advanc':1019 'alia':885 'allow':448 'also':1253 'altern':262 'alway':750,955 'analyz':27,392,401,522,529,1638,1678 'api':95 'appli':187 'approach':541,602 'appropri':1560 'architectur':99,104 'auto':900,953,1299 'auto-fix':899,952,1298 'autocorrect':30,124,125,872,887,941,1539,1570 'automat':237,502,878,907,1158 'base':1071 'baselin':29,122,123,402,407,415,423,616,618,619,635,792,793,810,815,827,835,838,843,854,864,1033,1096,1468,1533,1642 'bodi':342 'brace':316 'brew':993 'brewfil':1384,1511 'brief':1676 'broad':1390 'brows':531 'build':10,158,222,232,240,246,331,850,897,910,917,1085,1112,1135,1160,1296,1303,1373,1515,1541,1610 'built':1416 'bundl':1650 'burn':633,851 'cach':1235 'cast':686 'categor':534,1697 'categori':497 'caus':1431 'chang':1571 'check':942,972 'checklist':149,152,1491 'checkstyl':467,1030 'child':777,1239,1402,1565 'choos':1066 'ci':16,70,126,129,631,841,931,962,964,971,984,1002,1055,1385,1513,1527,1617 'ci-integr':128 'ci/cd':1114 'cli':268,1093,1259,1281 'closur':307 'code':737,760,977,1045,1396,1489,1624 'codebas':605,801,1455 'column':947 'command':265,1097,1613 'comment':1554 'commit':582,956,1125,1577,1629 'common':143,146,1190,1289 'common-mistak':145 'compar':824 'compat':1021,1032,1419 'compil':396,525,896,1427,1680 'compiler-log':1679 'complex':718,724 'complexrout':720 'config':296,485,1189,1194,1210,1221,1224,1234,1240,1256,1262,1264,1267,1276,1279,1284,1386,1403,1514,1561,1566,1605 'configur':2,19,51,66,111,112,139,142,272,355,474,651,778,781,784,1148,1172,1176,1471 'conflict':562 'consensus':1591 'conserv':294 'content':105 'convent':44,91,506,568 'correct':946 'count':306,982 'cover':17,64,503 'creat':273,614,808,912,1304,1457 'csv':469 'current':430,820,1658 'custom':1671,1674 'cyclomat':717,723 'data':699 'decis':132,136,1064 'decod':696 'dedic':930 'deep':1598 'default':157,364,376,429,465,499,514,548,610,1369,1632 'default-en':363 'depend':174,177,209 'deriveddata':332 'design':90,96 'detail':475,1059,1162,1285,1659 'develop':1142 'dialog':230 'diff':936 'differ':773,1365,1368 'direct':1122 'directori':291,431,645,657,1219,1480,1667,1692 'disabl':20,32,297,359,387,512,559,683,701,706,710,716,725,732,1201,1241,1320,1330,1340,1350 'discov':280 'dive':1599 'doc':1689 'docker':1118,1626 'document':1684 'downgrad':443 'earlier':1269 'edit':916 'edit-build':915 'effect':1005 'elev':437 'emoji':470 'empti':305 'enabl':215,255,365,374,501,515,527,557,722,739,753,1347,1519 'end':757 'enforc':4,40,79,626,968 'ensur':973 'entir':1393,1569 'environ':480,1602 'environment-vari':479 'error':339,346,352,441,445,454,1015,1433 'establish':567 'etc':471 'everi':239,804,909,1302 'exampl':989 'except':1323 'exclud':330,432,762,1388,1391,1501,1568 'exclus':385 'exhaust':1651 'exist':406,604,623,800,1493 'exit':1007 'explain':1555 'explicit':1499 'fail':848,1036 'fals':671,1645 'false-posit':1644 'fastlan':1625 'file':48,282,289,348,408,424,451,458,904,1177,1206,1247,1358 'first':245,807 'fix':803,858,875,881,891,901,925,954,961,1095,1293,1300,1309,1538 'flag':1004,1094 'forc':309,685,703,1202,1243,1245 'forget':1343 'format':35,463 'found':460 'full':473,533,786,1054,1696 'func':719 'futur':822 'generat':734,759,1488 'get':1397 'git':1131 'github':987,1018,1044 'github.com':181,1702 'github.com/simplydanny/swiftlintplugins':180 'github.com/simplydanny/swiftlintplugins)':1701 'github/codeql-action/upload-sarif':1048 'guid':84 'guidanc':1441,1622 'guidelin':97 'handl':1647 'homebrew':267,1109,1116,1127 'hook':1126,1132 'https':1227 'identifi':649 'ignor':1409 'imag':326 'implic':1318 'import':312 'includ':327,425,476,1472,1475,1500,1552 'increas':979 'increment':637,1465,1535 'index':1653 'inherit':1183 'inlin':767,1543,1550 'instal':994,1119,1128,1595 'instead':1335,1407 'instruct':1164 'integr':71,127,130,131,135,963,1063,1077,1167 'integration-decision-tre':134 'intent':678 'interpol':482 'issu':923 'jenkins/sonarqube':1031 'json':37,466,1024 'jsondecod':695 'key':354,357,1001,1273 'known':412 'label':324 'larg':708,1454 'later':1266 'layer':1175 'legaci':693,736,805,859,884 'length':336,343,349,1207,1248 'lenient':442 'let':687,692,794 'line':335,665 'lint':46,428,991,1051,1352,1399,1526 'lintabl':450 'linter':61 'list':382,535,1325,1699 'local':1141,1655 'log':397,526,1681 'look':646 'lookup':1656 'loop':918 'machin':1026 'machine-read':1025 'mani':1445 'manual':926,1310 'mask':921 'may':1483 'mean':1394 'memor':642 'merg':976 'mismatch':1412,1430 'mistak':144,147,1290 'modif':1307 'modifi':902 'modul':1209,1218 'multi':1283,1439,1620 'multi-config':1282 'multi-toolchain':1438,1619 'multipl':138,141,780,783,1171,1255 'multiple-configur':140,782 'must':1414 'mutual':384 'myapp':193 'name':88,192,196,990 'need':659,1092 'nest':1275 'nested/remote':484,1604 'never':889 'new':422,543,628,831,846,1038,1578 'next':684 'non':1009 'non-zero':1008 'number':1460 'object':689 'offici':655,1665,1688 'one':575,975,1270,1585 'open':315 'opt':22,302,367,389,509,518,572,1332,1447,1580,1635 'opt-in':508,571,1446,1579,1634 'option':356,652,1003 'output':462,1022,1028 'overlap':1272 'overrid':1186,1268 'overwhelm':1459 'packag':166,173,178,198,208,226,260,1079,1100,1154,1706 'package.swift':168,176,205,1084 'parent':1188,1223 'pars':1432 'pass':842,1254 'path':403,416,426,433,763,1147,1473,1502,1596 'pattern':100,985,1191 'phase':223,898,1113,1297,1542 'pick':1484 'pin':1149,1361,1377,1381,1506 'pipelin':1115 'place':1195,1211 'plugin':12,160,165,189,194,195,217,228,234,252,266,1087,1098,1101,1137,1375,1509,1517,1612,1614,1705 'polici':741 'posit':672,1646 'pre':895,1124,1628 'pre-commit':1123,1627 'pre-commit-config.yaml':1129 'pre-compil':894 'prefer':742,761,1139 'previous':707 'primari':967 'privat':317 'produc':669 'project':8,202,212,277,544,1073,1082,1091,1104,1429,1496 'prompt':248 'pull':1230 'purpos':358 'rais':1205 're':752,1346 're-en':751,1345 'readabl':1027 'real':922 'realm.github.io':538,1686,1694 'realm.github.io/swiftlint/)':1685 'realm.github.io/swiftlint/rule-directory.html':537 'realm.github.io/swiftlint/rule-directory.html)':1693 'reason':596 'recip':1056,1618 'recommend':106,109,155,540,601,983,1076,1704 'recommended-setup':108 'record':818 'recurs':1481 'refer':153,154,1592 'references/adoption-and-configuration.md':487,488,1287,1288,1593,1594 'references/custom-rules-and-analyze.md':1668,1669 'references/plugins-run-scripts-and-integrations.md':270,271,1061,1062,1169,1170,1435,1436,1608,1609 'references/rule-reference.md':1648,1649 'references/rules-suppressions-and-baselines.md':790,791,870,871,1630,1631 'regener':862 'regex':1670 'region':713,756 'relax':1192,1405,1562 'remot':1220,1278 'report':34,461,830,998,1016,1023,1029,1058 'requir':244,395,524,1145 'resolut':1155,1277,1510 'rest':1355 'review':148,151,579,680,934,1490,1573 'review-checklist':150 'rollout':73,867,1606 'root':278,1497 'rule':21,24,26,28,52,67,113,117,298,304,360,366,369,372,378,383,388,391,393,394,489,496,500,511,520,523,530,551,555,560,574,590,611,644,648,656,668,727,746,939,944,950,1242,1314,1322,1331,1334,1370,1406,1449,1464,1547,1563,1582,1639,1652,1662,1666,1672,1675,1691,1698 'rule-selection-strategi':116 'run':13,235,242,263,398,549,823,890,906,924,960,992,1069,1110,1120,1157,1292,1308,1528,1615 'sarif':36,468,999,1017,1041 'scan':1046,1477 'scenario':1075 'script':14,243,264,1111,1133,1616 'secur':1020 'see':92,101,269,486,553,617,779,789,869,1060,1168,1286,1434 'select':68,114,118,253,490,516 'separ':1576 'set':53,213,612 'setup':65,107,110,156,1163 'sever':477,1600 'sh':811,836,879,1260 'shape':1074 'share':1217,1232 'ship':493 'show':948 'silent':1349 'simplydanny/swiftlintplugins':162,1700 'singl':745 'single-rul':744 'skill':63 'skill-swiftlint' 'skip':435 'sort':311 'sourc':47,288,328,903,1306 'source-dpearson2699' 'space':308 'spare':729 'specif':595,664,1546 'spm':1379,1508 'start':546,598,607 'starter':295 'stash':958 'state':319 'step':932,1052 'strategi':74,115,119,491,868,1607 'strict':436,997,1006,1208,1530 'stricter':1213 'style':42,78,83 'subdirectori':1182 'support':940,1174,1236 'suppress':33,69,120,121,411,452,621,660,661,747,768,787,1337,1544,1551,1640 'surfac':969 'swift':7,41,60,87,94,103,175,190,457,681,714,730,1099,1423,1673 'swift-api-design-guidelin':93 'swift-architectur':102 'swiftlint':1,5,31,38,39,75,236,279,400,418,492,550,662,682,700,705,715,721,731,738,797,812,837,873,880,886,943,995,996,1070,1102,1121,1151,1173,1261,1339,1363,1413,1476,1503,1529,1661,1677,1683,1690 'swiftlint-extra.yml':1265 'swiftlint.baseline':816,839,1034 'swiftlint.sarif':1000 'swiftlint.yml':18,274,293,765,1179,1197,1214,1263,1492,1597 'swiftlintbuildtoolplugin':197 'swiftlintplugin':199,259,1089 'swiftpm':185,1078,1090,1106 'swiftui':318 'syntax':788,1641 't.self':697 'target':186,191,220,743,771,1522,1545,1558 'task':322 'team':565,1107,1233,1327,1590 'test':329,770,1193,1199,1392,1395,1557 'tests/.swiftlint.yml':1238 'three':495 'throw':321 'time':578,856,1588 'todo':301 'toler':774 'tool':11,80,159,233,1086,1136,1374,1516,1611 'toolchain':1411,1424,1440,1621 'topic-accessibility' 'topic-agent-skills' 'topic-ai-coding' 'topic-apple' 'topic-claude-code' 'topic-codex-skills' 'topic-cursor-skills' 'topic-ios' 'topic-ios-development' 'topic-liquid-glass' 'topic-localization' 'topic-mapkit' 'trail':299 'transcrib':640 'tree':133,137,1065 'tri':694,704,1246 'trust':229,250,254 'tune':478,1601 'tupl':709 'turn':361,370 'type':341 'uiview':691 'under':86 'understand':1316 'unhandl':320 'unless':591 'unpredict':914,1305 'unwrap':310,1203,1244 'upload':1042 'url':179,1228 'use':9,379,409,588,728,775,833,1108,1222,1312,1329,1371,1400,1425,1467 'variabl':481,1603 'vendor':1486 'verifi':1657 'version':1152,1364,1366,1376,1504 'vertic':313 'via':161,170,399,517,528,1088,1153,1378,1507,1564 'view':688 'violat':413,580,624,629,636,676,806,821,832,847,860,877,981,1039,1462 'vs':1623,1633,1637 'walk':284 'warn':337,344,350,439,447,888,1012,1249 'whitespac':300,314 'wide':58,504 'without':203,802,1105,1315,1474 'work':1479 'workflow':865,1643,1682 'write':414,420,814 'write-baselin':813 'xcode':171,201,247,464,1081,1103 'yaml':292,986,1237 'zero':449,600,627,1010","prices":[{"id":"4b8e3777-bc67-4b46-894a-d85ac29d2b92","listingId":"f259b8a9-89c3-415e-8625-b13028e9d0f4","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"dpearson2699","category":"swift-ios-skills","install_from":"skills.sh"},"createdAt":"2026-04-27T00:53:48.583Z"}],"sources":[{"listingId":"f259b8a9-89c3-415e-8625-b13028e9d0f4","source":"github","sourceId":"dpearson2699/swift-ios-skills/swiftlint","sourceUrl":"https://github.com/dpearson2699/swift-ios-skills/tree/main/skills/swiftlint","isPrimary":false,"firstSeenAt":"2026-04-27T00:53:48.583Z","lastSeenAt":"2026-05-18T18:53:45.418Z"},{"listingId":"f259b8a9-89c3-415e-8625-b13028e9d0f4","source":"skills_sh","sourceId":"dpearson2699/swift-ios-skills/swiftlint","sourceUrl":"https://skills.sh/dpearson2699/swift-ios-skills/swiftlint","isPrimary":true,"firstSeenAt":"2026-05-07T20:42:20.736Z","lastSeenAt":"2026-05-07T22:41:32.785Z"}],"details":{"listingId":"f259b8a9-89c3-415e-8625-b13028e9d0f4","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"dpearson2699","slug":"swiftlint","github":{"repo":"dpearson2699/swift-ios-skills","stars":599,"topics":["accessibility","agent-skills","ai-coding","apple","claude-code","codex-skills","cursor-skills","ios","ios-development","liquid-glass","localization","mapkit","networking","storekit","swift","swift-concurrency","swiftdata","swiftui","widgetkit","xcode"],"license":"other","html_url":"https://github.com/dpearson2699/swift-ios-skills","pushed_at":"2026-04-26T21:04:17Z","description":"Agent Skills for iOS 26+, Swift 6.3, SwiftUI, and modern Apple frameworks","skill_md_sha":"89a115685d8475dc580fae7df659cbdf88ce0dc4","skill_md_path":"skills/swiftlint/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/dpearson2699/swift-ios-skills/tree/main/skills/swiftlint"},"layout":"multi","source":"github","category":"swift-ios-skills","frontmatter":{"name":"swiftlint","description":"Configures and enforces SwiftLint in Swift projects using build tool plugins, run scripts, and CI. Covers .swiftlint.yml configuration, disabled_rules, opt_in_rules, only_rules, analyzer_rules, baselines, autocorrect, swiftlint:disable suppressions, reporter formats (sarif, json, checkstyle), strict and lenient modes, SwiftLintBuildToolPlugin via SimplyDanny/SwiftLintPlugins, swift package plugin swiftlint, Xcode run script phases, CI integration, multiple configuration files, and rollout strategies for existing codebases. Use when setting up SwiftLint, configuring lint rules, suppressing warnings, creating baselines, choosing between build tool plugin and run script, or integrating SwiftLint into CI."},"skills_sh_url":"https://skills.sh/dpearson2699/swift-ios-skills/swiftlint"},"updatedAt":"2026-05-18T18:53:45.418Z"}}