UNPKG

appc-cli-ios

Version:
114 lines (99 loc) 2.97 kB
var path = require('path'), fs = require('fs-extra'), exec = require('child_process').exec; var TYPE = require('../appc').TYPE, optsMap = require('../appc').OPTS_MAP, LANG, ID; module.exports = { type: TYPE, subtype: 'app', name: 'iOS Mobile App', fields: function(appc) { return [ ID, LANG ]; }, command: function(program, appc) { ID = appc.fields.id(); LANG = language(); program.option(ID.flags, ID.description); program.option(LANG.flags, LANG.description); }, execute: _new }; function language() { return { type: 'list', name: 'language', choices: ['Swift','Objective-C'], default: 'Swift', message: 'Which language do you want to support?', flags: '--language <language>', description: 'language to support', }; } function _new(appc, args, opts, callback) { var appDir = opts.workspace ? path.join(opts.workspace, 'app') : path.join(process.cwd(), opts.name); function generate() { if (opts.language === 'Swift') { generateProject(appc, 'swift', appDir, opts.name, opts.id, opts.author, !!opts.workspace, callback); } else { generateProject(appc, 'objc', appDir, opts.name, opts.id, opts.author, !!opts.workspace, callback); } } if (opts.author) { generate(); } else { appc.fields.findAuthor(function(err,author){ opts.author = author; generate(); }); } } /** * TODO: * * - download APS iOS SDK if not found * - register app and get APS keys * - insert APS keys below */ function generateProject(appc, lang, dir, name, id, author, isWorkspace, callback) { // generate templates var templateDir = path.join(__dirname,'..','templates','Appcelerator.framework'); //TODO: download framework var targetDir = path.join(dir, 'Appcelerator.framework'); fs.ensureDir(targetDir); // copy in the framework first appc.generate.copyTemplates(templateDir,targetDir,name,id,author,function(err){ if (err) { return callback(err); } templateDir = path.join(__dirname,'..','templates',lang); appc.generate.copyTemplates(templateDir,dir,name,id,author,function(err){ if (err) { return callback(err); } // remove these directories var dirs = [ path.join(dir,name+'.xcodeproj','xcuserdata'), path.join(dir,name+'.xcodeproj','project.xcworkspace','xcuserdata') ]; dirs.forEach(function(dn){ if (fs.existsSync(dn)) { appc.wrench.rmdirSyncRecursive(dn); } }); // replace APPC_APS_KEY var sourceFn = path.join(dir,'Source','AppDelegate.'+(lang=='swift' ? lang : 'm')); var sourceBuf = fs.readFileSync(sourceFn).toString(); sourceBuf = sourceBuf.replace('APPC_APS_KEY','APPC_APS_KEY_HERE'); //FIXME fs.writeFileSync(sourceFn, sourceBuf); // write this project to the workspace manifest callback && isWorkspace && appc.core.writeManifest(path.dirname(dir), { 'app': dir }); var p = path.join(dir, name+'.xcodeproj'); // open up the xcode project callback && exec('open "'+p+'"', callback); }); }); }