appium-xcuitest-driver 10.2.0 → 10.2.2
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/doctor/checks.d.ts +2 -2
- package/build/lib/doctor/checks.d.ts.map +1 -1
- package/build/lib/doctor/checks.js.map +1 -1
- package/build/lib/doctor/optional-checks.d.ts +29 -25
- package/build/lib/doctor/optional-checks.d.ts.map +1 -1
- package/build/lib/doctor/optional-checks.js +18 -40
- package/build/lib/doctor/optional-checks.js.map +1 -1
- package/build/lib/doctor/required-checks.d.ts +27 -38
- package/build/lib/doctor/required-checks.d.ts.map +1 -1
- package/build/lib/doctor/required-checks.js +8 -17
- package/build/lib/doctor/required-checks.js.map +1 -1
- package/build/lib/doctor/utils.d.ts +3 -3
- package/build/lib/doctor/utils.d.ts.map +1 -1
- package/build/lib/doctor/utils.js +2 -2
- package/build/lib/doctor/utils.js.map +1 -1
- package/lib/doctor/{checks.js → checks.ts} +1 -0
- package/lib/doctor/{optional-checks.js → optional-checks.ts} +62 -62
- package/lib/doctor/{required-checks.js → required-checks.ts} +41 -39
- package/lib/doctor/{utils.js → utils.ts} +4 -3
- package/npm-shrinkwrap.json +68 -36
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## [10.2.2](https://github.com/appium/appium-xcuitest-driver/compare/v10.2.1...v10.2.2) (2025-10-17)
|
|
2
|
+
|
|
3
|
+
### Miscellaneous Chores
|
|
4
|
+
|
|
5
|
+
* **deps-dev:** bump semantic-release from 24.2.9 to 25.0.0 ([#2642](https://github.com/appium/appium-xcuitest-driver/issues/2642)) ([059aabc](https://github.com/appium/appium-xcuitest-driver/commit/059aabc38d33cebd448b314320318be09228317e))
|
|
6
|
+
|
|
7
|
+
## [10.2.1](https://github.com/appium/appium-xcuitest-driver/compare/v10.2.0...v10.2.1) (2025-10-10)
|
|
8
|
+
|
|
9
|
+
### Miscellaneous Chores
|
|
10
|
+
|
|
11
|
+
* Migrate doctor checks to typescript ([#2640](https://github.com/appium/appium-xcuitest-driver/issues/2640)) ([1bd49a7](https://github.com/appium/appium-xcuitest-driver/commit/1bd49a74a2e7789efd2cc52527b4559e9c91aa64))
|
|
12
|
+
|
|
1
13
|
## [10.2.0](https://github.com/appium/appium-xcuitest-driver/compare/v10.1.7...v10.2.0) (2025-10-10)
|
|
2
14
|
|
|
3
15
|
### Features
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export * as required from
|
|
2
|
-
export * as optional from
|
|
1
|
+
export * as required from './required-checks';
|
|
2
|
+
export * as optional from './optional-checks';
|
|
3
3
|
//# sourceMappingURL=checks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../../lib/doctor/checks.
|
|
1
|
+
{"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../../lib/doctor/checks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../lib/doctor/checks.
|
|
1
|
+
{"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../lib/doctor/checks.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8DAA8C;AAC9C,8DAA8C"}
|
|
@@ -1,42 +1,46 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import type { IDoctorCheck, AppiumLogger, DoctorCheckResult } from '@appium/types';
|
|
2
|
+
import '@colors/colors';
|
|
3
|
+
export declare class OptionalIdbCommandCheck implements IDoctorCheck {
|
|
4
|
+
log: AppiumLogger;
|
|
5
|
+
static readonly IDB_README_URL = "https://git.io/JnxQc";
|
|
6
|
+
diagnose(): Promise<DoctorCheckResult>;
|
|
5
7
|
fix(): Promise<string>;
|
|
6
8
|
hasAutofix(): boolean;
|
|
7
9
|
isOptional(): boolean;
|
|
8
10
|
}
|
|
9
|
-
export const optionalIdbCheck: OptionalIdbCommandCheck;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
SUPPORTED_SIMULATOR_PLATFORMS:
|
|
13
|
-
|
|
14
|
-
name: string;
|
|
15
|
-
}[];
|
|
16
|
-
diagnose(): Promise<import("@appium/types").DoctorCheckResult>;
|
|
11
|
+
export declare const optionalIdbCheck: OptionalIdbCommandCheck;
|
|
12
|
+
export declare class OptionalSimulatorCheck implements IDoctorCheck {
|
|
13
|
+
log: AppiumLogger;
|
|
14
|
+
static readonly SUPPORTED_SIMULATOR_PLATFORMS: SimulatorPlatform[];
|
|
15
|
+
diagnose(): Promise<DoctorCheckResult>;
|
|
17
16
|
fix(): Promise<string>;
|
|
18
17
|
hasAutofix(): boolean;
|
|
19
18
|
isOptional(): boolean;
|
|
20
|
-
_listInstalledSdks
|
|
19
|
+
private _listInstalledSdks;
|
|
21
20
|
}
|
|
22
|
-
export const optionalSimulatorCheck: OptionalSimulatorCheck;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
README_LINK
|
|
26
|
-
diagnose(): Promise<
|
|
21
|
+
export declare const optionalSimulatorCheck: OptionalSimulatorCheck;
|
|
22
|
+
export declare class OptionalApplesimutilsCommandCheck implements IDoctorCheck {
|
|
23
|
+
log: AppiumLogger;
|
|
24
|
+
static readonly README_LINK = "https://github.com/appium/appium-xcuitest-driver/blob/master/docs/reference/execute-methods.md#mobile-setpermission";
|
|
25
|
+
diagnose(): Promise<DoctorCheckResult>;
|
|
27
26
|
fix(): Promise<string>;
|
|
28
27
|
hasAutofix(): boolean;
|
|
29
28
|
isOptional(): boolean;
|
|
30
29
|
}
|
|
31
|
-
export const optionalApplesimutilsCheck: OptionalApplesimutilsCommandCheck;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
FFMPEG_BINARY
|
|
35
|
-
FFMPEG_INSTALL_LINK
|
|
36
|
-
diagnose(): Promise<
|
|
30
|
+
export declare const optionalApplesimutilsCheck: OptionalApplesimutilsCommandCheck;
|
|
31
|
+
export declare class OptionalFfmpegCheck implements IDoctorCheck {
|
|
32
|
+
log: AppiumLogger;
|
|
33
|
+
static readonly FFMPEG_BINARY = "ffmpeg";
|
|
34
|
+
static readonly FFMPEG_INSTALL_LINK = "https://www.ffmpeg.org/download.html";
|
|
35
|
+
diagnose(): Promise<DoctorCheckResult>;
|
|
37
36
|
fix(): Promise<string>;
|
|
38
37
|
hasAutofix(): boolean;
|
|
39
38
|
isOptional(): boolean;
|
|
40
39
|
}
|
|
41
|
-
export const optionalFfmpegCheck: OptionalFfmpegCheck;
|
|
40
|
+
export declare const optionalFfmpegCheck: OptionalFfmpegCheck;
|
|
41
|
+
interface SimulatorPlatform {
|
|
42
|
+
displayName: string;
|
|
43
|
+
name: string;
|
|
44
|
+
}
|
|
45
|
+
export {};
|
|
42
46
|
//# sourceMappingURL=optional-checks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optional-checks.d.ts","sourceRoot":"","sources":["../../../lib/doctor/optional-checks.
|
|
1
|
+
{"version":3,"file":"optional-checks.d.ts","sourceRoot":"","sources":["../../../lib/doctor/optional-checks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAC,MAAM,eAAe,CAAC;AACjF,OAAO,gBAAgB,CAAC;AAGxB,qBAAa,uBAAwB,YAAW,YAAY;IAC1D,GAAG,EAAG,YAAY,CAAC;IACnB,MAAM,CAAC,QAAQ,CAAC,cAAc,0BAA0B;IAElD,QAAQ,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAetC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;IAI5B,UAAU,IAAI,OAAO;IAIrB,UAAU,IAAI,OAAO;CAGtB;AACD,eAAO,MAAM,gBAAgB,yBAAgC,CAAC;AAE9D,qBAAa,sBAAuB,YAAW,YAAY;IACzD,GAAG,EAAG,YAAY,CAAC;IACnB,MAAM,CAAC,QAAQ,CAAC,6BAA6B,EAAE,iBAAiB,EAAE,CAShE;IAEI,QAAQ,IAAI,OAAO,CAAC,iBAAiB,CAAC;IA0BtC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;IAI5B,UAAU,IAAI,OAAO;IAIrB,UAAU,IAAI,OAAO;YAIP,kBAAkB;CAIjC;AACD,eAAO,MAAM,sBAAsB,wBAA+B,CAAC;AAEnE,qBAAa,iCAAkC,YAAW,YAAY;IACpE,GAAG,EAAG,YAAY,CAAC;IACnB,MAAM,CAAC,QAAQ,CAAC,WAAW,yHAAyH;IAE9I,QAAQ,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAOtC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;IAI5B,UAAU,IAAI,OAAO;IAIrB,UAAU,IAAI,OAAO;CAGtB;AACD,eAAO,MAAM,0BAA0B,mCAA0C,CAAC;AAGlF,qBAAa,mBAAoB,YAAW,YAAY;IACtD,GAAG,EAAG,YAAY,CAAC;IACnB,MAAM,CAAC,QAAQ,CAAC,aAAa,YAAY;IACzC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,0CAA0C;IAEvE,QAAQ,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAQtC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;IAO5B,UAAU,IAAI,OAAO;IAIrB,UAAU,IAAI,OAAO;CAGtB;AACD,eAAO,MAAM,mBAAmB,qBAA4B,CAAC;AAE7D,UAAU,iBAAiB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd"}
|
|
@@ -5,9 +5,9 @@ const utils_1 = require("./utils");
|
|
|
5
5
|
const support_1 = require("appium/support");
|
|
6
6
|
require("@colors/colors");
|
|
7
7
|
const teen_process_1 = require("teen_process");
|
|
8
|
-
/** @satisfies {import('@appium/types').IDoctorCheck} */
|
|
9
8
|
class OptionalIdbCommandCheck {
|
|
10
|
-
|
|
9
|
+
log;
|
|
10
|
+
static IDB_README_URL = 'https://git.io/JnxQc';
|
|
11
11
|
async diagnose() {
|
|
12
12
|
const fbIdbPath = await (0, utils_1.resolveExecutablePath)('idb');
|
|
13
13
|
const fbCompanionIdbPath = await (0, utils_1.resolveExecutablePath)('idb_companion');
|
|
@@ -23,7 +23,7 @@ class OptionalIdbCommandCheck {
|
|
|
23
23
|
return support_1.doctor.nokOptional('idb and idb_companion are not installed');
|
|
24
24
|
}
|
|
25
25
|
async fix() {
|
|
26
|
-
return `Why ${'idb'.bold} is needed and how to install it: ${
|
|
26
|
+
return `Why ${'idb'.bold} is needed and how to install it: ${OptionalIdbCommandCheck.IDB_README_URL}`;
|
|
27
27
|
}
|
|
28
28
|
hasAutofix() {
|
|
29
29
|
return false;
|
|
@@ -34,9 +34,9 @@ class OptionalIdbCommandCheck {
|
|
|
34
34
|
}
|
|
35
35
|
exports.OptionalIdbCommandCheck = OptionalIdbCommandCheck;
|
|
36
36
|
exports.optionalIdbCheck = new OptionalIdbCommandCheck();
|
|
37
|
-
/** @satisfies {import('@appium/types').IDoctorCheck} */
|
|
38
37
|
class OptionalSimulatorCheck {
|
|
39
|
-
|
|
38
|
+
log;
|
|
39
|
+
static SUPPORTED_SIMULATOR_PLATFORMS = [
|
|
40
40
|
{
|
|
41
41
|
displayName: 'iOS',
|
|
42
42
|
name: 'iphonesimulator'
|
|
@@ -55,7 +55,7 @@ class OptionalSimulatorCheck {
|
|
|
55
55
|
return support_1.doctor.nokOptional(`Testing on Simulator is not possible. Cannot run 'xcrun simctl': ${err.stderr || err.message}`);
|
|
56
56
|
}
|
|
57
57
|
const sdks = await this._listInstalledSdks();
|
|
58
|
-
for (const { displayName, name } of
|
|
58
|
+
for (const { displayName, name } of OptionalSimulatorCheck.SUPPORTED_SIMULATOR_PLATFORMS) {
|
|
59
59
|
const errorPrefix = `Testing on ${displayName} Simulator is not possible`;
|
|
60
60
|
if (!sdks.some(({ platform }) => platform === name)) {
|
|
61
61
|
return support_1.doctor.nokOptional(`${errorPrefix}: SDK is not installed`);
|
|
@@ -63,7 +63,7 @@ class OptionalSimulatorCheck {
|
|
|
63
63
|
}
|
|
64
64
|
return support_1.doctor.okOptional(`The following Simulator SDKs are installed:\n` +
|
|
65
65
|
sdks
|
|
66
|
-
.filter(({ platform }) =>
|
|
66
|
+
.filter(({ platform }) => OptionalSimulatorCheck.SUPPORTED_SIMULATOR_PLATFORMS.some(({ name }) => name === platform))
|
|
67
67
|
.map(({ displayName }) => `\t→ ${displayName}`).join('\n'));
|
|
68
68
|
}
|
|
69
69
|
async fix() {
|
|
@@ -78,35 +78,13 @@ class OptionalSimulatorCheck {
|
|
|
78
78
|
async _listInstalledSdks() {
|
|
79
79
|
const { stdout } = await (0, teen_process_1.exec)('xcodebuild', ['-json', '-showsdks']);
|
|
80
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
81
|
}
|
|
104
82
|
}
|
|
105
83
|
exports.OptionalSimulatorCheck = OptionalSimulatorCheck;
|
|
106
84
|
exports.optionalSimulatorCheck = new OptionalSimulatorCheck();
|
|
107
|
-
/** @satisfies {import('@appium/types').IDoctorCheck} */
|
|
108
85
|
class OptionalApplesimutilsCommandCheck {
|
|
109
|
-
|
|
86
|
+
log;
|
|
87
|
+
static README_LINK = 'https://github.com/appium/appium-xcuitest-driver/blob/master/docs/reference/execute-methods.md#mobile-setpermission';
|
|
110
88
|
async diagnose() {
|
|
111
89
|
const applesimutilsPath = await (0, utils_1.resolveExecutablePath)('applesimutils');
|
|
112
90
|
return applesimutilsPath
|
|
@@ -114,7 +92,7 @@ class OptionalApplesimutilsCommandCheck {
|
|
|
114
92
|
: support_1.doctor.nokOptional('applesimutils are not installed');
|
|
115
93
|
}
|
|
116
94
|
async fix() {
|
|
117
|
-
return `Why ${'applesimutils'.bold} is needed and how to install it: ${
|
|
95
|
+
return `Why ${'applesimutils'.bold} is needed and how to install it: ${OptionalApplesimutilsCommandCheck.README_LINK}`;
|
|
118
96
|
}
|
|
119
97
|
hasAutofix() {
|
|
120
98
|
return false;
|
|
@@ -125,19 +103,19 @@ class OptionalApplesimutilsCommandCheck {
|
|
|
125
103
|
}
|
|
126
104
|
exports.OptionalApplesimutilsCommandCheck = OptionalApplesimutilsCommandCheck;
|
|
127
105
|
exports.optionalApplesimutilsCheck = new OptionalApplesimutilsCommandCheck();
|
|
128
|
-
/** @satisfies {import('@appium/types').IDoctorCheck} */
|
|
129
106
|
class OptionalFfmpegCheck {
|
|
130
|
-
|
|
131
|
-
|
|
107
|
+
log;
|
|
108
|
+
static FFMPEG_BINARY = 'ffmpeg';
|
|
109
|
+
static FFMPEG_INSTALL_LINK = 'https://www.ffmpeg.org/download.html';
|
|
132
110
|
async diagnose() {
|
|
133
|
-
const ffmpegPath = await (0, utils_1.resolveExecutablePath)(
|
|
111
|
+
const ffmpegPath = await (0, utils_1.resolveExecutablePath)(OptionalFfmpegCheck.FFMPEG_BINARY);
|
|
134
112
|
return ffmpegPath
|
|
135
|
-
? support_1.doctor.okOptional(`${
|
|
136
|
-
: support_1.doctor.nokOptional(`${
|
|
113
|
+
? support_1.doctor.okOptional(`${OptionalFfmpegCheck.FFMPEG_BINARY} exists at '${ffmpegPath}'`)
|
|
114
|
+
: support_1.doctor.nokOptional(`${OptionalFfmpegCheck.FFMPEG_BINARY} cannot be found`);
|
|
137
115
|
}
|
|
138
116
|
async fix() {
|
|
139
|
-
return (`${`${
|
|
140
|
-
`Please read ${
|
|
117
|
+
return (`${`${OptionalFfmpegCheck.FFMPEG_BINARY}`.bold} is used to capture screen recordings from the device under test. ` +
|
|
118
|
+
`Please read ${OptionalFfmpegCheck.FFMPEG_INSTALL_LINK}.`);
|
|
141
119
|
}
|
|
142
120
|
hasAutofix() {
|
|
143
121
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optional-checks.js","sourceRoot":"","sources":["../../../lib/doctor/optional-checks.
|
|
1
|
+
{"version":3,"file":"optional-checks.js","sourceRoot":"","sources":["../../../lib/doctor/optional-checks.ts"],"names":[],"mappings":";;;AAAA,mCAA8C;AAC9C,4CAAsC;AAEtC,0BAAwB;AACxB,+CAAkC;AAElC,MAAa,uBAAuB;IAClC,GAAG,CAAgB;IACnB,MAAM,CAAU,cAAc,GAAG,sBAAsB,CAAC;IAExD,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,uBAAuB,CAAC,cAAc,EAAE,CAAC;IACxG,CAAC;IAED,UAAU;QACR,OAAO,KAAK,CAAC;IACf,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC;IACd,CAAC;;AA7BH,0DA8BC;AACY,QAAA,gBAAgB,GAAG,IAAI,uBAAuB,EAAE,CAAC;AAE9D,MAAa,sBAAsB;IACjC,GAAG,CAAgB;IACnB,MAAM,CAAU,6BAA6B,GAAwB;QACnE;YACE,WAAW,EAAE,KAAK;YAClB,IAAI,EAAE,iBAAiB;SACxB;QACD;YACE,WAAW,EAAE,MAAM;YACnB,IAAI,EAAE,kBAAkB;SACzB;KACF,CAAC;IAEF,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC;YACH,uEAAuE;YACvE,MAAM,IAAA,mBAAI,EAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,gBAAM,CAAC,WAAW,CACvB,oEAAqE,GAAW,CAAC,MAAM,IAAK,GAAa,CAAC,OAAO,EAAE,CACpH,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC7C,KAAK,MAAM,EAAC,WAAW,EAAE,IAAI,EAAC,IAAI,sBAAsB,CAAC,6BAA6B,EAAE,CAAC;YACvF,MAAM,WAAW,GAAG,cAAc,WAAW,4BAA4B,CAAC;YAC1E,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAC,QAAQ,EAAC,EAAE,EAAE,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC;gBAClD,OAAO,gBAAM,CAAC,WAAW,CAAC,GAAG,WAAW,wBAAwB,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAED,OAAO,gBAAM,CAAC,UAAU,CACtB,+CAA+C;YAC/C,IAAI;iBACD,MAAM,CAAC,CAAC,EAAC,QAAQ,EAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;iBAChH,GAAG,CAAC,CAAC,EAAC,WAAW,EAAC,EAAE,EAAE,CAAC,OAAO,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC3D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG;QACP,OAAO,uEAAuE,CAAC;IACjF,CAAC;IAED,UAAU;QACR,OAAO,KAAK,CAAC;IACf,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,kBAAkB;QAC9B,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM,IAAA,mBAAI,EAAC,YAAY,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;;AAtDH,wDAuDC;AACY,QAAA,sBAAsB,GAAG,IAAI,sBAAsB,EAAE,CAAC;AAEnE,MAAa,iCAAiC;IAC5C,GAAG,CAAgB;IACnB,MAAM,CAAU,WAAW,GAAG,qHAAqH,CAAC;IAEpJ,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,iCAAiC,CAAC,WAAW,EAAE,CAAC;IACzH,CAAC;IAED,UAAU;QACR,OAAO,KAAK,CAAC;IACf,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC;IACd,CAAC;;AArBH,8EAsBC;AACY,QAAA,0BAA0B,GAAG,IAAI,iCAAiC,EAAE,CAAC;AAGlF,MAAa,mBAAmB;IAC9B,GAAG,CAAgB;IACnB,MAAM,CAAU,aAAa,GAAG,QAAQ,CAAC;IACzC,MAAM,CAAU,mBAAmB,GAAG,sCAAsC,CAAC;IAE7E,KAAK,CAAC,QAAQ;QACZ,MAAM,UAAU,GAAG,MAAM,IAAA,6BAAqB,EAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;QAElF,OAAO,UAAU;YACf,CAAC,CAAC,gBAAM,CAAC,UAAU,CAAC,GAAG,mBAAmB,CAAC,aAAa,eAAe,UAAU,GAAG,CAAC;YACrF,CAAC,CAAC,gBAAM,CAAC,WAAW,CAAC,GAAG,mBAAmB,CAAC,aAAa,kBAAkB,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,GAAG;QACP,OAAO,CACL,GAAG,GAAG,mBAAmB,CAAC,aAAa,EAAE,CAAC,IAAI,oEAAoE;YAClH,eAAe,mBAAmB,CAAC,mBAAmB,GAAG,CAC1D,CAAC;IACJ,CAAC;IAED,UAAU;QACR,OAAO,KAAK,CAAC;IACf,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC;IACd,CAAC;;AA1BH,kDA2BC;AACY,QAAA,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC"}
|
|
@@ -1,53 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import type { IDoctorCheck, AppiumLogger, DoctorCheckResult } from '@appium/types';
|
|
2
|
+
import '@colors/colors';
|
|
3
|
+
export declare class XcodeCheck implements IDoctorCheck {
|
|
4
|
+
log: AppiumLogger;
|
|
5
|
+
diagnose(): Promise<DoctorCheckResult>;
|
|
4
6
|
fix(): Promise<string>;
|
|
5
7
|
hasAutofix(): boolean;
|
|
6
8
|
isOptional(): boolean;
|
|
7
9
|
}
|
|
8
|
-
export const xcodeCheck: XcodeCheck;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
diagnose(): Promise<
|
|
10
|
+
export declare const xcodeCheck: XcodeCheck;
|
|
11
|
+
export declare class XcodeToolsCheck implements IDoctorCheck {
|
|
12
|
+
log: AppiumLogger;
|
|
13
|
+
diagnose(): Promise<DoctorCheckResult>;
|
|
12
14
|
fix(): Promise<string>;
|
|
13
15
|
hasAutofix(): boolean;
|
|
14
16
|
isOptional(): boolean;
|
|
15
17
|
}
|
|
16
|
-
export const xcodeToolsCheck: XcodeToolsCheck;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
*/
|
|
23
|
-
expectDir?: boolean | undefined;
|
|
24
|
-
/**
|
|
25
|
-
* If set to true then
|
|
26
|
-
* the path is expected to be a valid file
|
|
27
|
-
*/
|
|
28
|
-
expectFile?: boolean | undefined;
|
|
29
|
-
};
|
|
30
|
-
/**
|
|
31
|
-
* @typedef EnvVarCheckOptions
|
|
32
|
-
* @property {boolean} [expectDir] If set to true then
|
|
33
|
-
* the path is expected to be a valid folder
|
|
34
|
-
* @property {boolean} [expectFile] If set to true then
|
|
35
|
-
* the path is expected to be a valid file
|
|
36
|
-
*/
|
|
37
|
-
/** @satisfies {import('@appium/types').IDoctorCheck} */
|
|
38
|
-
declare class EnvVarAndPathCheck {
|
|
39
|
-
/**
|
|
40
|
-
* @param {string} varName
|
|
41
|
-
* @param {EnvVarCheckOptions} [opts={}]
|
|
42
|
-
*/
|
|
18
|
+
export declare const xcodeToolsCheck: XcodeToolsCheck;
|
|
19
|
+
declare class EnvVarAndPathCheck implements IDoctorCheck {
|
|
20
|
+
private readonly varName;
|
|
21
|
+
private readonly opts;
|
|
22
|
+
log: AppiumLogger;
|
|
23
|
+
static readonly ENVIRONMENT_VARS_TUTORIAL_URL = "https://github.com/appium/java-client/blob/master/docs/environment.md";
|
|
43
24
|
constructor(varName: string, opts?: EnvVarCheckOptions);
|
|
44
|
-
|
|
45
|
-
varName: string;
|
|
46
|
-
opts: EnvVarCheckOptions;
|
|
47
|
-
diagnose(): Promise<import("@appium/types").DoctorCheckResult>;
|
|
25
|
+
diagnose(): Promise<DoctorCheckResult>;
|
|
48
26
|
fix(): Promise<string>;
|
|
49
27
|
hasAutofix(): boolean;
|
|
50
28
|
isOptional(): boolean;
|
|
51
29
|
}
|
|
30
|
+
export declare const homeEnvVarCheck: EnvVarAndPathCheck;
|
|
31
|
+
export interface EnvVarCheckOptions {
|
|
32
|
+
/**
|
|
33
|
+
* If set to true then the path is expected to be a valid folder
|
|
34
|
+
*/
|
|
35
|
+
expectDir?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* If set to true then the path is expected to be a valid file
|
|
38
|
+
*/
|
|
39
|
+
expectFile?: boolean;
|
|
40
|
+
}
|
|
52
41
|
export {};
|
|
53
42
|
//# sourceMappingURL=required-checks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"required-checks.d.ts","sourceRoot":"","sources":["../../../lib/doctor/required-checks.
|
|
1
|
+
{"version":3,"file":"required-checks.d.ts","sourceRoot":"","sources":["../../../lib/doctor/required-checks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAC,MAAM,eAAe,CAAC;AACjF,OAAO,gBAAgB,CAAC;AAGxB,qBAAa,UAAW,YAAW,YAAY;IAC7C,GAAG,EAAG,YAAY,CAAC;IAEb,QAAQ,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAStC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;IAI5B,UAAU,IAAI,OAAO;IAIrB,UAAU,IAAI,OAAO;CAGtB;AACD,eAAO,MAAM,UAAU,YAAmB,CAAC;AAG3C,qBAAa,eAAgB,YAAW,YAAY;IAClD,GAAG,EAAG,YAAY,CAAC;IAEb,QAAQ,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAUtC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;IAI5B,UAAU,IAAI,OAAO;IAIrB,UAAU,IAAI,OAAO;CAGtB;AACD,eAAO,MAAM,eAAe,iBAAwB,CAAC;AAGrD,cAAM,kBAAmB,YAAW,YAAY;IAK5C,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IALvB,GAAG,EAAG,YAAY,CAAC;IACnB,MAAM,CAAC,QAAQ,CAAC,6BAA6B,2EAA2E;gBAGrG,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,kBAAuB;IAG1C,QAAQ,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAsBtC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;IAO5B,UAAU,IAAI,OAAO;IAIrB,UAAU,IAAI,OAAO;CAGtB;AACD,eAAO,MAAM,eAAe,oBAAoD,CAAC;AAEjF,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB"}
|
|
@@ -5,8 +5,8 @@ const support_1 = require("appium/support");
|
|
|
5
5
|
const teen_process_1 = require("teen_process");
|
|
6
6
|
const appium_xcode_1 = require("appium-xcode");
|
|
7
7
|
require("@colors/colors");
|
|
8
|
-
/** @satisfies {import('@appium/types').IDoctorCheck} */
|
|
9
8
|
class XcodeCheck {
|
|
9
|
+
log;
|
|
10
10
|
async diagnose() {
|
|
11
11
|
try {
|
|
12
12
|
const xcodePath = await (0, appium_xcode_1.getPath)();
|
|
@@ -28,8 +28,8 @@ class XcodeCheck {
|
|
|
28
28
|
}
|
|
29
29
|
exports.XcodeCheck = XcodeCheck;
|
|
30
30
|
exports.xcodeCheck = new XcodeCheck();
|
|
31
|
-
/** @satisfies {import('@appium/types').IDoctorCheck} */
|
|
32
31
|
class XcodeToolsCheck {
|
|
32
|
+
log;
|
|
33
33
|
async diagnose() {
|
|
34
34
|
const errPrefix = 'Xcode Command Line Tools are not installed or are improperly configured';
|
|
35
35
|
try {
|
|
@@ -52,20 +52,11 @@ class XcodeToolsCheck {
|
|
|
52
52
|
}
|
|
53
53
|
exports.XcodeToolsCheck = XcodeToolsCheck;
|
|
54
54
|
exports.xcodeToolsCheck = new XcodeToolsCheck();
|
|
55
|
-
/**
|
|
56
|
-
* @typedef EnvVarCheckOptions
|
|
57
|
-
* @property {boolean} [expectDir] If set to true then
|
|
58
|
-
* the path is expected to be a valid folder
|
|
59
|
-
* @property {boolean} [expectFile] If set to true then
|
|
60
|
-
* the path is expected to be a valid file
|
|
61
|
-
*/
|
|
62
|
-
/** @satisfies {import('@appium/types').IDoctorCheck} */
|
|
63
55
|
class EnvVarAndPathCheck {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
*/
|
|
56
|
+
varName;
|
|
57
|
+
opts;
|
|
58
|
+
log;
|
|
59
|
+
static ENVIRONMENT_VARS_TUTORIAL_URL = 'https://github.com/appium/java-client/blob/master/docs/environment.md';
|
|
69
60
|
constructor(varName, opts = {}) {
|
|
70
61
|
this.varName = varName;
|
|
71
62
|
this.opts = opts;
|
|
@@ -76,7 +67,7 @@ class EnvVarAndPathCheck {
|
|
|
76
67
|
return support_1.doctor.nok(`${this.varName} environment variable is NOT set!`);
|
|
77
68
|
}
|
|
78
69
|
if (!await support_1.fs.exists(varValue)) {
|
|
79
|
-
|
|
70
|
+
const errMsg = `${this.varName} is set to '${varValue}' but this path does not exist!`;
|
|
80
71
|
return support_1.doctor.nok(errMsg);
|
|
81
72
|
}
|
|
82
73
|
const stat = await support_1.fs.stat(varValue);
|
|
@@ -90,7 +81,7 @@ class EnvVarAndPathCheck {
|
|
|
90
81
|
}
|
|
91
82
|
async fix() {
|
|
92
83
|
return (`Make sure the environment variable ${this.varName.bold} is properly configured for the Appium process. ` +
|
|
93
|
-
`Refer ${
|
|
84
|
+
`Refer ${EnvVarAndPathCheck.ENVIRONMENT_VARS_TUTORIAL_URL} for more details.`);
|
|
94
85
|
}
|
|
95
86
|
hasAutofix() {
|
|
96
87
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"required-checks.js","sourceRoot":"","sources":["../../../lib/doctor/required-checks.
|
|
1
|
+
{"version":3,"file":"required-checks.js","sourceRoot":"","sources":["../../../lib/doctor/required-checks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Return an executable path of cmd
|
|
3
3
|
*
|
|
4
|
-
* @param
|
|
5
|
-
* @return
|
|
4
|
+
* @param cmd Standard output by command
|
|
5
|
+
* @return The full path of cmd. `null` if the cmd is not found.
|
|
6
6
|
*/
|
|
7
|
-
export function resolveExecutablePath(cmd: string): Promise<string | null>;
|
|
7
|
+
export declare function resolveExecutablePath(cmd: string): Promise<string | null>;
|
|
8
8
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/doctor/utils.
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/doctor/utils.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQ/E"}
|
|
@@ -5,8 +5,8 @@ const support_1 = require("appium/support");
|
|
|
5
5
|
/**
|
|
6
6
|
* Return an executable path of cmd
|
|
7
7
|
*
|
|
8
|
-
* @param
|
|
9
|
-
* @return
|
|
8
|
+
* @param cmd Standard output by command
|
|
9
|
+
* @return The full path of cmd. `null` if the cmd is not found.
|
|
10
10
|
*/
|
|
11
11
|
async function resolveExecutablePath(cmd) {
|
|
12
12
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/doctor/utils.
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/doctor/utils.ts"],"names":[],"mappings":";;AAQA,sDAQC;AAhBD,4CAAkC;AAElC;;;;;GAKG;AACI,KAAK,UAAU,qBAAqB,CAAC,GAAW;IACrD,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,YAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,cAAc,IAAI,CAAC,MAAM,YAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;YACxD,OAAO,cAAc,CAAC;QACxB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import {resolveExecutablePath} from './utils';
|
|
2
2
|
import {doctor} from 'appium/support';
|
|
3
|
+
import type {IDoctorCheck, AppiumLogger, DoctorCheckResult} from '@appium/types';
|
|
3
4
|
import '@colors/colors';
|
|
4
5
|
import {exec} from 'teen_process';
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
IDB_README_URL = 'https://git.io/JnxQc';
|
|
7
|
+
export class OptionalIdbCommandCheck implements IDoctorCheck {
|
|
8
|
+
log!: AppiumLogger;
|
|
9
|
+
static readonly IDB_README_URL = 'https://git.io/JnxQc';
|
|
9
10
|
|
|
10
|
-
async diagnose() {
|
|
11
|
+
async diagnose(): Promise<DoctorCheckResult> {
|
|
11
12
|
const fbIdbPath = await resolveExecutablePath('idb');
|
|
12
13
|
const fbCompanionIdbPath = await resolveExecutablePath('idb_companion');
|
|
13
14
|
if (fbIdbPath && fbCompanionIdbPath) {
|
|
@@ -22,23 +23,23 @@ export class OptionalIdbCommandCheck {
|
|
|
22
23
|
return doctor.nokOptional('idb and idb_companion are not installed');
|
|
23
24
|
}
|
|
24
25
|
|
|
25
|
-
async fix() {
|
|
26
|
-
return `Why ${'idb'.bold} is needed and how to install it: ${
|
|
26
|
+
async fix(): Promise<string> {
|
|
27
|
+
return `Why ${'idb'.bold} is needed and how to install it: ${OptionalIdbCommandCheck.IDB_README_URL}`;
|
|
27
28
|
}
|
|
28
29
|
|
|
29
|
-
hasAutofix() {
|
|
30
|
+
hasAutofix(): boolean {
|
|
30
31
|
return false;
|
|
31
32
|
}
|
|
32
33
|
|
|
33
|
-
isOptional() {
|
|
34
|
+
isOptional(): boolean {
|
|
34
35
|
return true;
|
|
35
36
|
}
|
|
36
37
|
}
|
|
37
38
|
export const optionalIdbCheck = new OptionalIdbCommandCheck();
|
|
38
39
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
SUPPORTED_SIMULATOR_PLATFORMS = [
|
|
40
|
+
export class OptionalSimulatorCheck implements IDoctorCheck {
|
|
41
|
+
log!: AppiumLogger;
|
|
42
|
+
static readonly SUPPORTED_SIMULATOR_PLATFORMS: SimulatorPlatform[] = [
|
|
42
43
|
{
|
|
43
44
|
displayName: 'iOS',
|
|
44
45
|
name: 'iphonesimulator'
|
|
@@ -49,18 +50,18 @@ export class OptionalSimulatorCheck {
|
|
|
49
50
|
}
|
|
50
51
|
];
|
|
51
52
|
|
|
52
|
-
async diagnose() {
|
|
53
|
+
async diagnose(): Promise<DoctorCheckResult> {
|
|
53
54
|
try {
|
|
54
55
|
// https://github.com/appium/appium/issues/12093#issuecomment-459358120
|
|
55
56
|
await exec('xcrun', ['simctl', 'help']);
|
|
56
57
|
} catch (err) {
|
|
57
58
|
return doctor.nokOptional(
|
|
58
|
-
`Testing on Simulator is not possible. Cannot run 'xcrun simctl': ${err.stderr || err.message}`
|
|
59
|
+
`Testing on Simulator is not possible. Cannot run 'xcrun simctl': ${(err as any).stderr || (err as Error).message}`
|
|
59
60
|
);
|
|
60
61
|
}
|
|
61
62
|
|
|
62
63
|
const sdks = await this._listInstalledSdks();
|
|
63
|
-
for (const {displayName, name} of
|
|
64
|
+
for (const {displayName, name} of OptionalSimulatorCheck.SUPPORTED_SIMULATOR_PLATFORMS) {
|
|
64
65
|
const errorPrefix = `Testing on ${displayName} Simulator is not possible`;
|
|
65
66
|
if (!sdks.some(({platform}) => platform === name)) {
|
|
66
67
|
return doctor.nokOptional(`${errorPrefix}: SDK is not installed`);
|
|
@@ -70,104 +71,103 @@ export class OptionalSimulatorCheck {
|
|
|
70
71
|
return doctor.okOptional(
|
|
71
72
|
`The following Simulator SDKs are installed:\n` +
|
|
72
73
|
sdks
|
|
73
|
-
.filter(({platform}) =>
|
|
74
|
+
.filter(({platform}) => OptionalSimulatorCheck.SUPPORTED_SIMULATOR_PLATFORMS.some(({name}) => name === platform))
|
|
74
75
|
.map(({displayName}) => `\t→ ${displayName}`).join('\n')
|
|
75
76
|
);
|
|
76
77
|
}
|
|
77
78
|
|
|
78
|
-
async fix() {
|
|
79
|
+
async fix(): Promise<string> {
|
|
79
80
|
return `Install the desired Simulator SDK from Xcode's Settings -> Components`;
|
|
80
81
|
}
|
|
81
82
|
|
|
82
|
-
hasAutofix() {
|
|
83
|
+
hasAutofix(): boolean {
|
|
83
84
|
return false;
|
|
84
85
|
}
|
|
85
86
|
|
|
86
|
-
isOptional() {
|
|
87
|
+
isOptional(): boolean {
|
|
87
88
|
return true;
|
|
88
89
|
}
|
|
89
90
|
|
|
90
|
-
async _listInstalledSdks() {
|
|
91
|
+
private async _listInstalledSdks(): Promise<InstalledSdk[]> {
|
|
91
92
|
const {stdout} = await exec('xcodebuild', ['-json', '-showsdks']);
|
|
92
93
|
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
94
|
}
|
|
116
95
|
}
|
|
117
96
|
export const optionalSimulatorCheck = new OptionalSimulatorCheck();
|
|
118
97
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
README_LINK = 'https://github.com/appium/appium-xcuitest-driver/blob/master/docs/reference/execute-methods.md#mobile-setpermission';
|
|
98
|
+
export class OptionalApplesimutilsCommandCheck implements IDoctorCheck {
|
|
99
|
+
log!: AppiumLogger;
|
|
100
|
+
static readonly README_LINK = 'https://github.com/appium/appium-xcuitest-driver/blob/master/docs/reference/execute-methods.md#mobile-setpermission';
|
|
122
101
|
|
|
123
|
-
async diagnose() {
|
|
102
|
+
async diagnose(): Promise<DoctorCheckResult> {
|
|
124
103
|
const applesimutilsPath = await resolveExecutablePath('applesimutils');
|
|
125
104
|
return applesimutilsPath
|
|
126
105
|
? doctor.okOptional(`applesimutils is installed at: ${applesimutilsPath}`)
|
|
127
106
|
: doctor.nokOptional('applesimutils are not installed');
|
|
128
107
|
}
|
|
129
108
|
|
|
130
|
-
async fix() {
|
|
131
|
-
return `Why ${'applesimutils'.bold} is needed and how to install it: ${
|
|
109
|
+
async fix(): Promise<string> {
|
|
110
|
+
return `Why ${'applesimutils'.bold} is needed and how to install it: ${OptionalApplesimutilsCommandCheck.README_LINK}`;
|
|
132
111
|
}
|
|
133
112
|
|
|
134
|
-
hasAutofix() {
|
|
113
|
+
hasAutofix(): boolean {
|
|
135
114
|
return false;
|
|
136
115
|
}
|
|
137
116
|
|
|
138
|
-
isOptional() {
|
|
117
|
+
isOptional(): boolean {
|
|
139
118
|
return true;
|
|
140
119
|
}
|
|
141
120
|
}
|
|
142
121
|
export const optionalApplesimutilsCheck = new OptionalApplesimutilsCommandCheck();
|
|
143
122
|
|
|
144
123
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
FFMPEG_BINARY = 'ffmpeg';
|
|
148
|
-
FFMPEG_INSTALL_LINK = 'https://www.ffmpeg.org/download.html';
|
|
124
|
+
export class OptionalFfmpegCheck implements IDoctorCheck {
|
|
125
|
+
log!: AppiumLogger;
|
|
126
|
+
static readonly FFMPEG_BINARY = 'ffmpeg';
|
|
127
|
+
static readonly FFMPEG_INSTALL_LINK = 'https://www.ffmpeg.org/download.html';
|
|
149
128
|
|
|
150
|
-
async diagnose() {
|
|
151
|
-
const ffmpegPath = await resolveExecutablePath(
|
|
129
|
+
async diagnose(): Promise<DoctorCheckResult> {
|
|
130
|
+
const ffmpegPath = await resolveExecutablePath(OptionalFfmpegCheck.FFMPEG_BINARY);
|
|
152
131
|
|
|
153
132
|
return ffmpegPath
|
|
154
|
-
? doctor.okOptional(`${
|
|
155
|
-
: doctor.nokOptional(`${
|
|
133
|
+
? doctor.okOptional(`${OptionalFfmpegCheck.FFMPEG_BINARY} exists at '${ffmpegPath}'`)
|
|
134
|
+
: doctor.nokOptional(`${OptionalFfmpegCheck.FFMPEG_BINARY} cannot be found`);
|
|
156
135
|
}
|
|
157
136
|
|
|
158
|
-
async fix() {
|
|
137
|
+
async fix(): Promise<string> {
|
|
159
138
|
return (
|
|
160
|
-
`${`${
|
|
161
|
-
`Please read ${
|
|
139
|
+
`${`${OptionalFfmpegCheck.FFMPEG_BINARY}`.bold} is used to capture screen recordings from the device under test. ` +
|
|
140
|
+
`Please read ${OptionalFfmpegCheck.FFMPEG_INSTALL_LINK}.`
|
|
162
141
|
);
|
|
163
142
|
}
|
|
164
143
|
|
|
165
|
-
hasAutofix() {
|
|
144
|
+
hasAutofix(): boolean {
|
|
166
145
|
return false;
|
|
167
146
|
}
|
|
168
147
|
|
|
169
|
-
isOptional() {
|
|
148
|
+
isOptional(): boolean {
|
|
170
149
|
return true;
|
|
171
150
|
}
|
|
172
151
|
}
|
|
173
152
|
export const optionalFfmpegCheck = new OptionalFfmpegCheck();
|
|
153
|
+
|
|
154
|
+
interface SimulatorPlatform {
|
|
155
|
+
displayName: string;
|
|
156
|
+
name: string;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
interface InstalledSdk {
|
|
160
|
+
buildID?: string;
|
|
161
|
+
canonicalName: string;
|
|
162
|
+
displayName: string;
|
|
163
|
+
isBaseSdk: boolean;
|
|
164
|
+
platform: string;
|
|
165
|
+
platformPath: string;
|
|
166
|
+
platformVersion: string;
|
|
167
|
+
productBuildVersion?: string;
|
|
168
|
+
productCopyright?: string;
|
|
169
|
+
productName?: string;
|
|
170
|
+
productVersion?: string;
|
|
171
|
+
sdkPath: string;
|
|
172
|
+
sdkVersion: string;
|
|
173
|
+
}
|
|
@@ -1,91 +1,82 @@
|
|
|
1
1
|
import {fs, doctor} from 'appium/support';
|
|
2
2
|
import {exec} from 'teen_process';
|
|
3
3
|
import { getPath as getXcodePath } from 'appium-xcode';
|
|
4
|
+
import type {IDoctorCheck, AppiumLogger, DoctorCheckResult} from '@appium/types';
|
|
4
5
|
import '@colors/colors';
|
|
5
6
|
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
export class XcodeCheck implements IDoctorCheck {
|
|
9
|
+
log!: AppiumLogger;
|
|
10
|
+
|
|
11
|
+
async diagnose(): Promise<DoctorCheckResult> {
|
|
10
12
|
try {
|
|
11
13
|
const xcodePath = await getXcodePath();
|
|
12
14
|
return doctor.ok(`Xcode is installed at '${xcodePath}'`);
|
|
13
15
|
} catch (err) {
|
|
14
|
-
return doctor.nok(err.message);
|
|
16
|
+
return doctor.nok((err as Error).message);
|
|
15
17
|
}
|
|
16
18
|
}
|
|
17
19
|
|
|
18
|
-
async fix() {
|
|
20
|
+
async fix(): Promise<string> {
|
|
19
21
|
return `Install Xcode and make sure it is properly configured`;
|
|
20
22
|
}
|
|
21
23
|
|
|
22
|
-
hasAutofix() {
|
|
24
|
+
hasAutofix(): boolean {
|
|
23
25
|
return false;
|
|
24
26
|
}
|
|
25
27
|
|
|
26
|
-
isOptional() {
|
|
28
|
+
isOptional(): boolean {
|
|
27
29
|
return false;
|
|
28
30
|
}
|
|
29
31
|
}
|
|
30
32
|
export const xcodeCheck = new XcodeCheck();
|
|
31
33
|
|
|
32
34
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
export class XcodeToolsCheck implements IDoctorCheck {
|
|
36
|
+
log!: AppiumLogger;
|
|
37
|
+
|
|
38
|
+
async diagnose(): Promise<DoctorCheckResult> {
|
|
36
39
|
const errPrefix = 'Xcode Command Line Tools are not installed or are improperly configured';
|
|
37
40
|
try {
|
|
38
41
|
await exec('xcodebuild', ['-version']);
|
|
39
42
|
} catch (err) {
|
|
40
|
-
return doctor.nok(`${errPrefix}. Cannot run 'xcodebuild': ${err.stderr || err.message}`);
|
|
43
|
+
return doctor.nok(`${errPrefix}. Cannot run 'xcodebuild': ${(err as any).stderr || (err as Error).message}`);
|
|
41
44
|
}
|
|
42
45
|
return doctor.ok(`Xcode Command Line Tools are installed and work properly`);
|
|
43
46
|
}
|
|
44
47
|
|
|
45
|
-
async fix() {
|
|
48
|
+
async fix(): Promise<string> {
|
|
46
49
|
return `Make sure to install Xcode Command Line Tools by running 'xcode-select --install'`;
|
|
47
50
|
}
|
|
48
51
|
|
|
49
|
-
hasAutofix() {
|
|
52
|
+
hasAutofix(): boolean {
|
|
50
53
|
return false;
|
|
51
54
|
}
|
|
52
55
|
|
|
53
|
-
isOptional() {
|
|
56
|
+
isOptional(): boolean {
|
|
54
57
|
return false;
|
|
55
58
|
}
|
|
56
59
|
}
|
|
57
60
|
export const xcodeToolsCheck = new XcodeToolsCheck();
|
|
58
61
|
|
|
59
62
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
* the path is expected to be a valid folder
|
|
64
|
-
* @property {boolean} [expectFile] If set to true then
|
|
65
|
-
* the path is expected to be a valid file
|
|
66
|
-
*/
|
|
67
|
-
|
|
68
|
-
/** @satisfies {import('@appium/types').IDoctorCheck} */
|
|
69
|
-
class EnvVarAndPathCheck {
|
|
70
|
-
ENVIRONMENT_VARS_TUTORIAL_URL = 'https://github.com/appium/java-client/blob/master/docs/environment.md';
|
|
63
|
+
class EnvVarAndPathCheck implements IDoctorCheck {
|
|
64
|
+
log!: AppiumLogger;
|
|
65
|
+
static readonly ENVIRONMENT_VARS_TUTORIAL_URL = 'https://github.com/appium/java-client/blob/master/docs/environment.md';
|
|
71
66
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
constructor(varName, opts = {}) {
|
|
77
|
-
this.varName = varName;
|
|
78
|
-
this.opts = opts;
|
|
79
|
-
}
|
|
67
|
+
constructor(
|
|
68
|
+
private readonly varName: string,
|
|
69
|
+
private readonly opts: EnvVarCheckOptions = {}
|
|
70
|
+
) {}
|
|
80
71
|
|
|
81
|
-
async diagnose() {
|
|
72
|
+
async diagnose(): Promise<DoctorCheckResult> {
|
|
82
73
|
const varValue = process.env[this.varName];
|
|
83
74
|
if (!varValue) {
|
|
84
75
|
return doctor.nok(`${this.varName} environment variable is NOT set!`);
|
|
85
76
|
}
|
|
86
77
|
|
|
87
78
|
if (!await fs.exists(varValue)) {
|
|
88
|
-
|
|
79
|
+
const errMsg = `${this.varName} is set to '${varValue}' but this path does not exist!`;
|
|
89
80
|
return doctor.nok(errMsg);
|
|
90
81
|
}
|
|
91
82
|
|
|
@@ -100,19 +91,30 @@ class EnvVarAndPathCheck {
|
|
|
100
91
|
return doctor.ok(`${this.varName} is set to: ${varValue}`);
|
|
101
92
|
}
|
|
102
93
|
|
|
103
|
-
async fix() {
|
|
94
|
+
async fix(): Promise<string> {
|
|
104
95
|
return (
|
|
105
96
|
`Make sure the environment variable ${this.varName.bold} is properly configured for the Appium process. ` +
|
|
106
|
-
`Refer ${
|
|
97
|
+
`Refer ${EnvVarAndPathCheck.ENVIRONMENT_VARS_TUTORIAL_URL} for more details.`
|
|
107
98
|
);
|
|
108
99
|
}
|
|
109
100
|
|
|
110
|
-
hasAutofix() {
|
|
101
|
+
hasAutofix(): boolean {
|
|
111
102
|
return false;
|
|
112
103
|
}
|
|
113
104
|
|
|
114
|
-
isOptional() {
|
|
105
|
+
isOptional(): boolean {
|
|
115
106
|
return false;
|
|
116
107
|
}
|
|
117
108
|
}
|
|
118
109
|
export const homeEnvVarCheck = new EnvVarAndPathCheck('HOME', {expectDir: true});
|
|
110
|
+
|
|
111
|
+
export interface EnvVarCheckOptions {
|
|
112
|
+
/**
|
|
113
|
+
* If set to true then the path is expected to be a valid folder
|
|
114
|
+
*/
|
|
115
|
+
expectDir?: boolean;
|
|
116
|
+
/**
|
|
117
|
+
* If set to true then the path is expected to be a valid file
|
|
118
|
+
*/
|
|
119
|
+
expectFile?: boolean;
|
|
120
|
+
}
|
|
@@ -3,10 +3,10 @@ import {fs} from 'appium/support';
|
|
|
3
3
|
/**
|
|
4
4
|
* Return an executable path of cmd
|
|
5
5
|
*
|
|
6
|
-
* @param
|
|
7
|
-
* @return
|
|
6
|
+
* @param cmd Standard output by command
|
|
7
|
+
* @return The full path of cmd. `null` if the cmd is not found.
|
|
8
8
|
*/
|
|
9
|
-
export async function resolveExecutablePath(cmd) {
|
|
9
|
+
export async function resolveExecutablePath(cmd: string): Promise<string | null> {
|
|
10
10
|
try {
|
|
11
11
|
const executablePath = await fs.which(cmd);
|
|
12
12
|
if (executablePath && (await fs.exists(executablePath))) {
|
|
@@ -15,3 +15,4 @@ export async function resolveExecutablePath(cmd) {
|
|
|
15
15
|
} catch {}
|
|
16
16
|
return null;
|
|
17
17
|
}
|
|
18
|
+
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium-xcuitest-driver",
|
|
3
|
-
"version": "10.2.
|
|
3
|
+
"version": "10.2.2",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "appium-xcuitest-driver",
|
|
9
|
-
"version": "10.2.
|
|
9
|
+
"version": "10.2.2",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@appium/strongbox": "^1.0.0-rc.1",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"mocha-multi-reporters": "^1.5.1",
|
|
58
58
|
"pem": "^1.14.8",
|
|
59
59
|
"prettier": "^3.0.0",
|
|
60
|
-
"semantic-release": "^
|
|
60
|
+
"semantic-release": "^25.0.0",
|
|
61
61
|
"sharp": "^0.x",
|
|
62
62
|
"sinon": "^21.0.0",
|
|
63
63
|
"ts-node": "^10.9.1",
|
|
@@ -138,6 +138,22 @@
|
|
|
138
138
|
"npm": ">=10"
|
|
139
139
|
}
|
|
140
140
|
},
|
|
141
|
+
"node_modules/@appium/docutils/node_modules/teen_process": {
|
|
142
|
+
"version": "3.0.1",
|
|
143
|
+
"resolved": "https://registry.npmjs.org/teen_process/-/teen_process-3.0.1.tgz",
|
|
144
|
+
"integrity": "sha512-gczXA8Wequcnw+vC0saFhNnjHrv7rR4Ilg2lvyfbVEFpH1ecUT7uj1hbUUcVdKwlGgYXREwAERa0BemrGeDgTw==",
|
|
145
|
+
"license": "Apache-2.0",
|
|
146
|
+
"dependencies": {
|
|
147
|
+
"bluebird": "^3.7.2",
|
|
148
|
+
"lodash": "^4.17.21",
|
|
149
|
+
"shell-quote": "^1.8.1",
|
|
150
|
+
"source-map-support": "^0.x"
|
|
151
|
+
},
|
|
152
|
+
"engines": {
|
|
153
|
+
"node": "^20.19.0 || ^22.12.0 || >=24.0.0",
|
|
154
|
+
"npm": ">=10"
|
|
155
|
+
}
|
|
156
|
+
},
|
|
141
157
|
"node_modules/@appium/logger": {
|
|
142
158
|
"version": "2.0.2",
|
|
143
159
|
"resolved": "https://registry.npmjs.org/@appium/logger/-/logger-2.0.2.tgz",
|
|
@@ -232,6 +248,22 @@
|
|
|
232
248
|
"sharp": "0.34.4"
|
|
233
249
|
}
|
|
234
250
|
},
|
|
251
|
+
"node_modules/@appium/support/node_modules/teen_process": {
|
|
252
|
+
"version": "3.0.1",
|
|
253
|
+
"resolved": "https://registry.npmjs.org/teen_process/-/teen_process-3.0.1.tgz",
|
|
254
|
+
"integrity": "sha512-gczXA8Wequcnw+vC0saFhNnjHrv7rR4Ilg2lvyfbVEFpH1ecUT7uj1hbUUcVdKwlGgYXREwAERa0BemrGeDgTw==",
|
|
255
|
+
"license": "Apache-2.0",
|
|
256
|
+
"dependencies": {
|
|
257
|
+
"bluebird": "^3.7.2",
|
|
258
|
+
"lodash": "^4.17.21",
|
|
259
|
+
"shell-quote": "^1.8.1",
|
|
260
|
+
"source-map-support": "^0.x"
|
|
261
|
+
},
|
|
262
|
+
"engines": {
|
|
263
|
+
"node": "^20.19.0 || ^22.12.0 || >=24.0.0",
|
|
264
|
+
"npm": ">=10"
|
|
265
|
+
}
|
|
266
|
+
},
|
|
235
267
|
"node_modules/@appium/tsconfig": {
|
|
236
268
|
"version": "1.1.0",
|
|
237
269
|
"resolved": "https://registry.npmjs.org/@appium/tsconfig/-/tsconfig-1.1.0.tgz",
|
|
@@ -408,9 +440,9 @@
|
|
|
408
440
|
"license": "MIT"
|
|
409
441
|
},
|
|
410
442
|
"node_modules/@types/node": {
|
|
411
|
-
"version": "24.
|
|
412
|
-
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.
|
|
413
|
-
"integrity": "sha512-
|
|
443
|
+
"version": "24.8.1",
|
|
444
|
+
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.8.1.tgz",
|
|
445
|
+
"integrity": "sha512-alv65KGRadQVfVcG69MuB4IzdYVpRwMG/mq8KWOaoOdyY617P5ivaDiMCGOFDWD2sAn5Q0mR3mRtUOgm99hL9Q==",
|
|
414
446
|
"devOptional": true,
|
|
415
447
|
"license": "MIT",
|
|
416
448
|
"dependencies": {
|
|
@@ -491,9 +523,9 @@
|
|
|
491
523
|
}
|
|
492
524
|
},
|
|
493
525
|
"node_modules/appium-idb": {
|
|
494
|
-
"version": "2.0.
|
|
495
|
-
"resolved": "https://registry.npmjs.org/appium-idb/-/appium-idb-2.0.
|
|
496
|
-
"integrity": "sha512-
|
|
526
|
+
"version": "2.0.2",
|
|
527
|
+
"resolved": "https://registry.npmjs.org/appium-idb/-/appium-idb-2.0.2.tgz",
|
|
528
|
+
"integrity": "sha512-X/bFcBn5ui2tsp/t+vZQyFHzAvMvNuC05ruVAB7I0ONebfrYkUO5bmgwkOzVx+7to7tYOJOYQD6YuK7RBpGl3Q==",
|
|
497
529
|
"license": "Apache-2.0",
|
|
498
530
|
"dependencies": {
|
|
499
531
|
"@appium/support": "^7.0.0-rc.1",
|
|
@@ -509,9 +541,9 @@
|
|
|
509
541
|
}
|
|
510
542
|
},
|
|
511
543
|
"node_modules/appium-ios-device": {
|
|
512
|
-
"version": "3.1.
|
|
513
|
-
"resolved": "https://registry.npmjs.org/appium-ios-device/-/appium-ios-device-3.1.
|
|
514
|
-
"integrity": "sha512-
|
|
544
|
+
"version": "3.1.1",
|
|
545
|
+
"resolved": "https://registry.npmjs.org/appium-ios-device/-/appium-ios-device-3.1.1.tgz",
|
|
546
|
+
"integrity": "sha512-zt5togfUscTij26C4DvJySKKclGMpB4ZrqQbJbvDIxeYpYGrb1oZG+GigNLB1uUTy9MqPLtZXRcdH4/RTHan8g==",
|
|
515
547
|
"license": "Apache-2.0",
|
|
516
548
|
"dependencies": {
|
|
517
549
|
"@appium/support": "^7.0.0-rc.1",
|
|
@@ -550,9 +582,9 @@
|
|
|
550
582
|
}
|
|
551
583
|
},
|
|
552
584
|
"node_modules/appium-ios-simulator": {
|
|
553
|
-
"version": "7.0.
|
|
554
|
-
"resolved": "https://registry.npmjs.org/appium-ios-simulator/-/appium-ios-simulator-7.0.
|
|
555
|
-
"integrity": "sha512-
|
|
585
|
+
"version": "7.0.2",
|
|
586
|
+
"resolved": "https://registry.npmjs.org/appium-ios-simulator/-/appium-ios-simulator-7.0.2.tgz",
|
|
587
|
+
"integrity": "sha512-SdRfXkqMxBQeOyJEspIS3TW7bZ2Q4tX8EThODPhGh8CHwwpJ20TgWg/ciB98Fv9SzXL0LxTHYi6WOKuRqgsHVQ==",
|
|
556
588
|
"license": "Apache-2.0",
|
|
557
589
|
"dependencies": {
|
|
558
590
|
"@appium/support": "^7.0.0-rc.1",
|
|
@@ -573,9 +605,9 @@
|
|
|
573
605
|
}
|
|
574
606
|
},
|
|
575
607
|
"node_modules/appium-ios-tuntap": {
|
|
576
|
-
"version": "0.1.
|
|
577
|
-
"resolved": "https://registry.npmjs.org/appium-ios-tuntap/-/appium-ios-tuntap-0.1.
|
|
578
|
-
"integrity": "sha512-
|
|
608
|
+
"version": "0.1.1",
|
|
609
|
+
"resolved": "https://registry.npmjs.org/appium-ios-tuntap/-/appium-ios-tuntap-0.1.1.tgz",
|
|
610
|
+
"integrity": "sha512-mP6Afp41LD9uVK0ZRDIE42sG8iwk+rOFUuNR6ARBVKf/kPMs2s81xdRhqOLQdHwAe5nzrpL9jP0ARYGp+cNtMw==",
|
|
579
611
|
"hasInstallScript": true,
|
|
580
612
|
"license": "Apache-2.0",
|
|
581
613
|
"optional": true,
|
|
@@ -612,9 +644,9 @@
|
|
|
612
644
|
}
|
|
613
645
|
},
|
|
614
646
|
"node_modules/appium-webdriveragent": {
|
|
615
|
-
"version": "10.1.
|
|
616
|
-
"resolved": "https://registry.npmjs.org/appium-webdriveragent/-/appium-webdriveragent-10.1.
|
|
617
|
-
"integrity": "sha512-
|
|
647
|
+
"version": "10.1.3",
|
|
648
|
+
"resolved": "https://registry.npmjs.org/appium-webdriveragent/-/appium-webdriveragent-10.1.3.tgz",
|
|
649
|
+
"integrity": "sha512-8PV71K3BetONcvVCuB/Hb2fmmjVGtmre2ElvRllVz2idarp91PB9ourucZj8deRvP4AokN03vPKn46zza+hbiw==",
|
|
618
650
|
"license": "Apache-2.0",
|
|
619
651
|
"dependencies": {
|
|
620
652
|
"@appium/base-driver": "^10.0.0-rc.1",
|
|
@@ -636,9 +668,9 @@
|
|
|
636
668
|
}
|
|
637
669
|
},
|
|
638
670
|
"node_modules/appium-xcode": {
|
|
639
|
-
"version": "6.
|
|
640
|
-
"resolved": "https://registry.npmjs.org/appium-xcode/-/appium-xcode-6.
|
|
641
|
-
"integrity": "sha512-
|
|
671
|
+
"version": "6.1.1",
|
|
672
|
+
"resolved": "https://registry.npmjs.org/appium-xcode/-/appium-xcode-6.1.1.tgz",
|
|
673
|
+
"integrity": "sha512-izeVSpbetGaN26IZlLPW7/drf4VshtPArOlRcL0wiChCp2akev+6bvst9qw8qltLKLmNkHbPUInyT5wguxwP7Q==",
|
|
642
674
|
"license": "Apache-2.0",
|
|
643
675
|
"dependencies": {
|
|
644
676
|
"@appium/support": "^7.0.0-rc.1",
|
|
@@ -1064,9 +1096,9 @@
|
|
|
1064
1096
|
}
|
|
1065
1097
|
},
|
|
1066
1098
|
"node_modules/cliui/node_modules/emoji-regex": {
|
|
1067
|
-
"version": "10.
|
|
1068
|
-
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.
|
|
1069
|
-
"integrity": "sha512-
|
|
1099
|
+
"version": "10.6.0",
|
|
1100
|
+
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
|
|
1101
|
+
"integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
|
|
1070
1102
|
"license": "MIT"
|
|
1071
1103
|
},
|
|
1072
1104
|
"node_modules/cliui/node_modules/string-width": {
|
|
@@ -2681,9 +2713,9 @@
|
|
|
2681
2713
|
}
|
|
2682
2714
|
},
|
|
2683
2715
|
"node_modules/node-simctl": {
|
|
2684
|
-
"version": "8.0.
|
|
2685
|
-
"resolved": "https://registry.npmjs.org/node-simctl/-/node-simctl-8.0.
|
|
2686
|
-
"integrity": "sha512-
|
|
2716
|
+
"version": "8.0.5",
|
|
2717
|
+
"resolved": "https://registry.npmjs.org/node-simctl/-/node-simctl-8.0.5.tgz",
|
|
2718
|
+
"integrity": "sha512-DXXPWrOxkxUJTZBfyaLtVlIAMQGOQq92j10nihSV0xucdbYZB/pdgGdp6L+JYLpfOwSCyaZA8eQHi8oAAU0FYA==",
|
|
2687
2719
|
"license": "Apache-2.0",
|
|
2688
2720
|
"dependencies": {
|
|
2689
2721
|
"@appium/logger": "^2.0.0-rc.1",
|
|
@@ -3951,9 +3983,9 @@
|
|
|
3951
3983
|
}
|
|
3952
3984
|
},
|
|
3953
3985
|
"node_modules/teen_process": {
|
|
3954
|
-
"version": "3.0.
|
|
3955
|
-
"resolved": "https://registry.npmjs.org/teen_process/-/teen_process-3.0.
|
|
3956
|
-
"integrity": "sha512-
|
|
3986
|
+
"version": "3.0.2",
|
|
3987
|
+
"resolved": "https://registry.npmjs.org/teen_process/-/teen_process-3.0.2.tgz",
|
|
3988
|
+
"integrity": "sha512-JyvPp0koEi9WVCrUYK8Rqg4G8Vxs+eY8XMpIjxJyGyG50UTo+u6CAfaWxCr5WW+ZvpMM3Qs2AFSdkS7SamQy3g==",
|
|
3957
3989
|
"license": "Apache-2.0",
|
|
3958
3990
|
"dependencies": {
|
|
3959
3991
|
"bluebird": "^3.7.2",
|
|
@@ -4421,9 +4453,9 @@
|
|
|
4421
4453
|
}
|
|
4422
4454
|
},
|
|
4423
4455
|
"node_modules/yargs/node_modules/emoji-regex": {
|
|
4424
|
-
"version": "10.
|
|
4425
|
-
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.
|
|
4426
|
-
"integrity": "sha512-
|
|
4456
|
+
"version": "10.6.0",
|
|
4457
|
+
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
|
|
4458
|
+
"integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
|
|
4427
4459
|
"license": "MIT"
|
|
4428
4460
|
},
|
|
4429
4461
|
"node_modules/yargs/node_modules/string-width": {
|
package/package.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"xcuitest",
|
|
9
9
|
"xctest"
|
|
10
10
|
],
|
|
11
|
-
"version": "10.2.
|
|
11
|
+
"version": "10.2.2",
|
|
12
12
|
"author": "Appium Contributors",
|
|
13
13
|
"license": "Apache-2.0",
|
|
14
14
|
"repository": {
|
|
@@ -164,7 +164,7 @@
|
|
|
164
164
|
"mocha-multi-reporters": "^1.5.1",
|
|
165
165
|
"pem": "^1.14.8",
|
|
166
166
|
"prettier": "^3.0.0",
|
|
167
|
-
"semantic-release": "^
|
|
167
|
+
"semantic-release": "^25.0.0",
|
|
168
168
|
"sharp": "^0.x",
|
|
169
169
|
"sinon": "^21.0.0",
|
|
170
170
|
"ts-node": "^10.9.1",
|