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 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
  [![Release](https://github.com/appium/appium-xcode/actions/workflows/publish.js.yml/badge.svg?branch=master)](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
- To clear the memoized values, call `clearInternalCache`
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([num_retries])
25
+ ### getVersion([parse=false], [retries], [timeout])
28
26
  *memoized*, *retry*
29
27
 
30
- returns the version of Xcode. Returns strings like `'6.3.1'`
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 largest IOS SDK version supported by Xcode.
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 largest tvOS SDK version supported by Xcode.
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.getVersion = exports.getPath = exports.getMaxTVOSSDKWithoutRetry = exports.getMaxTVOSSDK = exports.getMaxIOSSDKWithoutRetry = exports.getMaxIOSSDK = exports.getInstrumentsPath = exports.getConnectedDevices = exports.getCommandLineToolsVersion = exports.getClangVersion = exports.getAutomationTraceTemplatePathWithoutRetry = exports.getAutomationTraceTemplatePath = exports.default = exports.clearInternalCache = void 0;
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 xcode = _interopRequireWildcard(require("./lib/xcode"));
9
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
10
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
11
- const {
12
- getPath,
13
- getVersion,
14
- getAutomationTraceTemplatePath,
15
- getMaxIOSSDK,
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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRQYXRoIiwiZ2V0VmVyc2lvbiIsImdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aCIsImdldE1heElPU1NESyIsImdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aFdpdGhvdXRSZXRyeSIsImdldE1heElPU1NES1dpdGhvdXRSZXRyeSIsImdldENvbm5lY3RlZERldmljZXMiLCJjbGVhckludGVybmFsQ2FjaGUiLCJnZXRJbnN0cnVtZW50c1BhdGgiLCJnZXRDb21tYW5kTGluZVRvb2xzVmVyc2lvbiIsImdldE1heFRWT1NTREsiLCJnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5IiwiZ2V0Q2xhbmdWZXJzaW9uIiwieGNvZGUiXSwic291cmNlcyI6WyIuLi9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0cmFuc3BpbGU6bWFpblxuXG5pbXBvcnQgKiBhcyB4Y29kZSBmcm9tICcuL2xpYi94Y29kZSc7XG5cblxuY29uc3Qge1xuICBnZXRQYXRoLCBnZXRWZXJzaW9uLCBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGgsIGdldE1heElPU1NESyxcbiAgZ2V0QXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRoV2l0aG91dFJldHJ5LCBnZXRNYXhJT1NTREtXaXRob3V0UmV0cnksXG4gIGdldENvbm5lY3RlZERldmljZXMsIGNsZWFySW50ZXJuYWxDYWNoZSwgZ2V0SW5zdHJ1bWVudHNQYXRoLFxuICBnZXRDb21tYW5kTGluZVRvb2xzVmVyc2lvbiwgZ2V0TWF4VFZPU1NESywgZ2V0TWF4VFZPU1NES1dpdGhvdXRSZXRyeSxcbiAgZ2V0Q2xhbmdWZXJzaW9uLFxufSA9IHhjb2RlO1xuXG5leHBvcnQge1xuICBnZXRQYXRoLCBnZXRWZXJzaW9uLCBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGgsIGdldE1heElPU1NESyxcbiAgZ2V0QXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRoV2l0aG91dFJldHJ5LCBnZXRNYXhJT1NTREtXaXRob3V0UmV0cnksXG4gIGdldENvbm5lY3RlZERldmljZXMsIGNsZWFySW50ZXJuYWxDYWNoZSwgZ2V0SW5zdHJ1bWVudHNQYXRoLFxuICBnZXRDb21tYW5kTGluZVRvb2xzVmVyc2lvbiwgZ2V0TWF4VFZPU1NESywgZ2V0TWF4VFZPU1NES1dpdGhvdXRSZXRyeSxcbiAgZ2V0Q2xhbmdWZXJzaW9uLFxufTtcbmV4cG9ydCBkZWZhdWx0IHhjb2RlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBRUE7QUFBcUM7QUFBQTtBQUdyQyxNQUFNO0VBQ0pBLE9BQU87RUFBRUMsVUFBVTtFQUFFQyw4QkFBOEI7RUFBRUMsWUFBWTtFQUNqRUMsMENBQTBDO0VBQUVDLHdCQUF3QjtFQUNwRUMsbUJBQW1CO0VBQUVDLGtCQUFrQjtFQUFFQyxrQkFBa0I7RUFDM0RDLDBCQUEwQjtFQUFFQyxhQUFhO0VBQUVDLHlCQUF5QjtFQUNwRUM7QUFDRixDQUFDLEdBQUdDLEtBQUs7QUFBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGVBU0tBLEtBQUs7QUFBQSJ9
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"}