node-simctl 8.1.7 → 8.2.1
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.
- package/CHANGELOG.md +12 -0
- package/build/lib/helpers.d.ts +0 -6
- package/build/lib/helpers.d.ts.map +1 -1
- package/build/lib/helpers.js +0 -10
- package/build/lib/helpers.js.map +1 -1
- package/build/lib/simctl.d.ts +31 -31
- package/build/lib/simctl.d.ts.map +1 -1
- package/build/lib/simctl.js +55 -55
- package/build/lib/simctl.js.map +1 -1
- package/build/lib/subcommands/appinfo.d.ts.map +1 -1
- package/build/lib/subcommands/appinfo.js +4 -5
- package/build/lib/subcommands/appinfo.js.map +1 -1
- package/build/lib/subcommands/boot.d.ts.map +1 -1
- package/build/lib/subcommands/boot.js +1 -5
- package/build/lib/subcommands/boot.js.map +1 -1
- package/build/lib/subcommands/bootstatus.d.ts.map +1 -1
- package/build/lib/subcommands/bootstatus.js +1 -5
- package/build/lib/subcommands/bootstatus.js.map +1 -1
- package/build/lib/subcommands/create.d.ts.map +1 -1
- package/build/lib/subcommands/create.js +2 -6
- package/build/lib/subcommands/create.js.map +1 -1
- package/build/lib/subcommands/io.js +2 -2
- package/build/lib/subcommands/io.js.map +1 -1
- package/build/lib/subcommands/keychain.d.ts.map +1 -1
- package/build/lib/subcommands/keychain.js +20 -21
- package/build/lib/subcommands/keychain.js.map +1 -1
- package/build/lib/subcommands/launch.d.ts.map +1 -1
- package/build/lib/subcommands/launch.js +1 -5
- package/build/lib/subcommands/launch.js.map +1 -1
- package/build/lib/subcommands/list.d.ts.map +1 -1
- package/build/lib/subcommands/list.js +12 -13
- package/build/lib/subcommands/list.js.map +1 -1
- package/build/lib/subcommands/location.d.ts.map +1 -1
- package/build/lib/subcommands/location.js +14 -14
- package/build/lib/subcommands/location.js.map +1 -1
- package/build/lib/subcommands/push.js +2 -2
- package/build/lib/subcommands/push.js.map +1 -1
- package/build/lib/subcommands/shutdown.d.ts.map +1 -1
- package/build/lib/subcommands/shutdown.js +1 -5
- package/build/lib/subcommands/shutdown.js.map +1 -1
- package/build/lib/subcommands/spawn.d.ts.map +1 -1
- package/build/lib/subcommands/spawn.js +4 -8
- package/build/lib/subcommands/spawn.js.map +1 -1
- package/build/lib/subcommands/ui.d.ts.map +1 -1
- package/build/lib/subcommands/ui.js +3 -7
- package/build/lib/subcommands/ui.js.map +1 -1
- package/lib/helpers.ts +0 -10
- package/lib/simctl.ts +60 -63
- package/lib/subcommands/appinfo.ts +6 -2
- package/lib/subcommands/boot.ts +1 -2
- package/lib/subcommands/bootstatus.ts +4 -4
- package/lib/subcommands/create.ts +2 -3
- package/lib/subcommands/io.ts +2 -2
- package/lib/subcommands/keychain.ts +22 -23
- package/lib/subcommands/launch.ts +1 -2
- package/lib/subcommands/list.ts +15 -17
- package/lib/subcommands/location.ts +15 -15
- package/lib/subcommands/push.ts +2 -2
- package/lib/subcommands/shutdown.ts +1 -2
- package/lib/subcommands/spawn.ts +4 -5
- package/lib/subcommands/ui.ts +3 -4
- package/package.json +1 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../lib/subcommands/launch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../lib/subcommands/launch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,WAAW,CAAC;AAEtC;;;;;;;;;;;;;GAaG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,MAAU,GAChB,OAAO,CAAC,MAAM,CAAC,CAQjB"}
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.launchApp = launchApp;
|
|
7
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
8
4
|
const asyncbox_1 = require("asyncbox");
|
|
9
5
|
/**
|
|
10
6
|
* Execute the particular application package on Simulator.
|
|
@@ -25,7 +21,7 @@ async function launchApp(bundleId, tries = 5) {
|
|
|
25
21
|
const { stdout } = await this.exec('launch', {
|
|
26
22
|
args: [this.requireUdid('launch'), bundleId],
|
|
27
23
|
});
|
|
28
|
-
return
|
|
24
|
+
return stdout.trim() || '';
|
|
29
25
|
});
|
|
30
26
|
return result || '';
|
|
31
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../lib/subcommands/launch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../lib/subcommands/launch.ts"],"names":[],"mappings":";;AAiBA,8BAYC;AA7BD,uCAAuC;AAGvC;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,SAAS,CAE7B,QAAgB,EAChB,QAAgB,CAAC;IAEjB,MAAM,MAAM,GAAG,MAAM,IAAA,wBAAa,EAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACzC,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;SAC7C,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,IAAI,EAAE,CAAC;AACtB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../lib/subcommands/list.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../lib/subcommands/list.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AAEzC;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CA2DvC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;AACzB,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,SAAS,GAAG,IAAI,EACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;AA4EzC;;;;;;;;GAQG;AACH,wBAAsB,mCAAmC,CACvD,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,MAAM,EACvB,QAAQ,GAAE,MAAc,GACvB,OAAO,CAAC,MAAM,CAAC,CAajB;AAED;;;;;;;;GAQG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,MAAM,EACvB,QAAQ,GAAE,MAAc,GACvB,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqBpE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CASrD"}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.getDevicesByParsing = getDevicesByParsing;
|
|
7
4
|
exports.getDevices = getDevices;
|
|
@@ -9,7 +6,6 @@ exports.getRuntimeForPlatformVersionViaJson = getRuntimeForPlatformVersionViaJso
|
|
|
9
6
|
exports.getRuntimeForPlatformVersion = getRuntimeForPlatformVersion;
|
|
10
7
|
exports.getDeviceTypes = getDeviceTypes;
|
|
11
8
|
exports.list = list;
|
|
12
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
13
9
|
const helpers_1 = require("../helpers");
|
|
14
10
|
const logger_1 = require("../logger");
|
|
15
11
|
/**
|
|
@@ -36,16 +32,16 @@ async function getDevicesByParsing(platform) {
|
|
|
36
32
|
// ...
|
|
37
33
|
// so, get the `-- iOS X.X --` line to find the sdk (X.X)
|
|
38
34
|
// and the rest of the listing in order to later find the devices
|
|
39
|
-
const deviceSectionRe =
|
|
35
|
+
const deviceSectionRe = !platform
|
|
40
36
|
? new RegExp(`\\-\\-\\s+(\\S+)\\s+(\\S+)\\s+\\-\\-(\\n\\s{4}.+)*`, 'mgi')
|
|
41
|
-
: new RegExp(`\\-\\-\\s+${
|
|
37
|
+
: new RegExp(`\\-\\-\\s+${escapeRegExp(platform)}\\s+(\\S+)\\s+\\-\\-(\\n\\s{4}.+)*`, 'mgi');
|
|
42
38
|
const matches = [];
|
|
43
39
|
let match;
|
|
44
40
|
// make an entry for each sdk version
|
|
45
41
|
while ((match = deviceSectionRe.exec(stdout))) {
|
|
46
42
|
matches.push(match);
|
|
47
43
|
}
|
|
48
|
-
if (
|
|
44
|
+
if (matches.length === 0) {
|
|
49
45
|
throw new Error('Could not find device section');
|
|
50
46
|
}
|
|
51
47
|
const lineRe = /([^\s].+) \((\w+-.+\w+)\) \((\w+\s?\w+)\)/; // https://regex101.com/r/lG7mK6/3
|
|
@@ -103,10 +99,10 @@ async function getDevices(forSdk, platform) {
|
|
|
103
99
|
* }
|
|
104
100
|
* }
|
|
105
101
|
*/
|
|
106
|
-
const versionMatchRe =
|
|
102
|
+
const versionMatchRe = !platform
|
|
107
103
|
? new RegExp(`^([^\\s-]+)[\\s-](\\S+)`, 'i')
|
|
108
|
-
: new RegExp(`^${
|
|
109
|
-
for (const [sdkNameRaw, entries] of
|
|
104
|
+
: new RegExp(`^${escapeRegExp(platform)}[\\s-](\\S+)`, 'i');
|
|
105
|
+
for (const [sdkNameRaw, entries] of Object.entries(JSON.parse(stdout).devices)) {
|
|
110
106
|
// there could be a longer name, so remove it
|
|
111
107
|
const sdkName = sdkNameRaw.replace(helpers_1.SIM_RUNTIME_NAME, '');
|
|
112
108
|
const versionMatch = versionMatchRe.exec(sdkName);
|
|
@@ -117,7 +113,7 @@ async function getDevices(forSdk, platform) {
|
|
|
117
113
|
const sdk = (platform ? versionMatch[1] : versionMatch[2]).replace('-', '.');
|
|
118
114
|
devices[sdk] = devices[sdk] || [];
|
|
119
115
|
devices[sdk].push(...entries
|
|
120
|
-
.filter((el) =>
|
|
116
|
+
.filter((el) => el.isAvailable === undefined || el.isAvailable)
|
|
121
117
|
.map((el) => {
|
|
122
118
|
delete el.availability;
|
|
123
119
|
return {
|
|
@@ -141,7 +137,7 @@ async function getDevices(forSdk, platform) {
|
|
|
141
137
|
return devices[forSdk];
|
|
142
138
|
}
|
|
143
139
|
let errMsg = `'${forSdk}' does not exist in the list of simctl SDKs.`;
|
|
144
|
-
const availableSDKs =
|
|
140
|
+
const availableSDKs = Object.keys(devices);
|
|
145
141
|
errMsg += availableSDKs.length
|
|
146
142
|
? ` Only the following Simulator SDK versions are available on your system: ${availableSDKs.join(', ')}`
|
|
147
143
|
: ` No Simulator SDK versions are available on your system. Please install some via Xcode preferences.`;
|
|
@@ -184,7 +180,7 @@ async function getRuntimeForPlatformVersion(platformVersion, platform = 'iOS') {
|
|
|
184
180
|
args: ['runtimes'],
|
|
185
181
|
});
|
|
186
182
|
// https://regex101.com/r/UykjQZ/1
|
|
187
|
-
const runtimeRe = new RegExp(`${
|
|
183
|
+
const runtimeRe = new RegExp(`${escapeRegExp(platform)}\\s+(\\d+\\.\\d+)\\s+\\((\\d+\\.\\d+\\.*\\d*)`, 'i');
|
|
188
184
|
for (const line of stdout.split('\n')) {
|
|
189
185
|
const match = runtimeRe.exec(line);
|
|
190
186
|
if (match && match[1] === platformVersion) {
|
|
@@ -270,4 +266,7 @@ async function list() {
|
|
|
270
266
|
throw new Error(`Unable to parse simctl list: ${e.message}`);
|
|
271
267
|
}
|
|
272
268
|
}
|
|
269
|
+
function escapeRegExp(value) {
|
|
270
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
271
|
+
}
|
|
273
272
|
//# sourceMappingURL=list.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../lib/subcommands/list.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../lib/subcommands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"location.d.ts","sourceRoot":"","sources":["../../../lib/subcommands/location.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"location.d.ts","sourceRoot":"","sources":["../../../lib/subcommands/location.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,WAAW,CAAC;AAEtC;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,SAAS,EAAE,MAAM,GAAG,MAAM,GACzB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/D"}
|
|
@@ -2,20 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.setLocation = setLocation;
|
|
4
4
|
exports.clearLocation = clearLocation;
|
|
5
|
-
/**
|
|
6
|
-
* Formats the given location argument for simctl usage
|
|
7
|
-
*
|
|
8
|
-
* @param name Argument name
|
|
9
|
-
* @param value Location argument value
|
|
10
|
-
* @returns Formatted value, for example -73.768254
|
|
11
|
-
*/
|
|
12
|
-
function formatArg(name, value) {
|
|
13
|
-
const flt = parseFloat(`${value}`);
|
|
14
|
-
if (isNaN(flt)) {
|
|
15
|
-
throw new TypeError(`${name} must be a valid number, got '${value}' instead`);
|
|
16
|
-
}
|
|
17
|
-
return flt.toFixed(7);
|
|
18
|
-
}
|
|
19
5
|
/**
|
|
20
6
|
* Set the Simulator location to a specific latitude and longitude.
|
|
21
7
|
* This functionality is only available since Xcode 14.
|
|
@@ -43,4 +29,18 @@ async function clearLocation() {
|
|
|
43
29
|
args: [this.requireUdid('location'), 'clear'],
|
|
44
30
|
});
|
|
45
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Formats the given location argument for simctl usage
|
|
34
|
+
*
|
|
35
|
+
* @param name Argument name
|
|
36
|
+
* @param value Location argument value
|
|
37
|
+
* @returns Formatted value, for example -73.768254
|
|
38
|
+
*/
|
|
39
|
+
function formatArg(name, value) {
|
|
40
|
+
const flt = parseFloat(`${value}`);
|
|
41
|
+
if (isNaN(flt)) {
|
|
42
|
+
throw new TypeError(`${name} must be a valid number, got '${value}' instead`);
|
|
43
|
+
}
|
|
44
|
+
return flt.toFixed(7);
|
|
45
|
+
}
|
|
46
46
|
//# sourceMappingURL=location.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"location.js","sourceRoot":"","sources":["../../../lib/subcommands/location.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"location.js","sourceRoot":"","sources":["../../../lib/subcommands/location.ts"],"names":[],"mappings":";;AAYA,kCAUC;AAOD,sCAIC;AA/BD;;;;;;;;;GASG;AACI,KAAK,UAAU,WAAW,CAE/B,QAAyB,EACzB,SAA0B;IAE1B,MAAM,GAAG,GAAG,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC9C,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;QAC1B,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;KAC7D,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,aAAa;IACjC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;QAC1B,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;KAC9C,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,SAAS,SAAS,CAAC,IAAY,EAAE,KAAsB;IACrD,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACf,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,iCAAiC,KAAK,WAAW,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.pushNotification = pushNotification;
|
|
7
7
|
const rimraf_1 = require("rimraf");
|
|
8
|
-
const
|
|
8
|
+
const node_crypto_1 = require("node:crypto");
|
|
9
9
|
const node_path_1 = __importDefault(require("node:path"));
|
|
10
10
|
const node_os_1 = __importDefault(require("node:os"));
|
|
11
11
|
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
@@ -30,7 +30,7 @@ const promises_1 = __importDefault(require("node:fs/promises"));
|
|
|
30
30
|
* @throws {Error} If the `udid` instance property is unset
|
|
31
31
|
*/
|
|
32
32
|
async function pushNotification(payload) {
|
|
33
|
-
const dstPath = node_path_1.default.resolve(node_os_1.default.tmpdir(), `${
|
|
33
|
+
const dstPath = node_path_1.default.resolve(node_os_1.default.tmpdir(), `${(0, node_crypto_1.randomUUID)()}.json`);
|
|
34
34
|
try {
|
|
35
35
|
await promises_1.default.writeFile(dstPath, JSON.stringify(payload), 'utf8');
|
|
36
36
|
await this.exec('push', {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../../lib/subcommands/push.ts"],"names":[],"mappings":";;;;;AA2BA,4CAUC;AArCD,mCAA8B;AAC9B,
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../../lib/subcommands/push.ts"],"names":[],"mappings":";;;;;AA2BA,4CAUC;AArCD,mCAA8B;AAC9B,6CAAuC;AACvC,0DAA6B;AAC7B,sDAAyB;AACzB,gEAAkC;AAGlC;;;;;;;;;;;;;;;;;;;GAmBG;AACI,KAAK,UAAU,gBAAgB,CAAe,OAA4B;IAC/E,MAAM,OAAO,GAAG,mBAAI,CAAC,OAAO,CAAC,iBAAE,CAAC,MAAM,EAAE,EAAE,GAAG,IAAA,wBAAU,GAAE,OAAO,CAAC,CAAC;IAClE,IAAI,CAAC;QACH,MAAM,kBAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;QAC7D,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACtB,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,MAAM,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../../../lib/subcommands/shutdown.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../../../lib/subcommands/shutdown.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,WAAW,CAAC;AAEtC;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAWhE"}
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.shutdownDevice = shutdownDevice;
|
|
7
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
8
4
|
const logger_1 = require("../logger");
|
|
9
5
|
/**
|
|
10
6
|
* Shutdown the given Simulator if it is running.
|
|
@@ -20,7 +16,7 @@ async function shutdownDevice() {
|
|
|
20
16
|
});
|
|
21
17
|
}
|
|
22
18
|
catch (e) {
|
|
23
|
-
if (!
|
|
19
|
+
if (!e.message?.includes('current state: Shutdown')) {
|
|
24
20
|
throw e;
|
|
25
21
|
}
|
|
26
22
|
logger_1.log.debug(logger_1.LOG_PREFIX, `Simulator already in 'Shutdown' state. Continuing`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../../../lib/subcommands/shutdown.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../../../lib/subcommands/shutdown.ts"],"names":[],"mappings":";;AAUA,wCAWC;AArBD,sCAA0C;AAG1C;;;;;;GAMG;AACI,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAC1B,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;SACrC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;YACpD,MAAM,CAAC,CAAC;QACV,CAAC;QACD,YAAG,CAAC,KAAK,CAAC,mBAAU,EAAE,mDAAmD,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../lib/subcommands/spawn.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../lib/subcommands/spawn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAC,qBAAqB,EAAE,UAAU,EAAC,MAAM,cAAc,CAAC;AAEpE;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EACvB,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAC5B,OAAO,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CASxC;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EACvB,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAC5B,OAAO,CAAC,UAAU,CAAC,CAUrB"}
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.spawnProcess = spawnProcess;
|
|
7
4
|
exports.spawnSubProcess = spawnSubProcess;
|
|
8
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
9
5
|
/**
|
|
10
6
|
* Spawn the particular process on Simulator.
|
|
11
7
|
* It is required that Simulator is in _booted_ state.
|
|
@@ -18,11 +14,11 @@ const lodash_1 = __importDefault(require("lodash"));
|
|
|
18
14
|
* @throws {Error} If the `udid` instance property is unset
|
|
19
15
|
*/
|
|
20
16
|
async function spawnProcess(args, env = {}) {
|
|
21
|
-
if (
|
|
17
|
+
if ((Array.isArray(args) && args.length === 0) || args === '') {
|
|
22
18
|
throw new Error('Spawn arguments are required');
|
|
23
19
|
}
|
|
24
20
|
return await this.exec('spawn', {
|
|
25
|
-
args: [this.requireUdid('spawn'), ...(
|
|
21
|
+
args: [this.requireUdid('spawn'), ...(Array.isArray(args) ? args : [args])],
|
|
26
22
|
env,
|
|
27
23
|
});
|
|
28
24
|
}
|
|
@@ -36,11 +32,11 @@ async function spawnProcess(args, env = {}) {
|
|
|
36
32
|
* @throws {Error} If the `udid` instance property is unset
|
|
37
33
|
*/
|
|
38
34
|
async function spawnSubProcess(args, env = {}) {
|
|
39
|
-
if (
|
|
35
|
+
if ((Array.isArray(args) && args.length === 0) || args === '') {
|
|
40
36
|
throw new Error('Spawn arguments are required');
|
|
41
37
|
}
|
|
42
38
|
return (await this.exec('spawn', {
|
|
43
|
-
args: [this.requireUdid('spawn'), ...(
|
|
39
|
+
args: [this.requireUdid('spawn'), ...(Array.isArray(args) ? args : [args])],
|
|
44
40
|
env,
|
|
45
41
|
asynchronous: true,
|
|
46
42
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../../lib/subcommands/spawn.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../../lib/subcommands/spawn.ts"],"names":[],"mappings":";;AAcA,oCAaC;AAWD,0CAcC;AAjDD;;;;;;;;;;GAUG;AACI,KAAK,UAAU,YAAY,CAEhC,IAAuB,EACvB,MAA2B,EAAE;IAE7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;QAC9B,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3E,GAAG;KACJ,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,eAAe,CAEnC,IAAuB,EACvB,MAA2B,EAAE;IAE7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;QAC/B,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3E,GAAG;QACH,YAAY,EAAE,IAAI;KACnB,CAAC,CAAe,CAAC;AACpB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../../lib/subcommands/ui.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../../lib/subcommands/ui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,WAAW,CAAC;AAEtC;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKjE;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAInF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKvE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/F;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKlE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI3F"}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.getAppearance = getAppearance;
|
|
7
4
|
exports.setAppearance = setAppearance;
|
|
@@ -9,7 +6,6 @@ exports.getIncreaseContrast = getIncreaseContrast;
|
|
|
9
6
|
exports.setIncreaseContrast = setIncreaseContrast;
|
|
10
7
|
exports.getContentSize = getContentSize;
|
|
11
8
|
exports.setContentSize = setContentSize;
|
|
12
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
13
9
|
/**
|
|
14
10
|
* Retrieves the current UI appearance value from the given simulator
|
|
15
11
|
*
|
|
@@ -23,7 +19,7 @@ async function getAppearance() {
|
|
|
23
19
|
const { stdout } = await this.exec('ui', {
|
|
24
20
|
args: [this.requireUdid('ui'), 'appearance'],
|
|
25
21
|
});
|
|
26
|
-
return
|
|
22
|
+
return stdout.trim();
|
|
27
23
|
}
|
|
28
24
|
/**
|
|
29
25
|
* Sets the UI appearance to the given style
|
|
@@ -59,7 +55,7 @@ async function getIncreaseContrast() {
|
|
|
59
55
|
const { stdout } = await this.exec('ui', {
|
|
60
56
|
args: [this.requireUdid('ui'), 'increase_contrast'],
|
|
61
57
|
});
|
|
62
|
-
return
|
|
58
|
+
return stdout.trim();
|
|
63
59
|
}
|
|
64
60
|
/**
|
|
65
61
|
* Sets the increase constrast configuration for the given simulator.
|
|
@@ -104,7 +100,7 @@ async function getContentSize() {
|
|
|
104
100
|
const { stdout } = await this.exec('ui', {
|
|
105
101
|
args: [this.requireUdid('ui'), 'content_size'],
|
|
106
102
|
});
|
|
107
|
-
return
|
|
103
|
+
return stdout.trim();
|
|
108
104
|
}
|
|
109
105
|
/**
|
|
110
106
|
* Sets content size for the given simulator.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../lib/subcommands/ui.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../lib/subcommands/ui.ts"],"names":[],"mappings":";;AAWA,sCAKC;AAWD,sCAIC;AAkBD,kDAKC;AAeD,kDAIC;AAuBD,wCAKC;AAwBD,wCAIC;AA/HD;;;;;;;;GAQG;AACI,KAAK,UAAU,aAAa;IACjC,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QACrC,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;KAC7C,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,aAAa,CAAe,UAAkB;IAClE,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QACpB,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC;KACzD,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACI,KAAK,UAAU,mBAAmB;IACvC,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QACrC,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,mBAAmB,CAAC;KACpD,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED;;;;;;;;;;;;GAYG;AACI,KAAK,UAAU,mBAAmB,CAAe,gBAAwB;IAC9E,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QACpB,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,mBAAmB,EAAE,gBAAgB,CAAC;KACtE,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACI,KAAK,UAAU,cAAc;IAClC,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QACrC,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC;KAC/C,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACI,KAAK,UAAU,cAAc,CAAe,iBAAyB;IAC1E,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QACpB,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,iBAAiB,CAAC;KAClE,CAAC,CAAC;AACL,CAAC"}
|
package/lib/helpers.ts
CHANGED
|
@@ -28,16 +28,6 @@ export function getXcrunBinary(): string {
|
|
|
28
28
|
return process.env.XCRUN_BINARY || 'xcrun';
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
/**
|
|
32
|
-
* Generate a UUID v4
|
|
33
|
-
*
|
|
34
|
-
* @returns Promise resolving to UUID string
|
|
35
|
-
*/
|
|
36
|
-
export async function uuidV4(): Promise<string> {
|
|
37
|
-
const uuidLib = await import('uuid');
|
|
38
|
-
return uuidLib.v4();
|
|
39
|
-
}
|
|
40
|
-
|
|
41
31
|
/**
|
|
42
32
|
* Convert plist-style output to JSON using plutil
|
|
43
33
|
*
|
package/lib/simctl.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _ from 'lodash';
|
|
2
1
|
import which from 'which';
|
|
3
2
|
import {log, LOG_PREFIX} from './logger';
|
|
4
3
|
import {DEFAULT_EXEC_TIMEOUT, getXcrunBinary} from './helpers';
|
|
@@ -33,6 +32,49 @@ import type {XCRun, ExecOpts, SimctlOpts, ExecResult} from './types';
|
|
|
33
32
|
const SIMCTL_ENV_PREFIX = 'SIMCTL_CHILD_';
|
|
34
33
|
|
|
35
34
|
export class Simctl {
|
|
35
|
+
// Extension methods
|
|
36
|
+
addMedia = addmediaCommands.addMedia;
|
|
37
|
+
appInfo = appinfoCommands.appInfo;
|
|
38
|
+
bootDevice = bootCommands.bootDevice;
|
|
39
|
+
startBootMonitor = bootstatusCommands.startBootMonitor;
|
|
40
|
+
createDevice = createCommands.createDevice;
|
|
41
|
+
deleteDevice = deleteCommands.deleteDevice;
|
|
42
|
+
eraseDevice = eraseCommands.eraseDevice;
|
|
43
|
+
getAppContainer = getappcontainerCommands.getAppContainer;
|
|
44
|
+
getEnv = envCommands.getEnv;
|
|
45
|
+
installApp = installCommands.installApp;
|
|
46
|
+
getScreenshot = ioCommands.getScreenshot;
|
|
47
|
+
addRootCertificate = keychainCommands.addRootCertificate;
|
|
48
|
+
addCertificate = keychainCommands.addCertificate;
|
|
49
|
+
resetKeychain = keychainCommands.resetKeychain;
|
|
50
|
+
launchApp = launchCommands.launchApp;
|
|
51
|
+
getDevicesByParsing = listCommands.getDevicesByParsing;
|
|
52
|
+
getDevices = listCommands.getDevices;
|
|
53
|
+
getRuntimeForPlatformVersionViaJson = listCommands.getRuntimeForPlatformVersionViaJson;
|
|
54
|
+
getRuntimeForPlatformVersion = listCommands.getRuntimeForPlatformVersion;
|
|
55
|
+
getDeviceTypes = listCommands.getDeviceTypes;
|
|
56
|
+
list = listCommands.list;
|
|
57
|
+
setLocation = locationCommands.setLocation;
|
|
58
|
+
clearLocation = locationCommands.clearLocation;
|
|
59
|
+
openUrl = openurlCommands.openUrl;
|
|
60
|
+
setPasteboard = pbcopyCommands.setPasteboard;
|
|
61
|
+
getPasteboard = pbpasteCommands.getPasteboard;
|
|
62
|
+
grantPermission = privacyCommands.grantPermission;
|
|
63
|
+
revokePermission = privacyCommands.revokePermission;
|
|
64
|
+
resetPermission = privacyCommands.resetPermission;
|
|
65
|
+
pushNotification = pushCommands.pushNotification;
|
|
66
|
+
shutdownDevice = shutdownCommands.shutdownDevice;
|
|
67
|
+
spawnProcess = spawnCommands.spawnProcess;
|
|
68
|
+
spawnSubProcess = spawnCommands.spawnSubProcess;
|
|
69
|
+
terminateApp = terminateCommands.terminateApp;
|
|
70
|
+
getAppearance = uiCommands.getAppearance;
|
|
71
|
+
setAppearance = uiCommands.setAppearance;
|
|
72
|
+
getIncreaseContrast = uiCommands.getIncreaseContrast;
|
|
73
|
+
setIncreaseContrast = uiCommands.setIncreaseContrast;
|
|
74
|
+
getContentSize = uiCommands.getContentSize;
|
|
75
|
+
setContentSize = uiCommands.setContentSize;
|
|
76
|
+
removeApp = uninstallCommands.removeApp;
|
|
77
|
+
|
|
36
78
|
private xcrun: XCRun;
|
|
37
79
|
private execTimeout: number;
|
|
38
80
|
private logErrors: boolean;
|
|
@@ -40,29 +82,29 @@ export class Simctl {
|
|
|
40
82
|
private _devicesSetPath: string | null;
|
|
41
83
|
|
|
42
84
|
constructor(opts: SimctlOpts = {}) {
|
|
43
|
-
this.xcrun =
|
|
85
|
+
this.xcrun = {...(opts.xcrun ?? {path: null})};
|
|
44
86
|
this.execTimeout = opts.execTimeout ?? DEFAULT_EXEC_TIMEOUT;
|
|
45
87
|
this.logErrors = opts.logErrors ?? true;
|
|
46
88
|
this._udid = opts.udid ?? null;
|
|
47
89
|
this._devicesSetPath = opts.devicesSetPath ?? null;
|
|
48
90
|
}
|
|
49
91
|
|
|
50
|
-
set udid(value: string | null) {
|
|
51
|
-
this._udid = value;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
92
|
get udid(): string | null {
|
|
55
93
|
return this._udid;
|
|
56
94
|
}
|
|
57
95
|
|
|
58
|
-
set devicesSetPath(value: string | null) {
|
|
59
|
-
this._devicesSetPath = value;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
96
|
get devicesSetPath(): string | null {
|
|
63
97
|
return this._devicesSetPath;
|
|
64
98
|
}
|
|
65
99
|
|
|
100
|
+
set udid(value: string | null) {
|
|
101
|
+
this._udid = value;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
set devicesSetPath(value: string | null) {
|
|
105
|
+
this._devicesSetPath = value;
|
|
106
|
+
}
|
|
107
|
+
|
|
66
108
|
/**
|
|
67
109
|
* @param commandName - Optional command name for error message
|
|
68
110
|
* @returns The UDID string
|
|
@@ -129,12 +171,13 @@ export class Simctl {
|
|
|
129
171
|
];
|
|
130
172
|
// Prefix all passed in environment variables with 'SIMCTL_CHILD_', simctl
|
|
131
173
|
// will then pass these to the child (spawned) process.
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
174
|
+
const envWithPrefixedKeys = Object.fromEntries(
|
|
175
|
+
Object.entries(initialEnv).map(([key, value]) => [
|
|
176
|
+
key.startsWith(SIMCTL_ENV_PREFIX) ? key : `${SIMCTL_ENV_PREFIX}${key}`,
|
|
177
|
+
value,
|
|
178
|
+
]),
|
|
137
179
|
);
|
|
180
|
+
const env = {...process.env, ...envWithPrefixedKeys};
|
|
138
181
|
|
|
139
182
|
const execOpts: any = {
|
|
140
183
|
env,
|
|
@@ -147,11 +190,8 @@ export class Simctl {
|
|
|
147
190
|
try {
|
|
148
191
|
let execArgs: [string, string[], any];
|
|
149
192
|
if (architectures?.length) {
|
|
150
|
-
const archArgs =
|
|
151
|
-
(
|
|
152
|
-
'-arch',
|
|
153
|
-
arch,
|
|
154
|
-
]),
|
|
193
|
+
const archArgs = (Array.isArray(architectures) ? architectures : [architectures]).flatMap(
|
|
194
|
+
(arch) => ['-arch', arch],
|
|
155
195
|
);
|
|
156
196
|
execArgs = ['arch', [...archArgs, xcrun, ...args], execOpts];
|
|
157
197
|
} else {
|
|
@@ -175,49 +215,6 @@ export class Simctl {
|
|
|
175
215
|
throw e;
|
|
176
216
|
}
|
|
177
217
|
}
|
|
178
|
-
|
|
179
|
-
// Extension methods
|
|
180
|
-
addMedia = addmediaCommands.addMedia;
|
|
181
|
-
appInfo = appinfoCommands.appInfo;
|
|
182
|
-
bootDevice = bootCommands.bootDevice;
|
|
183
|
-
startBootMonitor = bootstatusCommands.startBootMonitor;
|
|
184
|
-
createDevice = createCommands.createDevice;
|
|
185
|
-
deleteDevice = deleteCommands.deleteDevice;
|
|
186
|
-
eraseDevice = eraseCommands.eraseDevice;
|
|
187
|
-
getAppContainer = getappcontainerCommands.getAppContainer;
|
|
188
|
-
getEnv = envCommands.getEnv;
|
|
189
|
-
installApp = installCommands.installApp;
|
|
190
|
-
getScreenshot = ioCommands.getScreenshot;
|
|
191
|
-
addRootCertificate = keychainCommands.addRootCertificate;
|
|
192
|
-
addCertificate = keychainCommands.addCertificate;
|
|
193
|
-
resetKeychain = keychainCommands.resetKeychain;
|
|
194
|
-
launchApp = launchCommands.launchApp;
|
|
195
|
-
getDevicesByParsing = listCommands.getDevicesByParsing;
|
|
196
|
-
getDevices = listCommands.getDevices;
|
|
197
|
-
getRuntimeForPlatformVersionViaJson = listCommands.getRuntimeForPlatformVersionViaJson;
|
|
198
|
-
getRuntimeForPlatformVersion = listCommands.getRuntimeForPlatformVersion;
|
|
199
|
-
getDeviceTypes = listCommands.getDeviceTypes;
|
|
200
|
-
list = listCommands.list;
|
|
201
|
-
setLocation = locationCommands.setLocation;
|
|
202
|
-
clearLocation = locationCommands.clearLocation;
|
|
203
|
-
openUrl = openurlCommands.openUrl;
|
|
204
|
-
setPasteboard = pbcopyCommands.setPasteboard;
|
|
205
|
-
getPasteboard = pbpasteCommands.getPasteboard;
|
|
206
|
-
grantPermission = privacyCommands.grantPermission;
|
|
207
|
-
revokePermission = privacyCommands.revokePermission;
|
|
208
|
-
resetPermission = privacyCommands.resetPermission;
|
|
209
|
-
pushNotification = pushCommands.pushNotification;
|
|
210
|
-
shutdownDevice = shutdownCommands.shutdownDevice;
|
|
211
|
-
spawnProcess = spawnCommands.spawnProcess;
|
|
212
|
-
spawnSubProcess = spawnCommands.spawnSubProcess;
|
|
213
|
-
terminateApp = terminateCommands.terminateApp;
|
|
214
|
-
getAppearance = uiCommands.getAppearance;
|
|
215
|
-
setAppearance = uiCommands.setAppearance;
|
|
216
|
-
getIncreaseContrast = uiCommands.getIncreaseContrast;
|
|
217
|
-
setIncreaseContrast = uiCommands.setIncreaseContrast;
|
|
218
|
-
getContentSize = uiCommands.getContentSize;
|
|
219
|
-
setContentSize = uiCommands.setContentSize;
|
|
220
|
-
removeApp = uninstallCommands.removeApp;
|
|
221
218
|
}
|
|
222
219
|
|
|
223
220
|
export default Simctl;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type {Simctl} from '../simctl';
|
|
2
2
|
import type {AppInfo} from '../types';
|
|
3
3
|
import {convertPlistToJson} from '../helpers';
|
|
4
|
-
import _ from 'lodash';
|
|
5
4
|
|
|
6
5
|
/**
|
|
7
6
|
* Get information about an app installed on the simulator
|
|
@@ -31,7 +30,12 @@ export async function appInfo(this: Simctl, bundleId: string): Promise<AppInfo>
|
|
|
31
30
|
}
|
|
32
31
|
}
|
|
33
32
|
|
|
34
|
-
if (
|
|
33
|
+
if (
|
|
34
|
+
!result ||
|
|
35
|
+
typeof result !== 'object' ||
|
|
36
|
+
Array.isArray(result) ||
|
|
37
|
+
!('ApplicationType' in result)
|
|
38
|
+
) {
|
|
35
39
|
throw new Error(`App with bundle identifier "${bundleId}" not found. Is it installed?`);
|
|
36
40
|
}
|
|
37
41
|
|
package/lib/subcommands/boot.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _ from 'lodash';
|
|
2
1
|
import {log, LOG_PREFIX} from '../logger';
|
|
3
2
|
import type {Simctl} from '../simctl';
|
|
4
3
|
|
|
@@ -15,7 +14,7 @@ export async function bootDevice(this: Simctl): Promise<void> {
|
|
|
15
14
|
args: [this.requireUdid('boot')],
|
|
16
15
|
});
|
|
17
16
|
} catch (e: any) {
|
|
18
|
-
if (
|
|
17
|
+
if (e.message?.includes('Unable to boot device in current state: Booted')) {
|
|
19
18
|
throw e;
|
|
20
19
|
}
|
|
21
20
|
log.debug(LOG_PREFIX, `Simulator already in 'Booted' state. Continuing`);
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import {log} from '../logger';
|
|
2
2
|
import {waitForCondition} from 'asyncbox';
|
|
3
|
-
import _ from 'lodash';
|
|
4
3
|
import type {Simctl} from '../simctl';
|
|
5
4
|
import type {BootMonitorOptions} from '../types';
|
|
6
5
|
import type {SubProcess} from 'teen_process';
|
|
@@ -64,9 +63,10 @@ export async function startBootMonitor(
|
|
|
64
63
|
}
|
|
65
64
|
isBootingFinished = true;
|
|
66
65
|
} else {
|
|
67
|
-
const errMessage =
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
const errMessage =
|
|
67
|
+
status.length === 0
|
|
68
|
+
? `The simulator booting process has exited with code ${code} by signal ${signal}`
|
|
69
|
+
: status.join('\n');
|
|
70
70
|
error = new Error(errMessage);
|
|
71
71
|
if (onError) {
|
|
72
72
|
onError(error);
|