appium-xcuitest-driver 4.3.7 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -507,9 +507,11 @@ Either `true` if the app was successfully terminated, otherwise `false`
507
507
 
508
508
  ### mobile: killApp
509
509
 
510
- Kill the given app on the real device under test by instruments service via [py-ios-device](https://github.com/YueChen-C/py-ios-device) if it is installed on the server machine since XCUITest driver 4.3.0.
510
+ Kill the given app on the real device under test by instruments service.
511
511
  If the app is not running or failed to kill, then nothing is done.
512
- Note that this method takes a few more time than `mobile:terminateApp` for now since it calls the instruments service via external command, `py-ios-device`.
512
+
513
+ XCUITest driver 4.4 and higher does not require [py-ios-device](https://github.com/YueChen-C/py-ios-device).
514
+ XCUITest driver 4.3 requires [py-ios-device](https://github.com/YueChen-C/py-ios-device).
513
515
 
514
516
  #### Arguments
515
517
 
@@ -1355,5 +1357,5 @@ the tests locally. These include:
1355
1357
  the root directory of the repo with the extension "xcconfig")
1356
1358
  * `UICATALOG_REAL_DEVICE` - path to the real device build of UICatalog, in case
1357
1359
  the npm installed one is not built for real device
1358
-
1359
-
1360
+
1361
+
@@ -17,8 +17,6 @@ var _baseDriver = require("@appium/base-driver");
17
17
 
18
18
  var _appiumIosDevice = require("appium-ios-device");
19
19
 
20
- var _pyIosDeviceClient = _interopRequireDefault(require("../py-ios-device-client"));
21
-
22
20
  const commands = {};
23
21
 
24
22
  function requireOptions(opts = {}, reqKeys = []) {
@@ -103,22 +101,42 @@ commands.mobileKillApp = async function mobileKillApp(opts = {}) {
103
101
  const {
104
102
  bundleId
105
103
  } = requireOptions(opts, ['bundleId']);
104
+ let instrumentService;
105
+ let installProxyService;
106
106
 
107
107
  try {
108
- const {
109
- stdout,
110
- stderr
111
- } = await new _pyIosDeviceClient.default(this.opts.device.udid).killApp(bundleId);
108
+ installProxyService = await _appiumIosDevice.services.startInstallationProxyService(this.opts.device.udid);
109
+ const apps = await installProxyService.listApplications();
110
+
111
+ if (!apps[bundleId]) {
112
+ this.log.info(`The bundle id '${bundleId}' did not exist`);
113
+ return false;
114
+ }
115
+
116
+ const executableName = apps[bundleId].CFBundleExecutable;
117
+ this.log.debug(`The executable name for the bundle id '${bundleId}' was '${executableName}'`);
118
+ instrumentService = await _appiumIosDevice.services.startInstrumentService(this.opts.device.udid);
119
+ const processes = await instrumentService.callChannel(_appiumIosDevice.INSTRUMENT_CHANNEL.DEVICE_INFO, 'runningProcesses');
120
+ const process = processes.selector.find(process => process.name === executableName);
112
121
 
113
- if ((stdout + stderr).includes('did not start')) {
114
- this.log.info(`The bundle id '${bundleId}' did not start or it was already killed`);
122
+ if (!process) {
123
+ this.log.info(`The process of the bundle id '${bundleId}' was not running`);
115
124
  return false;
116
125
  }
117
126
 
127
+ await instrumentService.callChannel(_appiumIosDevice.INSTRUMENT_CHANNEL.PROCESS_CONTROL, 'killPid:', `${process.pid}`);
118
128
  return true;
119
129
  } catch (err) {
120
130
  this.log.warn(`Failed to kill '${bundleId}'. Original error: ${err.stderr || err.message}`);
121
131
  return false;
132
+ } finally {
133
+ if (installProxyService) {
134
+ installProxyService.close();
135
+ }
136
+
137
+ if (instrumentService) {
138
+ instrumentService.close();
139
+ }
122
140
  }
123
141
  };
124
142
 
@@ -179,4 +197,4 @@ var _default = commands;
179
197
  exports.default = _default;require('source-map-support').install();
180
198
 
181
199
 
182
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsInJlcXVpcmVPcHRpb25zIiwib3B0cyIsInJlcUtleXMiLCJrZXkiLCJfIiwiaXNTdHJpbmciLCJpc0VtcHR5IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJtb2JpbGVJbnN0YWxsQXBwIiwiYXBwIiwidGltZW91dE1zIiwic3RyYXRlZ3kiLCJzcmNBcHBQYXRoIiwiaGVscGVycyIsImNvbmZpZ3VyZUFwcCIsImxvZyIsImluZm8iLCJpc1JlYWxEZXZpY2UiLCJkZXZpY2UiLCJ1ZGlkIiwiZnMiLCJleGlzdHMiLCJlcnJvckFuZFRocm93IiwiaW5zdGFsbEFwcCIsImFwcFB1c2hUaW1lb3V0IiwiYXBwSW5zdGFsbFN0cmF0ZWd5IiwibW9iaWxlSXNBcHBJbnN0YWxsZWQiLCJidW5kbGVJZCIsImluc3RhbGxlZCIsImlzQXBwSW5zdGFsbGVkIiwibW9iaWxlUmVtb3ZlQXBwIiwicmVtb3ZlQXBwIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJtb2JpbGVMYXVuY2hBcHAiLCJsYXVuY2hPcHRpb25zIiwiYXJndW1lbnRzIiwiaXNBcnJheSIsImVudmlyb25tZW50IiwicHJveHlDb21tYW5kIiwibW9iaWxlVGVybWluYXRlQXBwIiwibW9iaWxlQWN0aXZhdGVBcHAiLCJtb2JpbGVLaWxsQXBwIiwiVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciIsInN0ZG91dCIsInN0ZGVyciIsIlB5aWRldmljZSIsImtpbGxBcHAiLCJpbmNsdWRlcyIsIm1vYmlsZVF1ZXJ5QXBwU3RhdGUiLCJhcHBQYXRoIiwiaXNQbGFpbk9iamVjdCIsImFjdGl2YXRlQXBwIiwiT2JqZWN0IiwiYXNzaWduIiwidGVybWluYXRlQXBwIiwicXVlcnlBcHBTdGF0ZSIsIm1vYmlsZUxpc3RBcHBzIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsImFwcGxpY2F0aW9uVHlwZSIsInNlcnZpY2UiLCJzZXJ2aWNlcyIsInN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlIiwibGlzdEFwcGxpY2F0aW9ucyIsImNsb3NlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFFBQVEsR0FBRyxFQUFqQjs7QUFFQSxTQUFTQyxjQUFULENBQXlCQyxJQUFJLEdBQUcsRUFBaEMsRUFBb0NDLE9BQU8sR0FBRyxFQUE5QyxFQUFrRDtBQUNoRCxPQUFLLE1BQU1DLEdBQVgsSUFBa0JELE9BQWxCLEVBQTJCO0FBQ3pCLFFBQUksQ0FBQ0UsZ0JBQUVDLFFBQUYsQ0FBV0osSUFBSSxDQUFDRSxHQUFELENBQWYsQ0FBRCxJQUEwQkMsZ0JBQUVFLE9BQUYsQ0FBVUwsSUFBSSxDQUFDRSxHQUFELENBQWQsQ0FBOUIsRUFBb0Q7QUFDbEQsWUFBTSxJQUFJSSxtQkFBT0Msb0JBQVgsQ0FDSCxJQUFHTCxHQUFJLHdDQUF1Q0YsSUFBSSxDQUFDRSxHQUFELENBQU0sb0JBRHJELENBQU47QUFHRDtBQUNGOztBQUNELFNBQU9GLElBQVA7QUFDRDs7QUFFREYsUUFBUSxDQUFDVSxnQkFBVCxHQUE0QixlQUFlQSxnQkFBZixDQUFpQ1IsSUFBSSxHQUFHLEVBQXhDLEVBQTRDO0FBQ3RFLFFBQU07QUFBRVMsSUFBQUEsR0FBRjtBQUFPQyxJQUFBQSxTQUFQO0FBQWtCQyxJQUFBQTtBQUFsQixNQUErQlosY0FBYyxDQUFDQyxJQUFELEVBQU8sQ0FBQyxLQUFELENBQVAsQ0FBbkQ7QUFDQSxRQUFNWSxVQUFVLEdBQUcsTUFBTSxLQUFLQyxPQUFMLENBQWFDLFlBQWIsQ0FBMEJMLEdBQTFCLEVBQStCLE1BQS9CLENBQXpCO0FBQ0EsT0FBS00sR0FBTCxDQUFTQyxJQUFULENBQWUsZUFBY0osVUFBVyxZQUFXLEtBQUtLLFlBQUwsS0FBc0IsYUFBdEIsR0FBc0MsV0FBWSxHQUF2RixHQUNYLGNBQWEsS0FBS2pCLElBQUwsQ0FBVWtCLE1BQVYsQ0FBaUJDLElBQUssR0FE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S0FBS0Qsb0JBQUwsQ0FBMEI7QUFBQ0MsSUFBQUE7QUFBRCxHQUExQixDQUFiO0FBQ0QsQ0FGRDs7QUFJQTdCLFFBQVEsQ0FBQzBELFlBQVQsR0FBd0IsZUFBZUEsWUFBZixDQUE2QjdCLFFBQTdCLEVBQXVDO0FBQzdELFNBQU8sTUFBTSxLQUFLYyxrQkFBTCxDQUF3QjtBQUFDZCxJQUFBQTtBQUFELEdBQXhCLENBQWI7QUFDRCxDQUZEOztBQUlBN0IsUUFBUSxDQUFDMkQsYUFBVCxHQUF5QixlQUFlQSxhQUFmLENBQThCOUIsUUFBOUIsRUFBd0M7QUFDL0QsU0FBTyxNQUFNLEtBQUt1QixtQkFBTCxDQUF5QjtBQUFDdkIsSUFBQUE7QUFBRCxHQUF6QixDQUFiO0FBQ0QsQ0FGRDs7QUFnQkE3QixRQUFRLENBQUM0RCxjQUFULEdBQTBCLGVBQWVBLGNBQWYsQ0FBK0IxRCxJQUFJLEdBQUcsRUFBdEMsRUFBMEM7QUFDbEUsTUFBSSxDQUFDLEtBQUtpQixZQUFMLEVBQUwsRUFBMEI7QUFDeEIsVUFBTSxJQUFJWCxtQkFBT3FELG1CQUFYLENBQWdDLGtEQUFoQyxDQUFOO0FBQ0Q7O0FBRUQsUUFBTTtBQUNKQyxJQUFBQSxlQUFlLEdBQUc7QUFEZCxNQUVGNUQsSUFGSjtBQUdBLFFBQU02RCxPQUFPLEdBQUcsTUFBTUMsMEJBQVNDLDZCQUFULENBQXVDLEtBQUsvRCxJQUFMLENBQVVrQixNQUFWLENBQWlCQyxJQUF4RCxDQUF0Qjs7QUFDQSxNQUFJO0FBQ0YsV0FBTyxNQUFNMEMsT0FBTyxDQUFDRyxnQkFBUixDQUF5QjtBQUFDSixNQUFBQTtBQUFELEtBQXpCLENBQWI7QUFDRCxHQUZELFNBRVU7QUFDUkMsSUFBQUEsT0FBTyxDQUFDSSxLQUFSO0FBQ0Q7QUFDRixDQWREOztlQWdCZW5FLFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBzZXJ2aWNlcyB9IGZyb20gJ2FwcGl1bS1pb3MtZGV2aWNlJztcbmltcG9ydCBQeWlkZXZpY2UgZnJvbSAnLi4vcHktaW9zLWRldmljZS1jbGllbnQnO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG5mdW5jdGlvbiByZXF1aXJlT3B0aW9ucyAob3B0cyA9IHt9LCByZXFLZXlzID0gW10pIHtcbiAgZm9yIChjb25zdCBrZXkgb2YgcmVxS2V5cykge1xuICAgIGlmICghXy5pc1N0cmluZyhvcHRzW2tleV0pIHx8IF8uaXNFbXB0eShvcHRzW2tleV0pKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBgJyR7a2V5fScgaXMgZXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBzdHJpbmcuICcke29wdHNba2V5XX0nIGlzIGdpdmVuIGluc3RlYWRgXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3B0cztcbn1cblxuY29tbWFuZHMubW9iaWxlSW5zdGFsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUluc3RhbGxBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGFwcCwgdGltZW91dE1zLCBzdHJhdGVneSB9ID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydhcHAnXSk7XG4gIGNvbnN0IHNyY0FwcFBhdGggPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKGFwcCwgJy5hcHAnKTtcbiAgdGhpcy5sb2cuaW5mbyhgSW5zdGFsbGluZyAnJHtzcmNBcHBQYXRofScgdG8gdGhlICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnU2ltdWxhdG9yJ30gYCArXG4gICAgYHdpdGggVURJRCAnJHt0aGlzLm9wdHMuZGV2aWNlLnVkaWR9J2ApO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzcmNBcHBQYXRoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYFRoZSBhcHBsaWNhdGlvbiBhdCAnJHtzcmNBcHBQYXRofScgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGFjY2Vzc2libGVgKTtcbiAgfVxuICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmluc3RhbGxBcHAoXG4gICAgc3JjQXBwUGF0aCwgdGltZW91dE1zID8/IHRoaXMub3B0cy5hcHBQdXNoVGltZW91dCwgc3RyYXRlZ3kgPz8gdGhpcy5vcHRzLmFwcEluc3RhbGxTdHJhdGVneVxuICApO1xuICB0aGlzLmxvZy5pbmZvKGBJbnN0YWxsYXRpb24gb2YgJyR7c3JjQXBwUGF0aH0nIHN1Y2NlZWRlZGApO1xufTtcblxuY29tbWFuZHMubW9iaWxlSXNBcHBJbnN0YWxsZWQgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVJc0FwcEluc3RhbGxlZCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtidW5kbGVJZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pO1xuICBjb25zdCBpbnN0YWxsZWQgPSBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmlzQXBwSW5zdGFsbGVkKGJ1bmRsZUlkKTtcbiAgdGhpcy5sb2cuaW5mbyhgQXBwICcke2J1bmRsZUlkfScgaXMke2luc3RhbGxlZCA/ICcnIDogJyBub3QnfSBpbnN0YWxsZWRgKTtcbiAgcmV0dXJuIGluc3RhbGxlZDtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVJlbW92ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVJlbW92ZUFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtidW5kbGVJZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pO1xuICB0aGlzLmxvZy5pbmZvKGBVbmluc3RhbGxpbmcgdGhlIGFwcGxpY2F0aW9uIHdpdGggYnVuZGxlIGlkZW50aWZpZXIgJyR7YnVuZGxlSWR9JyBgICtcbiAgICBgZnJvbSB0aGUgJHt0aGlzLmlzUmVhbERldmljZSgpID8gJ3JlYWwgZGV2aWNlJyA6ICdTaW11bGF0b3InfSB3aXRoIFVESUQgJyR7dGhpcy5vcHRzLmRldmljZS51ZGlkfSdgKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnJlbW92ZUFwcChidW5kbGVJZCk7XG4gICAgdGhpcy5sb2cuaW5mbyhgUmVtb3ZhbCBvZiAnJHtidW5kbGVJZH0nIHN1Y2NlZWRlZGApO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgcmVtb3ZlICcke2J1bmRsZUlkfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29tbWFuZHMubW9iaWxlTGF1bmNoQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGF1bmNoQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgbGF1bmNoT3B0aW9ucyA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGlmIChvcHRzLmFyZ3VtZW50cykge1xuICAgIGxhdW5jaE9wdGlvbnMuYXJndW1lbnRzID0gXy5pc0FycmF5KG9wdHMuYXJndW1lbnRzKSA/IG9wdHMuYXJndW1lbnRzIDogW29wdHMuYXJndW1lbnRzXTtcbiAgfVxuICBpZiAob3B0cy5lbnZpcm9ubWVudCkge1xuICAgIGxhdW5jaE9wdGlvbnMuZW52aXJvbm1lbnQgPSBvcHRzLmVudmlyb25tZW50O1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL2xhdW5jaCcsICdQT1NUJywgbGF1bmNoT3B0aW9ucyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVUZXJtaW5hdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUZXJtaW5hdGVBcHAgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvYXBwcy90ZXJtaW5hdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuY29tbWFuZHMubW9iaWxlQWN0aXZhdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVBY3RpdmF0ZUFwcCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL2FjdGl2YXRlJywgJ1BPU1QnLCByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pKTtcbn07XG5cbi8qKlxuICogS2lsbCB0aGUgZ2l2ZW4gYnVuZGxlIGlkIHByb2Nlc3MgdmlhIGluc3RydW1lbnRzIHNlcnZpY2UuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vWXVlQ2hlbi1DL3B5LWlvcy1kZXZpY2UvYmxvYi81MWY0NjgzYzVjM2MzODVhMDE1ODU4YWRhMDdhNWYxYzYyZDNjZjU3L2lvc19kZXZpY2UvY2xpL2Jhc2UucHkjTDIyMFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gT3B0aW9ucyBzZXQsIHdoaWNoIG11c3QgY29udGFpbiBgYnVuZGxlSWRgIHByb3BlcnR5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBidW5kbGUgaWQgcHJvY2VzcyB3YXMga2lsbGVkLiBPdGhlcndpc2UgZmFsc2UuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUtpbGxBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVLaWxsQXBwIChvcHRzID0ge30pIHtcbiAgaWYgKCF0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5VbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKCdBIHJlYWwgZGV2aWNlIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBjb25zdCB7YnVuZGxlSWR9ID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKTtcbiAgdHJ5IHtcbiAgICAvLyBUT0RPOiBldmVudHVhbGx5IHdlJ2QgbGlrZSB0byBjYWxsIHRoZSBpbnN0cnVtZW50cyBraWxsIG1ldGhvZCB2aWEgYXBwaXVtLWlvcy1kZXZpY2UuXG4gICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IGF3YWl0IG5ldyBQeWlkZXZpY2UodGhpcy5vcHRzLmRldmljZS51ZGlkKS5raWxsQXBwKGJ1bmRsZUlkKTtcbiAgICBpZiAoKHN0ZG91dCArIHN0ZGVycikuaW5jbHVkZXMoJ2RpZCBub3Qgc3RhcnQnKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgVGhlIGJ1bmRsZSBpZCAnJHtidW5kbGVJZH0nIGRpZCBub3Qgc3RhcnQgb3IgaXQgd2FzIGFscmVhZHkga2lsbGVkYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLmxvZy53YXJuKGBGYWlsZWQgdG8ga2lsbCAnJHtidW5kbGVJZH0nLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIuc3RkZXJyIHx8IGVyci5tZXNzYWdlfWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIHN0YXRlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBPcHRpb25zIHNldCwgd2hpY2ggbXVzdCBjb250YWluIGBidW5kbGVJZGAgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBhY3R1YWwgYXBwbGljYXRpb24gc3RhdGUgY29kZS4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWFwcGxpY2F0aW9uc3RhdGU/bGFuZ3VhZ2U9b2JqY1xuICogdG8gZ2V0IHRoZSBsaXN0IG9mIHBvc3NpYmxlIHZhbHVlcy5cbiAqL1xuY29tbWFuZHMubW9iaWxlUXVlcnlBcHBTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVF1ZXJ5QXBwU3RhdGUgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvYXBwcy9zdGF0ZScsICdQT1NUJywgcmVxdWlyZU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKSk7XG59O1xuXG5jb21tYW5kcy5pbnN0YWxsQXBwID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEFwcCAoYXBwUGF0aCwgb3B0cyA9IHt9KSB7XG4gIGF3YWl0IHRoaXMubW9iaWxlSW5zdGFsbEFwcCh7XG4gICAgLi4uKF8uaXNQbGFpbk9iamVjdChvcHRzKSA/IG9wdHMgOiB7fSksXG4gICAgYXBwOiBhcHBQYXRoLFxuICB9KTtcbn07XG5cbmNvbW1hbmRzLmFjdGl2YXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gYWN0aXZhdGVBcHAgKGJ1bmRsZUlkLCBvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlTGF1bmNoQXBwKE9iamVjdC5hc3NpZ24oe30sIG9wdHMsIHtidW5kbGVJZH0pKTtcbn07XG5cbmNvbW1hbmRzLmlzQXBwSW5zdGFsbGVkID0gYXN5bmMgZnVuY3Rpb24gaXNBcHBJbnN0YWxsZWQgKGJ1bmRsZUlkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZUlzQXBwSW5zdGFsbGVkKHtidW5kbGVJZH0pO1xufTtcblxuY29tbWFuZHMudGVybWluYXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gdGVybWluYXRlQXBwIChidW5kbGVJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5tb2JpbGVUZXJtaW5hdGVBcHAoe2J1bmRsZUlkfSk7XG59O1xuXG5jb21tYW5kcy5xdWVyeUFwcFN0YXRlID0gYXN5bmMgZnVuY3Rpb24gcXVlcnlBcHBTdGF0ZSAoYnVuZGxlSWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlUXVlcnlBcHBTdGF0ZSh7YnVuZGxlSWR9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTGlzdEFwcHNPcHRpb25zXG4gKiBAcHJvcGVydHkgeydTeXN0ZW0nfCdVc2VyJ30gYXBwbGljYXRpb25UeXBlIFtVc2VyXSBUaGUgdHlwZSBvZiBhcHBsaWNhdGlvbnMgdG8gbGlzdFxuICovXG5cbi8qKlxuICogTGlzdCBhcHBsaWNhdGlvbnMgaW5zdGFsbGVkIG9uIHRoZSByZWFsIGRldmljZSB1bmRlciB0ZXN0XG4gKlxuICogQHBhcmFtIHtMaXN0QXBwc09wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtBcnJheTxPYmplY3Q+fSBBIGxpc3Qgb2YgYXBwcywgd2hlcmUgZWFjaCBpdGVtIGlzIGEgbWFwIHdoZXJlIGtleXMgYXJlXG4gKiBidW5kbGUgaWRlbnRpZmllcnMgYW5kIHZhbHVlcyBhcmUgbWFwcyBvZiBwbGF0Zm9ybS1zcGVjaWZpYyBhcHAgcHJvcGVydGllcy5cbiAqL1xuY29tbWFuZHMubW9iaWxlTGlzdEFwcHMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVMaXN0QXBwcyAob3B0cyA9IHt9KSB7XG4gIGlmICghdGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcihgVGhpcyBleHRlbnNpb24gaXMgb25seSBzdXBwb3J0ZWQgb24gcmVhbCBkZXZpY2VzYCk7XG4gIH1cblxuICBjb25zdCB7XG4gICAgYXBwbGljYXRpb25UeXBlID0gJ1VzZXInLFxuICB9ID0gb3B0cztcbiAgY29uc3Qgc2VydmljZSA9IGF3YWl0IHNlcnZpY2VzLnN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlKHRoaXMub3B0cy5kZXZpY2UudWRpZCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHNlcnZpY2UubGlzdEFwcGxpY2F0aW9ucyh7YXBwbGljYXRpb25UeXBlfSk7XG4gIH0gZmluYWxseSB7XG4gICAgc2VydmljZS5jbG9zZSgpO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2FwcC1tYW5hZ2VtZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
200
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsInJlcXVpcmVPcHRpb25zIiwib3B0cyIsInJlcUtleXMiLCJrZXkiLCJfIiwiaXNTdHJpbmciLCJpc0VtcHR5IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJtb2JpbGVJbnN0YWxsQXBwIiwiYXBwIiwidGltZW91dE1zIiwic3RyYXRlZ3kiLCJzcmNBcHBQYXRoIiwiaGVscGVycyIsImNvbmZpZ3VyZUFwcCIsImxvZyIsImluZm8iLCJpc1JlYWxEZXZpY2UiLCJkZXZpY2UiLCJ1ZGlkIiwiZnMiLCJleGlzdHMiLCJlcnJvckFuZFRocm93IiwiaW5zdGFsbEFwcCIsImFwcFB1c2hUaW1lb3V0IiwiYXBwSW5zdGFsbFN0cmF0ZWd5IiwibW9iaWxlSXNBcHBJbnN0YWxsZWQiLCJidW5kbGVJZCIsImluc3RhbGxlZCIsImlzQXBwSW5zdGFsbGVkIiwibW9iaWxlUmVtb3ZlQXBwIiwicmVtb3ZlQXBwIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJtb2JpbGVMYXVuY2hBcHAiLCJsYXVuY2hPcHRpb25zIiwiYXJndW1lbnRzIiwiaXNBcnJheSIsImVudmlyb25tZW50IiwicHJveHlDb21tYW5kIiwibW9iaWxlVGVybWluYXRlQXBwIiwibW9iaWxlQWN0aXZhdGVBcHAiLCJtb2JpbGVLaWxsQXBwIiwiVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciIsImluc3RydW1lbnRTZXJ2aWNlIiwiaW5zdGFsbFByb3h5U2VydmljZSIsInNlcnZpY2VzIiwic3RhcnRJbnN0YWxsYXRpb25Qcm94eVNlcnZpY2UiLCJhcHBzIiwibGlzdEFwcGxpY2F0aW9ucyIsImV4ZWN1dGFibGVOYW1lIiwiQ0ZCdW5kbGVFeGVjdXRhYmxlIiwiZGVidWciLCJzdGFydEluc3RydW1lbnRTZXJ2aWNlIiwicHJvY2Vzc2VzIiwiY2FsbENoYW5uZWwiLCJJTlNUUlVNRU5UX0NIQU5ORUwiLCJERVZJQ0VfSU5GTyIsInByb2Nlc3MiLCJzZWxlY3RvciIsImZpbmQiLCJuYW1lIiwiUFJPQ0VTU19DT05UUk9MIiwicGlkIiwic3RkZXJyIiwiY2xvc2UiLCJtb2JpbGVRdWVyeUFwcFN0YXRlIiwiYXBwUGF0aCIsImlzUGxhaW5PYmplY3QiLCJhY3RpdmF0ZUFwcCIsIk9iamVjdCIsImFzc2lnbiIsInRlcm1pbmF0ZUFwcCIsInF1ZXJ5QXBwU3RhdGUiLCJtb2JpbGVMaXN0QXBwcyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJhcHBsaWNhdGlvblR5cGUiLCJzZXJ2aWNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFFBQVEsR0FBRyxFQUFqQjs7QUFFQSxTQUFTQyxjQUFULENBQXlCQyxJQUFJLEdBQUcsRUFBaEMsRUFBb0NDLE9BQU8sR0FBRyxFQUE5QyxFQUFrRDtBQUNoRCxPQUFLLE1BQU1DLEdBQVgsSUFBa0JELE9BQWxCLEVBQTJCO0FBQ3pCLFFBQUksQ0FBQ0UsZ0JBQUVDLFFBQUYsQ0FBV0osSUFBSSxDQUFDRSxHQUFELENBQWYsQ0FBRCxJQUEwQkMsZ0JBQUVFLE9BQUYsQ0FBVUwsSUFBSSxDQUFDRSxHQUFELENBQWQsQ0FBOUIsRUFBb0Q7QUFDbEQsWUFBTSxJQUFJSSxtQkFBT0Msb0JBQVgsQ0FDSCxJQUFHTCxHQUFJLHdDQUF1Q0YsSUFBSSxDQUFDRSxHQUFELENBQU0sb0JBRHJELENBQU47QUFHRDtBQUNGOztBQUNELFNBQU9GLElBQVA7QUFDRDs7QUFFREYsUUFBUSxDQUFDVSxnQkFBVCxHQUE0QixlQUFlQSxnQkFBZixDQUFpQ1IsSUFBSSxHQUFHLEVBQXhDLEVBQTRDO0FBQ3RFLFFBQU07QUFBRVMsSUFBQUEsR0FBRjtBQUFPQyxJQUFBQSxTQUFQO0FBQWtCQyxJQUFBQTtBQUFsQixNQUErQlosY0FBYyxDQUFDQyxJQUFELEVBQU8sQ0FBQyxLQUFELENBQVAsQ0FBbkQ7QUFDQSxRQUFNWSxVQUFVLEdBQUcsTUFB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cyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCB7IHNlcnZpY2VzLCBJTlNUUlVNRU5UX0NIQU5ORUwgfSBmcm9tICdhcHBpdW0taW9zLWRldmljZSc7XG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbmZ1bmN0aW9uIHJlcXVpcmVPcHRpb25zIChvcHRzID0ge30sIHJlcUtleXMgPSBbXSkge1xuICBmb3IgKGNvbnN0IGtleSBvZiByZXFLZXlzKSB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKG9wdHNba2V5XSkgfHwgXy5pc0VtcHR5KG9wdHNba2V5XSkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGAnJHtrZXl9JyBpcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIHN0cmluZy4gJyR7b3B0c1trZXldfScgaXMgZ2l2ZW4gaW5zdGVhZGBcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRzO1xufVxuXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlSW5zdGFsbEFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYXBwLCB0aW1lb3V0TXMsIHN0cmF0ZWd5IH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2FwcCddKTtcbiAgY29uc3Qgc3JjQXBwUGF0aCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCAnLmFwcCcpO1xuICB0aGlzLmxvZy5pbmZvKGBJbnN0YWxsaW5nICcke3NyY0FwcFBhdGh9JyB0byB0aGUgJHt0aGlzLmlzUmVhbERldmljZSgpID8gJ3JlYWwgZGV2aWNlJyA6ICdTaW11bGF0b3InfSBgICtcbiAgICBgd2l0aCBVRElEICcke3RoaXMub3B0cy5kZXZpY2UudWRpZH0nYCk7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHNyY0FwcFBhdGgpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGFwcGxpY2F0aW9uIGF0ICcke3NyY0FwcFBhdGh9JyBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYWNjZXNzaWJsZWApO1xuICB9XG4gIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuaW5zdGFsbEFwcChcbiAgICBzcmNBcHBQYXRoLCB0aW1lb3V0TXMgPz8gdGhpcy5vcHRzLmFwcFB1c2hUaW1lb3V0LCBzdHJhdGVneSA/PyB0aGlzLm9wdHMuYXBwSW5zdGFsbFN0cmF0ZWd5XG4gICk7XG4gIHRoaXMubG9nLmluZm8oYEluc3RhbGxhdGlvbiBvZiAnJHtzcmNBcHBQYXRofScgc3VjY2VlZGVkYCk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVJc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUlzQXBwSW5zdGFsbGVkIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2J1bmRsZUlkfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGNvbnN0IGluc3RhbGxlZCA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQoYnVuZGxlSWQpO1xuICB0aGlzLmxvZy5pbmZvKGBBcHAgJyR7YnVuZGxlSWR9JyBpcyR7aW5zdGFsbGVkID8gJycgOiAnIG5vdCd9IGluc3RhbGxlZGApO1xuICByZXR1cm4gaW5zdGFsbGVkO1xufTtcblxuY29tbWFuZHMubW9iaWxlUmVtb3ZlQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUmVtb3ZlQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2J1bmRsZUlkfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIHRoaXMubG9nLmluZm8oYFVuaW5zdGFsbGluZyB0aGUgYXBwbGljYXRpb24gd2l0aCBidW5kbGUgaWRlbnRpZmllciAnJHtidW5kbGVJZH0nIGAgK1xuICAgIGBmcm9tIHRoZSAke3RoaXMuaXNSZWFsRGV2aWNlKCkgPyAncmVhbCBkZXZpY2UnIDogJ1NpbXVsYXRvcid9IHdpdGggVURJRCAnJHt0aGlzLm9wdHMuZGV2aWNlLnVkaWR9J2ApO1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UucmVtb3ZlQXBwKGJ1bmRsZUlkKTtcbiAgICB0aGlzLmxvZy5pbmZvKGBSZW1vdmFsIG9mICcke2J1bmRsZUlkfScgc3VjY2VlZGVkYCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCByZW1vdmUgJyR7YnVuZGxlSWR9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5jb21tYW5kcy5tb2JpbGVMYXVuY2hBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVMYXVuY2hBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCBsYXVuY2hPcHRpb25zID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKTtcbiAgaWYgKG9wdHMuYXJndW1lbnRzKSB7XG4gICAgbGF1bmNoT3B0aW9ucy5hcmd1bWVudHMgPSBfLmlzQXJyYXkob3B0cy5hcmd1bWVudHMpID8gb3B0cy5hcmd1bWVudHMgOiBbb3B0cy5hcmd1bWVudHNdO1xuICB9XG4gIGlmIChvcHRzLmVudmlyb25tZW50KSB7XG4gICAgbGF1bmNoT3B0aW9ucy5lbnZpcm9ubWVudCA9IG9wdHMuZW52aXJvbm1lbnQ7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FwcHMvbGF1bmNoJywgJ1BPU1QnLCBsYXVuY2hPcHRpb25zKTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVRlcm1pbmF0ZUFwcCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL3Rlcm1pbmF0ZScsICdQT1NUJywgcmVxdWlyZU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVBY3RpdmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUFjdGl2YXRlQXBwIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FwcHMvYWN0aXZhdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuLyoqXG4gKiBLaWxsIHRoZSBnaXZlbiBidW5kbGUgaWQgcHJvY2VzcyB2aWEgaW5zdHJ1bWVudHMgc2VydmljZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ZdWVDaGVuLUMvcHktaW9zLWRldmljZS9ibG9iLzUxZjQ2ODNjNWMzYzM4NWEwMTU4NThhZGEwN2E1ZjFjNjJkM2NmNTcvaW9zX2RldmljZS9jbGkvYmFzZS5weSNMMjIwXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBPcHRpb25zIHNldCwgd2hpY2ggbXVzdCBjb250YWluIGBidW5kbGVJZGAgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIGJ1bmRsZSBpZCBwcm9jZXNzIHdhcyBraWxsZWQuIE90aGVyd2lzZSBmYWxzZS5cbiAqL1xuY29tbWFuZHMubW9iaWxlS2lsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUtpbGxBcHAgKG9wdHMgPSB7fSkge1xuICBpZiAoIXRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoJ0EgcmVhbCBkZXZpY2UgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGNvbnN0IHtidW5kbGVJZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pO1xuICBsZXQgaW5zdHJ1bWVudFNlcnZpY2U7XG4gIGxldCBpbnN0YWxsUHJveHlTZXJ2aWNlO1xuICB0cnkge1xuICAgIGluc3RhbGxQcm94eVNlcnZpY2UgPSBhd2FpdCBzZXJ2aWNlcy5zdGFydEluc3RhbGxhdGlvblByb3h5U2VydmljZSh0aGlzLm9wdHMuZGV2aWNlLnVkaWQpO1xuICAgIGNvbnN0IGFwcHMgPSBhd2FpdCBpbnN0YWxsUHJveHlTZXJ2aWNlLmxpc3RBcHBsaWNhdGlvbnMoKTtcbiAgICBpZiAoIWFwcHNbYnVuZGxlSWRdKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBUaGUgYnVuZGxlIGlkICcke2J1bmRsZUlkfScgZGlkIG5vdCBleGlzdGApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBleGVjdXRhYmxlTmFtZSA9IGFwcHNbYnVuZGxlSWRdLkNGQnVuZGxlRXhlY3V0YWJsZTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgVGhlIGV4ZWN1dGFibGUgbmFtZSBmb3IgdGhlIGJ1bmRsZSBpZCAnJHtidW5kbGVJZH0nIHdhcyAnJHtleGVjdXRhYmxlTmFtZX0nYCk7XG4gICAgaW5zdHJ1bWVudFNlcnZpY2UgPSBhd2FpdCBzZXJ2aWNlcy5zdGFydEluc3RydW1lbnRTZXJ2aWNlKHRoaXMub3B0cy5kZXZpY2UudWRpZCk7XG4gICAgY29uc3QgcHJvY2Vzc2VzID0gYXdhaXQgaW5zdHJ1bWVudFNlcnZpY2UuY2FsbENoYW5uZWwoSU5TVFJVTUVOVF9DSEFOTkVMLkRFVklDRV9JTkZPLCAncnVubmluZ1Byb2Nlc3NlcycpO1xuICAgIGNvbnN0IHByb2Nlc3MgPSBwcm9jZXNzZXMuc2VsZWN0b3IuZmluZCgocHJvY2VzcykgPT4gcHJvY2Vzcy5uYW1lID09PSBleGVjdXRhYmxlTmFtZSk7XG4gICAgaWYgKCFwcm9jZXNzKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBUaGUgcHJvY2VzcyBvZiB0aGUgYnVuZGxlIGlkICcke2J1bmRsZUlkfScgd2FzIG5vdCBydW5uaW5nYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGF3YWl0IGluc3RydW1lbnRTZXJ2aWNlLmNhbGxDaGFubmVsKElOU1RSVU1FTlRfQ0hBTk5FTC5QUk9DRVNTX0NPTlRST0wsICdraWxsUGlkOicsIGAke3Byb2Nlc3MucGlkfWApO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLmxvZy53YXJuKGBGYWlsZWQgdG8ga2lsbCAnJHtidW5kbGVJZH0nLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIuc3RkZXJyIHx8IGVyci5tZXNzYWdlfWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoaW5zdGFsbFByb3h5U2VydmljZSkge1xuICAgICAgaW5zdGFsbFByb3h5U2VydmljZS5jbG9zZSgpO1xuICAgIH1cbiAgICBpZiAoaW5zdHJ1bWVudFNlcnZpY2UpIHtcbiAgICAgIGluc3RydW1lbnRTZXJ2aWNlLmNsb3NlKCk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gc3RhdGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIE9wdGlvbnMgc2V0LCB3aGljaCBtdXN0IGNvbnRhaW4gYGJ1bmRsZUlkYCBwcm9wZXJ0eVxuICogQHJldHVybnMge251bWJlcn0gVGhlIGFjdHVhbCBhcHBsaWNhdGlvbiBzdGF0ZSBjb2RlLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpYXBwbGljYXRpb25zdGF0ZT9sYW5ndWFnZT1vYmpjXG4gKiB0byBnZXQgdGhlIGxpc3Qgb2YgcG9zc2libGUgdmFsdWVzLlxuICovXG5jb21tYW5kcy5tb2JpbGVRdWVyeUFwcFN0YXRlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUXVlcnlBcHBTdGF0ZSAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL3N0YXRlJywgJ1BPU1QnLCByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pKTtcbn07XG5cbmNvbW1hbmRzLmluc3RhbGxBcHAgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsQXBwIChhcHBQYXRoLCBvcHRzID0ge30pIHtcbiAgYXdhaXQgdGhpcy5tb2JpbGVJbnN0YWxsQXBwKHtcbiAgICAuLi4oXy5pc1BsYWluT2JqZWN0KG9wdHMpID8gb3B0cyA6IHt9KSxcbiAgICBhcHA6IGFwcFBhdGgsXG4gIH0pO1xufTtcblxuY29tbWFuZHMuYWN0aXZhdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBhY3RpdmF0ZUFwcCAoYnVuZGxlSWQsIG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5tb2JpbGVMYXVuY2hBcHAoT2JqZWN0LmFzc2lnbih7fSwgb3B0cywge2J1bmRsZUlkfSkpO1xufTtcblxuY29tbWFuZHMuaXNBcHBJbnN0YWxsZWQgPSBhc3luYyBmdW5jdGlvbiBpc0FwcEluc3RhbGxlZCAoYnVuZGxlSWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlSXNBcHBJbnN0YWxsZWQoe2J1bmRsZUlkfSk7XG59O1xuXG5jb21tYW5kcy50ZXJtaW5hdGVBcHAgPSBhc3luYyBmdW5jdGlvbiB0ZXJtaW5hdGVBcHAgKGJ1bmRsZUlkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZVRlcm1pbmF0ZUFwcCh7YnVuZGxlSWR9KTtcbn07XG5cbmNvbW1hbmRzLnF1ZXJ5QXBwU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBxdWVyeUFwcFN0YXRlIChidW5kbGVJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5tb2JpbGVRdWVyeUFwcFN0YXRlKHtidW5kbGVJZH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBMaXN0QXBwc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7J1N5c3RlbSd8J1VzZXInfSBhcHBsaWNhdGlvblR5cGUgW1VzZXJdIFRoZSB0eXBlIG9mIGFwcGxpY2F0aW9ucyB0byBsaXN0XG4gKi9cblxuLyoqXG4gKiBMaXN0IGFwcGxpY2F0aW9ucyBpbnN0YWxsZWQgb24gdGhlIHJlYWwgZGV2aWNlIHVuZGVyIHRlc3RcbiAqXG4gKiBAcGFyYW0ge0xpc3RBcHBzT3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge0FycmF5PE9iamVjdD59IEEgbGlzdCBvZiBhcHBzLCB3aGVyZSBlYWNoIGl0ZW0gaXMgYSBtYXAgd2hlcmUga2V5cyBhcmVcbiAqIGJ1bmRsZSBpZGVudGlmaWVycyBhbmQgdmFsdWVzIGFyZSBtYXBzIG9mIHBsYXRmb3JtLXNwZWNpZmljIGFwcCBwcm9wZXJ0aWVzLlxuICovXG5jb21tYW5kcy5tb2JpbGVMaXN0QXBwcyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUxpc3RBcHBzIChvcHRzID0ge30pIHtcbiAgaWYgKCF0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKGBUaGlzIGV4dGVuc2lvbiBpcyBvbmx5IHN1cHBvcnRlZCBvbiByZWFsIGRldmljZXNgKTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBhcHBsaWNhdGlvblR5cGUgPSAnVXNlcicsXG4gIH0gPSBvcHRzO1xuICBjb25zdCBzZXJ2aWNlID0gYXdhaXQgc2VydmljZXMuc3RhcnRJbnN0YWxsYXRpb25Qcm94eVNlcnZpY2UodGhpcy5vcHRzLmRldmljZS51ZGlkKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgc2VydmljZS5saXN0QXBwbGljYXRpb25zKHthcHBsaWNhdGlvblR5cGV9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBzZXJ2aWNlLmNsb3NlKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvYXBwLW1hbmFnZW1lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
@@ -145,14 +145,6 @@ class Pyidevice {
145
145
  });
146
146
  }
147
147
 
148
- async killApp(bundleId) {
149
- if (!bundleId) {
150
- throw new Error('bundleId is required');
151
- }
152
-
153
- return await this.execute(['apps', 'kill', '--bundle_id', bundleId]);
154
- }
155
-
156
148
  }
157
149
 
158
150
  exports.Pyidevice = Pyidevice;
@@ -160,4 +152,4 @@ var _default = Pyidevice;
160
152
  exports.default = _default;require('source-map-support').install();
161
153
 
162
154
 
163
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9weS1pb3MtZGV2aWNlLWNsaWVudC5qcyJdLCJuYW1lcyI6WyJCSU5BUllfTkFNRSIsIlB5aWRldmljZSIsImNvbnN0cnVjdG9yIiwidWRpZCIsImJpbmFyeVBhdGgiLCJhc3NlcnRFeGlzdHMiLCJpc1N0cmljdCIsImZzIiwid2hpY2giLCJlIiwiRXJyb3IiLCJleGVjdXRlIiwiYXJncyIsIm9wdHMiLCJjd2QiLCJmb3JtYXQiLCJsb2dTdGRvdXQiLCJhc3luY2hyb25vdXMiLCJmaW5hbEFyZ3MiLCJwdXNoIiwiY21kU3RyIiwidXRpbCIsInF1b3RlIiwibG9nIiwiZGVidWciLCJyZXN1bHQiLCJTdWJQcm9jZXNzIiwic3RhcnQiLCJzdGRvdXQiLCJzdGRlcnIiLCJtZXNzYWdlIiwibGlzdFByb2ZpbGVzIiwiSlNPTiIsInBhcnNlIiwiaW5zdGFsbFByb2ZpbGUiLCJwcm9maWxlUGF0aCIsInBheWxvYWQiLCJ0bXBSb290Iiwic3JjUGF0aCIsInRlbXBEaXIiLCJvcGVuRGlyIiwicGF0aCIsImpvaW4iLCJ3cml0ZUZpbGUiLCJyaW1yYWYiLCJyZW1vdmVQcm9maWxlIiwibmFtZSIsImxpc3RDcmFzaGVzIiwicmVwbGFjZSIsImZpbHRlciIsIngiLCJpbmNsdWRlcyIsImV4cG9ydENyYXNoIiwiZHN0Rm9sZGVyIiwiY29sbGVjdFBjYXAiLCJkc3RGaWxlIiwia2lsbEFwcCIsImJ1bmRsZUlkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUlBLE1BQU1BLFdBQVcsR0FBRyxXQUFwQjs7QUFFQSxNQUFNQyxTQUFOLENBQWdCO0FBQ2RDLEVBQUFBLFdBQVcsQ0FBRUMsSUFBRixFQUFRO0FBQ2pCLFNBQUtBLElBQUwsR0FBWUEsSUFBWjtBQUNBLFNBQUtDLFVBQUwsR0FBa0IsSUFBbEI7QUFDRDs7QUFFaUIsUUFBWkMsWUFBWSxDQUFFQyxRQUFRLEdBQUcsSUFBYixFQUFtQjtBQUNuQyxRQUFJLEtBQUtGLFVBQVQsRUFBcUI7QUFDbkIsYUFBTyxJQUFQO0FBQ0Q7O0FBRUQsUUFBSTtBQUNGLFdBQUtBLFVBQUwsR0FBa0IsTUFBTUcsWUFBR0MsS0FBSCxDQUFTUixXQUFULENBQXhCO0FBQ0EsYUFBTyxJQUFQO0FBQ0QsS0FIRCxDQUdFLE9BQU9TLENBQVAsRUFBVTtBQUNWLFVBQUlILFFBQUosRUFBYztBQUNaLGNBQU0sSUFBSUksS0FBSixDQUFXLEdBQUVWLFdBQVksbUNBQWYsR0FDYix5RkFEYSxHQUViLGVBRkcsQ0FBTjtBQUdEOztBQUNELGFBQU8sS0FBUDtBQUNEO0FBQ0Y7O0FBRVksUUFBUFcsT0FBTyxDQUFFQyxJQUFGLEVBQVFDLElBQUksR0FBRyxFQUFmLEVBQW1CO0FBQzlCLFVBQU0sS0FBS1IsWUFBTCxFQUFOO0FBQ0EsVUFBTTtBQUNKUyxNQUFBQSxHQURJO0FBRUpDLE1BQUFBLE1BQU0sR0FBRyxNQUZMO0FBR0pDLE1BQUFBLFNBQVMsR0FBRyxLQUhSO0FBSUpDLE1BQUFBLFlBQVksR0FBRztBQUpYLFFBS0ZKLElBTEo7QUFPQSxVQUFNSyxTQUFTLEdBQUcsQ0FBQyxHQUFHTixJQUFKLEVBQVUsUUFBVixFQUFvQixLQUFLVCxJQUF6QixDQUFsQjs7QUFDQSxRQUFJWSxNQUFKLEVBQVk7QUFDVkcsTUFBQUEsU0FBUyxDQUFDQyxJQUFWLENBQWUsVUFBZixFQUEyQkosTUFBM0I7QUFDRDs7QUFDRCxVQUFNSyxNQUFNLEdBQUdDLGNBQUtDLEtBQUwsQ0FBVyxDQUFDLEtBQUtsQixVQUFOLEVBQWtCLEdBQUdjLFNBQXJCLENBQVgsQ0FBZjs7QUFDQUssb0JBQUlDLEtBQUosQ0FBVyxhQUFZSixNQUFPLEVBQTlCOztBQUNBLFFBQUk7QUFDRixVQUFJSCxZQUFKLEVBQWtCO0FBQ2hCLGNBQU1RLE1BQU0sR0FBRyxJQUFJQyx3QkFBSixDQUFlLEtBQUt0QixVQUFwQixFQUFnQ2MsU0FBaEMsRUFBMkM7QUFBQ0osVUFBQUE7QUFBRCxTQUEzQyxDQUFmO0FBQ0EsY0FBTVcsTUFBTSxDQUFDRSxLQUFQLENBQWEsQ0FBYixDQUFOO0FBQ0EsZUFBT0YsTUFBUDtBQUNEOztBQUNELFlBQU1BLE1BQU0sR0FBRyxNQUFNLHdCQUFLLEtBQUtyQixVQUFWLEVBQXNCYyxTQUF0QixFQUFpQztBQUFDSixRQUFBQTtBQUFELE9BQWpDLENBQXJCOztBQUNBLFVBQUlFLFNBQUosRUFBZTtBQUNiTyx3QkFBSUMsS0FBSixDQUFXLG1CQUFrQkMsTUFBTSxDQUFDRyxNQUFPLEVBQTNDO0FBQ0Q7O0FBQ0QsYUFBT0gsTUFBUDtBQUNELEtBWEQsQ0FXRSxPQUFPaEIsQ0FBUCxFQUFVO0FBQ1YsWUFBTSxJQUFJQyxLQUFKLENBQVcsSUFBR1UsTUFBTyw2QkFBNEJYLENBQUMsQ0FBQ29CLE1BQUYsSUFBWXBCLENBQUMsQ0FBQ21CLE1BQWQsSUFBd0JuQixDQUFDLENBQUNxQixPQUFRLEVBQW5GLENBQU47QUFDRDtBQUNGOztBQUVpQixRQUFaQyxZQUFZLEdBQUk7QUFDcEIsVUFBTTtBQUFDSCxNQUFBQTtBQUFELFFBQVcsTUFBTSxLQUFLakIsT0FBTCxDQUFhLENBQUMsVUFBRCxFQUFhLE1BQWIsQ0FBYixDQUF2QjtBQUNBLFdBQU9xQixJQUFJLENBQUNDLEtBQUwsQ0FBV0wsTUFBWCxDQUFQO0FBQ0Q7O0FBRW1CLFFBQWRNLGNBQWMsQ0FBRTtBQUFDQyxJQUFBQSxXQUFEO0FBQWNDLElBQUFBO0FBQWQsTUFBeUIsRUFBM0IsRUFBK0I7QUFDakQsUUFBSSxDQUFDRCxXQUFELElBQWdCLENBQUNDLE9BQXJCLEVBQThCO0FBQzVCLFlBQU0sSUFBSTFCLEtBQUosQ0FBVSxxRUFBVixDQUFOO0FBQ0Q7O0FBRUQsUUFBSTJCLE9BQUo7QUFDQSxRQUFJQyxPQUFPLEdBQUdILFdBQWQ7O0FBQ0EsUUFBSTtBQUNGLFVBQUksQ0FBQ0csT0FBTCxFQUFjO0FBQ1pELFFBQUFBLE9BQU8sR0FBRyxNQUFNRSxpQkFBUUMsT0FBUixFQUFoQjtBQUNBRixRQUFBQSxPQUFPLEdBQUdHLGNBQUtDLElBQUwsQ0FBVUwsT0FBVixFQUFtQixVQUFuQixDQUFWO0FBQ0EsY0FBTTlCLFlBQUdvQyxTQUFILENBQWFMLE9BQWIsRUFBc0JGLE9BQXRCLEVBQStCLE1BQS9CLENBQU47QUFDRDs7QUFDRCxZQUFNLEtBQUt6QixPQUFMLENBQWEsQ0FBQyxVQUFELEVBQWEsU0FBYixFQUF3QixRQUF4QixFQUFrQzJCLE9BQWxDLENBQWIsRUFBeUQ7QUFDN0R0QixRQUFBQSxTQUFTLEVBQUU7QUFEa0QsT0FBekQsQ0FBTjtBQUdELEtBVEQsU0FTVTtBQUNSLFVBQUlxQixPQUFKLEVBQWE7QUFDWCxjQUFNOUIsWUFBR3FDLE1BQUgsQ0FBVVAsT0FBVixDQUFOO0FBQ0Q7QUFDRjtBQUNGOztBQUVrQixRQUFiUSxhQUFhLENBQUVDLElBQUYsRUFBUTtBQUN6QixVQUFNLEtBQUtuQyxPQUFMLENBQWEsQ0FBQyxVQUFELEVBQWEsUUFBYixFQUF1Qm1DLElBQXZCLENBQWIsRUFBMkM7QUFBQzlCLE1BQUFBLFNBQVMsRUFBRTtBQUFaLEtBQTNDLENBQU47QUFDRDs7QUFFZ0IsUUFBWCtCLFdBQVcsR0FBSTtBQUNuQixVQUFNO0FBQUNuQixNQUFBQTtBQUFELFFBQVcsTUFBTSxLQUFLakIsT0FBTCxDQUFhLENBQUMsT0FBRCxFQUFVLE1BQVYsQ0FBYixDQUF2QjtBQUNBLFdBQU9xQixJQUFJLENBQUNDLEtBQUwsQ0FBV0wsTUFBTSxDQUFDb0IsT0FBUCxDQUFlLElBQWYsRUFBcUIsR0FBckIsQ0FBWCxFQUFzQ0MsTUFBdEMsQ0FBOENDLENBQUQsSUFBTyxDQUFDLENBQUMsR0FBRCxFQUFNLElBQU4sRUFBWUMsUUFBWixDQUFxQkQsQ0FBckIsQ0FBckQsQ0FBUDtBQUNEOztBQUVnQixRQUFYRSxXQUFXLENBQUVOLElBQUYsRUFBUU8sU0FBUixFQUFtQjtBQUNsQyxVQUFNLEtBQUsxQyxPQUFMLENBQWEsQ0FBQyxPQUFELEVBQVUsUUFBVixFQUFvQixRQUFwQixFQUE4Qm1DLElBQTlCLENBQWIsRUFBa0Q7QUFDdEQ5QixNQUFBQSxTQUFTLEVBQUUsSUFEMkM7QUFHdERGLE1BQUFBLEdBQUcsRUFBRXVDO0FBSGlELEtBQWxELENBQU47QUFLRDs7QUFFZ0IsUUFBWEMsV0FBVyxDQUFFQyxPQUFGLEVBQVc7QUFDMUIsV0FBTyxNQUFNLEtBQUs1QyxPQUFMLENBQWEsQ0FBQyxPQUFELEVBQVU0QyxPQUFWLENBQWIsRUFBaUM7QUFDNUN4QyxNQUFBQSxNQUFNLEVBQUUsSUFEb0M7QUFFNUNFLE1BQUFBLFlBQVksRUFBRTtBQUY4QixLQUFqQyxDQUFiO0FBSUQ7O0FBRVksUUFBUHVDLE9BQU8sQ0FBRUMsUUFBRixFQUFZO0FBQ3ZCLFFBQUksQ0FBQ0EsUUFBTCxFQUFlO0FBQ2IsWUFBTSxJQUFJL0MsS0FBSixDQUFVLHNCQUFWLENBQU47QUFDRDs7QUFDRCxXQUFPLE1BQU0sS0FBS0MsT0FBTCxDQUFhLENBQUMsTUFBRCxFQUFTLE1BQVQsRUFBaUIsYUFBakIsRUFBZ0M4QyxRQUFoQyxDQUFiLENBQWI7QUFDRDs7QUFoSGE7OztlQW9IRHhELFMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGVjLCBTdWJQcm9jZXNzIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IGZzLCB1dGlsLCB0ZW1wRGlyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ZdWVDaGVuLUMvcHktaW9zLWRldmljZVxuXG5jb25zdCBCSU5BUllfTkFNRSA9ICdweWlkZXZpY2UnO1xuXG5jbGFzcyBQeWlkZXZpY2Uge1xuICBjb25zdHJ1Y3RvciAodWRpZCkge1xuICAgIHRoaXMudWRpZCA9IHVkaWQ7XG4gICAgdGhpcy5iaW5hcnlQYXRoID0gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGFzc2VydEV4aXN0cyAoaXNTdHJpY3QgPSB0cnVlKSB7XG4gICAgaWYgKHRoaXMuYmluYXJ5UGF0aCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuYmluYXJ5UGF0aCA9IGF3YWl0IGZzLndoaWNoKEJJTkFSWV9OQU1FKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7QklOQVJZX05BTUV9IGJpbmFyeSBjYW5ub3QgYmUgZm91bmQgaW4gUEFUSC4gYCArXG4gICAgICAgICAgYFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgaW5zdGFsbGVkLiBWaXNpdCBodHRwczovL2dpdGh1Yi5jb20vWXVlQ2hlbi1DL3B5LWlvcy1kZXZpY2UgZm9yIGAgK1xuICAgICAgICAgIGBtb3JlIGRldGFpbHMuYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZSAoYXJncywgb3B0cyA9IHt9KSB7XG4gICAgYXdhaXQgdGhpcy5hc3NlcnRFeGlzdHMoKTtcbiAgICBjb25zdCB7XG4gICAgICBjd2QsXG4gICAgICBmb3JtYXQgPSAnanNvbicsXG4gICAgICBsb2dTdGRvdXQgPSBmYWxzZSxcbiAgICAgIGFzeW5jaHJvbm91cyA9IGZhbHNlLFxuICAgIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgZmluYWxBcmdzID0gWy4uLmFyZ3MsICctLXVkaWQnLCB0aGlzLnVkaWRdO1xuICAgIGlmIChmb3JtYXQpIHtcbiAgICAgIGZpbmFsQXJncy5wdXNoKCctLWZvcm1hdCcsIGZvcm1hdCk7XG4gICAgfVxuICAgIGNvbnN0IGNtZFN0ciA9IHV0aWwucXVvdGUoW3RoaXMuYmluYXJ5UGF0aCwgLi4uZmluYWxBcmdzXSk7XG4gICAgbG9nLmRlYnVnKGBFeGVjdXRpbmcgJHtjbWRTdHJ9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChhc3luY2hyb25vdXMpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFN1YlByb2Nlc3ModGhpcy5iaW5hcnlQYXRoLCBmaW5hbEFyZ3MsIHtjd2R9KTtcbiAgICAgICAgYXdhaXQgcmVzdWx0LnN0YXJ0KDApO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlYyh0aGlzLmJpbmFyeVBhdGgsIGZpbmFsQXJncywge2N3ZH0pO1xuICAgICAgaWYgKGxvZ1N0ZG91dCkge1xuICAgICAgICBsb2cuZGVidWcoYENvbW1hbmQgb3V0cHV0OiAke3Jlc3VsdC5zdGRvdXR9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7Y21kU3RyfScgZmFpbGVkLiBPcmlnaW5hbCBlcnJvcjogJHtlLnN0ZGVyciB8fCBlLnN0ZG91dCB8fCBlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbGlzdFByb2ZpbGVzICgpIHtcbiAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IHRoaXMuZXhlY3V0ZShbJ3Byb2ZpbGVzJywgJ2xpc3QnXSk7XG4gICAgcmV0dXJuIEpTT04ucGFyc2Uoc3Rkb3V0KTtcbiAgfVxuXG4gIGFzeW5jIGluc3RhbGxQcm9maWxlICh7cHJvZmlsZVBhdGgsIHBheWxvYWR9ID0ge30pIHtcbiAgICBpZiAoIXByb2ZpbGVQYXRoICYmICFwYXlsb2FkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VpdGhlciB0aGUgZnVsbCBwYXRoIHRvIHRoZSBwcm9maWxlIG9yIGl0cyBwYXlsb2FkIG11c3QgYmUgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBsZXQgdG1wUm9vdDtcbiAgICBsZXQgc3JjUGF0aCA9IHByb2ZpbGVQYXRoO1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXNyY1BhdGgpIHtcbiAgICAgICAgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICAgICAgICBzcmNQYXRoID0gcGF0aC5qb2luKHRtcFJvb3QsICdjZXJ0LnBlbScpO1xuICAgICAgICBhd2FpdCBmcy53cml0ZUZpbGUoc3JjUGF0aCwgcGF5bG9hZCwgJ3V0ZjgnKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZShbJ3Byb2ZpbGVzJywgJ2luc3RhbGwnLCAnLS1wYXRoJywgc3JjUGF0aF0sIHtcbiAgICAgICAgbG9nU3Rkb3V0OiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHRtcFJvb3QpIHtcbiAgICAgICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVByb2ZpbGUgKG5hbWUpIHtcbiAgICBhd2FpdCB0aGlzLmV4ZWN1dGUoWydwcm9maWxlcycsICdyZW1vdmUnLCBuYW1lXSwge2xvZ1N0ZG91dDogdHJ1ZX0pO1xuICB9XG5cbiAgYXN5bmMgbGlzdENyYXNoZXMgKCkge1xuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgdGhpcy5leGVjdXRlKFsnY3Jhc2gnLCAnbGlzdCddKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShzdGRvdXQucmVwbGFjZSgvJy9nLCAnXCInKSkuZmlsdGVyKCh4KSA9PiAhWycuJywgJy4uJ10uaW5jbHVkZXMoeCkpO1xuICB9XG5cbiAgYXN5bmMgZXhwb3J0Q3Jhc2ggKG5hbWUsIGRzdEZvbGRlcikge1xuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZShbJ2NyYXNoJywgJ2V4cG9ydCcsICctLW5hbWUnLCBuYW1lXSwge1xuICAgICAgbG9nU3Rkb3V0OiB0cnVlLFxuICAgICAgLy8gVGhlIHRvb2wgZXhwb3J0cyBjcmFzaCByZXBvcnRzIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyXG4gICAgICBjd2Q6IGRzdEZvbGRlclxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY29sbGVjdFBjYXAgKGRzdEZpbGUpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlKFsncGNhcGQnLCBkc3RGaWxlXSwge1xuICAgICAgZm9ybWF0OiBudWxsLFxuICAgICAgYXN5bmNocm9ub3VzOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBraWxsQXBwIChidW5kbGVJZCkge1xuICAgIGlmICghYnVuZGxlSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYnVuZGxlSWQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZShbJ2FwcHMnLCAna2lsbCcsICctLWJ1bmRsZV9pZCcsIGJ1bmRsZUlkXSk7XG4gIH1cbn1cblxuZXhwb3J0IHsgUHlpZGV2aWNlIH07XG5leHBvcnQgZGVmYXVsdCBQeWlkZXZpY2U7XG4iXSwiZmlsZSI6ImxpYi9weS1pb3MtZGV2aWNlLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
155
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9weS1pb3MtZGV2aWNlLWNsaWVudC5qcyJdLCJuYW1lcyI6WyJCSU5BUllfTkFNRSIsIlB5aWRldmljZSIsImNvbnN0cnVjdG9yIiwidWRpZCIsImJpbmFyeVBhdGgiLCJhc3NlcnRFeGlzdHMiLCJpc1N0cmljdCIsImZzIiwid2hpY2giLCJlIiwiRXJyb3IiLCJleGVjdXRlIiwiYXJncyIsIm9wdHMiLCJjd2QiLCJmb3JtYXQiLCJsb2dTdGRvdXQiLCJhc3luY2hyb25vdXMiLCJmaW5hbEFyZ3MiLCJwdXNoIiwiY21kU3RyIiwidXRpbCIsInF1b3RlIiwibG9nIiwiZGVidWciLCJyZXN1bHQiLCJTdWJQcm9jZXNzIiwic3RhcnQiLCJzdGRvdXQiLCJzdGRlcnIiLCJtZXNzYWdlIiwibGlzdFByb2ZpbGVzIiwiSlNPTiIsInBhcnNlIiwiaW5zdGFsbFByb2ZpbGUiLCJwcm9maWxlUGF0aCIsInBheWxvYWQiLCJ0bXBSb290Iiwic3JjUGF0aCIsInRlbXBEaXIiLCJvcGVuRGlyIiwicGF0aCIsImpvaW4iLCJ3cml0ZUZpbGUiLCJyaW1yYWYiLCJyZW1vdmVQcm9maWxlIiwibmFtZSIsImxpc3RDcmFzaGVzIiwicmVwbGFjZSIsImZpbHRlciIsIngiLCJpbmNsdWRlcyIsImV4cG9ydENyYXNoIiwiZHN0Rm9sZGVyIiwiY29sbGVjdFBjYXAiLCJkc3RGaWxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUlBLE1BQU1BLFdBQVcsR0FBRyxXQUFwQjs7QUFFQSxNQUFNQyxTQUFOLENBQWdCO0FBQ2RDLEVBQUFBLFdBQVcsQ0FBRUMsSUFBRixFQUFRO0FBQ2pCLFNBQUtBLElBQUwsR0FBWUEsSUFBWjtBQUNBLFNBQUtDLFVBQUwsR0FBa0IsSUFBbEI7QUFDRDs7QUFFaUIsUUFBWkMsWUFBWSxDQUFFQyxRQUFRLEdBQUcsSUFBYixFQUFtQjtBQUNuQyxRQUFJLEtBQUtGLFVBQVQsRUFBcUI7QUFDbkIsYUFBTyxJ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LENBQU47QUFLRDs7QUFFZ0IsUUFBWEMsV0FBVyxDQUFFQyxPQUFGLEVBQVc7QUFDMUIsV0FBTyxNQUFNLEtBQUs1QyxPQUFMLENBQWEsQ0FBQyxPQUFELEVBQVU0QyxPQUFWLENBQWIsRUFBaUM7QUFDNUN4QyxNQUFBQSxNQUFNLEVBQUUsSUFEb0M7QUFFNUNFLE1BQUFBLFlBQVksRUFBRTtBQUY4QixLQUFqQyxDQUFiO0FBSUQ7O0FBekdhOzs7ZUE2R0RoQixTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlYywgU3ViUHJvY2VzcyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgeyBmcywgdXRpbCwgdGVtcERpciB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vWXVlQ2hlbi1DL3B5LWlvcy1kZXZpY2VcblxuY29uc3QgQklOQVJZX05BTUUgPSAncHlpZGV2aWNlJztcblxuY2xhc3MgUHlpZGV2aWNlIHtcbiAgY29uc3RydWN0b3IgKHVkaWQpIHtcbiAgICB0aGlzLnVkaWQgPSB1ZGlkO1xuICAgIHRoaXMuYmluYXJ5UGF0aCA9IG51bGw7XG4gIH1cblxuICBhc3luYyBhc3NlcnRFeGlzdHMgKGlzU3RyaWN0ID0gdHJ1ZSkge1xuICAgIGlmICh0aGlzLmJpbmFyeVBhdGgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmJpbmFyeVBhdGggPSBhd2FpdCBmcy53aGljaChCSU5BUllfTkFNRSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke0JJTkFSWV9OQU1FfSBiaW5hcnkgY2Fubm90IGJlIGZvdW5kIGluIFBBVEguIGAgK1xuICAgICAgICAgIGBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGluc3RhbGxlZC4gVmlzaXQgaHR0cHM6Ly9naXRodWIuY29tL1l1ZUNoZW4tQy9weS1pb3MtZGV2aWNlIGZvciBgICtcbiAgICAgICAgICBgbW9yZSBkZXRhaWxzLmApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGUgKGFyZ3MsIG9wdHMgPSB7fSkge1xuICAgIGF3YWl0IHRoaXMuYXNzZXJ0RXhpc3RzKCk7XG4gICAgY29uc3Qge1xuICAgICAgY3dkLFxuICAgICAgZm9ybWF0ID0gJ2pzb24nLFxuICAgICAgbG9nU3Rkb3V0ID0gZmFsc2UsXG4gICAgICBhc3luY2hyb25vdXMgPSBmYWxzZSxcbiAgICB9ID0gb3B0cztcblxuICAgIGNvbnN0IGZpbmFsQXJncyA9IFsuLi5hcmdzLCAnLS11ZGlkJywgdGhpcy51ZGlkXTtcbiAgICBpZiAoZm9ybWF0KSB7XG4gICAgICBmaW5hbEFyZ3MucHVzaCgnLS1mb3JtYXQnLCBmb3JtYXQpO1xuICAgIH1cbiAgICBjb25zdCBjbWRTdHIgPSB1dGlsLnF1b3RlKFt0aGlzLmJpbmFyeVBhdGgsIC4uLmZpbmFsQXJnc10pO1xuICAgIGxvZy5kZWJ1ZyhgRXhlY3V0aW5nICR7Y21kU3RyfWApO1xuICAgIHRyeSB7XG4gICAgICBpZiAoYXN5bmNocm9ub3VzKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTdWJQcm9jZXNzKHRoaXMuYmluYXJ5UGF0aCwgZmluYWxBcmdzLCB7Y3dkfSk7XG4gICAgICAgIGF3YWl0IHJlc3VsdC5zdGFydCgwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWModGhpcy5iaW5hcnlQYXRoLCBmaW5hbEFyZ3MsIHtjd2R9KTtcbiAgICAgIGlmIChsb2dTdGRvdXQpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBDb21tYW5kIG91dHB1dDogJHtyZXN1bHQuc3Rkb3V0fWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2NtZFN0cn0nIGZhaWxlZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5zdGRlcnIgfHwgZS5zdGRvdXQgfHwgZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxpc3RQcm9maWxlcyAoKSB7XG4gICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCB0aGlzLmV4ZWN1dGUoWydwcm9maWxlcycsICdsaXN0J10pO1xuICAgIHJldHVybiBKU09OLnBhcnNlKHN0ZG91dCk7XG4gIH1cblxuICBhc3luYyBpbnN0YWxsUHJvZmlsZSAoe3Byb2ZpbGVQYXRoLCBwYXlsb2FkfSA9IHt9KSB7XG4gICAgaWYgKCFwcm9maWxlUGF0aCAmJiAhcGF5bG9hZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFaXRoZXIgdGhlIGZ1bGwgcGF0aCB0byB0aGUgcHJvZmlsZSBvciBpdHMgcGF5bG9hZCBtdXN0IGJlIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgbGV0IHRtcFJvb3Q7XG4gICAgbGV0IHNyY1BhdGggPSBwcm9maWxlUGF0aDtcbiAgICB0cnkge1xuICAgICAgaWYgKCFzcmNQYXRoKSB7XG4gICAgICAgIHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICAgICAgc3JjUGF0aCA9IHBhdGguam9pbih0bXBSb290LCAnY2VydC5wZW0nKTtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHNyY1BhdGgsIHBheWxvYWQsICd1dGY4Jyk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmV4ZWN1dGUoWydwcm9maWxlcycsICdpbnN0YWxsJywgJy0tcGF0aCcsIHNyY1BhdGhdLCB7XG4gICAgICAgIGxvZ1N0ZG91dDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICh0bXBSb290KSB7XG4gICAgICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyByZW1vdmVQcm9maWxlIChuYW1lKSB7XG4gICAgYXdhaXQgdGhpcy5leGVjdXRlKFsncHJvZmlsZXMnLCAncmVtb3ZlJywgbmFtZV0sIHtsb2dTdGRvdXQ6IHRydWV9KTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RDcmFzaGVzICgpIHtcbiAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IHRoaXMuZXhlY3V0ZShbJ2NyYXNoJywgJ2xpc3QnXSk7XG4gICAgcmV0dXJuIEpTT04ucGFyc2Uoc3Rkb3V0LnJlcGxhY2UoLycvZywgJ1wiJykpLmZpbHRlcigoeCkgPT4gIVsnLicsICcuLiddLmluY2x1ZGVzKHgpKTtcbiAgfVxuXG4gIGFzeW5jIGV4cG9ydENyYXNoIChuYW1lLCBkc3RGb2xkZXIpIHtcbiAgICBhd2FpdCB0aGlzLmV4ZWN1dGUoWydjcmFzaCcsICdleHBvcnQnLCAnLS1uYW1lJywgbmFtZV0sIHtcbiAgICAgIGxvZ1N0ZG91dDogdHJ1ZSxcbiAgICAgIC8vIFRoZSB0b29sIGV4cG9ydHMgY3Jhc2ggcmVwb3J0cyB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpclxuICAgICAgY3dkOiBkc3RGb2xkZXJcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNvbGxlY3RQY2FwIChkc3RGaWxlKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZShbJ3BjYXBkJywgZHN0RmlsZV0sIHtcbiAgICAgIGZvcm1hdDogbnVsbCxcbiAgICAgIGFzeW5jaHJvbm91czogdHJ1ZVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCB7IFB5aWRldmljZSB9O1xuZXhwb3J0IGRlZmF1bHQgUHlpZGV2aWNlO1xuIl0sImZpbGUiOiJsaWIvcHktaW9zLWRldmljZS1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
@@ -1,8 +1,7 @@
1
1
  import _ from 'lodash';
2
2
  import { fs } from '@appium/support';
3
3
  import { errors } from '@appium/base-driver';
4
- import { services } from 'appium-ios-device';
5
- import Pyidevice from '../py-ios-device-client';
4
+ import { services, INSTRUMENT_CHANNEL } from 'appium-ios-device';
6
5
 
7
6
  const commands = {};
8
7
 
@@ -84,17 +83,36 @@ commands.mobileKillApp = async function mobileKillApp (opts = {}) {
84
83
  }
85
84
 
86
85
  const {bundleId} = requireOptions(opts, ['bundleId']);
86
+ let instrumentService;
87
+ let installProxyService;
87
88
  try {
88
- // TODO: eventually we'd like to call the instruments kill method via appium-ios-device.
89
- const {stdout, stderr} = await new Pyidevice(this.opts.device.udid).killApp(bundleId);
90
- if ((stdout + stderr).includes('did not start')) {
91
- this.log.info(`The bundle id '${bundleId}' did not start or it was already killed`);
89
+ installProxyService = await services.startInstallationProxyService(this.opts.device.udid);
90
+ const apps = await installProxyService.listApplications();
91
+ if (!apps[bundleId]) {
92
+ this.log.info(`The bundle id '${bundleId}' did not exist`);
92
93
  return false;
93
94
  }
95
+ const executableName = apps[bundleId].CFBundleExecutable;
96
+ this.log.debug(`The executable name for the bundle id '${bundleId}' was '${executableName}'`);
97
+ instrumentService = await services.startInstrumentService(this.opts.device.udid);
98
+ const processes = await instrumentService.callChannel(INSTRUMENT_CHANNEL.DEVICE_INFO, 'runningProcesses');
99
+ const process = processes.selector.find((process) => process.name === executableName);
100
+ if (!process) {
101
+ this.log.info(`The process of the bundle id '${bundleId}' was not running`);
102
+ return false;
103
+ }
104
+ await instrumentService.callChannel(INSTRUMENT_CHANNEL.PROCESS_CONTROL, 'killPid:', `${process.pid}`);
94
105
  return true;
95
106
  } catch (err) {
96
107
  this.log.warn(`Failed to kill '${bundleId}'. Original error: ${err.stderr || err.message}`);
97
108
  return false;
109
+ } finally {
110
+ if (installProxyService) {
111
+ installProxyService.close();
112
+ }
113
+ if (instrumentService) {
114
+ instrumentService.close();
115
+ }
98
116
  }
99
117
  };
100
118
 
@@ -113,13 +113,6 @@ class Pyidevice {
113
113
  asynchronous: true
114
114
  });
115
115
  }
116
-
117
- async killApp (bundleId) {
118
- if (!bundleId) {
119
- throw new Error('bundleId is required');
120
- }
121
- return await this.execute(['apps', 'kill', '--bundle_id', bundleId]);
122
- }
123
116
  }
124
117
 
125
118
  export { Pyidevice };
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "appium-xcuitest-driver",
3
- "version": "4.3.7",
3
+ "version": "4.4.0",
4
4
  "lockfileVersion": 1,
5
5
  "requires": true,
6
6
  "dependencies": {
7
7
  "@appium/base-driver": {
8
- "version": "8.4.0",
9
- "resolved": "https://registry.npmjs.org/@appium/base-driver/-/base-driver-8.4.0.tgz",
10
- "integrity": "sha512-IBHOa/mSKHuDVGr7u7l17uKa4xgezBa1xQy1L/Z0SCJcw3zu9R5TsaPb3fMfdo9X4daQY8uCRLHceOzc8NuNMw==",
8
+ "version": "8.4.2",
9
+ "resolved": "https://registry.npmjs.org/@appium/base-driver/-/base-driver-8.4.2.tgz",
10
+ "integrity": "sha512-by+hZalinv61A5USBX4JWdXDGrSYVd4r51sg4y6wi8zSlQS1rosHalIHTDh2CkHzq/BcvktFjHLNelkOKfKAJQ==",
11
11
  "requires": {
12
- "@appium/support": "^2.57.0",
12
+ "@appium/support": "^2.57.1",
13
13
  "@babel/runtime": "7.17.9",
14
14
  "@colors/colors": "1.5.0",
15
15
  "async-lock": "1.3.1",
@@ -21,31 +21,18 @@
21
21
  "express": "4.17.3",
22
22
  "http-status-codes": "2.2.0",
23
23
  "lodash": "4.17.21",
24
- "lru-cache": "7.7.3",
24
+ "lru-cache": "7.8.1",
25
25
  "method-override": "3.0.0",
26
26
  "morgan": "1.10.0",
27
27
  "serve-favicon": "2.5.0",
28
28
  "source-map-support": "0.5.21",
29
- "validate.js": "0.13.1",
30
- "ws": "7.5.7"
31
- },
32
- "dependencies": {
33
- "lru-cache": {
34
- "version": "7.7.3",
35
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.3.tgz",
36
- "integrity": "sha512-WY9wjJNQt9+PZilnLbuFKM+SwDull9+6IAguOrarOMoOHTcJ9GnXSO11+Gw6c7xtDkBkthR57OZMtZKYr+1CEw=="
37
- },
38
- "ws": {
39
- "version": "7.5.7",
40
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz",
41
- "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A=="
42
- }
29
+ "validate.js": "0.13.1"
43
30
  }
44
31
  },
45
32
  "@appium/support": {
46
- "version": "2.57.0",
47
- "resolved": "https://registry.npmjs.org/@appium/support/-/support-2.57.0.tgz",
48
- "integrity": "sha512-+e3HfQb08BMeE76LeX4qR2R/f4pZCO6juKnhOKhIt3zKBLjVVGoRagvGVFKZXDx9TFijcmT7+nAAFugHZJZTjA==",
33
+ "version": "2.57.1",
34
+ "resolved": "https://registry.npmjs.org/@appium/support/-/support-2.57.1.tgz",
35
+ "integrity": "sha512-H+ejLELc3WXb0f8buRQDOxLsgtPn1R9pzFtPHS0EhnCSYvQbTwVszpX7/8i/DrhsmkiDV/arh0J2PhvlmnbiOg==",
49
36
  "requires": {
50
37
  "@babel/runtime": "7.17.9",
51
38
  "archiver": "5.3.0",
@@ -96,6 +83,14 @@
96
83
  "once": "^1.3.0",
97
84
  "path-is-absolute": "^1.0.0"
98
85
  }
86
+ },
87
+ "semver": {
88
+ "version": "7.3.6",
89
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz",
90
+ "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==",
91
+ "requires": {
92
+ "lru-cache": "^7.4.0"
93
+ }
99
94
  }
100
95
  }
101
96
  },
@@ -520,9 +515,9 @@
520
515
  }
521
516
  },
522
517
  "appium-ios-device": {
523
- "version": "2.3.1",
524
- "resolved": "https://registry.npmjs.org/appium-ios-device/-/appium-ios-device-2.3.1.tgz",
525
- "integrity": "sha512-hjXiSDX+suSL7mJtWyLF3U5bxl3pJbZKQqxZ39mJ8qS2FEKfIYeUOFcaEf5agEfShnHj56OVv4BiiUjet28iwA==",
518
+ "version": "2.4.0",
519
+ "resolved": "https://registry.npmjs.org/appium-ios-device/-/appium-ios-device-2.4.0.tgz",
520
+ "integrity": "sha512-lt3IHfAh/3uB5wk59pZYFhpegtTml7YvvYg0y3X/OrdryNf1O7VoMdf8fJFaVnwR//IEknt4pULhyjfjNAc1iQ==",
526
521
  "requires": {
527
522
  "@appium/support": "^2.55.3",
528
523
  "@babel/runtime": "^7.0.0",
@@ -2090,9 +2085,9 @@
2090
2085
  },
2091
2086
  "dependencies": {
2092
2087
  "async": {
2093
- "version": "2.6.3",
2094
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
2095
- "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
2088
+ "version": "2.6.4",
2089
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
2090
+ "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
2096
2091
  "requires": {
2097
2092
  "lodash": "^4.17.14"
2098
2093
  }
@@ -2238,11 +2233,21 @@
2238
2233
  "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
2239
2234
  },
2240
2235
  "semver": {
2241
- "version": "7.3.6",
2242
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz",
2243
- "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==",
2236
+ "version": "7.3.7",
2237
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
2238
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
2244
2239
  "requires": {
2245
- "lru-cache": "^7.4.0"
2240
+ "lru-cache": "^6.0.0"
2241
+ },
2242
+ "dependencies": {
2243
+ "lru-cache": {
2244
+ "version": "6.0.0",
2245
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
2246
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
2247
+ "requires": {
2248
+ "yallist": "^4.0.0"
2249
+ }
2250
+ }
2246
2251
  }
2247
2252
  },
2248
2253
  "send": {
@@ -2667,6 +2672,11 @@
2667
2672
  "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
2668
2673
  "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
2669
2674
  },
2675
+ "yallist": {
2676
+ "version": "4.0.0",
2677
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
2678
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
2679
+ },
2670
2680
  "yauzl": {
2671
2681
  "version": "2.10.0",
2672
2682
  "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "xcuitest",
9
9
  "xctest"
10
10
  ],
11
- "version": "4.3.7",
11
+ "version": "4.4.0",
12
12
  "author": "appium",
13
13
  "license": "Apache-2.0",
14
14
  "repository": {
@@ -77,7 +77,7 @@
77
77
  "@babel/runtime": "^7.0.0",
78
78
  "@xmldom/xmldom": "^0.x",
79
79
  "appium-idb": "^1.0.0",
80
- "appium-ios-device": "^2.3.1",
80
+ "appium-ios-device": "^2.4.0",
81
81
  "appium-ios-simulator": "^4.0.0",
82
82
  "appium-remote-debugger": "^9.0.0",
83
83
  "appium-webdriveragent": "^4.4.0",