xcodebuild-axi 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/LICENSE +21 -0
  3. package/README.md +304 -0
  4. package/dist/bin/xcodebuild-axi.d.ts +2 -0
  5. package/dist/bin/xcodebuild-axi.js +8 -0
  6. package/dist/bin/xcodebuild-axi.js.map +1 -0
  7. package/dist/src/action.d.ts +68 -0
  8. package/dist/src/action.js +373 -0
  9. package/dist/src/action.js.map +1 -0
  10. package/dist/src/archive.d.ts +33 -0
  11. package/dist/src/archive.js +77 -0
  12. package/dist/src/archive.js.map +1 -0
  13. package/dist/src/args.d.ts +23 -0
  14. package/dist/src/args.js +123 -0
  15. package/dist/src/args.js.map +1 -0
  16. package/dist/src/auth.d.ts +11 -0
  17. package/dist/src/auth.js +51 -0
  18. package/dist/src/auth.js.map +1 -0
  19. package/dist/src/cli.d.ts +20 -0
  20. package/dist/src/cli.js +132 -0
  21. package/dist/src/cli.js.map +1 -0
  22. package/dist/src/commands/analyze.d.ts +2 -0
  23. package/dist/src/commands/analyze.js +32 -0
  24. package/dist/src/commands/analyze.js.map +1 -0
  25. package/dist/src/commands/archive.d.ts +2 -0
  26. package/dist/src/commands/archive.js +63 -0
  27. package/dist/src/commands/archive.js.map +1 -0
  28. package/dist/src/commands/build.d.ts +2 -0
  29. package/dist/src/commands/build.js +60 -0
  30. package/dist/src/commands/build.js.map +1 -0
  31. package/dist/src/commands/clean.d.ts +2 -0
  32. package/dist/src/commands/clean.js +39 -0
  33. package/dist/src/commands/clean.js.map +1 -0
  34. package/dist/src/commands/coverage.d.ts +2 -0
  35. package/dist/src/commands/coverage.js +111 -0
  36. package/dist/src/commands/coverage.js.map +1 -0
  37. package/dist/src/commands/destinations.d.ts +2 -0
  38. package/dist/src/commands/destinations.js +56 -0
  39. package/dist/src/commands/destinations.js.map +1 -0
  40. package/dist/src/commands/export.d.ts +2 -0
  41. package/dist/src/commands/export.js +170 -0
  42. package/dist/src/commands/export.js.map +1 -0
  43. package/dist/src/commands/find.d.ts +2 -0
  44. package/dist/src/commands/find.js +70 -0
  45. package/dist/src/commands/find.js.map +1 -0
  46. package/dist/src/commands/home.d.ts +9 -0
  47. package/dist/src/commands/home.js +97 -0
  48. package/dist/src/commands/home.js.map +1 -0
  49. package/dist/src/commands/info.d.ts +2 -0
  50. package/dist/src/commands/info.js +95 -0
  51. package/dist/src/commands/info.js.map +1 -0
  52. package/dist/src/commands/localize.d.ts +2 -0
  53. package/dist/src/commands/localize.js +121 -0
  54. package/dist/src/commands/localize.js.map +1 -0
  55. package/dist/src/commands/migrate.d.ts +8 -0
  56. package/dist/src/commands/migrate.js +177 -0
  57. package/dist/src/commands/migrate.js.map +1 -0
  58. package/dist/src/commands/packages.d.ts +2 -0
  59. package/dist/src/commands/packages.js +108 -0
  60. package/dist/src/commands/packages.js.map +1 -0
  61. package/dist/src/commands/platforms.d.ts +2 -0
  62. package/dist/src/commands/platforms.js +379 -0
  63. package/dist/src/commands/platforms.js.map +1 -0
  64. package/dist/src/commands/result.d.ts +2 -0
  65. package/dist/src/commands/result.js +100 -0
  66. package/dist/src/commands/result.js.map +1 -0
  67. package/dist/src/commands/schemes.d.ts +2 -0
  68. package/dist/src/commands/schemes.js +39 -0
  69. package/dist/src/commands/schemes.js.map +1 -0
  70. package/dist/src/commands/settings.d.ts +2 -0
  71. package/dist/src/commands/settings.js +191 -0
  72. package/dist/src/commands/settings.js.map +1 -0
  73. package/dist/src/commands/setup.d.ts +2 -0
  74. package/dist/src/commands/setup.js +84 -0
  75. package/dist/src/commands/setup.js.map +1 -0
  76. package/dist/src/commands/sim.d.ts +2 -0
  77. package/dist/src/commands/sim.js +187 -0
  78. package/dist/src/commands/sim.js.map +1 -0
  79. package/dist/src/commands/test.d.ts +2 -0
  80. package/dist/src/commands/test.js +317 -0
  81. package/dist/src/commands/test.js.map +1 -0
  82. package/dist/src/commands/testplans.d.ts +8 -0
  83. package/dist/src/commands/testplans.js +75 -0
  84. package/dist/src/commands/testplans.js.map +1 -0
  85. package/dist/src/commands/tests.d.ts +13 -0
  86. package/dist/src/commands/tests.js +154 -0
  87. package/dist/src/commands/tests.js.map +1 -0
  88. package/dist/src/commands/xcframework.d.ts +2 -0
  89. package/dist/src/commands/xcframework.js +77 -0
  90. package/dist/src/commands/xcframework.js.map +1 -0
  91. package/dist/src/context.d.ts +23 -0
  92. package/dist/src/context.js +72 -0
  93. package/dist/src/context.js.map +1 -0
  94. package/dist/src/destination.d.ts +50 -0
  95. package/dist/src/destination.js +174 -0
  96. package/dist/src/destination.js.map +1 -0
  97. package/dist/src/errors.d.ts +6 -0
  98. package/dist/src/errors.js +55 -0
  99. package/dist/src/errors.js.map +1 -0
  100. package/dist/src/packages.d.ts +31 -0
  101. package/dist/src/packages.js +117 -0
  102. package/dist/src/packages.js.map +1 -0
  103. package/dist/src/report.d.ts +20 -0
  104. package/dist/src/report.js +39 -0
  105. package/dist/src/report.js.map +1 -0
  106. package/dist/src/scheme.d.ts +22 -0
  107. package/dist/src/scheme.js +66 -0
  108. package/dist/src/scheme.js.map +1 -0
  109. package/dist/src/simctl.d.ts +33 -0
  110. package/dist/src/simctl.js +85 -0
  111. package/dist/src/simctl.js.map +1 -0
  112. package/dist/src/surface.d.ts +55 -0
  113. package/dist/src/surface.js +350 -0
  114. package/dist/src/surface.js.map +1 -0
  115. package/dist/src/toon.d.ts +34 -0
  116. package/dist/src/toon.js +79 -0
  117. package/dist/src/toon.js.map +1 -0
  118. package/dist/src/version.d.ts +1 -0
  119. package/dist/src/version.js +24 -0
  120. package/dist/src/version.js.map +1 -0
  121. package/dist/src/xccov.d.ts +25 -0
  122. package/dist/src/xccov.js +78 -0
  123. package/dist/src/xccov.js.map +1 -0
  124. package/dist/src/xcodebuild.d.ts +65 -0
  125. package/dist/src/xcodebuild.js +163 -0
  126. package/dist/src/xcodebuild.js.map +1 -0
  127. package/dist/src/xcresult.d.ts +96 -0
  128. package/dist/src/xcresult.js +156 -0
  129. package/dist/src/xcresult.js.map +1 -0
  130. package/package.json +75 -0
  131. package/skills/xcodebuild-axi/SKILL.md +64 -0
@@ -0,0 +1,11 @@
1
+ /**
2
+ * App Store Connect authentication, shared by `archive` and `export`.
3
+ *
4
+ * xcodebuild wants three separate flags and fails late — after a full archive
5
+ * — if only some are present. Validating the trio up front turns a wasted
6
+ * ten-minute build into an immediate usage error.
7
+ */
8
+ export declare const AUTH_FLAGS: readonly ["--auth-key-path", "--auth-key-id", "--auth-key-issuer", "--allow-device-registration"];
9
+ export declare const AUTH_VALUE_FLAGS: readonly ["--auth-key-path", "--auth-key-id", "--auth-key-issuer"];
10
+ export declare const AUTH_FLAG_HELP = " --auth-key-path <path> App Store Connect API key (.p8); requires the two flags below\n --auth-key-id <id> key identifier for that key\n --auth-key-issuer <id> issuer identifier for that key\n --allow-device-registration let xcodebuild register the destination device on the portal";
11
+ export declare function authArgs(args: string[], command: string): string[];
@@ -0,0 +1,51 @@
1
+ import { AxiError } from "./errors.js";
2
+ import { getFlag } from "./args.js";
3
+ /**
4
+ * App Store Connect authentication, shared by `archive` and `export`.
5
+ *
6
+ * xcodebuild wants three separate flags and fails late — after a full archive
7
+ * — if only some are present. Validating the trio up front turns a wasted
8
+ * ten-minute build into an immediate usage error.
9
+ */
10
+ export const AUTH_FLAGS = [
11
+ "--auth-key-path",
12
+ "--auth-key-id",
13
+ "--auth-key-issuer",
14
+ "--allow-device-registration",
15
+ ];
16
+ export const AUTH_VALUE_FLAGS = [
17
+ "--auth-key-path",
18
+ "--auth-key-id",
19
+ "--auth-key-issuer",
20
+ ];
21
+ export const AUTH_FLAG_HELP = ` --auth-key-path <path> App Store Connect API key (.p8); requires the two flags below
22
+ --auth-key-id <id> key identifier for that key
23
+ --auth-key-issuer <id> issuer identifier for that key
24
+ --allow-device-registration let xcodebuild register the destination device on the portal`;
25
+ export function authArgs(args, command) {
26
+ const path = getFlag(args, "--auth-key-path");
27
+ const id = getFlag(args, "--auth-key-id");
28
+ const issuer = getFlag(args, "--auth-key-issuer");
29
+ const given = [path, id, issuer].filter((value) => value !== undefined).length;
30
+ if (given > 0 && given < 3) {
31
+ throw new AxiError("App Store Connect auth needs all three of --auth-key-path, --auth-key-id, and --auth-key-issuer", "VALIDATION_ERROR", [
32
+ `xcodebuild-axi ${command} --auth-key-path <path> --auth-key-id <id> --auth-key-issuer <id>`,
33
+ ]);
34
+ }
35
+ return [
36
+ ...(path && id && issuer
37
+ ? [
38
+ "-authenticationKeyPath",
39
+ path,
40
+ "-authenticationKeyID",
41
+ id,
42
+ "-authenticationKeyIssuerID",
43
+ issuer,
44
+ ]
45
+ : []),
46
+ ...(args.includes("--allow-device-registration")
47
+ ? ["-allowProvisioningDeviceRegistration"]
48
+ : []),
49
+ ];
50
+ }
51
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,iBAAiB;IACjB,eAAe;IACf,mBAAmB;IACnB,6BAA6B;CACrB,CAAC;AAEX,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,iBAAiB;IACjB,eAAe;IACf,mBAAmB;CACX,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAG;;;4FAG8D,CAAC;AAE7F,MAAM,UAAU,QAAQ,CAAC,IAAc,EAAE,OAAe;IACtD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;IAC9C,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IAElD,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,MAAM,CACrC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAC/B,CAAC,MAAM,CAAC;IACT,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,QAAQ,CAChB,iGAAiG,EACjG,kBAAkB,EAClB;YACE,kBAAkB,OAAO,mEAAmE;SAC7F,CACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,MAAM;YACtB,CAAC,CAAC;gBACE,wBAAwB;gBACxB,IAAI;gBACJ,sBAAsB;gBACtB,EAAE;gBACF,4BAA4B;gBAC5B,MAAM;aACP;YACH,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,6BAA6B,CAAC;YAC9C,CAAC,CAAC,CAAC,sCAAsC,CAAC;YAC1C,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ export declare const DESCRIPTION = "Agent-ergonomic wrapper around xcodebuild. Prefer it over raw `xcodebuild` for any build / test / inspect of an Xcode project.";
2
+ export declare const TOP_HELP = "usage: xcodebuild-axi [command] [flags]\ncommands[23]:\n (none)=dashboard\n build, test, tests, clean, analyze, archive, export\n schemes, destinations, testplans, settings, packages, info\n result, coverage, sim, platforms, setup\n localize, xcframework, find, migrate\nflags[2]:\n --help, -v/-V/--version\nenv[2]:\n XCODEBUILD_BIN override the wrapped xcodebuild binary\n DEVELOPER_DIR select an Xcode, as xcodebuild itself reads it\nexit:\n 0 success, 1 the build or tests failed, 2 usage error\nexamples:\n xcodebuild-axi\n xcodebuild-axi build --scheme MyApp\n xcodebuild-axi test --scheme MyApp --device \"iPhone 17 Pro\" --coverage\n xcodebuild-axi settings --key PRODUCT_BUNDLE_IDENTIFIER\n xcodebuild-axi setup hooks\n";
3
+ export declare const COMMAND_HELP: Record<string, string>;
4
+ type CliStdout = {
5
+ write: (chunk: string) => unknown;
6
+ };
7
+ interface MainOptions {
8
+ argv?: string[];
9
+ stdout?: CliStdout;
10
+ }
11
+ /**
12
+ * Errors are data: same TOON shape as a normal answer, on stdout, so the agent
13
+ * reads them instead of guessing from an exit code (AXI principle 6).
14
+ */
15
+ export declare function formatCliError(error: unknown): {
16
+ output: string;
17
+ exitCode: number;
18
+ };
19
+ export declare function main(options?: MainOptions): Promise<void>;
20
+ export {};
@@ -0,0 +1,132 @@
1
+ import { encode } from "@toon-format/toon";
2
+ import { runAxiCli } from "axi-sdk-js";
3
+ import { AxiError, exitCodeForError } from "./errors.js";
4
+ import { VERSION } from "./version.js";
5
+ import { homeCommand } from "./commands/home.js";
6
+ import { buildCommand, BUILD_HELP } from "./commands/build.js";
7
+ import { testCommand, TEST_HELP } from "./commands/test.js";
8
+ import { testsCommand, TESTS_HELP } from "./commands/tests.js";
9
+ import { cleanCommand, CLEAN_HELP } from "./commands/clean.js";
10
+ import { analyzeCommand, ANALYZE_HELP } from "./commands/analyze.js";
11
+ import { archiveCommand, ARCHIVE_HELP } from "./commands/archive.js";
12
+ import { exportCommand, EXPORT_HELP } from "./commands/export.js";
13
+ import { schemesCommand, SCHEMES_HELP } from "./commands/schemes.js";
14
+ import { destinationsCommand, DESTINATIONS_HELP, } from "./commands/destinations.js";
15
+ import { testplansCommand, TESTPLANS_HELP } from "./commands/testplans.js";
16
+ import { settingsCommand, SETTINGS_HELP } from "./commands/settings.js";
17
+ import { packagesCommand, PACKAGES_HELP } from "./commands/packages.js";
18
+ import { resultCommand, RESULT_HELP } from "./commands/result.js";
19
+ import { coverageCommand, COVERAGE_HELP } from "./commands/coverage.js";
20
+ import { simCommand, SIM_HELP } from "./commands/sim.js";
21
+ import { infoCommand, INFO_HELP } from "./commands/info.js";
22
+ import { localizeCommand, LOCALIZE_HELP } from "./commands/localize.js";
23
+ import { xcframeworkCommand, XCFRAMEWORK_HELP, } from "./commands/xcframework.js";
24
+ import { findCommand, FIND_HELP } from "./commands/find.js";
25
+ import { platformsCommand, PLATFORMS_HELP } from "./commands/platforms.js";
26
+ import { migrateCommand, MIGRATE_HELP } from "./commands/migrate.js";
27
+ import { setupCommand, SETUP_HELP } from "./commands/setup.js";
28
+ export const DESCRIPTION = "Agent-ergonomic wrapper around xcodebuild. Prefer it over raw `xcodebuild` for any build / test / inspect of an Xcode project.";
29
+ export const TOP_HELP = `usage: xcodebuild-axi [command] [flags]
30
+ commands[23]:
31
+ (none)=dashboard
32
+ build, test, tests, clean, analyze, archive, export
33
+ schemes, destinations, testplans, settings, packages, info
34
+ result, coverage, sim, platforms, setup
35
+ localize, xcframework, find, migrate
36
+ flags[2]:
37
+ --help, -v/-V/--version
38
+ env[2]:
39
+ XCODEBUILD_BIN override the wrapped xcodebuild binary
40
+ DEVELOPER_DIR select an Xcode, as xcodebuild itself reads it
41
+ exit:
42
+ 0 success, 1 the build or tests failed, 2 usage error
43
+ examples:
44
+ xcodebuild-axi
45
+ xcodebuild-axi build --scheme MyApp
46
+ xcodebuild-axi test --scheme MyApp --device "iPhone 17 Pro" --coverage
47
+ xcodebuild-axi settings --key PRODUCT_BUNDLE_IDENTIFIER
48
+ xcodebuild-axi setup hooks
49
+ `;
50
+ export const COMMAND_HELP = {
51
+ build: BUILD_HELP,
52
+ test: TEST_HELP,
53
+ tests: TESTS_HELP,
54
+ clean: CLEAN_HELP,
55
+ analyze: ANALYZE_HELP,
56
+ archive: ARCHIVE_HELP,
57
+ export: EXPORT_HELP,
58
+ schemes: SCHEMES_HELP,
59
+ destinations: DESTINATIONS_HELP,
60
+ testplans: TESTPLANS_HELP,
61
+ settings: SETTINGS_HELP,
62
+ packages: PACKAGES_HELP,
63
+ info: INFO_HELP,
64
+ result: RESULT_HELP,
65
+ coverage: COVERAGE_HELP,
66
+ sim: SIM_HELP,
67
+ platforms: PLATFORMS_HELP,
68
+ migrate: MIGRATE_HELP,
69
+ localize: LOCALIZE_HELP,
70
+ xcframework: XCFRAMEWORK_HELP,
71
+ find: FIND_HELP,
72
+ setup: SETUP_HELP,
73
+ };
74
+ const COMMANDS = {
75
+ build: (args) => buildCommand(args),
76
+ test: (args) => testCommand(args),
77
+ tests: (args) => testsCommand(args),
78
+ clean: (args) => cleanCommand(args),
79
+ analyze: (args) => analyzeCommand(args),
80
+ archive: (args) => archiveCommand(args),
81
+ export: (args) => exportCommand(args),
82
+ schemes: (args) => schemesCommand(args),
83
+ destinations: (args) => destinationsCommand(args),
84
+ testplans: (args) => testplansCommand(args),
85
+ settings: (args) => settingsCommand(args),
86
+ packages: (args) => packagesCommand(args),
87
+ info: (args) => infoCommand(args),
88
+ result: (args) => resultCommand(args),
89
+ coverage: (args) => coverageCommand(args),
90
+ sim: (args) => simCommand(args),
91
+ platforms: (args) => platformsCommand(args),
92
+ migrate: (args) => migrateCommand(args),
93
+ localize: (args) => localizeCommand(args),
94
+ xcframework: (args) => xcframeworkCommand(args),
95
+ find: (args) => findCommand(args),
96
+ setup: (args) => setupCommand(args),
97
+ };
98
+ /**
99
+ * Errors are data: same TOON shape as a normal answer, on stdout, so the agent
100
+ * reads them instead of guessing from an exit code (AXI principle 6).
101
+ */
102
+ export function formatCliError(error) {
103
+ const axiError = error instanceof AxiError
104
+ ? error
105
+ : new AxiError(error instanceof Error ? error.message : String(error), "UNKNOWN");
106
+ const blocks = [encode({ error: axiError.message, code: axiError.code })];
107
+ if (axiError.suggestions.length > 0) {
108
+ blocks.push(`help[${axiError.suggestions.length}]:\n${axiError.suggestions.map((line) => ` ${line}`).join("\n")}`);
109
+ }
110
+ return {
111
+ output: `${blocks.join("\n")}\n`,
112
+ exitCode: exitCodeForError(axiError),
113
+ };
114
+ }
115
+ export async function main(options = {}) {
116
+ await runAxiCli({
117
+ ...(options.argv ? { argv: options.argv } : {}),
118
+ description: DESCRIPTION,
119
+ version: VERSION,
120
+ topLevelHelp: TOP_HELP,
121
+ ...(options.stdout ? { stdout: options.stdout } : {}),
122
+ home: () => homeCommand(),
123
+ commands: COMMANDS,
124
+ getCommandHelp: (command) => COMMAND_HELP[command],
125
+ formatError: formatCliError,
126
+ }).catch((error) => {
127
+ const formatted = formatCliError(error);
128
+ (options.stdout ?? process.stdout).write(formatted.output);
129
+ process.exitCode = formatted.exitCode;
130
+ });
131
+ }
132
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const ANALYZE_HELP = "usage: xcodebuild-axi analyze [flags]\nRuns the static analyzer and reports its findings with exact source locations.\nAnalyzer findings are the payload here, not a count \u2014 unlike `build`, where\nthey are noise alongside compiler warnings.\nflags[41]:\n --scheme <name> scheme to act on (required only when the project has more than one)\n --target <name> build a target instead of a scheme; repeatable (project only)\n --all-targets build every target in the project (project only)\n --device <name> simulator or device name, e.g. \"iPhone 17 Pro\" (default: newest simulator)\n --destination <spec> raw xcodebuild destination specifier, passed through untouched\n --configuration <name> build configuration (default: the scheme's own)\n --sdk <name> base SDK, e.g. iphonesimulator\n --arch <arch> architecture to build; repeatable or comma-separated\n --toolchain <name> toolchain identifier or name\n --xcconfig <path> apply build settings from this file as overrides\n --derived-data <path> derived data directory\n --jobs <n> maximum concurrent build operations\n --setting KEY=VALUE build setting override; repeatable or comma-separated\n --sign allow code signing (off by default, so simulator builds need no team)\n --allow-provisioning let xcodebuild talk to the developer portal for profiles\n --sanitizer <name> address, thread, or undefined; repeatable or comma-separated\n --timing report per-command build timings\n --destination-timeout <secs> how long to wait for the destination device\n --parallelize-targets build independent targets in parallel\n --hide-script-env omit shell script environment variables from the log\n --skip-unavailable-actions skip scheme actions that cannot run instead of failing\n --max-errors <n> errors to list before summarizing the rest (default: 20)\n --full list every warning instead of the first 10\n --codesize <dir> write a code size profile to this directory\n --log-level <level> quiet, normal, or verbose \u2014 how much lands in the log file\n --bundle-version <n> result bundle format version (default: xcodebuild's own)\n --stream <path> also write xcodebuild's live result stream here\n --offline resolve using only the versions already in Package.resolved\n --cache <path> clone remote packages into this directory\n --package-cache <path> shared package cache directory (across projects)\n --no-auto-resolve never resolve automatically; fail if Package.resolved is stale\n --skip-package-updates use the packages already cloned, without checking for updates\n --no-package-cache ignore the shared package repository cache\n --skip-plugin-validation trust build plugins without prompting\n --skip-signature-validation do not verify package signatures\n --package-auth <kind> keychain or netrc\n --registry-url <url> default package registry\n --scm-to-registry <kind> none, identity, or swift-package-registry\n --fingerprint-policy <kind> strict or warn\n --signing-entity-policy <kind> strict or warn\n --scm-provider <kind> system or xcode\nexit:\n 0 the analyze action succeeded (findings do not fail it), 1 it failed, 2 usage error\nexamples:\n xcodebuild-axi analyze\n xcodebuild-axi analyze --scheme MyApp --full\n";
2
+ export declare function analyzeCommand(args: string[]): Promise<string>;
@@ -0,0 +1,32 @@
1
+ import { BUILD_FLAG_HELP, reportAction, resolveBuildContext, runAction, SHARED_BUILD_FLAGS, SHARED_BUILD_VALUE_FLAGS, } from "../action.js";
2
+ import { rejectUnknownFlags } from "../args.js";
3
+ export const ANALYZE_HELP = `usage: xcodebuild-axi analyze [flags]
4
+ Runs the static analyzer and reports its findings with exact source locations.
5
+ Analyzer findings are the payload here, not a count — unlike \`build\`, where
6
+ they are noise alongside compiler warnings.
7
+ flags[41]:
8
+ ${BUILD_FLAG_HELP}
9
+ exit:
10
+ 0 the analyze action succeeded (findings do not fail it), 1 it failed, 2 usage error
11
+ examples:
12
+ xcodebuild-axi analyze
13
+ xcodebuild-axi analyze --scheme MyApp --full
14
+ `;
15
+ export async function analyzeCommand(args) {
16
+ rejectUnknownFlags(args, "analyze", SHARED_BUILD_FLAGS, SHARED_BUILD_VALUE_FLAGS);
17
+ const context = await resolveBuildContext({ args, command: "analyze" });
18
+ const run = await runAction({
19
+ context,
20
+ command: "analyze",
21
+ actions: ["analyze"],
22
+ });
23
+ return reportAction({
24
+ context,
25
+ run,
26
+ key: "analyze",
27
+ ok: "succeeded",
28
+ command: "analyze",
29
+ analyzer: true,
30
+ });
31
+ }
32
+ //# sourceMappingURL=analyze.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/commands/analyze.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;EAK1B,eAAe;;;;;;CAMhB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAc;IACjD,kBAAkB,CAChB,IAAI,EACJ,SAAS,EACT,kBAAkB,EAClB,wBAAwB,CACzB,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IACxE,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC;QAC1B,OAAO;QACP,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,CAAC,SAAS,CAAC;KACrB,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;QAClB,OAAO;QACP,GAAG;QACH,GAAG,EAAE,SAAS;QACd,EAAE,EAAE,WAAW;QACf,OAAO,EAAE,SAAS;QAClB,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const ARCHIVE_HELP = "usage: xcodebuild-axi archive [flags]\nArchives a scheme and reports the archive's identity \u2014 bundle id, version, and\nbuild number \u2014 so the next step does not need a second lookup.\nflags[46]:\n --scheme <name> scheme to act on (required only when the project has more than one)\n --target <name> build a target instead of a scheme; repeatable (project only)\n --all-targets build every target in the project (project only)\n --device <name> simulator or device name, e.g. \"iPhone 17 Pro\" (default: newest simulator)\n --destination <spec> raw xcodebuild destination specifier, passed through untouched\n --configuration <name> build configuration (default: the scheme's own)\n --sdk <name> base SDK, e.g. iphonesimulator\n --arch <arch> architecture to build; repeatable or comma-separated\n --toolchain <name> toolchain identifier or name\n --xcconfig <path> apply build settings from this file as overrides\n --derived-data <path> derived data directory\n --jobs <n> maximum concurrent build operations\n --setting KEY=VALUE build setting override; repeatable or comma-separated\n --sign allow code signing (off by default, so simulator builds need no team)\n --allow-provisioning let xcodebuild talk to the developer portal for profiles\n --sanitizer <name> address, thread, or undefined; repeatable or comma-separated\n --timing report per-command build timings\n --destination-timeout <secs> how long to wait for the destination device\n --parallelize-targets build independent targets in parallel\n --hide-script-env omit shell script environment variables from the log\n --skip-unavailable-actions skip scheme actions that cannot run instead of failing\n --max-errors <n> errors to list before summarizing the rest (default: 20)\n --full list every warning instead of the first 10\n --codesize <dir> write a code size profile to this directory\n --log-level <level> quiet, normal, or verbose \u2014 how much lands in the log file\n --bundle-version <n> result bundle format version (default: xcodebuild's own)\n --stream <path> also write xcodebuild's live result stream here\n --offline resolve using only the versions already in Package.resolved\n --cache <path> clone remote packages into this directory\n --package-cache <path> shared package cache directory (across projects)\n --no-auto-resolve never resolve automatically; fail if Package.resolved is stale\n --skip-package-updates use the packages already cloned, without checking for updates\n --no-package-cache ignore the shared package repository cache\n --skip-plugin-validation trust build plugins without prompting\n --skip-signature-validation do not verify package signatures\n --package-auth <kind> keychain or netrc\n --registry-url <url> default package registry\n --scm-to-registry <kind> none, identity, or swift-package-registry\n --fingerprint-policy <kind> strict or warn\n --signing-entity-policy <kind> strict or warn\n --scm-provider <kind> system or xcode\n --archive-path <path> where to write the .xcarchive (default: the tool's cache)\n --auth-key-path <path> App Store Connect API key (.p8); requires the two flags below\n --auth-key-id <id> key identifier for that key\n --auth-key-issuer <id> issuer identifier for that key\n --allow-device-registration let xcodebuild register the destination device on the portal\nnote:\n Archiving signs by default, unlike `build` \u2014 an unsigned archive cannot be\n exported. Pass --allow-provisioning to let xcodebuild fetch profiles.\nexit:\n 0 archive succeeded, 1 it failed, 2 usage error\nexamples:\n xcodebuild-axi archive --scheme MyApp\n xcodebuild-axi archive --scheme MyApp --archive-path build/MyApp.xcarchive\n";
2
+ export declare function archiveCommand(args: string[]): Promise<string>;
@@ -0,0 +1,63 @@
1
+ import { join } from "node:path";
2
+ import { BUILD_FLAG_HELP, reportAction, resolveBuildContext, runAction, SHARED_BUILD_FLAGS, SHARED_BUILD_VALUE_FLAGS, } from "../action.js";
3
+ import { readArchiveInfo } from "../archive.js";
4
+ import { authArgs, AUTH_FLAGS, AUTH_FLAG_HELP, AUTH_VALUE_FLAGS, } from "../auth.js";
5
+ import { artifactDir } from "../xcodebuild.js";
6
+ import { tildePath } from "../toon.js";
7
+ import { getFlag, rejectUnknownFlags } from "../args.js";
8
+ export const ARCHIVE_HELP = `usage: xcodebuild-axi archive [flags]
9
+ Archives a scheme and reports the archive's identity — bundle id, version, and
10
+ build number — so the next step does not need a second lookup.
11
+ flags[46]:
12
+ ${BUILD_FLAG_HELP}
13
+ --archive-path <path> where to write the .xcarchive (default: the tool's cache)
14
+ ${AUTH_FLAG_HELP}
15
+ note:
16
+ Archiving signs by default, unlike \`build\` — an unsigned archive cannot be
17
+ exported. Pass --allow-provisioning to let xcodebuild fetch profiles.
18
+ exit:
19
+ 0 archive succeeded, 1 it failed, 2 usage error
20
+ examples:
21
+ xcodebuild-axi archive --scheme MyApp
22
+ xcodebuild-axi archive --scheme MyApp --archive-path build/MyApp.xcarchive
23
+ `;
24
+ const FLAGS = [...SHARED_BUILD_FLAGS, "--archive-path", ...AUTH_FLAGS];
25
+ const VALUE_FLAGS = [
26
+ ...SHARED_BUILD_VALUE_FLAGS,
27
+ "--archive-path",
28
+ ...AUTH_VALUE_FLAGS,
29
+ ];
30
+ export async function archiveCommand(args) {
31
+ rejectUnknownFlags(args, "archive", FLAGS, VALUE_FLAGS);
32
+ // An archive built with CODE_SIGNING_ALLOWED=NO cannot be exported, so
33
+ // unlike every other build-family command this one signs unless told
34
+ // otherwise. Injecting --sign keeps that in one place.
35
+ const signedArgs = args.includes("--sign") ? args : [...args, "--sign"];
36
+ const context = await resolveBuildContext({
37
+ args: signedArgs,
38
+ command: "archive",
39
+ });
40
+ const archivePath = getFlag(args, "--archive-path") ??
41
+ join(artifactDir(context.project), `${context.scheme}.xcarchive`);
42
+ const run = await runAction({
43
+ context,
44
+ command: "archive",
45
+ actions: ["archive"],
46
+ extraArgs: ["-archivePath", archivePath, ...authArgs(args, "archive")],
47
+ });
48
+ const info = run.exitCode === 0 ? await readArchiveInfo(archivePath) : undefined;
49
+ return reportAction({
50
+ context,
51
+ run,
52
+ key: "archive",
53
+ ok: "created",
54
+ command: "archive",
55
+ extra: {
56
+ ...(run.exitCode === 0 ? { archive: tildePath(archivePath) } : {}),
57
+ ...(info?.bundleIdentifier ? { bundle_id: info.bundleIdentifier } : {}),
58
+ ...(info?.marketingVersion ? { version: info.marketingVersion } : {}),
59
+ ...(info?.buildNumber ? { build: info.buildNumber } : {}),
60
+ },
61
+ });
62
+ }
63
+ //# sourceMappingURL=archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../../src/commands/archive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const BUILD_HELP = "usage: xcodebuild-axi build [flags]\nBuilds a scheme and reports only what failed, with exact source locations.\nflags[45]:\n --scheme <name> scheme to act on (required only when the project has more than one)\n --target <name> build a target instead of a scheme; repeatable (project only)\n --all-targets build every target in the project (project only)\n --device <name> simulator or device name, e.g. \"iPhone 17 Pro\" (default: newest simulator)\n --destination <spec> raw xcodebuild destination specifier, passed through untouched\n --configuration <name> build configuration (default: the scheme's own)\n --sdk <name> base SDK, e.g. iphonesimulator\n --arch <arch> architecture to build; repeatable or comma-separated\n --toolchain <name> toolchain identifier or name\n --xcconfig <path> apply build settings from this file as overrides\n --derived-data <path> derived data directory\n --jobs <n> maximum concurrent build operations\n --setting KEY=VALUE build setting override; repeatable or comma-separated\n --sign allow code signing (off by default, so simulator builds need no team)\n --allow-provisioning let xcodebuild talk to the developer portal for profiles\n --sanitizer <name> address, thread, or undefined; repeatable or comma-separated\n --timing report per-command build timings\n --destination-timeout <secs> how long to wait for the destination device\n --parallelize-targets build independent targets in parallel\n --hide-script-env omit shell script environment variables from the log\n --skip-unavailable-actions skip scheme actions that cannot run instead of failing\n --max-errors <n> errors to list before summarizing the rest (default: 20)\n --full list every warning instead of the first 10\n --codesize <dir> write a code size profile to this directory\n --log-level <level> quiet, normal, or verbose \u2014 how much lands in the log file\n --bundle-version <n> result bundle format version (default: xcodebuild's own)\n --stream <path> also write xcodebuild's live result stream here\n --offline resolve using only the versions already in Package.resolved\n --cache <path> clone remote packages into this directory\n --package-cache <path> shared package cache directory (across projects)\n --no-auto-resolve never resolve automatically; fail if Package.resolved is stale\n --skip-package-updates use the packages already cloned, without checking for updates\n --no-package-cache ignore the shared package repository cache\n --skip-plugin-validation trust build plugins without prompting\n --skip-signature-validation do not verify package signatures\n --package-auth <kind> keychain or netrc\n --registry-url <url> default package registry\n --scm-to-registry <kind> none, identity, or swift-package-registry\n --fingerprint-policy <kind> strict or warn\n --signing-entity-policy <kind> strict or warn\n --scm-provider <kind> system or xcode\n --clean clean before building\n --for-testing build the tests too and emit an .xctestrun (build-for-testing)\n --install run the install action instead of build\n --docs build documentation (docbuild) instead of build\nexit:\n 0 build succeeded, 1 build failed, 2 usage error\nexamples:\n xcodebuild-axi build\n xcodebuild-axi build --scheme MyApp --device \"iPhone 17 Pro\"\n xcodebuild-axi build --scheme MyApp --configuration Release --clean\n xcodebuild-axi build --scheme MyApp --for-testing\n";
2
+ export declare function buildCommand(args: string[]): Promise<string>;
@@ -0,0 +1,60 @@
1
+ import { BUILD_FLAG_HELP, reportAction, resolveBuildContext, runAction, SHARED_BUILD_FLAGS, SHARED_BUILD_VALUE_FLAGS, } from "../action.js";
2
+ import { AxiError } from "../errors.js";
3
+ import { hasFlag, rejectUnknownFlags } from "../args.js";
4
+ export const BUILD_HELP = `usage: xcodebuild-axi build [flags]
5
+ Builds a scheme and reports only what failed, with exact source locations.
6
+ flags[45]:
7
+ ${BUILD_FLAG_HELP}
8
+ --clean clean before building
9
+ --for-testing build the tests too and emit an .xctestrun (build-for-testing)
10
+ --install run the install action instead of build
11
+ --docs build documentation (docbuild) instead of build
12
+ exit:
13
+ 0 build succeeded, 1 build failed, 2 usage error
14
+ examples:
15
+ xcodebuild-axi build
16
+ xcodebuild-axi build --scheme MyApp --device "iPhone 17 Pro"
17
+ xcodebuild-axi build --scheme MyApp --configuration Release --clean
18
+ xcodebuild-axi build --scheme MyApp --for-testing
19
+ `;
20
+ const FLAGS = [
21
+ ...SHARED_BUILD_FLAGS,
22
+ "--clean",
23
+ "--for-testing",
24
+ "--install",
25
+ "--docs",
26
+ ];
27
+ export async function buildCommand(args) {
28
+ rejectUnknownFlags(args, "build", FLAGS, SHARED_BUILD_VALUE_FLAGS);
29
+ const action = pickAction(args);
30
+ const context = await resolveBuildContext({ args, command: "build" });
31
+ const run = await runAction({
32
+ context,
33
+ command: action === "build" ? "build" : action,
34
+ actions: [...(hasFlag(args, "--clean") ? ["clean"] : []), action],
35
+ });
36
+ return reportAction({
37
+ context,
38
+ run,
39
+ key: "build",
40
+ ok: "succeeded",
41
+ command: "build",
42
+ });
43
+ }
44
+ /**
45
+ * The build family's four actions are mutually exclusive: xcodebuild would
46
+ * accept two action words and quietly run both, which is not what `--install
47
+ * --docs` means to anyone typing it.
48
+ */
49
+ function pickAction(args) {
50
+ const chosen = [
51
+ hasFlag(args, "--for-testing") ? "build-for-testing" : undefined,
52
+ hasFlag(args, "--install") ? "install" : undefined,
53
+ hasFlag(args, "--docs") ? "docbuild" : undefined,
54
+ ].filter((action) => action !== undefined);
55
+ if (chosen.length > 1) {
56
+ throw new AxiError("--for-testing, --install, and --docs each select a different action, so only one can be used at a time", "VALIDATION_ERROR", ["pick one, or run `xcodebuild-axi build` for a plain build"]);
57
+ }
58
+ return chosen[0] ?? "build";
59
+ }
60
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,CAAC,MAAM,UAAU,GAAG;;;EAGxB,eAAe;;;;;;;;;;;;CAYhB,CAAC;AAEF,MAAM,KAAK,GAAG;IACZ,GAAG,kBAAkB;IACrB,SAAS;IACT,eAAe;IACf,WAAW;IACX,QAAQ;CACA,CAAC;AAEX,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAc;IAC/C,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,wBAAwB,CAAC,CAAC;IAEnE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACtE,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC;QAC1B,OAAO;QACP,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;QAC9C,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;KAClE,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;QAClB,OAAO;QACP,GAAG;QACH,GAAG,EAAE,OAAO;QACZ,EAAE,EAAE,WAAW;QACf,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,IAAc;IAChC,MAAM,MAAM,GAAG;QACb,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS;QAChE,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QAClD,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;KACjD,CAAC,MAAM,CAAC,CAAC,MAAM,EAAoB,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAE7D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,QAAQ,CAChB,wGAAwG,EACxG,kBAAkB,EAClB,CAAC,2DAA2D,CAAC,CAC9D,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const CLEAN_HELP = "usage: xcodebuild-axi clean [flags]\nRemoves a scheme's build products and intermediates.\nflags[3]:\n --scheme <name> scheme to clean (required only when the project has more than one)\n --configuration <name> configuration to clean (default: the scheme's own)\n --derived-data <path> derived data directory to clean within\nexamples:\n xcodebuild-axi clean\n xcodebuild-axi clean --scheme MyApp --configuration Release\n";
2
+ export declare function cleanCommand(args: string[]): Promise<string>;
@@ -0,0 +1,39 @@
1
+ import { reportAction, resolveBuildContext, runAction } from "../action.js";
2
+ import { getFlag, rejectUnknownFlags } from "../args.js";
3
+ export const CLEAN_HELP = `usage: xcodebuild-axi clean [flags]
4
+ Removes a scheme's build products and intermediates.
5
+ flags[3]:
6
+ --scheme <name> scheme to clean (required only when the project has more than one)
7
+ --configuration <name> configuration to clean (default: the scheme's own)
8
+ --derived-data <path> derived data directory to clean within
9
+ examples:
10
+ xcodebuild-axi clean
11
+ xcodebuild-axi clean --scheme MyApp --configuration Release
12
+ `;
13
+ const FLAGS = ["--scheme", "--configuration", "--derived-data"];
14
+ export async function cleanCommand(args) {
15
+ rejectUnknownFlags(args, "clean", FLAGS, FLAGS);
16
+ // Cleaning needs no destination, and resolving one costs a whole
17
+ // `-showdestinations` subprocess against a scheme we are about to wipe.
18
+ const context = await resolveBuildContext({
19
+ args,
20
+ command: "clean",
21
+ needsDestination: false,
22
+ });
23
+ const run = await runAction({
24
+ context,
25
+ command: "clean",
26
+ actions: ["clean"],
27
+ });
28
+ return reportAction({
29
+ context,
30
+ run,
31
+ key: "clean",
32
+ ok: "succeeded",
33
+ command: "clean",
34
+ ...(getFlag(args, "--configuration") !== undefined
35
+ ? { extra: { configuration: getFlag(args, "--configuration") } }
36
+ : {}),
37
+ });
38
+ }
39
+ //# sourceMappingURL=clean.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../../src/commands/clean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;CASzB,CAAC;AAEF,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,iBAAiB,EAAE,gBAAgB,CAAU,CAAC;AAEzE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAc;IAC/C,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAEhD,iEAAiE;IACjE,wEAAwE;IACxE,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC;QACxC,IAAI;QACJ,OAAO,EAAE,OAAO;QAChB,gBAAgB,EAAE,KAAK;KACxB,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC;QAC1B,OAAO;QACP,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,CAAC,OAAO,CAAC;KACnB,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;QAClB,OAAO;QACP,GAAG;QACH,GAAG,EAAE,OAAO;QACZ,EAAE,EAAE,WAAW;QACf,OAAO,EAAE,OAAO;QAChB,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC,KAAK,SAAS;YAChD,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAW,EAAE,EAAE;YAC1E,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const COVERAGE_HELP = "usage: xcodebuild-axi coverage <path.xcresult> [flags]\nReads code coverage out of a result bundle \u2014 one percentage per target, not the\nthousands of per-file lines xccov prints by default.\nflags[4]:\n --files list per-file coverage as well as per-target\n --target <name> only this target\n --below <percent> only files under this coverage, e.g. --below 50\n --max <n> rows to list before summarizing the rest (default: 25)\nnote:\n Coverage has to have been collected. Run the tests with\n `xcodebuild-axi test --coverage` if the bundle has none.\nexamples:\n xcodebuild-axi coverage ~/Library/Caches/xcodebuild-axi/MyApps-1a2b3c4d/MyApp-test.xcresult\n xcodebuild-axi coverage build/MyApp.xcresult --files --below 50\n";
2
+ export declare function coverageCommand(args: string[]): Promise<string>;
@@ -0,0 +1,111 @@
1
+ import { resolve } from "node:path";
2
+ import { AxiError } from "../errors.js";
3
+ import { percent, readCoverage } from "../xccov.js";
4
+ import { relativize } from "../xcresult.js";
5
+ import { renderFields, renderHelp, renderList, renderOutput, tildePath, } from "../toon.js";
6
+ import { getFlag, getIntFlag, hasFlag, positionals, rejectUnknownFlags, } from "../args.js";
7
+ export const COVERAGE_HELP = `usage: xcodebuild-axi coverage <path.xcresult> [flags]
8
+ Reads code coverage out of a result bundle — one percentage per target, not the
9
+ thousands of per-file lines xccov prints by default.
10
+ flags[4]:
11
+ --files list per-file coverage as well as per-target
12
+ --target <name> only this target
13
+ --below <percent> only files under this coverage, e.g. --below 50
14
+ --max <n> rows to list before summarizing the rest (default: 25)
15
+ note:
16
+ Coverage has to have been collected. Run the tests with
17
+ \`xcodebuild-axi test --coverage\` if the bundle has none.
18
+ examples:
19
+ xcodebuild-axi coverage ~/Library/Caches/xcodebuild-axi/MyApps-1a2b3c4d/MyApp-test.xcresult
20
+ xcodebuild-axi coverage build/MyApp.xcresult --files --below 50
21
+ `;
22
+ const FLAGS = ["--files", "--target", "--below", "--max"];
23
+ const VALUE_FLAGS = ["--target", "--below", "--max"];
24
+ export async function coverageCommand(args) {
25
+ rejectUnknownFlags(args, "coverage", FLAGS, VALUE_FLAGS);
26
+ const [rawPath] = positionals(args, VALUE_FLAGS);
27
+ if (rawPath === undefined) {
28
+ throw new AxiError("coverage needs a path to an .xcresult bundle", "VALIDATION_ERROR", [
29
+ "xcodebuild-axi coverage <path.xcresult>",
30
+ "`xcodebuild-axi test --coverage` prints the path it wrote",
31
+ ]);
32
+ }
33
+ const path = resolve(expandTilde(rawPath));
34
+ const below = getIntFlag(args, "--below");
35
+ const max = getIntFlag(args, "--max") ?? 25;
36
+ const targetFilter = getFlag(args, "--target")?.toLowerCase();
37
+ // A --below filter is meaningless without the files it filters, so imply it
38
+ // rather than returning an empty list the agent has to debug.
39
+ const wantFiles = hasFlag(args, "--files") || below !== undefined;
40
+ const report = await readCoverage(path, { files: wantFiles });
41
+ let targets = report.targets;
42
+ if (targetFilter) {
43
+ targets = targets.filter((target) => target.name.toLowerCase().includes(targetFilter));
44
+ if (targets.length === 0) {
45
+ throw new AxiError(`No target matching '${getFlag(args, "--target")}'`, "VALIDATION_ERROR", [
46
+ `targets in this bundle: ${report.targets.map((target) => target.name).join(", ")}`,
47
+ ]);
48
+ }
49
+ }
50
+ const blocks = [
51
+ renderFields({
52
+ coverage: percent(report.lineCoverage),
53
+ lines: `${report.coveredLines} of ${report.executableLines} covered`,
54
+ targets: report.targets.length,
55
+ }),
56
+ ];
57
+ const targetRows = targets
58
+ .slice()
59
+ .sort((a, b) => a.lineCoverage - b.lineCoverage)
60
+ .slice(0, max)
61
+ .map((target) => ({
62
+ target: target.name,
63
+ coverage: percent(target.lineCoverage),
64
+ lines: `${target.coveredLines}/${target.executableLines}`,
65
+ }));
66
+ if (targetRows.length > 0) {
67
+ blocks.push(renderList(targets.length > targetRows.length
68
+ ? `targets (${targetRows.length} of ${targets.length})`
69
+ : "targets", targetRows));
70
+ }
71
+ if (wantFiles) {
72
+ const threshold = below === undefined ? undefined : below / 100;
73
+ const files = targets
74
+ .flatMap((target) => target.files ?? [])
75
+ .filter((file) => threshold === undefined || file.lineCoverage < threshold)
76
+ // Executable-line-free files sit at 0% forever and are pure noise in a
77
+ // "what needs tests" list.
78
+ .filter((file) => file.executableLines > 0)
79
+ .sort((a, b) => a.lineCoverage - b.lineCoverage);
80
+ if (files.length === 0) {
81
+ blocks.push(renderFields({
82
+ files: below === undefined
83
+ ? "0 files with executable lines"
84
+ : `0 files below ${below}% coverage`,
85
+ }));
86
+ }
87
+ else {
88
+ const shown = files.slice(0, max).map((file) => ({
89
+ file: relativize(file.path || file.name),
90
+ coverage: percent(file.lineCoverage),
91
+ lines: `${file.coveredLines}/${file.executableLines}`,
92
+ }));
93
+ blocks.push(renderList(files.length > shown.length
94
+ ? `files (${shown.length} of ${files.length})`
95
+ : "files", shown));
96
+ }
97
+ }
98
+ blocks.push(renderFields({ bundle: tildePath(path) }));
99
+ const hints = [];
100
+ if (!wantFiles) {
101
+ hints.push(`Run \`xcodebuild-axi coverage ${rawPath} --files\` for per-file coverage`);
102
+ hints.push(`Run \`xcodebuild-axi coverage ${rawPath} --below 50\` for the files that need tests`);
103
+ }
104
+ blocks.push(renderHelp(hints));
105
+ return renderOutput(blocks);
106
+ }
107
+ function expandTilde(path) {
108
+ const home = process.env["HOME"];
109
+ return home && path.startsWith("~/") ? `${home}${path.slice(1)}` : path;
110
+ }
111
+ //# sourceMappingURL=coverage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../../src/commands/coverage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const DESTINATIONS_HELP = "usage: xcodebuild-axi destinations [flags]\nLists the destinations a scheme can actually run on.\nflags[3]:\n --scheme <name> scheme to inspect (required only when the project has more than one)\n --all include ineligible destinations, which xcodebuild hides the reason for\n --simulators simulators only\nexamples:\n xcodebuild-axi destinations\n xcodebuild-axi destinations --scheme MyApp --simulators\n";
2
+ export declare function destinationsCommand(args: string[]): Promise<string>;