Files
appium/bin/ios-webkit-debug-proxy-launcher.js
T
2020-08-10 08:30:52 +09:00

72 lines
1.7 KiB
JavaScript

#!/usr/bin/env node
/* eslint no-console:0 */
/*
* Small tool, launching and monitoring ios-web-kit-proxy, and relaunching
* on predefined errors.
*
* Usage:
* ./bin/ios-webkit-debug-proxy-launcher.js [args]
* args: ios-webkit-debug-proxy args (they will be passed over)
*
* Example:
* ./bin/ios-webkit-debug-proxy-launcher.js -c <UDID>:27753 -d
*
* Note:
* For iOS8.1 try this first:
* brew install --HEAD ideviceinstaller
*/
'use strict';
const spawn = require('child_process').spawn;
const _ = require('lodash');
const args = process.argv.slice(2);
const RESTART_ON_MESSAGES = [
'Invalid message _rpc_applicationUpdated',
'Invalid message _rpc_applicationSentListing'];
const PROXY_CMD = 'ios_webkit_debug_proxy';
let proxy;
const handleKillProcess = function (exitCode) {
console.log('\nKilling proxy process!');
proxy.kill('SIGTERM');
process.exit((exitCode || 0));
};
const startProxy = function () {
console.log(`RUNNING: ${PROXY_CMD} ${args.join(' ')}`);
proxy = spawn(PROXY_CMD, args);
proxy.stdout.on('data', function onStdout (data) {
console.log(`stdout: ${data}`);
});
proxy.stderr.on('data', function onStderr (data) {
console.log(`stderr: ${data}`);
const restartMessage = _(RESTART_ON_MESSAGES).find(function findMessage (message) {
return ('' + data).indexOf(message) >= 0;
});
if (restartMessage) {
console.log(`Detected error message: ${restartMessage}`);
console.log('Killing proxy!');
proxy.kill('SIGTERM');
process.nextTick(startProxy);
}
});
proxy.on('close', function onClose (code) {
console.log(`Child process exited with code ${code}`);
});
};
process.on('SIGINT', handleKillProcess);
process.on('SIGTERM', handleKillProcess);
startProxy();