Skip to content

Commit 2b41aaf

Browse files
authored
feat: Add functions to retrieve simctl and xcode versions (#51)
Closes #34.
1 parent ceec07e commit 2b41aaf

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

simctl.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,22 @@ module.exports = {
4242
return result
4343
},
4444

45+
simctl_version: function () {
46+
const res = spawnSync('xcrun', ['simctl', '--version'])
47+
const versionMatch = /CoreSimulator-(.*)/.exec(res.stdout)
48+
const versionString = versionMatch[1]
49+
50+
return versionString.split('.').map((v) => parseInt(v, 10))
51+
},
52+
53+
xcode_version: function () {
54+
const res = spawnSync('xcodebuild', ['-version'])
55+
const versionMatch = /Xcode (.*)/.exec(res.stdout)
56+
const versionString = versionMatch[1]
57+
58+
return versionString.split('.').map((v) => parseInt(v, 10))
59+
},
60+
4561
create: function (name, deviceTypeId, runtimeId) {
4662
return spawnSync('xcrun', ['simctl', 'create', name, deviceTypeId, runtimeId])
4763
},

test/simctl.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ THE SOFTWARE.
2525
const test = require('node:test')
2626
const childProcess = require('child_process')
2727

28+
const originalSpawnSync = childProcess.spawnSync
2829
const spawnMock = test.mock.method(childProcess, 'spawnSync')
2930

3031
const simctl = require('../simctl')
@@ -35,6 +36,8 @@ test('exports', (t) => {
3536

3637
t.assert.equal(simctl.extensions, SimCtlExtensions)
3738
t.assert.equal(typeof simctl.check_prerequisites, 'function')
39+
t.assert.equal(typeof simctl.simctl_version, 'function')
40+
t.assert.equal(typeof simctl.xcode_version, 'function')
3841
t.assert.equal(typeof simctl.create, 'function')
3942
t.assert.equal(typeof simctl.del, 'function')
4043
t.assert.equal(typeof simctl.erase, 'function')
@@ -75,3 +78,25 @@ test('check_prerequisites success', (t) => {
7578
const retObj = simctl.check_prerequisites()
7679
t.assert.equal(retObj.stdout, undefined)
7780
})
81+
82+
test('xcode version', (t) => {
83+
t.assert ||= require('node:assert')
84+
85+
spawnMock.mock.mockImplementationOnce((...args) => {
86+
return originalSpawnSync.call(childProcess, ...args)
87+
})
88+
89+
const retObj = simctl.xcode_version()
90+
t.assert.ok(retObj[0] >= 8)
91+
})
92+
93+
test('simctl version', (t) => {
94+
t.assert ||= require('node:assert')
95+
96+
spawnMock.mock.mockImplementationOnce((...args) => {
97+
return originalSpawnSync.call(childProcess, ...args)
98+
})
99+
100+
const retObj = simctl.simctl_version()
101+
t.assert.ok(retObj[0] >= 400)
102+
})

0 commit comments

Comments
 (0)