appium-xcode 4.0.5 → 5.0.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 +7 -0
- package/README.md +7 -29
- package/build/index.js +40 -33
- package/build/lib/helpers.js +55 -0
- package/build/lib/helpers.js.map +1 -0
- package/build/lib/xcode.js +57 -197
- package/build/lib/xcode.js.map +1 -1
- package/index.js +19 -15
- package/lib/helpers.js +72 -0
- package/lib/xcode.js +130 -263
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## [5.0.1](https://github.com/appium/appium-xcode/compare/v5.0.0...v5.0.1) (2023-01-17)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Miscellaneous Chores
|
|
5
|
+
|
|
6
|
+
* **deps-dev:** bump semantic-release from 19.0.5 to 20.0.2 ([#76](https://github.com/appium/appium-xcode/issues/76)) ([72df142](https://github.com/appium/appium-xcode/commit/72df1426d3d1d400b554fe5d4d2345ceaacd6059))
|
|
7
|
+
|
|
1
8
|
## [4.0.5](https://github.com/appium/appium-xcode/compare/v4.0.4...v4.0.5) (2022-12-14)
|
|
2
9
|
|
|
3
10
|
|
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@ appium-xcode
|
|
|
6
6
|
[](https://github.com/appium/appium-xcode/actions/workflows/publish.js.yml)
|
|
7
7
|
|
|
8
8
|
ES7 module for interacting with Xcode and Xcode-related functions.
|
|
9
|
-
Used by [Appium](github.com/appium/appium)
|
|
9
|
+
Used by various [Appium](github.com/appium/appium) drivers.
|
|
10
10
|
|
|
11
11
|
API
|
|
12
12
|
===
|
|
@@ -17,50 +17,28 @@ Most functions are memoized, so after they are called once, they will simply ret
|
|
|
17
17
|
|
|
18
18
|
Some functions have an auto-retry built into them, they will retry silently a number of times. This is because the Xcode commands sometimes just flake and return bad values (or don't return).
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
### getPath()
|
|
20
|
+
### getPath([timeout=15000])
|
|
23
21
|
*memoized*
|
|
24
22
|
|
|
25
|
-
gets path to Xcode
|
|
23
|
+
gets path to Xcode Developer root.
|
|
26
24
|
|
|
27
|
-
### getVersion([
|
|
25
|
+
### getVersion([parse=false], [retries], [timeout])
|
|
28
26
|
*memoized*, *retry*
|
|
29
27
|
|
|
30
|
-
returns the version of Xcode
|
|
31
|
-
|
|
32
|
-
### getAutomationTraceTemplatePath([num_retries])
|
|
33
|
-
*memoized, *retry*
|
|
34
|
-
|
|
35
|
-
returns a path to the default AutomationTraceTemplate
|
|
36
|
-
|
|
37
|
-
### getAutomationTraceTemplatePathWithoutRetry()
|
|
38
|
-
|
|
39
|
-
same as `getAutomationTraceTemplatePath()` but without retry or memoization.
|
|
28
|
+
returns the version of Xcode formatted as a string, for example `6.3.1`, or a version object if `parse` is `true`
|
|
40
29
|
|
|
41
30
|
### getMaxIOSSDK([num_retries])
|
|
42
31
|
*memoized*, *retry*
|
|
43
32
|
|
|
44
|
-
returns
|
|
33
|
+
returns the highest IOS SDK version supported by Xcode.
|
|
45
34
|
eg: `'8.3'`
|
|
46
35
|
|
|
47
|
-
### getMaxIOSSDKWithoutRetry()
|
|
48
|
-
|
|
49
|
-
same as `getMaxIOSDK()` but without retry or memoization
|
|
50
|
-
|
|
51
36
|
### getMaxTVOSSDK([num_retries])
|
|
52
37
|
*memoized*, *retry*
|
|
53
38
|
|
|
54
|
-
returns
|
|
39
|
+
returns highest tvOS SDK version supported by Xcode.
|
|
55
40
|
eg: `'10.1'`
|
|
56
41
|
|
|
57
|
-
### getMaxTVOSSDKWithoutRetry()
|
|
58
|
-
|
|
59
|
-
same as `getMaxTVOSSDK()` but without retry or memoization
|
|
60
|
-
|
|
61
|
-
### clearInternalCache()
|
|
62
|
-
clears the internal cache used for memoizing functions.
|
|
63
|
-
|
|
64
42
|
Develop
|
|
65
43
|
=======
|
|
66
44
|
|
package/build/index.js
CHANGED
|
@@ -3,39 +3,46 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
Object.defineProperty(exports, "getClangVersion", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function () {
|
|
10
|
+
return _xcode.getClangVersion;
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
Object.defineProperty(exports, "getMaxIOSSDK", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () {
|
|
16
|
+
return _xcode.getMaxIOSSDK;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports, "getMaxTVOSSDK", {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
get: function () {
|
|
22
|
+
return _xcode.getMaxTVOSSDK;
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
Object.defineProperty(exports, "getPath", {
|
|
26
|
+
enumerable: true,
|
|
27
|
+
get: function () {
|
|
28
|
+
return _xcode.getPath;
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
Object.defineProperty(exports, "getVersion", {
|
|
32
|
+
enumerable: true,
|
|
33
|
+
get: function () {
|
|
34
|
+
return _xcode.getVersion;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
7
37
|
require("source-map-support/register");
|
|
8
|
-
var
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
getAutomationTraceTemplatePathWithoutRetry,
|
|
17
|
-
getMaxIOSSDKWithoutRetry,
|
|
18
|
-
getConnectedDevices,
|
|
19
|
-
clearInternalCache,
|
|
20
|
-
getInstrumentsPath,
|
|
21
|
-
getCommandLineToolsVersion,
|
|
22
|
-
getMaxTVOSSDK,
|
|
23
|
-
getMaxTVOSSDKWithoutRetry,
|
|
24
|
-
getClangVersion
|
|
25
|
-
} = xcode;
|
|
26
|
-
exports.getClangVersion = getClangVersion;
|
|
27
|
-
exports.getMaxTVOSSDKWithoutRetry = getMaxTVOSSDKWithoutRetry;
|
|
28
|
-
exports.getMaxTVOSSDK = getMaxTVOSSDK;
|
|
29
|
-
exports.getCommandLineToolsVersion = getCommandLineToolsVersion;
|
|
30
|
-
exports.getInstrumentsPath = getInstrumentsPath;
|
|
31
|
-
exports.clearInternalCache = clearInternalCache;
|
|
32
|
-
exports.getConnectedDevices = getConnectedDevices;
|
|
33
|
-
exports.getMaxIOSSDKWithoutRetry = getMaxIOSSDKWithoutRetry;
|
|
34
|
-
exports.getAutomationTraceTemplatePathWithoutRetry = getAutomationTraceTemplatePathWithoutRetry;
|
|
35
|
-
exports.getMaxIOSSDK = getMaxIOSSDK;
|
|
36
|
-
exports.getAutomationTraceTemplatePath = getAutomationTraceTemplatePath;
|
|
37
|
-
exports.getVersion = getVersion;
|
|
38
|
-
exports.getPath = getPath;
|
|
38
|
+
var _xcode = require("./lib/xcode");
|
|
39
|
+
const xcode = {
|
|
40
|
+
getPath: _xcode.getPath,
|
|
41
|
+
getVersion: _xcode.getVersion,
|
|
42
|
+
getMaxIOSSDK: _xcode.getMaxIOSSDK,
|
|
43
|
+
getMaxTVOSSDK: _xcode.getMaxTVOSSDK,
|
|
44
|
+
getClangVersion: _xcode.getClangVersion
|
|
45
|
+
};
|
|
39
46
|
var _default = xcode;
|
|
40
47
|
exports.default = _default;
|
|
41
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ4Y29kZSIsImdldFBhdGgiLCJnZXRWZXJzaW9uIiwiZ2V0TWF4SU9TU0RLIiwiZ2V0TWF4VFZPU1NESyIsImdldENsYW5nVmVyc2lvbiJdLCJzb3VyY2VzIjpbIi4uL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptYWluXG5pbXBvcnQge1xuICBnZXRQYXRoLFxuICBnZXRWZXJzaW9uLFxuICBnZXRNYXhJT1NTREssXG4gIGdldE1heFRWT1NTREssXG4gIGdldENsYW5nVmVyc2lvbixcbn0gZnJvbSAnLi9saWIveGNvZGUnO1xuXG5jb25zdCB4Y29kZSA9IHtcbiAgZ2V0UGF0aCxcbiAgZ2V0VmVyc2lvbixcbiAgZ2V0TWF4SU9TU0RLLFxuICBnZXRNYXhUVk9TU0RLLFxuICBnZXRDbGFuZ1ZlcnNpb25cbn07XG5cbmV4cG9ydCB7XG4gIGdldFBhdGgsXG4gIGdldFZlcnNpb24sXG4gIGdldE1heElPU1NESyxcbiAgZ2V0TWF4VFZPU1NESyxcbiAgZ2V0Q2xhbmdWZXJzaW9uXG59O1xuZXhwb3J0IGRlZmF1bHQgeGNvZGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQVFBLE1BQU1BLEtBQUssR0FBRztFQUNaQyxPQUFPLEVBQVBBLGNBQU87RUFDUEMsVUFBVSxFQUFWQSxpQkFBVTtFQUNWQyxZQUFZLEVBQVpBLG1CQUFZO0VBQ1pDLGFBQWEsRUFBYkEsb0JBQWE7RUFDYkMsZUFBZSxFQUFmQTtBQUNGLENBQUM7QUFBQyxlQVNhTCxLQUFLO0FBQUEifQ==
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.XCRUN_TIMEOUT = void 0;
|
|
8
|
+
exports.findAppPaths = findAppPaths;
|
|
9
|
+
exports.readXcodePlist = readXcodePlist;
|
|
10
|
+
exports.runXcrunCommand = runXcrunCommand;
|
|
11
|
+
require("source-map-support/register");
|
|
12
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
13
|
+
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
14
|
+
var _teen_process = require("teen_process");
|
|
15
|
+
var _support = require("@appium/support");
|
|
16
|
+
var _path = _interopRequireDefault(require("path"));
|
|
17
|
+
const XCRUN_TIMEOUT = 15000;
|
|
18
|
+
exports.XCRUN_TIMEOUT = XCRUN_TIMEOUT;
|
|
19
|
+
async function runXcrunCommand(args, timeout = XCRUN_TIMEOUT) {
|
|
20
|
+
try {
|
|
21
|
+
return await (0, _teen_process.exec)('xcrun', args, {
|
|
22
|
+
timeout
|
|
23
|
+
});
|
|
24
|
+
} catch (err) {
|
|
25
|
+
if (err.stderr) {
|
|
26
|
+
err.message = `${err.message}: ${err.stderr}`;
|
|
27
|
+
}
|
|
28
|
+
throw err;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async function findAppPaths(bundleId) {
|
|
32
|
+
let stdout;
|
|
33
|
+
try {
|
|
34
|
+
({
|
|
35
|
+
stdout
|
|
36
|
+
} = await (0, _teen_process.exec)('/usr/bin/mdfind', [`kMDItemCFBundleIdentifier=${bundleId}`]));
|
|
37
|
+
} catch (e) {
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
const matchedPaths = _lodash.default.trim(stdout).split('\n').map(_lodash.default.trim).filter(Boolean);
|
|
41
|
+
if (_lodash.default.isEmpty(matchedPaths)) {
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
const results = matchedPaths.map(p => (async () => {
|
|
45
|
+
if (await _support.fs.exists(p)) {
|
|
46
|
+
return p;
|
|
47
|
+
}
|
|
48
|
+
})());
|
|
49
|
+
return (await _bluebird.default.all(results)).filter(Boolean);
|
|
50
|
+
}
|
|
51
|
+
async function readXcodePlist(developerRoot) {
|
|
52
|
+
const plistPath = _path.default.resolve(developerRoot, '..', 'Info.plist');
|
|
53
|
+
return (await _support.fs.exists(plistPath)) ? await _support.plist.parsePlistFile(plistPath) : {};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJYQ1JVTl9USU1FT1VUIiwicnVuWGNydW5Db21tYW5kIiwiYXJncyIsInRpbWVvdXQiLCJleGVjIiwiZXJyIiwic3RkZXJyIiwibWVzc2FnZSIsImZpbmRBcHBQYXRocyIsImJ1bmRsZUlkIiwic3Rkb3V0IiwiZSIsIm1hdGNoZWRQYXRocyIsIl8iLCJ0cmltIiwic3BsaXQiLCJtYXAiLCJmaWx0ZXIiLCJCb29sZWFuIiwiaXNFbXB0eSIsInJlc3VsdHMiLCJwIiwiZnMiLCJleGlzdHMiLCJCIiwiYWxsIiwicmVhZFhjb2RlUGxpc3QiLCJkZXZlbG9wZXJSb290IiwicGxpc3RQYXRoIiwicGF0aCIsInJlc29sdmUiLCJwbGlzdCIsInBhcnNlUGxpc3RGaWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2hlbHBlcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgZnMsIHBsaXN0IH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuXG5leHBvcnQgY29uc3QgWENSVU5fVElNRU9VVCA9IDE1MDAwO1xuXG4vKipcbiAqIEV4ZWN1dGVzICd4Y3J1bicgY29tbWFuZCBsaW5lIHV0aWxpdHlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBhcmdzIHhjcnVuIGFyZ3VtZW50c1xuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgWzE1MDAwXSBUaGUgbWF4aW11bSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWwgeGNydW4gZXhpc3RzXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCJ0ZWVuX3Byb2Nlc3NcIikuRXhlY1Jlc3VsdD59IFRoZSByZXN1bHQgb2YgeGNydW4gZXhlY3V0aW9uXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgeGNydW4gcmV0dXJuZWQgbm9uLXplcm8gZXhpdCBjb2RlIG9yIHRpbWVkIG91dFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuWGNydW5Db21tYW5kIChhcmdzLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBleGVjKCd4Y3J1bicsIGFyZ3MsIHt0aW1lb3V0fSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIHRoZSB0cnVlIGVycm9yIGNhbiBiZSBoaWRkZW4gd2l0aGluIHRoZSBzdGRlcnJcbiAgICBpZiAoZXJyLnN0ZGVycikge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBgJHtlcnIubWVzc2FnZX06ICR7ZXJyLnN0ZGVycn1gO1xuICAgIH1cblxuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG4vKipcbiAqIFVzZXMgbWFjT1MgU3BvdGxpZ2h0IHNlcnZpY2UgdG8gZGV0ZWN0IHdoZXJlIHRoZSBnaXZlbiBhcHAgaXMgaW5zdGFsbGVkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJ1bmRsZUlkIEJ1bmRsZSBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgYXBwXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmdbXT59IEZ1bGwgcGF0aHMgdG8gd2hlcmUgdGhlIGFwcCB3aXRoIHRoZSBnaXZlbiBidW5kbGUgaWQgaXMgcHJlc2VudC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmRBcHBQYXRocyAoYnVuZGxlSWQpIHtcbiAgbGV0IHN0ZG91dDtcbiAgdHJ5IHtcbiAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKCcvdXNyL2Jpbi9tZGZpbmQnLCBbXG4gICAgICBga01ESXRlbUNGQnVuZGxlSWRlbnRpZmllcj0ke2J1bmRsZUlkfWBcbiAgICBdKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBtYXRjaGVkUGF0aHMgPSBfLnRyaW0oc3Rkb3V0KVxuICAgIC5zcGxpdCgnXFxuJylcbiAgICAubWFwKF8udHJpbSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICBpZiAoXy5pc0VtcHR5KG1hdGNoZWRQYXRocykpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3QgcmVzdWx0cyA9IG1hdGNoZWRQYXRocy5tYXAoKHApID0+IChhc3luYyAoKSA9PiB7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhwKSkge1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICB9KSgpKTtcbiAgcmV0dXJuIChhd2FpdCBCLmFsbChyZXN1bHRzKSkuZmlsdGVyKEJvb2xlYW4pO1xufVxuXG4vKipcbiAqIEZpbmRzIGFuZCByZXRyaWV2ZXMgdGhlIGNvbnRlbnQgb2YgdGhlIFhjb2RlJ3MgSW5mby5wbGlzdCBmaWxlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGRldmVsb3BlclJvb3QgRnVsbCBwYXRoIHRvIHRoZSBDb250ZW50cy9EZXZlbG9wZXIgZm9sZGVyIHVuZGVyIFhjb2RlLmFwcCByb290XG4gKiBAcmV0dXJucyB7UHJvbWlzZTxvYmplY3Q+fSBBbGwgcGxpc3QgZW50cmllcyBhcyBhbiBvYmplY3Qgb3IgYW4gZW1wdHkgb2JqZWN0IGlmIG5vIHBsaXN0IHdhcyBmb3VuZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFhjb2RlUGxpc3QgKGRldmVsb3BlclJvb3QpIHtcbiAgY29uc3QgcGxpc3RQYXRoID0gcGF0aC5yZXNvbHZlKGRldmVsb3BlclJvb3QsICcuLicsICdJbmZvLnBsaXN0Jyk7XG4gIHJldHVybiBhd2FpdCBmcy5leGlzdHMocGxpc3RQYXRoKVxuICAgID8gYXdhaXQgcGxpc3QucGFyc2VQbGlzdEZpbGUocGxpc3RQYXRoKVxuICAgIDoge307XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVPLE1BQU1BLGFBQWEsR0FBRyxLQUFLO0FBQUM7QUFVNUIsZUFBZUMsZUFBZSxDQUFFQyxJQUFJLEVBQUVDLE9BQU8sR0FBR0gsYUFBYSxFQUFFO0VBQ3BFLElBQUk7SUFDRixPQUFPLE1BQU0sSUFBQUksa0JBQUksRUFBQyxPQUFPLEVBQUVGLElBQUksRUFBRTtNQUFDQztJQUFPLENBQUMsQ0FBQztFQUM3QyxDQUFDLENBQUMsT0FBT0UsR0FBRyxFQUFFO0lBRVosSUFBSUEsR0FBRyxDQUFDQyxNQUFNLEVBQUU7TUFDZEQsR0FBRyxDQUFDRSxPQUFPLEdBQUksR0FBRUYsR0FBRyxDQUFDRSxPQUFRLEtBQUlGLEdBQUcsQ0FBQ0MsTUFBTyxFQUFDO0lBQy9DO0lBRUEsTUFBTUQsR0FBRztFQUNYO0FBQ0Y7QUFRTyxlQUFlRyxZQUFZLENBQUVDLFFBQVEsRUFBRTtFQUM1QyxJQUFJQyxNQUFNO0VBQ1YsSUFBSTtJQUNGLENBQUM7TUFBQ0E7SUFBTSxDQUFDLEdBQUcsTUFBTSxJQUFBTixrQkFBSSxFQUFDLGlCQUFpQixFQUFFLENBQ3ZDLDZCQUE0QkssUUFBUyxFQUFDLENBQ3hDLENBQUM7RUFDSixDQUFDLENBQUMsT0FBT0UsQ0FBQyxFQUFFO0lBQ1YsT0FBTyxFQUFFO0VBQ1g7RUFFQSxNQUFNQyxZQUFZLEdBQUdDLGVBQUMsQ0FBQ0MsSUFBSSxDQUFDSixNQUFNLENBQUMsQ0FDaENLLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FDWEMsR0FBRyxDQUFDSCxlQUFDLENBQUNDLElBQUksQ0FBQyxDQUNYRyxNQUFNLENBQUNDLE9BQU8sQ0FBQztFQUNsQixJQUFJTCxlQUFDLENBQUNNLE9BQU8sQ0FBQ1AsWUFBWSxDQUFDLEVBQUU7SUFDM0IsT0FBTyxFQUFFO0VBQ1g7RUFDQSxNQUFNUSxPQUFPLEdBQUdSLFlBQVksQ0FBQ0ksR0FBRyxDQUFFSyxDQUFDLElBQUssQ0FBQyxZQUFZO0lBQ25ELElBQUksTUFBTUMsV0FBRSxDQUFDQyxNQUFNLENBQUNGLENBQUMsQ0FBQyxFQUFFO01BQ3RCLE9BQU9BLENBQUM7SUFDVjtFQUNGLENBQUMsR0FBRyxDQUFDO0VBQ0wsT0FBTyxDQUFDLE1BQU1HLGlCQUFDLENBQUNDLEdBQUcsQ0FBQ0wsT0FBTyxDQUFDLEVBQUVILE1BQU0sQ0FBQ0MsT0FBTyxDQUFDO0FBQy9DO0FBUU8sZUFBZVEsY0FBYyxDQUFFQyxhQUFhLEVBQUU7RUFDbkQsTUFBTUMsU0FBUyxHQUFHQyxhQUFJLENBQUNDLE9BQU8sQ0FBQ0gsYUFBYSxFQUFFLElBQUksRUFBRSxZQUFZLENBQUM7RUFDakUsT0FBTyxPQUFNTCxXQUFFLENBQUNDLE1BQU0sQ0FBQ0ssU0FBUyxDQUFDLElBQzdCLE1BQU1HLGNBQUssQ0FBQ0MsY0FBYyxDQUFDSixTQUFTLENBQUMsR0FDckMsQ0FBQyxDQUFDO0FBQ1IifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","names":["XCRUN_TIMEOUT","runXcrunCommand","args","timeout","exec","err","stderr","message","findAppPaths","bundleId","stdout","e","matchedPaths","_","trim","split","map","filter","Boolean","isEmpty","results","p","fs","exists","B","all","readXcodePlist","developerRoot","plistPath","path","resolve","plist","parsePlistFile"],"sources":["../../lib/helpers.js"],"sourcesContent":["import _ from 'lodash';\nimport B from 'bluebird';\nimport { exec } from 'teen_process';\nimport { fs, plist } from '@appium/support';\nimport path from 'path';\n\nexport const XCRUN_TIMEOUT = 15000;\n\n/**\n * Executes 'xcrun' command line utility\n *\n * @param {string[]} args xcrun arguments\n * @param {number} timeout [15000] The maximum number of milliseconds to wait until xcrun exists\n * @returns {Promise<import(\"teen_process\").ExecResult>} The result of xcrun execution\n * @throws {Error} If xcrun returned non-zero exit code or timed out\n */\nexport async function runXcrunCommand (args, timeout = XCRUN_TIMEOUT) {\n try {\n return await exec('xcrun', args, {timeout});\n } catch (err) {\n // the true error can be hidden within the stderr\n if (err.stderr) {\n err.message = `${err.message}: ${err.stderr}`;\n }\n\n throw err;\n }\n}\n\n/**\n * Uses macOS Spotlight service to detect where the given app is installed\n *\n * @param {string} bundleId Bundle identifier of the target app\n * @returns {Promise<string[]>} Full paths to where the app with the given bundle id is present.\n */\nexport async function findAppPaths (bundleId) {\n let stdout;\n try {\n ({stdout} = await exec('/usr/bin/mdfind', [\n `kMDItemCFBundleIdentifier=${bundleId}`\n ]));\n } catch (e) {\n return [];\n }\n\n const matchedPaths = _.trim(stdout)\n .split('\\n')\n .map(_.trim)\n .filter(Boolean);\n if (_.isEmpty(matchedPaths)) {\n return [];\n }\n const results = matchedPaths.map((p) => (async () => {\n if (await fs.exists(p)) {\n return p;\n }\n })());\n return (await B.all(results)).filter(Boolean);\n}\n\n/**\n * Finds and retrieves the content of the Xcode's Info.plist file\n *\n * @param {string} developerRoot Full path to the Contents/Developer folder under Xcode.app root\n * @returns {Promise<object>} All plist entries as an object or an empty object if no plist was found\n */\nexport async function readXcodePlist (developerRoot) {\n const plistPath = path.resolve(developerRoot, '..', 'Info.plist');\n return await fs.exists(plistPath)\n ? await plist.parsePlistFile(plistPath)\n : {};\n}\n"],"mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AAEO,MAAMA,aAAa,GAAG,KAAK;AAAC;AAU5B,eAAeC,eAAe,CAAEC,IAAI,EAAEC,OAAO,GAAGH,aAAa,EAAE;EACpE,IAAI;IACF,OAAO,MAAM,IAAAI,kBAAI,EAAC,OAAO,EAAEF,IAAI,EAAE;MAACC;IAAO,CAAC,CAAC;EAC7C,CAAC,CAAC,OAAOE,GAAG,EAAE;IAEZ,IAAIA,GAAG,CAACC,MAAM,EAAE;MACdD,GAAG,CAACE,OAAO,GAAI,GAAEF,GAAG,CAACE,OAAQ,KAAIF,GAAG,CAACC,MAAO,EAAC;IAC/C;IAEA,MAAMD,GAAG;EACX;AACF;AAQO,eAAeG,YAAY,CAAEC,QAAQ,EAAE;EAC5C,IAAIC,MAAM;EACV,IAAI;IACF,CAAC;MAACA;IAAM,CAAC,GAAG,MAAM,IAAAN,kBAAI,EAAC,iBAAiB,EAAE,CACvC,6BAA4BK,QAAS,EAAC,CACxC,CAAC;EACJ,CAAC,CAAC,OAAOE,CAAC,EAAE;IACV,OAAO,EAAE;EACX;EAEA,MAAMC,YAAY,GAAGC,eAAC,CAACC,IAAI,CAACJ,MAAM,CAAC,CAChCK,KAAK,CAAC,IAAI,CAAC,CACXC,GAAG,CAACH,eAAC,CAACC,IAAI,CAAC,CACXG,MAAM,CAACC,OAAO,CAAC;EAClB,IAAIL,eAAC,CAACM,OAAO,CAACP,YAAY,CAAC,EAAE;IAC3B,OAAO,EAAE;EACX;EACA,MAAMQ,OAAO,GAAGR,YAAY,CAACI,GAAG,CAAEK,CAAC,IAAK,CAAC,YAAY;IACnD,IAAI,MAAMC,WAAE,CAACC,MAAM,CAACF,CAAC,CAAC,EAAE;MACtB,OAAOA,CAAC;IACV;EACF,CAAC,GAAG,CAAC;EACL,OAAO,CAAC,MAAMG,iBAAC,CAACC,GAAG,CAACL,OAAO,CAAC,EAAEH,MAAM,CAACC,OAAO,CAAC;AAC/C;AAQO,eAAeQ,cAAc,CAAEC,aAAa,EAAE;EACnD,MAAMC,SAAS,GAAGC,aAAI,CAACC,OAAO,CAACH,aAAa,EAAE,IAAI,EAAE,YAAY,CAAC;EACjE,OAAO,OAAML,WAAE,CAACC,MAAM,CAACK,SAAS,CAAC,IAC7B,MAAMG,cAAK,CAACC,cAAc,CAACJ,SAAS,CAAC,GACrC,CAAC,CAAC;AACR"}
|