appium-ios-simulator
Version:
iOS Simulator interface for Appium.
198 lines (147 loc) • 13.4 kB
JavaScript
;
var _regeneratorRuntime = require('babel-runtime/regenerator')['default'];
var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default'];
Object.defineProperty(exports, '__esModule', {
value: true
});
var _simulatorXcode6 = require('./simulator-xcode-6');
var _simulatorXcode62 = _interopRequireDefault(_simulatorXcode6);
var _simulatorXcode7 = require('./simulator-xcode-7');
var _simulatorXcode72 = _interopRequireDefault(_simulatorXcode7);
var _simulatorXcode73 = require('./simulator-xcode-7.3');
var _simulatorXcode732 = _interopRequireDefault(_simulatorXcode73);
var _simulatorXcode8 = require('./simulator-xcode-8');
var _simulatorXcode82 = _interopRequireDefault(_simulatorXcode8);
var _simulatorXcode9 = require('./simulator-xcode-9');
var _simulatorXcode92 = _interopRequireDefault(_simulatorXcode9);
var _utils = require('./utils');
var _appiumXcode = require('appium-xcode');
var _appiumXcode2 = _interopRequireDefault(_appiumXcode);
var _logger = require('./logger');
var _logger2 = _interopRequireDefault(_logger);
function handleUnsupportedXcode(xcodeVersion) {
if (xcodeVersion.major < 6) {
throw new Error('Tried to use an iOS simulator with xcode ' + ('version ' + xcodeVersion.versionString + ' but only Xcode version ') + '6.0.0 and up are supported');
} else if (xcodeVersion.major >= 10) {
throw new Error('Xcode version ' + xcodeVersion.versionString + ' is ' + 'not yet supported');
}
}
/**
* Finds and returns the corresponding Simulator instance for the given ID.
*
* @param {string} udid - The ID of an existing Simulator.
* @throws {Error} If the Simulator with given udid does not exist in devices list.
* If you want to create a new simulator, you can use the `createDevice()` method of
* [node-simctl](github.com/appium/node-simctl).
* @return {object} Simulator object associated with the udid passed in.
*/
function getSimulator(udid) {
var xcodeVersion;
return _regeneratorRuntime.async(function getSimulator$(context$1$0) {
while (1) switch (context$1$0.prev = context$1$0.next) {
case 0:
context$1$0.next = 2;
return _regeneratorRuntime.awrap(_appiumXcode2['default'].getVersion(true));
case 2:
xcodeVersion = context$1$0.sent;
context$1$0.next = 5;
return _regeneratorRuntime.awrap((0, _utils.simExists)(udid));
case 5:
if (context$1$0.sent) {
context$1$0.next = 7;
break;
}
throw new Error('No sim found with udid ' + udid);
case 7:
handleUnsupportedXcode(xcodeVersion);
_logger2['default'].info('Constructing iOS simulator for Xcode version ' + xcodeVersion.versionString + ' ' + ('with udid \'' + udid + '\''));
if (!(xcodeVersion.major === 6)) {
context$1$0.next = 13;
break;
}
return context$1$0.abrupt('return', new _simulatorXcode62['default'](udid, xcodeVersion));
case 13:
if (!(xcodeVersion.major >= 7 && xcodeVersion.major < 8)) {
context$1$0.next = 21;
break;
}
if (!(xcodeVersion.minor < 3)) {
context$1$0.next = 18;
break;
}
return context$1$0.abrupt('return', new _simulatorXcode72['default'](udid, xcodeVersion));
case 18:
return context$1$0.abrupt('return', new _simulatorXcode732['default'](udid, xcodeVersion));
case 19:
context$1$0.next = 27;
break;
case 21:
if (!(xcodeVersion.major === 8)) {
context$1$0.next = 25;
break;
}
return context$1$0.abrupt('return', new _simulatorXcode82['default'](udid, xcodeVersion));
case 25:
if (!(xcodeVersion.major === 9)) {
context$1$0.next = 27;
break;
}
return context$1$0.abrupt('return', new _simulatorXcode92['default'](udid, xcodeVersion));
case 27:
case 'end':
return context$1$0.stop();
}
}, null, this);
}
/**
* Takes a set of options and finds the correct device string in order for Instruments to
* identify the correct simulator.
*
* @param {object} opts - The options available are:
* - `deviceName` - a name for the device. If the given device name starts with `=`, the name, less the equals sign, is returned.
* - `platformVersion` - the version of iOS to use. Defaults to the current Xcode's maximum SDK version.
* - `forceIphone` - force the configuration of the device string to iPhone. Defaults to `false`.
* - `forceIpad` - force the configuration of the device string to iPad. Defaults to `false`.
* If both `forceIphone` and `forceIpad` are true, the device will be forced to iPhone.
*
* @return {string} The found device string, for example:
* 'iPhone 5 (8.4)' with Xcode 7+
* 'iPhone 5 (8.4 Simulator)' with Xcode 6+
*/
function getDeviceString(opts) {
var xcodeVersion;
return _regeneratorRuntime.async(function getDeviceString$(context$1$0) {
while (1) switch (context$1$0.prev = context$1$0.next) {
case 0:
context$1$0.next = 2;
return _regeneratorRuntime.awrap(_appiumXcode2['default'].getVersion(true));
case 2:
xcodeVersion = context$1$0.sent;
handleUnsupportedXcode(xcodeVersion);
_logger2['default'].info('Retrieving device name string for Xcode version ' + xcodeVersion.versionString);
if (!(xcodeVersion.major >= 8)) {
context$1$0.next = 9;
break;
}
return context$1$0.abrupt('return', _simulatorXcode72['default'].getDeviceString(opts));
case 9:
if (!(xcodeVersion.major === 7)) {
context$1$0.next = 13;
break;
}
return context$1$0.abrupt('return', _simulatorXcode72['default'].getDeviceString(opts));
case 13:
if (!(xcodeVersion.major === 6)) {
context$1$0.next = 15;
break;
}
return context$1$0.abrupt('return', _simulatorXcode62['default'].getDeviceString(opts));
case 15:
case 'end':
return context$1$0.stop();
}
}, null, this);
}
exports.getSimulator = getSimulator;
exports.getDeviceString = getDeviceString;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zaW11bGF0b3IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OzsrQkFBNEIscUJBQXFCOzs7OytCQUNyQixxQkFBcUI7Ozs7Z0NBQ3BCLHVCQUF1Qjs7OzsrQkFDeEIscUJBQXFCOzs7OytCQUNyQixxQkFBcUI7Ozs7cUJBQ3ZCLFNBQVM7OzJCQUNqQixjQUFjOzs7O3NCQUNoQixVQUFVOzs7O0FBRzFCLFNBQVMsc0JBQXNCLENBQUUsWUFBWSxFQUFFO0FBQzdDLE1BQUksWUFBWSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDMUIsVUFBTSxJQUFJLEtBQUssQ0FBQyw0REFDVyxZQUFZLENBQUMsYUFBYSw4QkFBMEIsK0JBQ25DLENBQUMsQ0FBQztHQUMvQyxNQUFNLElBQUksWUFBWSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUU7QUFDbkMsVUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBaUIsWUFBWSxDQUFDLGFBQWEsK0JBQ3hCLENBQUMsQ0FBQztHQUN0QztDQUNGOzs7Ozs7Ozs7OztBQVdELFNBQWUsWUFBWSxDQUFFLElBQUk7TUFDM0IsWUFBWTs7Ozs7eUNBQVMseUJBQU0sVUFBVSxDQUFDLElBQUksQ0FBQzs7O0FBQTNDLG9CQUFZOzt5Q0FFTCxzQkFBVSxJQUFJLENBQUM7Ozs7Ozs7O2NBQ2xCLElBQUksS0FBSyw2QkFBMkIsSUFBSSxDQUFHOzs7O0FBR25ELDhCQUFzQixDQUFDLFlBQVksQ0FBQyxDQUFDOztBQUVyQyw0QkFBSSxJQUFJLENBQUMsa0RBQWdELFlBQVksQ0FBQyxhQUFhLDJCQUM1RCxJQUFJLFFBQUcsQ0FBQyxDQUFDOztjQUM1QixZQUFZLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQTs7Ozs7NENBQ25CLGlDQUFvQixJQUFJLEVBQUUsWUFBWSxDQUFDOzs7Y0FDckMsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksWUFBWSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUE7Ozs7O2NBQ3RELFlBQVksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFBOzs7Ozs0Q0FDakIsaUNBQW9CLElBQUksRUFBRSxZQUFZLENBQUM7Ozs0Q0FFdkMsa0NBQXFCLElBQUksRUFBRSxZQUFZLENBQUM7Ozs7Ozs7Y0FFeEMsWUFBWSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUE7Ozs7OzRDQUMxQixpQ0FBb0IsSUFBSSxFQUFFLFlBQVksQ0FBQzs7O2NBQ3JDLFlBQVksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFBOzs7Ozs0Q0FDMUIsaUNBQW9CLElBQUksRUFBRSxZQUFZLENBQUM7Ozs7Ozs7Q0FFakQ7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJELFNBQWUsZUFBZSxDQUFFLElBQUk7TUFDOUIsWUFBWTs7Ozs7eUNBQVMseUJBQU0sVUFBVSxDQUFDLElBQUksQ0FBQzs7O0FBQTNDLG9CQUFZOztBQUVoQiw4QkFBc0IsQ0FBQyxZQUFZLENBQUMsQ0FBQzs7QUFFckMsNEJBQUksSUFBSSxzREFBb0QsWUFBWSxDQUFDLGFBQWEsQ0FBRyxDQUFDOztjQUN0RixZQUFZLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQTs7Ozs7NENBQ2xCLDZCQUFnQixlQUFlLENBQUMsSUFBSSxDQUFDOzs7Y0FDbkMsWUFBWSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUE7Ozs7OzRDQUMxQiw2QkFBZ0IsZUFBZSxDQUFDLElBQUksQ0FBQzs7O2NBQ25DLFlBQVksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFBOzs7Ozs0Q0FDMUIsNkJBQWdCLGVBQWUsQ0FBQyxJQUFJLENBQUM7Ozs7Ozs7Q0FFL0M7O1FBRVEsWUFBWSxHQUFaLFlBQVk7UUFBRSxlQUFlLEdBQWYsZUFBZSIsImZpbGUiOiJsaWIvc2ltdWxhdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFNpbXVsYXRvclhjb2RlNiBmcm9tICcuL3NpbXVsYXRvci14Y29kZS02JztcbmltcG9ydCBTaW11bGF0b3JYY29kZTcgZnJvbSAnLi9zaW11bGF0b3IteGNvZGUtNyc7XG5pbXBvcnQgU2ltdWxhdG9yWGNvZGU3MyBmcm9tICcuL3NpbXVsYXRvci14Y29kZS03LjMnO1xuaW1wb3J0IFNpbXVsYXRvclhjb2RlOCBmcm9tICcuL3NpbXVsYXRvci14Y29kZS04JztcbmltcG9ydCBTaW11bGF0b3JYY29kZTkgZnJvbSAnLi9zaW11bGF0b3IteGNvZGUtOSc7XG5pbXBvcnQgeyBzaW1FeGlzdHMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB4Y29kZSBmcm9tICdhcHBpdW0teGNvZGUnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5cblxuZnVuY3Rpb24gaGFuZGxlVW5zdXBwb3J0ZWRYY29kZSAoeGNvZGVWZXJzaW9uKSB7XG4gIGlmICh4Y29kZVZlcnNpb24ubWFqb3IgPCA2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUcmllZCB0byB1c2UgYW4gaU9TIHNpbXVsYXRvciB3aXRoIHhjb2RlIGAgK1xuICAgICAgICAgICAgICAgICAgICBgdmVyc2lvbiAke3hjb2RlVmVyc2lvbi52ZXJzaW9uU3RyaW5nfSBidXQgb25seSBYY29kZSB2ZXJzaW9uIGAgK1xuICAgICAgICAgICAgICAgICAgICBgNi4wLjAgYW5kIHVwIGFyZSBzdXBwb3J0ZWRgKTtcbiAgfSBlbHNlIGlmICh4Y29kZVZlcnNpb24ubWFqb3IgPj0gMTApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFhjb2RlIHZlcnNpb24gJHt4Y29kZVZlcnNpb24udmVyc2lvblN0cmluZ30gaXMgYCArXG4gICAgICAgICAgICAgICAgICAgIGBub3QgeWV0IHN1cHBvcnRlZGApO1xuICB9XG59XG5cbi8qKlxuICogRmluZHMgYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgU2ltdWxhdG9yIGluc3RhbmNlIGZvciB0aGUgZ2l2ZW4gSUQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVkaWQgLSBUaGUgSUQgb2YgYW4gZXhpc3RpbmcgU2ltdWxhdG9yLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBTaW11bGF0b3Igd2l0aCBnaXZlbiB1ZGlkIGRvZXMgbm90IGV4aXN0IGluIGRldmljZXMgbGlzdC5cbiAqICAgSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IHNpbXVsYXRvciwgeW91IGNhbiB1c2UgdGhlIGBjcmVhdGVEZXZpY2UoKWAgbWV0aG9kIG9mXG4gKiAgIFtub2RlLXNpbWN0bF0oZ2l0aHViLmNvbS9hcHBpdW0vbm9kZS1zaW1jdGwpLlxuICogQHJldHVybiB7b2JqZWN0fSBTaW11bGF0b3Igb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgdWRpZCBwYXNzZWQgaW4uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFNpbXVsYXRvciAodWRpZCkge1xuICBsZXQgeGNvZGVWZXJzaW9uID0gYXdhaXQgeGNvZGUuZ2V0VmVyc2lvbih0cnVlKTtcblxuICBpZiAoIWF3YWl0IHNpbUV4aXN0cyh1ZGlkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gc2ltIGZvdW5kIHdpdGggdWRpZCAke3VkaWR9YCk7XG4gIH1cblxuICBoYW5kbGVVbnN1cHBvcnRlZFhjb2RlKHhjb2RlVmVyc2lvbik7XG5cbiAgbG9nLmluZm8oYENvbnN0cnVjdGluZyBpT1Mgc2ltdWxhdG9yIGZvciBYY29kZSB2ZXJzaW9uICR7eGNvZGVWZXJzaW9uLnZlcnNpb25TdHJpbmd9IGAgK1xuICAgICAgICAgICBgd2l0aCB1ZGlkICcke3VkaWR9J2ApO1xuICBpZiAoeGNvZGVWZXJzaW9uLm1ham9yID09PSA2KSB7XG4gICAgcmV0dXJuIG5ldyBTaW11bGF0b3JYY29kZTYodWRpZCwgeGNvZGVWZXJzaW9uKTtcbiAgfSBlbHNlIGlmICh4Y29kZVZlcnNpb24ubWFqb3IgPj0gNyAmJiB4Y29kZVZlcnNpb24ubWFqb3IgPCA4KSB7XG4gICAgaWYgKHhjb2RlVmVyc2lvbi5taW5vciA8IDMpIHtcbiAgICAgIHJldHVybiBuZXcgU2ltdWxhdG9yWGNvZGU3KHVkaWQsIHhjb2RlVmVyc2lvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgU2ltdWxhdG9yWGNvZGU3Myh1ZGlkLCB4Y29kZVZlcnNpb24pO1xuICAgIH1cbiAgfSBlbHNlIGlmICh4Y29kZVZlcnNpb24ubWFqb3IgPT09IDgpIHtcbiAgICByZXR1cm4gbmV3IFNpbXVsYXRvclhjb2RlOCh1ZGlkLCB4Y29kZVZlcnNpb24pO1xuICB9IGVsc2UgaWYgKHhjb2RlVmVyc2lvbi5tYWpvciA9PT0gOSkge1xuICAgIHJldHVybiBuZXcgU2ltdWxhdG9yWGNvZGU5KHVkaWQsIHhjb2RlVmVyc2lvbik7XG4gIH1cbn1cblxuLyoqXG4gKiBUYWtlcyBhIHNldCBvZiBvcHRpb25zIGFuZCBmaW5kcyB0aGUgY29ycmVjdCBkZXZpY2Ugc3RyaW5nIGluIG9yZGVyIGZvciBJbnN0cnVtZW50cyB0b1xuICogaWRlbnRpZnkgdGhlIGNvcnJlY3Qgc2ltdWxhdG9yLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRzIC0gVGhlIG9wdGlvbnMgYXZhaWxhYmxlIGFyZTpcbiAqICAgLSBgZGV2aWNlTmFtZWAgLSBhIG5hbWUgZm9yIHRoZSBkZXZpY2UuIElmIHRoZSBnaXZlbiBkZXZpY2UgbmFtZSBzdGFydHMgd2l0aCBgPWAsIHRoZSBuYW1lLCBsZXNzIHRoZSBlcXVhbHMgc2lnbiwgaXMgcmV0dXJuZWQuXG4gKiAgIC0gYHBsYXRmb3JtVmVyc2lvbmAgLSB0aGUgdmVyc2lvbiBvZiBpT1MgdG8gdXNlLiBEZWZhdWx0cyB0byB0aGUgY3VycmVudCBYY29kZSdzIG1heGltdW0gU0RLIHZlcnNpb24uXG4gKiAgIC0gYGZvcmNlSXBob25lYCAtIGZvcmNlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBkZXZpY2Ugc3RyaW5nIHRvIGlQaG9uZS4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAqICAgLSBgZm9yY2VJcGFkYCAtIGZvcmNlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBkZXZpY2Ugc3RyaW5nIHRvIGlQYWQuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gKiAgIElmIGJvdGggYGZvcmNlSXBob25lYCBhbmQgYGZvcmNlSXBhZGAgYXJlIHRydWUsIHRoZSBkZXZpY2Ugd2lsbCBiZSBmb3JjZWQgdG8gaVBob25lLlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGZvdW5kIGRldmljZSBzdHJpbmcsIGZvciBleGFtcGxlOlxuICogICAnaVBob25lIDUgKDguNCknIHdpdGggWGNvZGUgNytcbiAqICAgJ2lQaG9uZSA1ICg4LjQgU2ltdWxhdG9yKScgd2l0aCBYY29kZSA2K1xuICovXG5hc3luYyBmdW5jdGlvbiBnZXREZXZpY2VTdHJpbmcgKG9wdHMpIHtcbiAgbGV0IHhjb2RlVmVyc2lvbiA9IGF3YWl0IHhjb2RlLmdldFZlcnNpb24odHJ1ZSk7XG5cbiAgaGFuZGxlVW5zdXBwb3J0ZWRYY29kZSh4Y29kZVZlcnNpb24pO1xuXG4gIGxvZy5pbmZvKGBSZXRyaWV2aW5nIGRldmljZSBuYW1lIHN0cmluZyBmb3IgWGNvZGUgdmVyc2lvbiAke3hjb2RlVmVyc2lvbi52ZXJzaW9uU3RyaW5nfWApO1xuICBpZiAoeGNvZGVWZXJzaW9uLm1ham9yID49IDgpIHtcbiAgICByZXR1cm4gU2ltdWxhdG9yWGNvZGU3LmdldERldmljZVN0cmluZyhvcHRzKTtcbiAgfSBlbHNlIGlmICh4Y29kZVZlcnNpb24ubWFqb3IgPT09IDcpIHtcbiAgICByZXR1cm4gU2ltdWxhdG9yWGNvZGU3LmdldERldmljZVN0cmluZyhvcHRzKTtcbiAgfSBlbHNlIGlmICh4Y29kZVZlcnNpb24ubWFqb3IgPT09IDYpIHtcbiAgICByZXR1cm4gU2ltdWxhdG9yWGNvZGU2LmdldERldmljZVN0cmluZyhvcHRzKTtcbiAgfVxufVxuXG5leHBvcnQgeyBnZXRTaW11bGF0b3IsIGdldERldmljZVN0cmluZyB9O1xuIl0sInNvdXJjZVJvb3QiOiIuLi8uLiJ9