xtool-org/xtool
Cross-platform Xcode replacement. Build and deploy iOS apps with SwiftPM on Linux, Windows, macOS.
Swift★ 9,683+1,198 that day#5 on trending
E22.7/100
Duplication8
32.8% in swift, bash, perl, javascript, c, c-headerDead coden/a
the languages dead code reads are under 5% of the codeComplexity61
36.5% The score is jscpd's own --health model: markup, data and text left out, tests kept. The numbers below are the trending scan's.
1.88%duplicated code · 287 of 15,261 lines
24clones in code
171code files of 205 scanned
31.13%duplicated over all files · 363 clones
Most complex files
- Sources/DeveloperAPI/Generated/Client.swift479 cx
- Sources/XToolSupport/SDKBuilder.swift84 cx
- Sources/PackLib/Planner.swift73 cx
- Sources/XKit/Integration/IntegratedInstaller.swift36 cx
- Sources/XToolSupport/SDKCommand.swift36 cx
- Sources/XKit/DeveloperServices/OpenAPI/DeveloperServices+OpenAPI.swift35 cx
- Sources/PackLib/Packer.swift33 cx
- Sources/XKit/GrandSlam/Anisette/ADIDataProvider.swift33 cx
- Examples/test.sh29 cx
- Sources/XKit/Utilities/KeyValueStorage.swift29 cx
Dead code 0% unused · 0 findings
No dead code found — everything here is reachable.
The code number leaves out tests, fixtures, docs, examples, data files, styles, translations and vendored code, and 2 generated files: Sources/DeveloperAPI/Generated/Client.swift, Sources/DeveloperAPI/Generated/Types.swift.
Largest clones in the code
- 18 lines in 5 placesbash117 tokensDocumentation/xtool.docc/First-app-code/template-2b.sh:1–18Documentation/xtool.docc/First-app-code/template-3a.sh:1–18Documentation/xtool.docc/First-app-code/template-3b.sh:1–18Documentation/xtool.docc/First-app-code/template-4a.sh:1–18Documentation/xtool.docc/First-app-code/template-4b.sh:1–18
1Developer$ xtool new Hello 2Creating package: Hello 3Creating Package.swift 4Creating xtool.yml 5Creating .gitignore 6Creating .bsp/xtool.json 7Creating Sources/Hello/HelloApp.swift 8Creating Sources/Hello/ContentView.swift 9 10Finished generating project Hello.First 10 of 18 lines.
- 12 lines in 6 placesbash50 tokensDocumentation/xtool.docc/First-app-code/template-2a.sh:1–12Documentation/xtool.docc/First-app-code/template-2b.sh:1–12Documentation/xtool.docc/First-app-code/template-3a.sh:1–12Documentation/xtool.docc/First-app-code/template-3b.sh:1–12Documentation/xtool.docc/First-app-code/template-4a.sh:1–12and 1 more
1Developer$ xtool new Hello 2Creating package: Hello 3Creating Package.swift 4Creating xtool.yml 5Creating .gitignore 6Creating .bsp/xtool.json 7Creating Sources/Hello/HelloApp.swift 8Creating Sources/Hello/ContentView.swift 9 10Finished generating project Hello.First 10 of 12 lines.
- 7 lines in 4 placesbash51 tokensDocumentation/xtool.docc/First-app-code/template-3a.sh:14–20Documentation/xtool.docc/First-app-code/template-3b.sh:14–20Documentation/xtool.docc/First-app-code/template-4a.sh:14–20Documentation/xtool.docc/First-app-code/template-4b.sh:14–20
14-rw-rw-r-- 1 user user 187 .gitignore 15drwxrwxr-x 2 user user 4096 .bsp 16-rw-rw-r-- 1 user user 463 Package.swift 17drwxrwxr-x 3 user user 4096 Sources 18-rw-rw-r-- 1 user user 39 xtool.yml 19 20Hello$14-rw-rw-r-- 1 user user 187 .gitignore 15drwxrwxr-x 2 user user 4096 .bsp 16-rw-rw-r-- 1 user user 463 Package.swift 17drwxrwxr-x 3 user user 4096 Sources 18-rw-rw-r-- 1 user user 39 xtool.yml 19 20Hello$ cat xtool.yml
7 more
- 8 lines in 3 placesbash63 tokens
- 10 lines in 3 placesswift57 tokens
- 17 lines in 2 placesbash96 tokens
- 16 lines in 2 placesbash92 tokens
- 13 lines in 2 placesswift80 tokens
- 14 lines in 2 placesswift70 tokens
- 7 lines in 2 placesswift68 tokens
Largest clones over all files, tests and data included
- 32 lines in 35 placesswift113 tokensSources/DeveloperAPI/Generated/Client.swift:207–238Sources/DeveloperAPI/Generated/Client.swift:430–461Sources/DeveloperAPI/Generated/Client.swift:580–611Sources/DeveloperAPI/Generated/Client.swift:824–855Sources/DeveloperAPI/Generated/Client.swift:1023–1054and 30 more
207let body: Operations.BundleIdCapabilitiesCreateInstance.Output.TooManyRequests.Body 208let chosenContentType = try converter.bestContentType( 209 received: contentType, 210 options: [ 211 "application/json" 212 ] 213) 214switch chosenContentType { 215case "application/json": 216 body = try await converter.getResponseBodyAsJSON(First 10 of 32 lines.
- 23 lines in 35 placesswift102 tokensSources/DeveloperAPI/Generated/Client.swift:97–119Sources/DeveloperAPI/Generated/Client.swift:298–320Sources/DeveloperAPI/Generated/Client.swift:492–514Sources/DeveloperAPI/Generated/Client.swift:758–780Sources/DeveloperAPI/Generated/Client.swift:913–935and 30 more
97let body: Operations.BundleIdCapabilitiesCreateInstance.Output.BadRequest.Body 98let chosenContentType = try converter.bestContentType( 99 received: contentType, 100 options: [ 101 "application/json" 102 ] 103) 104switch chosenContentType { 105case "application/json": 106 body = try await converter.getResponseBodyAsJSON(First 10 of 23 lines.
- 23 lines in 35 placesswift102 tokensSources/DeveloperAPI/Generated/Client.swift:119–141Sources/DeveloperAPI/Generated/Client.swift:320–342Sources/DeveloperAPI/Generated/Client.swift:514–536Sources/DeveloperAPI/Generated/Client.swift:780–802Sources/DeveloperAPI/Generated/Client.swift:935–957and 30 more
119let body: Operations.BundleIdCapabilitiesCreateInstance.Output.Unauthorized.Body 120let chosenContentType = try converter.bestContentType( 121 received: contentType, 122 options: [ 123 "application/json" 124 ] 125) 126switch chosenContentType { 127case "application/json": 128 body = try await converter.getResponseBodyAsJSON(First 10 of 23 lines.
- 21 lines in 31 placesswift82 tokens
- 21 lines in 23 placesswift82 tokens
By format, code only
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| bash | 25 | 1,199 | 18 | 224 | 18.68% |
| swift | 142 | 13,683 | 6 | 63 | 0.46% |
| perl | 1 | 168 | 0 | 0 | 0% |
| javascript | 1 | 109 | 0 | 0 | 0% |
| c | 1 | 68 | 0 | 0 | 0% |
| c-header | 1 | 34 | 0 | 0 | 0% |
By format, all files
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| swift | 144 | 20,459 | 343 | 7,027 | 34.35% |
| bash | 27 | 1,236 | 18 | 224 | 18.12% |
| markdown | 17 | 948 | 1 | 44 | 4.64% |
| yaml | 7 | 322 | 1 | 13 | 4.04% |
| perl | 1 | 168 | 0 | 0 | 0% |
| javascript | 1 | 109 | 0 | 0 | 0% |
| c | 1 | 68 | 0 | 0 | 0% |
| toml | 1 | 44 | 0 | 0 | 0% |
| c-header | 1 | 34 | 0 | 0 | 0% |
| markup | 2 | 30 | 0 | 0 | 0% |
Trending appearances
| Day | Rank | Stars | Files | Lines | Clones | All files | Code | Health | Commit |
|---|---|---|---|---|---|---|---|---|---|
| Oct 14, 2026 | #5 | 9,683 (+1,198) | 205 | 23,472 | 363 | 31.13% | 1.88% | E 22.7 | b50173f |
Want this for your own project? Install jscpd and run jscpd ., or measure it the way the baselines were measured.