local-cli/runIOS/findMatchingSimulator.js
function findMatchingSimulator(simulators, simulatorName) {
  if (!simulators.devices) {
    return null;
  }
  const devices = simulators.devices;
  var match;
  for (let version in devices) {
    // Making sure the version of the simulator is an iOS (Removes Apple Watch, etc)
    if (version.indexOf('iOS') !== 0) {
      continue;
    }
    for (let i in devices[version]) {
      let simulator = devices[version][i];
      // Skipping non-available simulator
      if (simulator.availability !== '(available)') {
        continue;
      }
      // If there is a booted simulator, we'll use that as instruments will not boot a second simulator
      if (simulator.state === 'Booted') {
        if (simulatorName !== null) {
          console.warn("We couldn't boot your defined simulator due to an already booted simulator. We are limited to one simulator launched at a time.");
        }
        return {
          udid: simulator.udid,
          name: simulator.name,
          version
        };
      }
      if (simulator.name === simulatorName) {
        return {
          udid: simulator.udid,
          name: simulator.name,
          version
        };
      }
      // Keeps track of the first available simulator for use if we can't find one above.
      if (simulatorName === null && !match) {
        match = {
          udid: simulator.udid,
          name: simulator.name,
          version
        };
      }
    }
  }
  if (match) {
    return match;
  }
  return null;
}
function findMatchingSimulator(simulators, simulatorName) {
  if (!simulators.devices) {
    return null;
  }
  const devices = simulators.devices;
  var match;
  for (let version in devices) {
    // Making sure the version of the simulator is an iOS (Removes Apple Watch, etc)
    if (version.indexOf('iOS') !== 0) {
      continue;
    }
    for (let i in devices[version]) {
      let simulator = devices[version][i];
      // Skipping non-available simulator
      if (simulator.availability !== '(available)') {
        continue;
      }
      // If there is a booted simulator, we'll use that as instruments will not boot a second simulator
      if (simulator.state === 'Booted') {
        if (simulatorName !== null) {
          console.warn("We couldn't boot your defined simulator due to an already booted simulator. We are limited to one simulator launched at a time.");
        }
        return {
          udid: simulator.udid,
          name: simulator.name,
          version
        };
      }
      if (simulator.name === simulatorName) {
        return {
          udid: simulator.udid,
          name: simulator.name,
          version
        };
      }
      // Keeps track of the first available simulator for use if we can't find one above.
      if (simulatorName === null && !match) {
        match = {
          udid: simulator.udid,
          name: simulator.name,
          version
        };
      }
    }
  }
  if (match) {
    return match;
  }
  return null;
}
function findMatchingSimulator ( simulators , simulatorName ) { if ( ! simulators . devices ) { return null ; } const devices = simulators . devices ; var match ; for ( let version in devices ) { // Making sure the version of the simulator is an iOS (Removes Apple Watch, etc) if ( version . indexOf ( 'iOS' ) !== 0 ) { continue ; } for ( let i in devices [ version ] ) { let simulator = devices [ version ] [ i ] ; // Skipping non-available simulator if ( simulator . availability !== '(available)' ) { continue ; } // If there is a booted simulator, we'll use that as instruments will not boot a second simulator if ( simulator . state === 'Booted' ) { if ( simulatorName !== null ) { console . warn ( "We couldn't boot your defined simulator due to an already booted simulator. We are limited to one simulator launched at a time." ) ; } return { udid : simulator . udid , name : simulator . name , version } ; } if ( simulator . name === simulatorName ) { return { udid : simulator . udid , name : simulator . name , version } ; } // Keeps track of the first available simulator for use if we can't find one above. if ( simulatorName === null && ! match ) { match = { udid : simulator . udid , name : simulator . name , version } ; } } } if ( match ) { return match ; } return null ; }
Takes in a parsed simulator list and a desired name, and returns an object with the matching simulator.

If the simulatorName argument is null, we'll go into default mode and return the currently booted simulator, or if
none is booted, it will be the first in the list.

@param Object simulators a parsed list from `xcrun simctl list --json devices` command
@param String|null simulatorName the string with the name of desired simulator. If null, it will use the currently
booted simulator, or if none are booted, the first in the list.
@returns {Object} {udid, name, version}
Takes in a parsed simulator list and a desired name and returns an object with the matching simulator .