From caa0e7b414bdb4493915fcb65aaf8d488c0c96ff Mon Sep 17 00:00:00 2001 From: Darryl Pogue Date: Thu, 6 Nov 2025 19:40:41 -0800 Subject: [PATCH] fix(start): Properly handle xcode-select output --- lib/simctl-extensions.js | 4 ++-- test/simctl-extensions.js | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/simctl-extensions.js b/lib/simctl-extensions.js index 79d2855..c64b9e4 100644 --- a/lib/simctl-extensions.js +++ b/lib/simctl-extensions.js @@ -66,13 +66,13 @@ const extensions = { return } - res = spawnSync('xcode-select', ['-p']) + res = spawnSync('xcode-select', ['-p'], { encoding: 'utf8' }) if (res.status !== 0) { console.error('Failed to get Xcode path') return } - const simulatorPath = path.join(res.stdout, 'Applications', 'Simulator.app') + const simulatorPath = path.join(res.stdout.trim(), 'Applications', 'Simulator.app') return spawnSync('open', ['-a', simulatorPath]) } else { // Xcode 8 or older diff --git a/test/simctl-extensions.js b/test/simctl-extensions.js index 5534658..90ea539 100644 --- a/test/simctl-extensions.js +++ b/test/simctl-extensions.js @@ -119,12 +119,13 @@ test('start', async (ctx) => { spawnMock.mock.mockImplementationOnce(() => ({ status: 0, stdout: 'Xcode 13.2.1' }), 0) // xcodebuild -version spawnMock.mock.mockImplementationOnce(() => ({ status: 0, stdout: JSON.stringify(testJson) }), 1) // xcrun simctl list -j spawnMock.mock.mockImplementationOnce(() => ({ status: 0 }), 2) // xcrun simctl boot - spawnMock.mock.mockImplementationOnce(() => ({ status: 0, stdout: '/Applications/Xcode.app/Contents/Developer' }), 3) // xcode-select -p + spawnMock.mock.mockImplementationOnce(() => ({ status: 0, stdout: '/Applications/Xcode.app/Contents/Developer\n' }), 3) // xcode-select -p spawnMock.mock.mockImplementationOnce(() => ({ status: 0 }), 4) // open -a XCODEPATH/Applications/Simulator.app const retObj = SimCtlExtensions.start(deviceId) t.assert.deepEqual(retObj, { status: 0 }) t.assert.equal(console.error.mock.calls.length, 0) + t.assert.deepEqual(spawnMock.mock.calls[4].arguments[1], ['-a', '/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app']) }) await ctx.test('successful start (Xcode < 9)', (t) => {