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 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":"AAIA,wDAAwD;AACxD;IACE,uBAAwC;IAExC,+DAaC;IAED,uBAEC;IAED,sBAEC;IAED,sBAEC;CACF;AACD,uDAA8D;AAG9D,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
+ {"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;AAExB,wDAAwD;AACxD,MAAa,uBAAuB;IAClC,cAAc,GAAG,sBAAsB,CAAC;IAExC,KAAK,CAAC,QAAQ;QACZ,MAAM,SAAS,GAAG,MAAM,IAAA,6BAAqB,EAAC,KAAK,CAAC,CAAC;QACrD,MAAM,kBAAkB,GAAG,MAAM,IAAA,6BAAqB,EAAC,eAAe,CAAC,CAAC;QACxE,IAAI,SAAS,IAAI,kBAAkB,EAAE,CAAC;YACpC,OAAO,gBAAM,CAAC,UAAU,CAAC,qCAAqC,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,CAAC,SAAS,IAAI,kBAAkB,EAAE,CAAC;YACrC,OAAO,gBAAM,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,SAAS,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5C,OAAO,gBAAM,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,gBAAM,CAAC,WAAW,CAAC,yCAAyC,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,GAAG;QACP,OAAO,OAAO,KAAK,CAAC,IAAI,qCAAqC,IAAI,CAAC,cAAc,EAAE,CAAC;IACrF,CAAC;IAED,UAAU;QACR,OAAO,KAAK,CAAC;IACf,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA7BD,0DA6BC;AACY,QAAA,gBAAgB,GAAG,IAAI,uBAAuB,EAAE,CAAC;AAG9D,wDAAwD;AACxD,MAAa,iCAAiC;IAC5C,WAAW,GAAG,qHAAqH,CAAC;IAEpI,KAAK,CAAC,QAAQ;QACZ,MAAM,iBAAiB,GAAG,MAAM,IAAA,6BAAqB,EAAC,eAAe,CAAC,CAAC;QACvE,OAAO,iBAAiB;YACtB,CAAC,CAAC,gBAAM,CAAC,UAAU,CAAC,kCAAkC,iBAAiB,EAAE,CAAC;YAC1E,CAAC,CAAC,gBAAM,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,GAAG;QACP,OAAO,OAAO,eAAe,CAAC,IAAI,qCAAqC,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5F,CAAC;IAED,UAAU;QACR,OAAO,KAAK,CAAC;IACf,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AArBD,8EAqBC;AACY,QAAA,0BAA0B,GAAG,IAAI,iCAAiC,EAAE,CAAC;AAGlF,wDAAwD;AACxD,MAAa,mBAAmB;IAC9B,aAAa,GAAG,QAAQ,CAAC;IACzB,mBAAmB,GAAG,sCAAsC,CAAC;IAE7D,KAAK,CAAC,QAAQ;QACZ,MAAM,UAAU,GAAG,MAAM,IAAA,6BAAqB,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEnE,OAAO,UAAU;YACf,CAAC,CAAC,gBAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,aAAa,eAAe,UAAU,GAAG,CAAC;YACtE,CAAC,CAAC,gBAAM,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,aAAa,kBAAkB,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,GAAG;QACP,OAAO,CACL,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,oEAAoE;YACnG,eAAe,IAAI,CAAC,mBAAmB,GAAG,CAC3C,CAAC;IACJ,CAAC;IAED,UAAU;QACR,OAAO,KAAK,CAAC;IACf,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA1BD,kDA0BC;AACY,QAAA,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC"}
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,+DAcC;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"}
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":"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"}
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) {
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "appium-xcuitest-driver",
3
- "version": "10.1.7",
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.1.7",
9
+ "version": "10.2.0",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
12
  "@appium/strongbox": "^1.0.0-rc.1",
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "xcuitest",
9
9
  "xctest"
10
10
  ],
11
- "version": "10.1.7",
11
+ "version": "10.2.0",
12
12
  "author": "Appium Contributors",
13
13
  "license": "Apache-2.0",
14
14
  "repository": {