Skip to content

Commit 36e051b

Browse files
committed
Release v2.5.0
1 parent 9761c12 commit 36e051b

4 files changed

Lines changed: 63 additions & 42 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 58 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,10 @@
11
# Changelog
22

3-
## [Unreleased]
4-
5-
### Added
6-
7-
- Added configurable file artifact text rendering with CLI output defaulting to labeled `Files:` lists, MCP text preserving compact trees, and `filePathRenderStyle` / `XCODEBUILDMCP_FILE_PATH_RENDER_STYLE` / `--file-path-render-style` overrides.
8-
- Added workspace-scoped default xcresult bundles for simulator, device, and macOS test tools so test artifacts are available in structured and text output even when callers do not pass `-resultBundlePath`.
9-
- Added opt-in MCP server idle shutdown via `XCODEBUILDMCP_MCP_IDLE_TIMEOUT_MS`, allowing unused MCP server processes to gracefully exit after a configured idle period ([#394](https://github.com/getsentry/XcodeBuildMCP/issues/394)).
10-
- Added canonical `launchArgs` launch-argument input across build-and-run tools (`build_run_sim`, `build_run_device`, `build_run_macos`) and launch-only tools (`launch_app_sim`, `launch_app_device`, `launch_mac_app`) so runtime launch arguments are passed only to app launch steps; `extraArgs` remains build-system-only and launch-only tools no longer use generic `args`.
11-
12-
### Fixed
13-
14-
- Fixed remaining `/bin/sh -c` shell-injection sites in bundle ID extraction and macOS launch flows by invoking `defaults` and `PlistBuddy` directly with argv arrays so user-supplied app paths are no longer interpreted by a shell ([#367](https://github.com/getsentry/XcodeBuildMCP/issues/367)).
15-
- Fixed simulator test JSONL accuracy by keeping preflight discovery observational, preserving only user-supplied test selectors, discovering multiline parameterized Swift Testing tests, and parsing destination-suffixed xcodebuild test result lines.
16-
- Removed stale physical-device log session status and shutdown cleanup for deprecated standalone device log capture, and corrected the device build-and-run tool description.
17-
- Fixed mixed Swift Testing and XCTest summaries so simulator test text output no longer overcounts parameterized Swift Testing results or issue lines.
18-
- Fixed CLI test summaries showing false-positive compiler errors from xcodebuild NSError dump lines, and added compiler-error snapshot coverage for simulator, device, and macOS build-style flows ([#383](https://github.com/getsentry/XcodeBuildMCP/issues/383)).
19-
- Fixed simulator OSLog helper cleanup so server and daemon startup reconcile same-workspace orphaned log streams without stopping helpers owned by live sessions in other workspaces ([#382](https://github.com/getsentry/XcodeBuildMCP/issues/382)).
20-
- Fixed Weather example test discovery and made CLI test progress visible while tests are running instead of leaving the last build phase displayed.
21-
- Exposed xcresult bundle paths in test result structured output and text output when xcodebuild reports or is given a result bundle path, so agents can inspect test artifacts after simulator, device, and macOS test runs ([#392](https://github.com/getsentry/XcodeBuildMCP/issues/392)).
22-
- Fixed final test summaries to use xcresult top-level test declaration counts when available, avoiding overcounting dynamic-parameter test runs ([#392](https://github.com/getsentry/XcodeBuildMCP/issues/392)).
23-
24-
### Changed
25-
26-
- Updated Xcode IDE `call-tool` output to save raw remote responses as transient workspace-state JSON artifacts, summarize text output without embedding large relayed payloads, and support `--output json` / `--output jsonl` through the generic CLI output path.
27-
- Centralized workspace log retention and startup/shutdown filesystem cleanup so XcodeBuildMCP-owned logs are pruned consistently while preserving active daemon and simulator OSLog outputs.
28-
- Removed internal streaming-fragment context flags so final tool state now comes from explicit structured outputs instead of transient progress fragments ([#360](https://github.com/getsentry/XcodeBuildMCP/issues/360)).
29-
30-
## [2.5.0-beta.1]
3+
## [2.5.0]
314

325
### Breaking
336

34-
#### Legacy standalone log-capture tools removed
7+
#### Standalone log-capture tools removed
358

369
The old `logging` workflow and its standalone log-capture tools (`start_sim_log_cap`, `stop_sim_log_cap`, `start_device_log_cap`, `stop_device_log_cap`, and `launch_app_logs_sim`) have been removed. This affects users, scripts, and agents that call those tool names directly.
3710

@@ -56,9 +29,47 @@ xcodebuildmcp simulator launch-app --simulator-id <UDID> --bundle-id com.example
5629

5730
For MCP clients, use `build_run_sim` or `launch_app_sim` and read the returned runtime log path.
5831

32+
#### Runtime launch arguments now use `launchArgs`
33+
34+
Build-and-run and launch-only tools now separate build settings from app launch arguments. This affects users, scripts, and agents that previously passed runtime arguments through `extraArgs` or the launch-only `args` input.
35+
36+
If you do nothing, app runtime arguments may not reach the launched process, and launch-only calls that still use `args` will fail validation. Move app arguments to `launchArgs`; keep `extraArgs` only for `xcodebuild` flags and build setting overrides.
37+
38+
Before:
39+
40+
```bash
41+
xcodebuildmcp simulator build-and-run --json '{
42+
"scheme": "MyApp",
43+
"projectPath": "./MyApp.xcodeproj",
44+
"extraArgs": ["--uitesting"]
45+
}'
46+
```
47+
48+
After:
49+
50+
```bash
51+
xcodebuildmcp simulator build-and-run --json '{
52+
"scheme": "MyApp",
53+
"projectPath": "./MyApp.xcodeproj",
54+
"launchArgs": ["--uitesting"]
55+
}'
56+
```
57+
58+
Launch-only tools use the same input:
59+
60+
```bash
61+
xcodebuildmcp simulator launch-app --json '{
62+
"simulatorId": "<UDID>",
63+
"bundleId": "com.example.MyApp",
64+
"launchArgs": ["--uitesting"]
65+
}'
66+
```
67+
68+
For MCP clients, use `launchArgs` on `build_run_sim`, `build_run_device`, `build_run_macos`, `launch_app_sim`, `launch_app_device`, and `launch_mac_app`. See [CLI](https://xcodebuildmcp.com/docs/cli#build-and-run-in-one-step).
69+
5970
### New! Structured outputs
6071

61-
XcodeBuildMCP now returns structured, machine-readable results across supported MCP clients and the CLI. Agents and scripts no longer have to scrape prose to find build status, log paths, bundle IDs, process IDs, test failures, or app paths. The human-readable text remains available, but every supported result now has a consistent envelope with the same frontmatter fields:
72+
XcodeBuildMCP now returns structured, machine-readable results across supported MCP clients and the CLI. Agents and scripts no longer have to scrape prose to find build status, log paths, bundle IDs, process IDs, test failures, or app paths. The human-readable text remains available, but every supported result now has a consistent envelope with the same fields:
6273

6374
```json
6475
{
@@ -145,29 +156,39 @@ For example: [`xcodebuildmcp.output.build-run-result` v1](https://xcodebuildmcp.
145156

146157
- Added `xcodebuildmcp upgrade` to check for available updates and upgrade in place, with `--check` for report-only use and `--yes`/`-y` for non-interactive upgrades.
147158
- Added a platform-aware `xcodebuildmcp setup` wizard: choose macOS, iOS, tvOS, watchOS, or visionOS up front; get platform-appropriate workflow recommendations; skip simulator/device prompts for macOS-only projects; and reuse previous choices when re-running setup. Single-platform setups also include the platform in generated config and `--format mcp-json` output. See [Setup](https://xcodebuildmcp.com/docs/setup) ([#365](https://github.com/getsentry/XcodeBuildMCP/pull/365), based on work by [@ichoosetoaccept](https://github.com/ichoosetoaccept)).
148-
- Added `XCODEBUILDMCP_CWD` so MCP clients that cannot choose the server's start directory can still point project config discovery and relative-path resolution at the right workspace.
149-
- Added per-test timing output for test runs. JSON and structured results now include a `testCases` list, and text output can show per-test durations with the `showTestTiming` config option or `XCODEBUILDMCP_SHOW_TEST_TIMING=1` ([#339](https://github.com/getsentry/XcodeBuildMCP/pull/339) by [@codeman9](https://github.com/codeman9)).
159+
- Added `XCODEBUILDMCP_CWD` so MCP clients that cannot choose the server's start directory can still point project config discovery and relative-path resolution at the right workspace. See [Environment Variables](https://xcodebuildmcp.com/docs/env-vars#general-settings).
160+
- Added per-test timing output, so agents and scripts can identify slow tests without opening the full test report. JSON and structured results include a `testCases` list, and text output can show per-test durations with `showTestTiming` or `XCODEBUILDMCP_SHOW_TEST_TIMING=1` ([#339](https://github.com/getsentry/XcodeBuildMCP/pull/339) by [@codeman9](https://github.com/codeman9)).
161+
- Added default result bundles for simulator, device, macOS, and Swift Package test runs, so agents can inspect detailed test artifacts without manually choosing a result bundle path.
162+
- Added opt-in idle shutdown for unused MCP server processes via `XCODEBUILDMCP_MCP_IDLE_TIMEOUT_MS`, reducing leftover background processes for clients that keep server sessions open ([#398](https://github.com/getsentry/XcodeBuildMCP/pull/398)). See [Environment Variables](https://xcodebuildmcp.com/docs/env-vars#mcp-idle-shutdown).
150163
- Added `toggle_software_keyboard` and `toggle_connect_hardware_keyboard` tools for showing/hiding the iOS Simulator software keyboard and connecting/disconnecting the Mac hardware keyboard. See [Tools Reference](https://xcodebuildmcp.com/docs/tools) ([#346](https://github.com/getsentry/XcodeBuildMCP/issues/346), [#347](https://github.com/getsentry/XcodeBuildMCP/pull/347) by [@yjmeqt](https://github.com/yjmeqt)).
151164
- Added tvOS, watchOS, and visionOS support to `build_device`, so physical-device builds are no longer limited to iOS. See [Device Code Signing](https://xcodebuildmcp.com/docs/device-signing) ([#352](https://github.com/getsentry/XcodeBuildMCP/pull/352) by [@bitxeno](https://github.com/bitxeno)).
152165

153166
### Changed
154167

155168
- CLI build and test commands now show live progress while they are running instead of waiting until the command finishes. See [Output Formats](https://xcodebuildmcp.com/docs/output-formats).
156-
- Runtime log capture is more reliable across server restarts and cleans itself up when apps stop or the server shuts down, reducing orphaned background log streams.
169+
- CLI text output now shows file paths in a more readable `Files:` list by default. Use `--file-path-render-style tree`, `filePathRenderStyle`, or `XCODEBUILDMCP_FILE_PATH_RENDER_STYLE` if you prefer the compact tree layout used by MCP text responses ([#402](https://github.com/getsentry/XcodeBuildMCP/pull/402)). See [Output Formats](https://xcodebuildmcp.com/docs/output-formats#output-text).
170+
- Xcode IDE tool results are now shorter in final output, with full details still accessible when needed. CLI JSON and JSONL output now work for Xcode IDE tool calls too ([#396](https://github.com/getsentry/XcodeBuildMCP/pull/396)).
171+
- Runtime log capture is more reliable across restarts, cleans itself up when apps stop or the server shuts down, and avoids stopping active log streams from another workspace ([#382](https://github.com/getsentry/XcodeBuildMCP/issues/382)).
172+
- XcodeBuildMCP now cleans up old logs and temporary build artifacts more reliably without disrupting concurrent active sessions ([#391](https://github.com/getsentry/XcodeBuildMCP/pull/391)).
157173
- Builds and tests now use an isolated DerivedData location per workspace or project when you have not set `derivedDataPath`, reducing cross-project build conflicts while keeping explicit `derivedDataPath` settings unchanged ([#340](https://github.com/getsentry/XcodeBuildMCP/issues/340), [#341](https://github.com/getsentry/XcodeBuildMCP/pull/341) by [@codeman9](https://github.com/codeman9)).
158174
- Long-form documentation has moved to [xcodebuildmcp.com/docs](https://xcodebuildmcp.com/docs), with the README focused on installation, setup, and quick links to the hosted guides.
159175

160176
### Fixed
161177

162-
- Fixed a shell injection vulnerability when user-provided values were passed to Apple developer tools and log-capture queries ([#289](https://github.com/getsentry/XcodeBuildMCP/pull/289) by [@sebastiondev](https://github.com/sebastiondev)).
163-
- Fixed a path traversal vulnerability in structured-output schema loading so schema requests cannot read outside the bundled schema files.
178+
- Fixed shell-injection vulnerabilities when user-provided values were passed to Apple developer tools, log-capture queries, bundle ID extraction, and macOS launch flows ([#289](https://github.com/getsentry/XcodeBuildMCP/pull/289) by [@sebastiondev](https://github.com/sebastiondev), [#390](https://github.com/getsentry/XcodeBuildMCP/pull/390) by [@voidborne-d](https://github.com/voidborne-d)).
179+
- Fixed a path traversal vulnerability that could allow reading files outside the expected scope.
180+
- Fixed portable macOS installs missing a required runtime dependency, which could make packaged installs fail when commands needed file matching.
164181
- Fixed configured paths that begin with `~` or `~/` so project, workspace, DerivedData, AXe, and template paths resolve under the user's home directory instead of creating literal `~` folders. Absolute configured paths are now normalized before use ([#283](https://github.com/getsentry/XcodeBuildMCP/issues/283), supersedes [#301](https://github.com/getsentry/XcodeBuildMCP/pull/301) by [@trmquang93](https://github.com/trmquang93)).
165182
- Fixed device build next-step guidance so agents no longer suggest unsupported `--device-id` or `deviceId` arguments ([#287](https://github.com/getsentry/XcodeBuildMCP/issues/287), [#300](https://github.com/getsentry/XcodeBuildMCP/pull/300) by [@trmquang93](https://github.com/trmquang93), [#350](https://github.com/getsentry/XcodeBuildMCP/pull/350) by [@MukundaKatta](https://github.com/MukundaKatta)).
166183
- Fixed Xcode IDE manual disconnect immediately reconnecting after the user explicitly disconnected it ([#343](https://github.com/getsentry/XcodeBuildMCP/issues/343), [#344](https://github.com/getsentry/XcodeBuildMCP/pull/344) by [@shaun0927](https://github.com/shaun0927)).
167184
- Fixed simulator defaults refresh so stale simulator IDs are reconciled when both a simulator name and ID are configured, without rewriting shared project config files unnecessarily ([#357](https://github.com/getsentry/XcodeBuildMCP/issues/357)).
168-
- Fixed session profile JSON output so callers can rely on `persisted: true` after persisting a profile switch.
169-
- Fixed some long-running commands hanging after the underlying Apple tool finished, especially when helper processes kept output streams open.
185+
- Fixed session profile output so the `persisted` field accurately reflects whether a profile switch was saved.
186+
- Fixed long-running commands that could hang even after completing.
170187
- Fixed build and test failures after command startup returning incomplete output; they now finish with a clear error result and log paths.
188+
- Fixed final text and JSON results changing unexpectedly when commands also stream live progress ([#360](https://github.com/getsentry/XcodeBuildMCP/issues/360)).
189+
- Fixed test result output so agents can find xcresult bundle paths after simulator, device, macOS, and Swift Package test runs ([#397](https://github.com/getsentry/XcodeBuildMCP/pull/397)).
190+
- Fixed test summaries and progress output so CLI tests no longer show false compiler errors, mixed Swift Testing/XCTest suites are counted accurately, parameterized Swift Testing cases are not overcounted, and simulator test progress stays visible while tests run ([#383](https://github.com/getsentry/XcodeBuildMCP/issues/383), [#392](https://github.com/getsentry/XcodeBuildMCP/issues/392)).
191+
- Fixed device tool calls that use session defaults so they no longer fail when platform is omitted.
171192

172193
Various other internal improvements to stability, performance, and code quality.
173194

‎package-lock.json‎

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "xcodebuildmcp",
3-
"version": "2.5.0-beta.1",
3+
"version": "2.5.0",
44
"mcpName": "com.xcodebuildmcp/XcodeBuildMCP",
55
"iOSTemplateVersion": "v1.0.8",
66
"macOSTemplateVersion": "v1.0.5",

‎server.json‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@
77
"source": "github",
88
"id": "945551361"
99
},
10-
"version": "2.5.0-beta.1",
10+
"version": "2.5.0",
1111
"packages": [
1212
{
1313
"registryType": "npm",
1414
"registryBaseUrl": "https://registry.npmjs.org",
1515
"identifier": "xcodebuildmcp",
16-
"version": "2.5.0-beta.1",
16+
"version": "2.5.0",
1717
"transport": {
1818
"type": "stdio"
1919
},

0 commit comments

Comments
 (0)