Return-Path: X-Original-To: apmail-cordova-commits-archive@www.apache.org Delivered-To: apmail-cordova-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 9FC7517EF2 for ; Tue, 27 Jan 2015 17:00:44 +0000 (UTC) Received: (qmail 12136 invoked by uid 500); 27 Jan 2015 17:00:45 -0000 Delivered-To: apmail-cordova-commits-archive@cordova.apache.org Received: (qmail 12124 invoked by uid 500); 27 Jan 2015 17:00:45 -0000 Mailing-List: contact commits-help@cordova.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Delivered-To: mailing list commits@cordova.apache.org Received: (qmail 12115 invoked by uid 99); 27 Jan 2015 17:00:44 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 27 Jan 2015 17:00:44 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id C8874E0E3D; Tue, 27 Jan 2015 17:00:43 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: agrieve@apache.org To: commits@cordova.apache.org Date: Tue, 27 Jan 2015 17:00:43 -0000 Message-Id: <44e30e5495604bef832ce23c0be99bbe@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [01/12] ios commit: CB-8197 Convert all bash scripts to node.js (close #126) Repository: cordova-ios Updated Branches: refs/heads/4.0.x 0aade95e4 -> 4d5de4219 refs/heads/master 3815e83f6 -> fd941c3c7 http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/985fb6e9/bin/templates/scripts/cordova/lib/install-device ---------------------------------------------------------------------- diff --git a/bin/templates/scripts/cordova/lib/install-device b/bin/templates/scripts/cordova/lib/install-device deleted file mode 100755 index bb57e93..0000000 --- a/bin/templates/scripts/cordova/lib/install-device +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env bash -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -LIB_PATH=$( cd "$( dirname "$0" )" && pwd -P) -CORDOVA_PATH="$(dirname "$LIB_PATH")" -PROJECT_PATH="$(dirname "$CORDOVA_PATH")" -XCODEPROJ=$( ls "$PROJECT_PATH" | grep .xcodeproj ) -PROJECT_NAME=$(basename "$XCODEPROJ" .xcodeproj) - -DEVICE_APP_PATH="$PROJECT_PATH/build/device/$PROJECT_NAME.app" - -source "$CORDOVA_PATH/check_reqs" - -if [ ! -d "$DEVICE_APP_PATH" ]; then - echo "Project '$DEVIC_APP_PATH' is not built." - exit 1 -fi - - -IOS_DEPLOY_MIN_VERSION="1.2.0" -IOS_DEPLOY_LOCATION=$(which ios-deploy) -if [ $? != 0 ]; then - echo -e "\033[31mError: ios-deploy was not found. Please download, build and install version $IOS_DEPLOY_MIN_VERSION or greater from https://github.com/phonegap/ios-deploy into your path. Or 'npm install -g ios-deploy' using node.js: http://nodejs.org/\033[m"; exit 1; - exit 1 -fi - -IOS_DEPLOY_VERSION=$(ios-deploy --version) -if [[ "$IOS_DEPLOY_VERSION" < "$IOS_DEPLOY_MIN_VERSION" ]]; then - echo "Cordova needs ios-deploy version $IOS_DEPLOY_MIN_VERSION or greater, you have version $IOS_DEPLOY_VERSION." - exit 1 -fi - -# if we got here, we can deploy the app, then exit success -ios-deploy -b "$DEVICE_APP_PATH" -exit 0 http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/985fb6e9/bin/templates/scripts/cordova/lib/install-emulator ---------------------------------------------------------------------- diff --git a/bin/templates/scripts/cordova/lib/install-emulator b/bin/templates/scripts/cordova/lib/install-emulator deleted file mode 100755 index bcf926e..0000000 --- a/bin/templates/scripts/cordova/lib/install-emulator +++ /dev/null @@ -1,91 +0,0 @@ -#!/usr/bin/env bash -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -OPTION_RESULT=() -TARGET="iPhone-6" - -# separates "key=value", sets an array with 0th index as key, 1st index as value -_parseOption() -{ - local ARG=$@ - OIFS=$IFS - IFS='=' - - OPTION_RESULT=() - for i in ${ARG[@]} - do - OPTION_RESULT+=($i) - done - - IFS=$OIFS -} - -# parses key=value arguments -_parseArgs() -{ - for arg in "$@" - do - _parseOption ${arg} - case "${OPTION_RESULT[0]}" in - "--target") - TARGET=${OPTION_RESULT[1]} - ;; - esac - done -} - -_parseArgs "$@" - -LIB_PATH=$( cd "$( dirname "$0" )" && pwd -P) -CORDOVA_PATH="$(dirname "$LIB_PATH")" -PROJECT_PATH="$(dirname "$CORDOVA_PATH")" -XCODEPROJ=$( ls "$PROJECT_PATH" | grep .xcodeproj ) -PROJECT_NAME=$(basename "$XCODEPROJ" .xcodeproj) - -SIMULATOR_APP_PATH="$PROJECT_PATH/build/emulator/$PROJECT_NAME.app" - -source "$CORDOVA_PATH/check_reqs" - -if [ ! -d "$SIMULATOR_APP_PATH" ]; then - echo "Project '$SIMULATOR_APP_PATH' is not built." - exit 1 -fi - -if [ ! -d "$SIMULATOR_APP_PATH" ]; then - echo "$SIMULATOR_APP_PATH not found to emulate." - exit 1 -fi - -IOS_SIM_MIN_VERSION="3.0" -IOS_SIM_LOCATION=$(which ios-sim) -if [ $? != 0 ]; then - echo -e "\033[31mError: ios-sim was not found. Please download, build and install version $IOS_SIM_MIN_VERSION or greater from https://github.com/phonegap/ios-sim into your path. Or 'npm install -g ios-sim' using node.js: http://nodejs.org/\033[m"; exit 1; - exit 1 -fi - -IOS_SIM_VERSION=$(ios-sim --version) - -if [[ "$IOS_SIM_VERSION" < "$IOS_SIM_MIN_VERSION" ]]; then - echo "Cordova needs ios-sim version $IOS_SIM_MIN_VERSION or greater, you have version $IOS_SIM_VERSION." - exit 1 -fi - -# launch using ios-sim -ios-sim launch "$SIMULATOR_APP_PATH" --stderr "$CORDOVA_PATH/console.log" --stdout "$CORDOVA_PATH/console.log" --devicetypeid "com.apple.CoreSimulator.SimDeviceType.$TARGET" --exit http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/985fb6e9/bin/templates/scripts/cordova/lib/list-devices ---------------------------------------------------------------------- diff --git a/bin/templates/scripts/cordova/lib/list-devices b/bin/templates/scripts/cordova/lib/list-devices index feacfba..a12abd7 100755 --- a/bin/templates/scripts/cordova/lib/list-devices +++ b/bin/templates/scripts/cordova/lib/list-devices @@ -1,23 +1,62 @@ -#!/usr/bin/env bash -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p' | grep "Serial Number:" | awk -F ": " '{print $2 " iPad"}' -system_profiler SPUSBDataType | sed -n -e '/iPhone/,/Serial/p' | grep "Serial Number:" | awk -F ": " '{print $2 " iPhone"}' -system_profiler SPUSBDataType | sed -n -e '/iPod/,/Serial/p' | grep "Serial Number:" | awk -F ": " '{print $2 " iPod"}' +#!/usr/bin/env node + +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +/*jshint node: true*/ + +var Q = require('Q'), + exec = require('child_process').exec; + +/** + * Gets list of connected iOS devices + * @return {Promise} Promise fulfilled with list of available iOS devices + */ +function listDevices() { + var commands = [ + Q.nfcall(exec, 'system_profiler SPUSBDataType | sed -n -e \'/iPad/,/Serial/p\' | grep "Serial Number:" | awk -F ": " \'{print $2 " iPad"}\''), + Q.nfcall(exec, 'system_profiler SPUSBDataType | sed -n -e \'/iPhone/,/Serial/p\' | grep "Serial Number:" | awk -F ": " \'{print $2 " iPhone"}\''), + Q.nfcall(exec, 'system_profiler SPUSBDataType | sed -n -e \'/iPod/,/Serial/p\' | grep "Serial Number:" | awk -F ": " \'{print $2 " iPod"}\'') + ]; + + // wrap al lexec calls into promises and wait until they're fullfilled + return Q.all(commands).then(function (promises) { + var accumulator = []; + promises.forEach(function (promise) { + if (promise.state === 'fulfilled') { + // Each command promise resolves with array [stout, stderr], and we need stdout only + // Append stdout lines to accumulator + accumulator.concat(promise.value[0].trim().split('\n')); + } + }); + return accumulator; + }); +} + +exports.run = listDevices; + +// Check if module is started as separate script. +// If so, then invoke main method and print out results. +if (!module.parent) { + listDevices().then(function (devices) { + devices.forEach(function (device) { + console.log(device); + }); + }); +} http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/985fb6e9/bin/templates/scripts/cordova/lib/list-emulator-images ---------------------------------------------------------------------- diff --git a/bin/templates/scripts/cordova/lib/list-emulator-images b/bin/templates/scripts/cordova/lib/list-emulator-images index c831370..0c7f0c5 100755 --- a/bin/templates/scripts/cordova/lib/list-emulator-images +++ b/bin/templates/scripts/cordova/lib/list-emulator-images @@ -1,39 +1,53 @@ -#!/usr/bin/env bash -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -set -e - -IOS_SIM_MIN_VERSION="3.0" -IOS_SIM_LOCATION=$(which ios-sim) -if [ $? != 0 ]; then - echo -e "\033[31mError: ios-sim was not found. Please download, build and install version $IOS_SIM_MIN_VERSION or greater from https://github.com/phonegap/ios-sim into your path. Or 'npm install -g ios-sim' using node.js: http://nodejs.org/\033[m" 1>&2; - exit 1; -fi - -IOS_SIM_VERSION=$(ios-sim --version) - -if [[ "$IOS_SIM_VERSION" < "$IOS_SIM_MIN_VERSION" ]]; then - echo "Cordova needs ios-sim version $IOS_SIM_MIN_VERSION or greater, you have version $IOS_SIM_VERSION." 1>&2; - exit 1 -fi - -ios-sim showdevicetypes 2>&1 | sed "s/com.apple.CoreSimulator.SimDeviceType.//g" | awk -F',' '{print $1}' - - - +#!/usr/bin/env node + +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +/*jshint node: true*/ + +var Q = require('q'), + exec = require('child_process').exec, + check_reqs = require('./check_reqs'); + +/** + * Gets list of iOS devices available for simulation + * @return {Promise} Promise fulfilled with list of devices available for simulation + */ +function listEmulatorImages () { + return check_reqs.check_ios_sim().then(function () { + return Q.nfcall(exec, 'ios-sim showdevicetypes 2>&1 | ' + + 'sed "s/com.apple.CoreSimulator.SimDeviceType.//g" | ' + + 'awk -F\',\' \'{print $1}\''); + }).then(function (stdio) { + // Exec promise resolves with array [stout, stderr], and we need stdout only + return stdio[0].trim().split('\n'); + }); +} + +exports.run = listEmulatorImages; + +// Check if module is started as separate script. +// If so, then invoke main method and print out results. +if (!module.parent) { + listEmulatorImages().then(function (names) { + names.forEach(function (name) { + console.log(name); + }); + }); +} http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/985fb6e9/bin/templates/scripts/cordova/lib/list-started-emulators ---------------------------------------------------------------------- diff --git a/bin/templates/scripts/cordova/lib/list-started-emulators b/bin/templates/scripts/cordova/lib/list-started-emulators index badab2c..1269e47 100755 --- a/bin/templates/scripts/cordova/lib/list-started-emulators +++ b/bin/templates/scripts/cordova/lib/list-started-emulators @@ -1,30 +1,51 @@ -#!/usr/bin/env bash -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -set -e - -SIM_RUNNING=$(ps aux | grep -i "[i]OS Simulator" | wc -l) -if [ $SIM_RUNNING == 0 ]; then - echo "No emulators are running." - exit 1 -fi - -SIM_ID=`defaults read com.apple.iphonesimulator "SimulateDevice"` -echo \"$SIM_ID\" +#!/usr/bin/env node + +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +/*jshint node: true*/ + +var Q = require('q'), + exec = require('child_process').exec; + +/** + * Gets list of running iOS simulators + * @return {Promise} Promise fulfilled with list of running iOS simulators + */ +function listStartedEmulators () { + // wrap exec call into promise + return Q.nfcall(exec, 'ps aux | grep -i "[i]OS Simulator"') + .then(function () { + return Q.nfcall(exec, 'defaults read com.apple.iphonesimulator "SimulateDevice"'); + }).then(function (stdio) { + return stdio[0].trim().split('\n'); + }); +} + +exports.run = listStartedEmulators; + +// Check if module is started as separate script. +// If so, then invoke main method and print out results. +if (!module.parent) { + listStartedEmulators().then(function (emulators) { + emulators.forEach(function (emulator) { + console.log(emulator); + }); + }); +} http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/985fb6e9/bin/templates/scripts/cordova/lib/run.js ---------------------------------------------------------------------- diff --git a/bin/templates/scripts/cordova/lib/run.js b/bin/templates/scripts/cordova/lib/run.js new file mode 100644 index 0000000..53153fc --- /dev/null +++ b/bin/templates/scripts/cordova/lib/run.js @@ -0,0 +1,177 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +/*jshint node: true*/ + +var Q = require('q'), + nopt = require('nopt'), + path = require('path'), + build = require('./build'), + spawn = require('./spawn'), + check_reqs = require('./check_reqs'); + +var cordovaPath = path.join(__dirname, '..'); +var projectPath = path.join(__dirname, '..', '..'); + +module.exports.run = function (argv) { + + // parse args here + // --debug and --release args not parsed here + // but still valid since they can be passed down to build command + var args = nopt({ + // "archs": String, // TODO: add support for building different archs + "list": Boolean, + "nobuild": Boolean, + "device": Boolean, "emulator": Boolean, "target": String + }, {}, argv); + + // Validate args + if (args.device && args.emulator) { + return Q.reject('Only one of "device"/"emulator" options should be specified'); + } + + // validate target device for ios-sim + // Valid values for "--target" (case sensitive): + var validTargets = ["iPhone-4s", "iPhone-5", "iPhone-5s", "iPhone-6-Plus", "iPhone-6", + "iPad-2", "iPad-Retina", "iPad-Air", "Resizable-iPhone", "Resizable-iPad"]; + if (args.target && validTargets.indexOf(args.target) < 0 ) { + return Q.reject(args.target + " is not a valid target for emulator"); + } + + // support for CB-8168 `cordova/run --list` + if (args.list) { + if (args.device) return listDevices(); + if (args.emulator) return listEmulators(); + // if no --device or --emulator flag is specified, list both devices and emulators + return listDevices().then(function () { + return listEmulators(); + }); + } + + // check for either ios-sim or ios-deploy is available + // depending on arguments provided + var checkTools = args.device ? check_reqs.check_ios_deploy() : check_reqs.check_ios_sim(); + + return checkTools.then(function () { + // if --nobuild isn't specified then build app first + if (!args.nobuild) { + return build.run(argv); + } + }).then(function () { + return build.findXCodeProjectIn(projectPath); + }).then(function (projectName) { + var appPath = path.join(projectPath, 'build', (args.device ? 'device' : 'emulator'), projectName + '.app'); + // select command to run and arguments depending whether + // we're running on device/emulator + if (args.device) { + return checkDeviceConnected().then(function () { + return deployToDevice(appPath); + }, function () { + // if device connection check failed use emulator then + return deployToSim(appPath, args.target); + }); + } else { + return deployToSim(appPath, args.target); + } + }); +}; + +/** + * Checks if any iOS device is connected + * @return {Promise} Fullfilled when any device is connected, rejected otherwise + */ +function checkDeviceConnected() { + return spawn('ios-deploy', ['-c']); +} + +/** + * Deploy specified app package to connected device + * using ios-deploy command + * @param {String} appPath Path to application package + * @return {Promise} Resolves when deploy succeeds otherwise rejects + */ +function deployToDevice(appPath) { + // Deploying to device... + return spawn('ios-deploy', ['-d', '-b', appPath]); +} + +/** + * Deploy specified app package to ios-sim simulator + * @param {String} appPath Path to application package + * @param {String} target Target device type + * @return {Promise} Resolves when deploy succeeds otherwise rejects + */ +function deployToSim(appPath, target) { + // Select target device for emulator. Default is 'iPhone-6' + if (!target) { + target = 'iPhone-6'; + console.log('No target specified for emulator. Deploying to ' + target + ' simulator'); + } + var logPath = path.join(cordovaPath, 'console.log'); + var simArgs = ['launch', appPath, + '--devicetypeid', 'com.apple.CoreSimulator.SimDeviceType.' + target, + // We need to redirect simulator output here to use cordova/log command + // TODO: Is there any other way to get emulator's output to use in log command? + '--stderr', logPath, '--stdout', logPath, + '--exit']; + return spawn('ios-sim', simArgs); +} + +function listDevices() { + return require('./list-devices').run() + .then(function (devices) { + console.log("Available iOS Devices:"); + devices.forEach(function (device) { + console.log('\t' + device); + }); + }); +} + +function listEmulators() { + return require('./list-emulator-images').run() + .then(function (emulators) { + console.log("Available iOS Virtual Devices:"); + emulators.forEach(function (emulator) { + console.log('\t' + emulator); + }); + }); +} + +module.exports.help = function () { + console.log("\nUsage: run [ --device | [ --emulator [ --target= ] ] ] [ --debug | --release | --nobuild ]"); + // TODO: add support for building different archs + // console.log(" [ --archs=\"\" ] "); + console.log(" --device : Deploys and runs the project on the connected device."); + console.log(" --emulator : Deploys and runs the project on an emulator."); + console.log(" --target= : Deploys and runs the project on the specified target."); + console.log(" --debug : Builds project in debug mode. (Passed down to build command, if necessary)"); + console.log(" --release : Builds project in release mode. (Passed down to build command, if necessary)"); + console.log(" --nobuild : Uses pre-built package, or errors if project is not built."); + // TODO: add support for building different archs + // console.log(" --archs : Specific chip architectures (`anycpu`, `arm`, `x86`, `x64`)."); + console.log(""); + console.log("Examples:"); + console.log(" run"); + console.log(" run --device"); + console.log(" run --emulator --target=\"iPhone-6-Plus\""); + console.log(" run --device --release"); + console.log(" run --emulator --debug"); + console.log(""); + process.exit(0); +}; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/985fb6e9/bin/templates/scripts/cordova/lib/spawn.js ---------------------------------------------------------------------- diff --git a/bin/templates/scripts/cordova/lib/spawn.js b/bin/templates/scripts/cordova/lib/spawn.js new file mode 100644 index 0000000..1cb3161 --- /dev/null +++ b/bin/templates/scripts/cordova/lib/spawn.js @@ -0,0 +1,50 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +/*jshint node: true*/ + +var Q = require('q'), + proc = require('child_process'); + +/** + * Run specified command with arguments + * @param {String} cmd Command + * @param {Array} args Array of arguments that should be passed to command + * @param {String} opt_cwd Working directory for command + * @param {String} opt_verbosity Verbosity level for command stdout output, "verbose" by default + * @return {Promise} Promise either fullfilled or rejected with error code + */ +module.exports = function(cmd, args, opt_cwd) { + var d = Q.defer(); + try { + var child = proc.spawn(cmd, args, {cwd: opt_cwd, stdio: 'inherit'}); + + child.on('exit', function(code) { + if (code) { + d.reject('Error code ' + code + ' for command: ' + cmd + ' with args: ' + args); + } else { + d.resolve(); + } + }); + } catch(e) { + console.error('error caught: ' + e); + d.reject(e); + } + return d.promise; +}; http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/985fb6e9/bin/templates/scripts/cordova/run ---------------------------------------------------------------------- diff --git a/bin/templates/scripts/cordova/run b/bin/templates/scripts/cordova/run index 2cd0811..d2c376d 100755 --- a/bin/templates/scripts/cordova/run +++ b/bin/templates/scripts/cordova/run @@ -1,186 +1,36 @@ -#!/usr/bin/env bash -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -# Valid values for "--target" (case sensitive): -# iPhone-4s -# iPhone-5 -# iPhone-5s -# iPhone-6-Plus -# iPhone-6 -# iPad-2 -# iPad-Retina -# iPad-Air -# Resizable-iPhone -# Resizable-iPad - - -OPTION_RESULT=() -TARGET="iPhone-6" - -# multi-device flow default -USE_DEVICE=true -USE_SIMULATOR=false - -# options -NO_BUILD=false - -# display list -DISPLAY_LIST=false -DISPLAY_DEVICE=false -DISPLAY_EMULATOR=false - -# separates "key=value", sets an array with 0th index as key, 1st index as value -_parseOption() -{ - local ARG=$@ - OIFS=$IFS - IFS='=' - - OPTION_RESULT=() - for i in ${ARG[@]} - do - OPTION_RESULT+=($i) - done - - IFS=$OIFS -} - -# parses key=value arguments -_parseArgs() -{ - for arg in "$@" - do - _parseOption ${arg} - case "${OPTION_RESULT[0]}" in - "--target") - TARGET=${OPTION_RESULT[1]} - ;; - "--device") - USE_DEVICE=true - USE_SIMULATOR=false - DISPLAY_DEVICE=true - ;; - "--emulator") - USE_DEVICE=false - USE_SIMULATOR=true - DISPLAY_EMULATOR=true - ;; - "--list") - DISPLAY_LIST=true - ;; - "--nobuild") - NO_BUILD=true - ;; - esac - done -} - -_displayDevices() -{ - echo "Available iOS Devices:" - "$CORDOVA_PATH/lib/list-devices" 2>&1 | sed 's/^/ /' -} - -_displayVirtualDevices() -{ - echo "Available iOS Virtual Devices:" - "$CORDOVA_PATH/lib/list-emulator-images" 2>&1 | sed 's/^/ /' -} - -_parseArgs "$@" - -CORDOVA_PATH=$( cd "$( dirname "$0" )" && pwd -P) -PROJECT_PATH="$(dirname "$CORDOVA_PATH")" -XCODEPROJ=$( ls "$PROJECT_PATH" | grep .xcodeproj ) -PROJECT_NAME=$(basename "$XCODEPROJ" .xcodeproj) - -SIMULATOR_APP_PATH="$PROJECT_PATH/build/emulator/$PROJECT_NAME.app" -DEVICE_APP_PATH="$PROJECT_PATH/build/device/$PROJECT_NAME.app" - -source "$CORDOVA_PATH/check_reqs" - -# check if it's a list command -if "$DISPLAY_LIST"; then - if "$DISPLAY_DEVICE" || "$DISPLAY_EMULATOR"; then - if "$DISPLAY_EMULATOR"; then - _displayVirtualDevices - fi - if "$DISPLAY_DEVICE"; then - _displayDevices - fi - exit 0 - else - _displayVirtualDevices - _displayDevices - exit 0 - fi -fi - - -# if device build found, run it first -if "$USE_DEVICE"; then - IOS_DEPLOY_MIN_VERSION="1.2.0" - IOS_DEPLOY_LOCATION=$(which ios-deploy) - if [ $? != 0 ]; then - echo -e "\033[31mError: ios-deploy was not found. Please download, build and install version $IOS_DEPLOY_MIN_VERSION or greater from https://github.com/phonegap/ios-deploy into your path. Or 'npm install -g ios-deploy' using node.js: http://nodejs.org/\033[m" 1>&2; - exit 1 - fi - - IOS_DEPLOY_VERSION=$(ios-deploy --version) - if [[ "$IOS_DEPLOY_VERSION" < "$IOS_DEPLOY_MIN_VERSION" ]]; then - echo "Cordova needs ios-deploy version $IOS_DEPLOY_MIN_VERSION or greater, you have version $IOS_DEPLOY_VERSION." 1>&2; - exit 1 - fi - - DEVICE_CONNECTED=$(ios-deploy -c) - if [ $? != 0 ]; then - echo "No device is connected, trying Simulator." 1>&2; - USE_SIMULATOR=true - else - # if we got here, we can deploy the app, then exit success - if ! [ "$NO_BUILD" = true ]; then - "$CORDOVA_PATH/build" --device || exit $? - fi - ios-deploy -d -b "$DEVICE_APP_PATH" - exit 0 - fi -fi - -if "$USE_SIMULATOR"; then - IOS_SIM_MIN_VERSION="3.0" - IOS_SIM_LOCATION=$(which ios-sim) - if [ $? != 0 ]; then - echo -e "\033[31mError: ios-sim was not found. Please download, build and install version $IOS_SIM_MIN_VERSION or greater from https://github.com/phonegap/ios-sim into your path. Or 'npm install -g ios-sim' using node.js: http://nodejs.org/\033[m" 1>&2; - exit 1 - fi - - IOS_SIM_VERSION=$(ios-sim --version) - - if [[ "$IOS_SIM_VERSION" < "$IOS_SIM_MIN_VERSION" ]]; then - echo "Cordova needs ios-sim version $IOS_SIM_MIN_VERSION or greater, you have version $IOS_SIM_VERSION." 1>&2; - exit 1 - fi - - # launch using ios-sim - if ! [ "$NO_BUILD" = true ]; then - "$CORDOVA_PATH/build" --emulator || exit $? - fi - ios-sim launch "$SIMULATOR_APP_PATH" --stderr "$CORDOVA_PATH/console.log" --stdout "$CORDOVA_PATH/console.log" --devicetypeid com.apple.CoreSimulator.SimDeviceType.$TARGET --exit -fi - +#!/usr/bin/env node + +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +var args = process.argv, + run = require('./lib/run'); + +// Handle help flag +if (['--help', '/?', '-h', 'help', '-help', '/help'].indexOf(args[2]) > -1) { + run.help(); +} else { + run.run(args).done(function() { + console.log('** RUN SUCCEEDED **'); + }, function (err) { + var errorMessage = (err && err.stack) ? err.stack : err; + console.error(errorMessage); + process.exit(2); + }); +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/985fb6e9/bin/templates/scripts/cordova/run.bat ---------------------------------------------------------------------- diff --git a/bin/templates/scripts/cordova/run.bat b/bin/templates/scripts/cordova/run.bat new file mode 100644 index 0000000..0d10321 --- /dev/null +++ b/bin/templates/scripts/cordova/run.bat @@ -0,0 +1,25 @@ +:: Licensed to the Apache Software Foundation (ASF) under one +:: or more contributor license agreements. See the NOTICE file +:: distributed with this work for additional information +:: regarding copyright ownership. The ASF licenses this file +:: to you under the Apache License, Version 2.0 (the +:: "License"); you may not use this file except in compliance +:: with the License. You may obtain a copy of the License at +:: +:: http://www.apache.org/licenses/LICENSE-2.0 +:: +:: Unless required by applicable law or agreed to in writing, +:: software distributed under the License is distributed on an +:: "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +:: KIND, either express or implied. See the License for the +:: specific language governing permissions and limitations +:: under the License +@ECHO OFF +SET script_path="%~dp0run" +IF EXIST %script_path% ( + node %script_path% %* +) ELSE ( + ECHO. + ECHO ERROR: Could not find 'run' script in 'cordova' folder, aborting...>&2 + EXIT /B 1 +) http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/985fb6e9/tests/spec/create.spec.js ---------------------------------------------------------------------- diff --git a/tests/spec/create.spec.js b/tests/spec/create.spec.js index 48d6073..11a9062 100644 --- a/tests/spec/create.spec.js +++ b/tests/spec/create.spec.js @@ -108,10 +108,14 @@ describe('create', function() { describe('end-to-end list validation', function(){ it('handles list parameter', function() { shell.cp('-f', path.join(cordova_bin, 'check_reqs'), path.join(cordova_bin, 'templates', 'scripts', 'cordova', 'check_reqs')); + shell.cp('-f', path.join(cordova_bin, 'lib', 'check_reqs.js'), path.join(cordova_bin, 'templates', 'scripts', 'cordova', 'lib', 'check_reqs.js')); + shell.cp('-f', path.join(cordova_bin, 'lib', 'versions.js'), path.join(cordova_bin, 'templates', 'scripts', 'cordova', 'lib', 'versions.js')); var command = '"' + path.join(cordova_bin, 'templates', 'scripts', 'cordova', 'run') + '" --list'; var output = shell.exec(command, {silent: true}).output; expect(output).toMatch(/Available iOS Virtual Devices/); expect(output).toMatch(/Available iOS Devices/); shell.rm('-f', path.join(cordova_bin, 'templates', 'scripts', 'cordova', 'check_reqs')); + shell.rm('-f', path.join(cordova_bin, 'templates', 'scripts', 'cordova', 'lib', 'check_reqs.js')); + shell.rm('-f', path.join(cordova_bin, 'templates', 'scripts', 'cordova', 'lib', 'versions.js')); }); }); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org For additional commands, e-mail: commits-help@cordova.apache.org