Github user omefire commented on a diff in the pull request: https://github.com/apache/cordova-paramedic/pull/4#discussion_r60480780 --- Diff: lib/utils/utilities.js --- @@ -0,0 +1,123 @@ +#!/usr/bin/env node + +var shelljs = require('shelljs'); +var verbose = undefined; +var fs = require('fs'); +var os = require("os"); +var util = require('util'); +var path = require("path-extra"); +var logger = require('cordova-common').CordovaLogger.get(); + +var HEADING_LINE_PATTERN = /List of devices/m; +var DEVICE_ROW_PATTERN = /(emulator|device|host)/m; + +function isWindows () { + return /^win/.test(os.platform()); +} + +function countAndroidDevices() { + var listCommand = "adb devices"; + + logger.info("running:"); + logger.info(" " + listCommand); + + var numDevices = 0; + var result = shelljs.exec(listCommand, {silent: false, async: false}); + result.output.split('\n').forEach(function (line) { + if (!HEADING_LINE_PATTERN.test(line) && DEVICE_ROW_PATTERN.test(line)) { + numDevices += 1; + } + }); + return numDevices; +} + +function secToMin (seconds) { + return Math.ceil(seconds / 60); +} + +function getSimulatorsFolder() { + var simulatorsFolderPath = path.join(path.homedir(), "Library", "Developer", "CoreSimulator", "Devices"); + return simulatorsFolderPath; +} + +function getSimId() { + var findSimCommand = "cordova run --list --emulator | grep ^iPhone | tail -n1"; + + logger.info("running:"); + logger.info(" " + findSimCommand); + + var findSimResult = shelljs.exec(findSimCommand, {silent: true, async: false}); + + if (findSimResult.code > 0) { + logger.error("Failed to find simulator we deployed to"); + return; + } + + var split = findSimResult.output.split(", "); + + // Format of the output is "iPhone-6s-Plus, 9.1" + // Extract the device name and the version number + var device = split[0].replace(/-/g, " ").trim(); + var version = split[1].trim(); + + // Next, figure out the ID of the simulator we found + var instrCommand = "instruments -s devices | grep ^iPhone"; + logger.info("running:"); + logger.info(" " + instrCommand); + + var instrResult = shelljs.exec(instrCommand, {silent: true, async: false}); + + if (instrResult.code > 0) { + logger.error("Failed to get the list of simulators"); + return; + } + + // This matches <device> (<version>) [<simulator-id>] + var simIdRegex = /^([a-zA-Z\d ]+) \(([\d.]+)\) \[([a-zA-Z\d\-]*)\]$/; + + var simId = null; + var lines = instrResult.output.split(/\n/); + lines.forEach(function(line) { + var simIdMatch = simIdRegex.exec(line); + if (simIdMatch && simIdMatch.length === 4 && simIdMatch[1] === device && simIdMatch[2] === version) { + simId = encodeURIComponent(simIdMatch[3]); + } + }); + + return simId; +} --- End diff -- So, turns out this regex breaks in Xcode 7.3, because of the ```(Simulator)``` added at the end, I still think this code is too fragile as it depends on specific Xcode output, which might change in the future. Maybe, we should go back to searching through all folders like before ? In the meantime, reajusting the regex to ```var simIdRegex = /^([a-zA-Z\d ]+) \(([\d.]+)\) \[([a-zA-Z\d\-]*)\].*$/;``` fixes this issue.
--- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. --- --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org For additional commands, e-mail: dev-h...@cordova.apache.org