Changelog
What’s new in Xcode 27
Everything below compares Xcode 27 against the previous release, Xcode 26.5. Both schemas were captured from tools/list: tools-26.5.json and tools.json.
Server
- Added:
xcrun mcp-server— headless MCP server that runs without an open workspace, plus durable per-agent/per-folder permissions; see Headless mode - Added:
xcrun lldb-mcp— a separate MCP server for LLDB; see Agent tooling - Changed:
mcpbridgeconnects to thexcode-selectXcode by default (MCP_XCODE_PID/MCP_XCODE_SESSION_IDto override), and reaches the headlessXcode Service.appwhen headless mode is on - Changed:
run-agent(which 26.5 already had) gained theskillsandpluginsubcommands — export Xcode’s skills, or materialize them as an agent plugin; see Agent tooling - Changed:
tabIdentifieris no longer required on any tool — omit it when only one workspace tab is open. In headless mode it becomesworkspaceIdentifierand takes a workspace identifier or an absolute path
Added tools
- Workspace:
XcodeListSchemes,XcodeSwitchScheme,XcodeListRunDestinations,XcodeSwitchRunDestination,XcodeListWorkspaces,XcodeOpenWorkspace,XcodeCloseWorkspace - Project configuration:
XcodeListTargets,XcodeListTemplates,XcodeNewTarget,AddEntitlement,AddInfoPlist,GetTargetBuildSettings,UpdateTargetBuildSetting,GetFileCompilerFlags,UpdateFileCompilerFlags,XcodeNewProject - Run & debug:
RunProject,StopProject,GetConsoleOutput,InvokeDebuggerCommand - Testing:
XcodeListTestPlans,XcodeSwitchTestPlan— inspect and change the active scheme’s test plan, which all testing tools operate on - Device interaction:
DeviceInteractionStartSession,DeviceInteractionStartWorkspaceSession,DeviceInteractionInstallAndRun,DeviceInteractionSynthesize,DeviceInteractionEndSession - Crash & field performance:
GetTopCrashIssues,GetCrashIssueLogs,GetTopFieldPerformanceIssues,GetFieldPerformanceIssueLogs - Localization:
StringCatalogRead,StringCatalogContext,StringCatalogEdit,LocalizationPlanner
Changed tools
- Renamed:
ExecuteSnippet→RunCodeSnippet, which gained a requiredpurposeparameter - Asset-gated:
DocumentationSearch— its results gained akindfield. In 27 the tool is gated on the localcom.apple.MobileAsset.AppleDeveloperDocumentationasset, and while the asset is missing the tool is absent fromtools/listin both modes. With the asset installed it’s listed normally by both servers - Fixed:
XcodeMV’soperationis now a plain string enum (move/copy); in 26.5 it was declared as an object with arawValuefield BuildProject: newbuildForTestingparameter — also build test targets that a regular build would skipGetBuildLog:lineis no longer required on an issue — issues without a line number are now representableRunAllTests/RunSomeTests: output addsxcresultBundlePathforxcresulttool/xccovRenderPreview: newpreviewCanvasControlOverrides(timeline, toggle, group item) andpreviewLocalizationOverrideparameters; output addsdisplayName,sourceLineNumber,renderedDestination,supportedCanvasControlOverrides, andsupportedLocalizations
Xcode 27.2
The main documentation reflects Xcode 27; this section lists what Xcode 27.2 (27B52, server 25464; RC is 27B48/25463, beta 2 is 27B5028f/25447.1, beta 1 is 27B5019j/25434.2, 27 is 25317) changes on top of it. Captured from tools/list of both servers: tools-27.2.json (windowed) and tools-headless-27.2.json (headless). Both change identically; the windowed/headless split is unchanged from 27. The release’s tools/list is identical to the RC’s.
- No tools added or removed
RenderPreview: newpreferredRenderDestinationparameter — pick the device or simulator to render on byidentifier,platformName,deviceModelName, and/orsystemVersion; falls back to the automatic destination with a message inerrorswhen nothing matches.renderedDestinationgains a requiredidentifierRenderPreview(RC, breaking): the discovery fields move into onesupportedOverridesobject —supportedLocalizations→localizations,supportedPreviewVariantOverrides→previewVariants,supportedCanvasControlOverrides→canvasControls, and the beta’savailableRenderDestinations→renderDestinations.previewSnapshotPathbecomessnapshot.pathRenderPreview(RC): newdisplayModeparameter —static(default) orinteractive, fromsupportedOverrides.displayModes— andsnapshotDelay, seconds an interactive preview runs before the snapshot (≥ 0, less thantimeout)RenderPreview(beta 2):canvasControls.groupItemsentries are now objects{index, title?}instead of plain integers —titleis derived from the#Preview(arguments:)value and may not be unique; passindexasgroupItemIndex.errorsis now always present in the outputAddInfoPlist(RC): newdictionaryvalue type —infoPlistDictionaryItemsthen takes a JSON-encoded dictionary instead of an arrayXcodeMakeDir(RC): newdirectoryKindparameter —folder(default) creates a file system synchronized (buildable) folder,groupa classic group backed by a directory; falls back to what the parent supportsInvokeDebuggerCommand(beta 2): description now steers towardp/voverpo/expressionto avoid unnecessary expression evaluation; schema unchangedGetCodeCoverageis announced in the beta 2 release notes (181141715) but still isn’t in the release — absent fromtools/listof both servers
Xcode 27.3 beta 1
The main documentation reflects Xcode 27; this section lists what Xcode 27.3 beta 1 (27C5020n, server 25515.6) changes on top of 27.2 (27B52, server 25464). Captured from tools/list of both servers: tools-27.3.json (windowed) and tools-headless-27.3.json (headless). Both change identically; the windowed/headless split is unchanged.
- No tools added or removed
DeviceInteractionStartSession/DeviceInteractionStartWorkspaceSession(breaking):deviceIsSimulatoris removed from the output. Descriptions now say simulator instead of device/simulator, anddeviceIdentifiermatches the UUID/name/OS version/type of the simulator — ECID is dropped. The release notes don’t mention this changeDeviceInteractionSynthesize: description now says simulator instead of physical device or simulator, and adds setting the hinge angle in degrees on foldable devicesGetTargetBuildSettings: newbuildSettingNamesparameter — return only the named settings, case-insensitive with*wildcards (e.g.SWIFT_*). Omitted returns all settings, an empty list none. Output adds a requirednotFoundwith the names or patterns that matched nothingRenderPreview: output addsproducibleOutputsByMode— for each supported display mode, thedisplayModename and theoutputsit produces; unlisted fields are omitted for that modeRenderPreview, per the release notes, with no schema change: snapshot filenames and metadata include the applied overrides (176531615); interactive delayed snapshots work for macOS previews (181244878); fixed reporting no previews before they finished loading (188424749) and rendering a different preview than the one requested (188817121)GetCodeCoverageis still absent fromtools/listof both servers