appium-xcuitest-driver 10.1.7 → 10.2.0
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 +6 -0
- package/build/lib/doctor/optional-checks.d.ts +13 -0
- package/build/lib/doctor/optional-checks.d.ts.map +1 -1
- package/build/lib/doctor/optional-checks.js +72 -1
- package/build/lib/doctor/optional-checks.js.map +1 -1
- package/build/lib/doctor/required-checks.d.ts.map +1 -1
- package/build/lib/doctor/required-checks.js +0 -7
- package/build/lib/doctor/required-checks.js.map +1 -1
- package/lib/doctor/optional-checks.js +80 -0
- package/lib/doctor/required-checks.js +0 -6
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## [10.2.0](https://github.com/appium/appium-xcuitest-driver/compare/v10.1.7...v10.2.0) (2025-10-10)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
* Add optional simulator doctor check ([#2639](https://github.com/appium/appium-xcuitest-driver/issues/2639)) ([201d451](https://github.com/appium/appium-xcuitest-driver/commit/201d4519d051546dfd3b9f94f87e19a7914b7932))
|
|
6
|
+
|
|
1
7
|
## [10.1.7](https://github.com/appium/appium-xcuitest-driver/compare/v10.1.6...v10.1.7) (2025-10-10)
|
|
2
8
|
|
|
3
9
|
### Miscellaneous Chores
|
|
@@ -8,6 +8,19 @@ export class OptionalIdbCommandCheck {
|
|
|
8
8
|
}
|
|
9
9
|
export const optionalIdbCheck: OptionalIdbCommandCheck;
|
|
10
10
|
/** @satisfies {import('@appium/types').IDoctorCheck} */
|
|
11
|
+
export class OptionalSimulatorCheck {
|
|
12
|
+
SUPPORTED_SIMULATOR_PLATFORMS: {
|
|
13
|
+
displayName: string;
|
|
14
|
+
name: string;
|
|
15
|
+
}[];
|
|
16
|
+
diagnose(): Promise<import("@appium/types").DoctorCheckResult>;
|
|
17
|
+
fix(): Promise<string>;
|
|
18
|
+
hasAutofix(): boolean;
|
|
19
|
+
isOptional(): boolean;
|
|
20
|
+
_listInstalledSdks(): Promise<any>;
|
|
21
|
+
}
|
|
22
|
+
export const optionalSimulatorCheck: OptionalSimulatorCheck;
|
|
23
|
+
/** @satisfies {import('@appium/types').IDoctorCheck} */
|
|
11
24
|
export class OptionalApplesimutilsCommandCheck {
|
|
12
25
|
README_LINK: string;
|
|
13
26
|
diagnose(): Promise<import("@appium/types").DoctorCheckResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optional-checks.d.ts","sourceRoot":"","sources":["../../../lib/doctor/optional-checks.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"optional-checks.d.ts","sourceRoot":"","sources":["../../../lib/doctor/optional-checks.js"],"names":[],"mappings":"AAKA,wDAAwD;AACxD;IACE,uBAAwC;IAExC,+DAaC;IAED,uBAEC;IAED,sBAEC;IAED,sBAEC;CACF;AACD,uDAA8D;AAE9D,wDAAwD;AACxD;IACE;;;QASE;IAEF,+DAwBC;IAED,uBAEC;IAED,sBAEC;IAED,sBAEC;IAED,mCAyBC;CACF;AACD,4DAAmE;AAEnE,wDAAwD;AACxD;IACE,oBAAoI;IAEpI,+DAKC;IAED,uBAEC;IAED,sBAEC;IAED,sBAEC;CACF;AACD,2EAAkF;AAGlF,wDAAwD;AACxD;IACE,sBAAyB;IACzB,4BAA6D;IAE7D,+DAMC;IAED,uBAKC;IAED,sBAEC;IAED,sBAEC;CACF;AACD,sDAA6D"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.optionalFfmpegCheck = exports.OptionalFfmpegCheck = exports.optionalApplesimutilsCheck = exports.OptionalApplesimutilsCommandCheck = exports.optionalIdbCheck = exports.OptionalIdbCommandCheck = void 0;
|
|
3
|
+
exports.optionalFfmpegCheck = exports.OptionalFfmpegCheck = exports.optionalApplesimutilsCheck = exports.OptionalApplesimutilsCommandCheck = exports.optionalSimulatorCheck = exports.OptionalSimulatorCheck = exports.optionalIdbCheck = exports.OptionalIdbCommandCheck = void 0;
|
|
4
4
|
const utils_1 = require("./utils");
|
|
5
5
|
const support_1 = require("appium/support");
|
|
6
6
|
require("@colors/colors");
|
|
7
|
+
const teen_process_1 = require("teen_process");
|
|
7
8
|
/** @satisfies {import('@appium/types').IDoctorCheck} */
|
|
8
9
|
class OptionalIdbCommandCheck {
|
|
9
10
|
IDB_README_URL = 'https://git.io/JnxQc';
|
|
@@ -34,6 +35,76 @@ class OptionalIdbCommandCheck {
|
|
|
34
35
|
exports.OptionalIdbCommandCheck = OptionalIdbCommandCheck;
|
|
35
36
|
exports.optionalIdbCheck = new OptionalIdbCommandCheck();
|
|
36
37
|
/** @satisfies {import('@appium/types').IDoctorCheck} */
|
|
38
|
+
class OptionalSimulatorCheck {
|
|
39
|
+
SUPPORTED_SIMULATOR_PLATFORMS = [
|
|
40
|
+
{
|
|
41
|
+
displayName: 'iOS',
|
|
42
|
+
name: 'iphonesimulator'
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
displayName: 'tvOS',
|
|
46
|
+
name: 'appletvsimulator'
|
|
47
|
+
}
|
|
48
|
+
];
|
|
49
|
+
async diagnose() {
|
|
50
|
+
try {
|
|
51
|
+
// https://github.com/appium/appium/issues/12093#issuecomment-459358120
|
|
52
|
+
await (0, teen_process_1.exec)('xcrun', ['simctl', 'help']);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
return support_1.doctor.nokOptional(`Testing on Simulator is not possible. Cannot run 'xcrun simctl': ${err.stderr || err.message}`);
|
|
56
|
+
}
|
|
57
|
+
const sdks = await this._listInstalledSdks();
|
|
58
|
+
for (const { displayName, name } of this.SUPPORTED_SIMULATOR_PLATFORMS) {
|
|
59
|
+
const errorPrefix = `Testing on ${displayName} Simulator is not possible`;
|
|
60
|
+
if (!sdks.some(({ platform }) => platform === name)) {
|
|
61
|
+
return support_1.doctor.nokOptional(`${errorPrefix}: SDK is not installed`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return support_1.doctor.okOptional(`The following Simulator SDKs are installed:\n` +
|
|
65
|
+
sdks
|
|
66
|
+
.filter(({ platform }) => this.SUPPORTED_SIMULATOR_PLATFORMS.some(({ name }) => name === platform))
|
|
67
|
+
.map(({ displayName }) => `\t→ ${displayName}`).join('\n'));
|
|
68
|
+
}
|
|
69
|
+
async fix() {
|
|
70
|
+
return `Install the desired Simulator SDK from Xcode's Settings -> Components`;
|
|
71
|
+
}
|
|
72
|
+
hasAutofix() {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
isOptional() {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
async _listInstalledSdks() {
|
|
79
|
+
const { stdout } = await (0, teen_process_1.exec)('xcodebuild', ['-json', '-showsdks']);
|
|
80
|
+
return JSON.parse(stdout);
|
|
81
|
+
// Example output:
|
|
82
|
+
/*
|
|
83
|
+
[
|
|
84
|
+
...,
|
|
85
|
+
{
|
|
86
|
+
"buildID" : "E4E7682E-88C7-11F0-B669-CF409DDBA9DD",
|
|
87
|
+
"canonicalName" : "iphoneos26.0",
|
|
88
|
+
"displayName" : "iOS 26.0",
|
|
89
|
+
"isBaseSdk" : true,
|
|
90
|
+
"platform" : "iphoneos",
|
|
91
|
+
"platformPath" : "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform",
|
|
92
|
+
"platformVersion" : "26.0",
|
|
93
|
+
"productBuildVersion" : "23A337",
|
|
94
|
+
"productCopyright" : "1983-2025 Apple Inc.",
|
|
95
|
+
"productName" : "iPhone OS",
|
|
96
|
+
"productVersion" : "26.0",
|
|
97
|
+
"sdkPath" : "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS26.0.sdk",
|
|
98
|
+
"sdkVersion" : "26.0"
|
|
99
|
+
},
|
|
100
|
+
...
|
|
101
|
+
]
|
|
102
|
+
*/
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.OptionalSimulatorCheck = OptionalSimulatorCheck;
|
|
106
|
+
exports.optionalSimulatorCheck = new OptionalSimulatorCheck();
|
|
107
|
+
/** @satisfies {import('@appium/types').IDoctorCheck} */
|
|
37
108
|
class OptionalApplesimutilsCommandCheck {
|
|
38
109
|
README_LINK = 'https://github.com/appium/appium-xcuitest-driver/blob/master/docs/reference/execute-methods.md#mobile-setpermission';
|
|
39
110
|
async diagnose() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optional-checks.js","sourceRoot":"","sources":["../../../lib/doctor/optional-checks.js"],"names":[],"mappings":";;;AAAA,mCAA8C;AAC9C,4CAAsC;AACtC,0BAAwB;
|
|
1
|
+
{"version":3,"file":"optional-checks.js","sourceRoot":"","sources":["../../../lib/doctor/optional-checks.js"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"required-checks.d.ts","sourceRoot":"","sources":["../../../lib/doctor/required-checks.js"],"names":[],"mappings":"AAMA,wDAAwD;AACxD;IACE,+DAOC;IAED,uBAEC;IAED,sBAEC;IAED,sBAEC;CACF;AACD,oCAA2C;AAG3C,wDAAwD;AACxD;IACE,+
|
|
1
|
+
{"version":3,"file":"required-checks.d.ts","sourceRoot":"","sources":["../../../lib/doctor/required-checks.js"],"names":[],"mappings":"AAMA,wDAAwD;AACxD;IACE,+DAOC;IAED,uBAEC;IAED,sBAEC;IAED,sBAEC;CACF;AACD,oCAA2C;AAG3C,wDAAwD;AACxD;IACE,+DAQC;IAED,uBAEC;IAED,sBAEC;IAED,sBAEC;CACF;AACD,8CAAqD;AA6DrD,iDAAiF;;;;;;;;;;;;;AA1DjF;;;;;;GAMG;AAEH,wDAAwD;AACxD;IAGE;;;OAGG;IACH,qBAHW,MAAM,SACN,kBAAkB,EAK5B;IATD,sCAAwG;IAOtG,gBAAsB;IACtB,yBAAgB;IAGlB,+DAoBC;IAED,uBAKC;IAED,sBAEC;IAED,sBAEC;CACF"}
|
|
@@ -32,13 +32,6 @@ exports.xcodeCheck = new XcodeCheck();
|
|
|
32
32
|
class XcodeToolsCheck {
|
|
33
33
|
async diagnose() {
|
|
34
34
|
const errPrefix = 'Xcode Command Line Tools are not installed or are improperly configured';
|
|
35
|
-
try {
|
|
36
|
-
// https://github.com/appium/appium/issues/12093#issuecomment-459358120
|
|
37
|
-
await (0, teen_process_1.exec)('xcrun', ['simctl', 'help']);
|
|
38
|
-
}
|
|
39
|
-
catch (err) {
|
|
40
|
-
return support_1.doctor.nok(`${errPrefix}. Cannot run 'xcrun simctl': ${err.stderr || err.message}`);
|
|
41
|
-
}
|
|
42
35
|
try {
|
|
43
36
|
await (0, teen_process_1.exec)('xcodebuild', ['-version']);
|
|
44
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"required-checks.js","sourceRoot":"","sources":["../../../lib/doctor/required-checks.js"],"names":[],"mappings":";;;AAAA,4CAA0C;AAC1C,+CAAkC;AAClC,+CAAuD;AACvD,0BAAwB;AAGxB,wDAAwD;AACxD,MAAa,UAAU;IACrB,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,IAAA,sBAAY,GAAE,CAAC;YACvC,OAAO,gBAAM,CAAC,EAAE,CAAC,0BAA0B,SAAS,GAAG,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,gBAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG;QACP,OAAO,uDAAuD,CAAC;IACjE,CAAC;IAED,UAAU;QACR,OAAO,KAAK,CAAC;IACf,CAAC;IAED,UAAU;QACR,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AArBD,gCAqBC;AACY,QAAA,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;AAG3C,wDAAwD;AACxD,MAAa,eAAe;IAC1B,KAAK,CAAC,QAAQ;QACZ,MAAM,SAAS,GAAG,yEAAyE,CAAC;QAC5F,IAAI,CAAC;YACH,
|
|
1
|
+
{"version":3,"file":"required-checks.js","sourceRoot":"","sources":["../../../lib/doctor/required-checks.js"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {resolveExecutablePath} from './utils';
|
|
2
2
|
import {doctor} from 'appium/support';
|
|
3
3
|
import '@colors/colors';
|
|
4
|
+
import {exec} from 'teen_process';
|
|
4
5
|
|
|
5
6
|
/** @satisfies {import('@appium/types').IDoctorCheck} */
|
|
6
7
|
export class OptionalIdbCommandCheck {
|
|
@@ -35,6 +36,85 @@ export class OptionalIdbCommandCheck {
|
|
|
35
36
|
}
|
|
36
37
|
export const optionalIdbCheck = new OptionalIdbCommandCheck();
|
|
37
38
|
|
|
39
|
+
/** @satisfies {import('@appium/types').IDoctorCheck} */
|
|
40
|
+
export class OptionalSimulatorCheck {
|
|
41
|
+
SUPPORTED_SIMULATOR_PLATFORMS = [
|
|
42
|
+
{
|
|
43
|
+
displayName: 'iOS',
|
|
44
|
+
name: 'iphonesimulator'
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
displayName: 'tvOS',
|
|
48
|
+
name: 'appletvsimulator'
|
|
49
|
+
}
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
async diagnose() {
|
|
53
|
+
try {
|
|
54
|
+
// https://github.com/appium/appium/issues/12093#issuecomment-459358120
|
|
55
|
+
await exec('xcrun', ['simctl', 'help']);
|
|
56
|
+
} catch (err) {
|
|
57
|
+
return doctor.nokOptional(
|
|
58
|
+
`Testing on Simulator is not possible. Cannot run 'xcrun simctl': ${err.stderr || err.message}`
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const sdks = await this._listInstalledSdks();
|
|
63
|
+
for (const {displayName, name} of this.SUPPORTED_SIMULATOR_PLATFORMS) {
|
|
64
|
+
const errorPrefix = `Testing on ${displayName} Simulator is not possible`;
|
|
65
|
+
if (!sdks.some(({platform}) => platform === name)) {
|
|
66
|
+
return doctor.nokOptional(`${errorPrefix}: SDK is not installed`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return doctor.okOptional(
|
|
71
|
+
`The following Simulator SDKs are installed:\n` +
|
|
72
|
+
sdks
|
|
73
|
+
.filter(({platform}) => this.SUPPORTED_SIMULATOR_PLATFORMS.some(({name}) => name === platform))
|
|
74
|
+
.map(({displayName}) => `\t→ ${displayName}`).join('\n')
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async fix() {
|
|
79
|
+
return `Install the desired Simulator SDK from Xcode's Settings -> Components`;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
hasAutofix() {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
isOptional() {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
async _listInstalledSdks() {
|
|
91
|
+
const {stdout} = await exec('xcodebuild', ['-json', '-showsdks']);
|
|
92
|
+
return JSON.parse(stdout);
|
|
93
|
+
// Example output:
|
|
94
|
+
/*
|
|
95
|
+
[
|
|
96
|
+
...,
|
|
97
|
+
{
|
|
98
|
+
"buildID" : "E4E7682E-88C7-11F0-B669-CF409DDBA9DD",
|
|
99
|
+
"canonicalName" : "iphoneos26.0",
|
|
100
|
+
"displayName" : "iOS 26.0",
|
|
101
|
+
"isBaseSdk" : true,
|
|
102
|
+
"platform" : "iphoneos",
|
|
103
|
+
"platformPath" : "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform",
|
|
104
|
+
"platformVersion" : "26.0",
|
|
105
|
+
"productBuildVersion" : "23A337",
|
|
106
|
+
"productCopyright" : "1983-2025 Apple Inc.",
|
|
107
|
+
"productName" : "iPhone OS",
|
|
108
|
+
"productVersion" : "26.0",
|
|
109
|
+
"sdkPath" : "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS26.0.sdk",
|
|
110
|
+
"sdkVersion" : "26.0"
|
|
111
|
+
},
|
|
112
|
+
...
|
|
113
|
+
]
|
|
114
|
+
*/
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
export const optionalSimulatorCheck = new OptionalSimulatorCheck();
|
|
38
118
|
|
|
39
119
|
/** @satisfies {import('@appium/types').IDoctorCheck} */
|
|
40
120
|
export class OptionalApplesimutilsCommandCheck {
|
|
@@ -34,12 +34,6 @@ export const xcodeCheck = new XcodeCheck();
|
|
|
34
34
|
export class XcodeToolsCheck {
|
|
35
35
|
async diagnose() {
|
|
36
36
|
const errPrefix = 'Xcode Command Line Tools are not installed or are improperly configured';
|
|
37
|
-
try {
|
|
38
|
-
// https://github.com/appium/appium/issues/12093#issuecomment-459358120
|
|
39
|
-
await exec('xcrun', ['simctl', 'help']);
|
|
40
|
-
} catch (err) {
|
|
41
|
-
return doctor.nok(`${errPrefix}. Cannot run 'xcrun simctl': ${err.stderr || err.message}`);
|
|
42
|
-
}
|
|
43
37
|
try {
|
|
44
38
|
await exec('xcodebuild', ['-version']);
|
|
45
39
|
} catch (err) {
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium-xcuitest-driver",
|
|
3
|
-
"version": "10.
|
|
3
|
+
"version": "10.2.0",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "appium-xcuitest-driver",
|
|
9
|
-
"version": "10.
|
|
9
|
+
"version": "10.2.0",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@appium/strongbox": "^1.0.0-rc.1",
|