Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
if (thisSimHandle && thisSimHandle.simctl) {
appc.subprocess.run(thisSimHandle.simctl, ['erase', thisSimHandle.udid], function () {
logger.tio2('Resetting simulator');
});
};
setTimeout(function () {
next();
}, 1000);
} catch (ex) {
next(new Error('Results are not valid JSON'));
}
} else if (inTiMochaResult && line) {
tiMochaResults.push(line);
}
};
emitter = ioslib.simulator.launch(null, {
appPath: this.appDir,
hide: true,
logFilename: this.tiapp.guid + '.log'
}, function(msg, simHandle) {
thisSimHandle = simHandle;
})
.on('log-error', function (msg, simHandle) {
// system log error messages
logger.error('[' + simHandle.appName + '] ' + msg);
})
.on('log-debug', function (msg) {
logger['tio2-debug']('[ioslib] '.magenta + msg.replace(/(?:(\[[^\]]+\]) )*/, function (m) { return m.magenta; }));
})
.on('log-file', watch)
.on('app-quit', function (code) {
if (code) {
let simStarted = false,
lastLogger = 'debug';
const startLogTxt = __('Start simulator log'),
endLogTxt = __('End simulator log'),
levels = logger.getLevels(),
trimRE = new RegExp('^.*' + builder.tiapp.name + '\\[[^\\]]+\\]\\s*', 'g'),
logLevelRE = new RegExp('^(\u001b\\[\\d+m)?\\[?(' + levels.join('|') + '|log|timestamp)\\]?\\s*(\u001b\\[\\d+m)?(.*)', 'i');
function endLog() {
if (simStarted) {
logger.log(('-- ' + endLogTxt + ' ' + (new Array(75 - endLogTxt.length)).join('-')).grey + '\n');
simStarted = false;
}
}
ioslib.simulator
.launch(builder.simHandle, {
appPath: builder.xcodeAppDir,
focus: cli.argv['sim-focus'],
iosVersion: builder.iosSdkVersion,
killIfRunning: false, // it will only kill the simulator if the device udid is different
launchBundleId: cli.argv['launch-bundle-id'],
launchWatchApp: builder.hasWatchApp && cli.argv['launch-watch-app'],
launchWatchAppOnly: builder.hasWatchApp && cli.argv['launch-watch-app-only'],
logFilename: builder.tiapp.guid + '.log',
watchHandleOrUDID: builder.watchSimHandle,
watchAppName: cli.argv['watch-app-name']
})
.on('log-file', function (line) {
// Titanium app log messages
if (!simStarted) {
simStarted = true;
return function (finished) {
ioslib.detect({
// env
xcodeSelect: config.get('osx.executables.xcodeSelect'),
security: config.get('osx.executables.security'),
// provisioning
profileDir: config.get('ios.profileDir'),
// xcode
searchPath: config.get('paths.xcode'),
minIosVersion: iosPackageJson.minIosVersion,
supportedVersions: iosPackageJson.vendorDependencies.xcode
}, function (err, iosInfo) {
this.iosInfo = iosInfo;
this.xcodeEnv = this.iosInfo.selectedXcode;
if (!this.xcodeEnv) {
// this should never happen
logger.error(__('Unable to find suitable Xcode install') + '\n');
return function (done) {
ioslib.detect({
// env
xcodeSelect: config.get('osx.executables.xcodeSelect'),
security: config.get('osx.executables.security'),
// provisioning
profileDir: config.get('ios.profileDir'),
// xcode
searchPath: config.get('paths.xcode'),
minIosVersion: iosPackageJson.minIosVersion,
supportedVersions: iosPackageJson.vendorDependencies.xcode
}, function (err, iosInfo) {
this.iosInfo = iosInfo;
// add itunes sync
iosInfo.devices.push({
udid: 'itunes',
name: 'iTunes Sync'
exports.detect = function (types, config, next) {
ioslib.detect({
// env
xcodeSelect: config.get('osx.executables.xcodeSelect'),
security: config.get('osx.executables.security'),
// provisioning
profileDir: config.get('ios.profileDir'),
// xcode
searchPath: config.get('paths.xcode'),
minIosVersion: iosPackageJson.minIosVersion,
minWatchosVersion: iosPackageJson.minWatchosVersion,
supportedVersions: iosPackageJson.vendorDependencies.xcode
}, function (err, results) {
if (err) {
return next(err);
}
results.devices.unshift({
})
.on('exit', function () {
// no need to stick around, exit
})
.on('error', function (err) {
logger.error(err.message || err.toString());
logger.log();
});
} else if (target === 'device') {
// TODO: device
var appName = this.tiapp.name + '.app',
appPath = path.join(this.buildDir, 'build', 'iphone', 'build', 'Debug-iphoneos', appName);
emitter = ioslib.device.install(this.deviceInfo.udid, appPath, this.tiapp.id)
.on('installed', function (line) {
logger['tio2-warn'](appName + ' installed, but cannot be launched automatically!!!');
})
.on('app-started', function (line) {
logger['tio2-debug']('-- app-started');
})
.on('log', function (line) {
line = line.replace(logLevelRegExp, '');
if (line === self.tiTestStartMarker) {
inTiMochaResult = true;
} else if (inTiMochaResult && line === self.tiTestStopMarker) {
emitter.removeListener('log', watch);
emitter.removeListener('logFile', watch);
try {
self.results = tiMochaResults.length ? JSON.parse(tiMochaResults.join('\n').trim()) : {};
next();
function (cb) {
// add iOS args
if (this.platform !== 'ios') { return cb(); }
this.iosVersion && args.push('--ios-version', this.iosVersion);
if (this.target !== 'device') {
return cb();
}
// find us a device
ioslib.device.detect(function (err, deviceResults) {
if (!deviceResults.devices.length) {
// no devices connected
return done(new Error('No iOS devices connected'));
}
ioslib.certs.detect(function (err, certResults) {
var certs = [];
Object.keys(certResults.certs.keychains).forEach(function (keychain) {
var types = certResults.certs.keychains[keychain];
Object.keys(types).forEach(function (type) {
certs = certs.concat(types[type]);
});
});
if (!certs.length) {
return cb(new Error('No iOS certificates'));
ioslib.device.detect(function (err, deviceResults) {
if (!deviceResults.devices.length) {
// no devices connected
return done(new Error('No iOS devices connected'));
}
ioslib.certs.detect(function (err, certResults) {
var certs = [];
Object.keys(certResults.certs.keychains).forEach(function (keychain) {
var types = certResults.certs.keychains[keychain];
Object.keys(types).forEach(function (type) {
certs = certs.concat(types[type]);
});
});
if (!certs.length) {
return cb(new Error('No iOS certificates'));
}
// find us a provisioning profile
ioslib.provisioning.find({
appId: self.tiapp.id,
certs: certs,
ioslib.certs.detect(function (err, certResults) {
var certs = [];
Object.keys(certResults.certs.keychains).forEach(function (keychain) {
var types = certResults.certs.keychains[keychain];
Object.keys(types).forEach(function (type) {
certs = certs.concat(types[type]);
});
});
if (!certs.length) {
return cb(new Error('No iOS certificates'));
}
// find us a provisioning profile
ioslib.provisioning.find({
appId: self.tiapp.id,
certs: certs,
devicesUDIDs: deviceResults.devices.map(function (device) { return device.udid; })
}, function (err, profiles) {
if (err || !profiles.length) {
return cb(new Error('No provisioning profiles found'));
}
var profile = profiles.shift(),
deviceUDID = deviceResults.devices.filter(function (device) { return profile.devices.indexOf(device.udid) !== -1; }).shift().udid,
certName = certs.filter(function (cert) {
var prefix = cert.pem.replace(/^-----BEGIN CERTIFICATE-----\n/, '').substring(0, 60);
return profile.certs.some(function (pc) {
return pc.indexOf(prefix) === 0;
});
}).shift().name;
.on('app-quit', function (code) {
if (code) {
if (code instanceof ioslib.simulator.SimulatorCrash) {
logger.error(__n('Detected crash:', 'Detected multiple crashes:', code.crashFiles.length));
code.crashFiles.forEach(function (f) {
logger.error(' ' + f);
});
logger.error(__n('Note: this crash may or may not be related to running your app.', 'Note: these crashes may or may not be related to running your app.', code.crashFiles.length) + '\n');
} else {
logger.error(__('An error occurred running the iOS Simulator (exit code %s)', code));
}
}
endLog();
process.exit(0);
})
.on('exit', function () {