diff --git a/hooks/windows/check-arch.js b/hooks/windows/check-arch.js new file mode 100644 index 00000000..3ae6660a --- /dev/null +++ b/hooks/windows/check-arch.js @@ -0,0 +1,52 @@ +module.exports = function(ctx) { + if (ctx.opts && ctx.opts.platforms && ctx.opts.platforms.indexOf('windows') > -1 + && ctx.opts.options) { + var path = require('path'); + var shell = ctx.requireCordovaModule('shelljs'); + var nopt = ctx.requireCordovaModule('nopt'); + + // parse and validate args + var args = nopt({ + 'archs': [String], + 'appx': String, + 'phone': Boolean, + 'win': Boolean, + 'bundle': Boolean, + 'packageCertificateKeyFile': String, + 'packageThumbprint': String, + 'publisherId': String, + 'buildConfig': String + }, {}, ctx.opts.options.argv, 0); + + // Check if --appx flag is passed so that we have a project build version override: + var isWin10 = args.appx && args.appx.toLowerCase() === 'uap'; + + // Else check "windows-target-version" preference: + if (!isWin10) { + var configXml = shell.ls(path.join(ctx.opts.projectRoot, 'config.xml'))[0]; + + var reTargetVersion = //i; + var targetVersion = shell.grep(reTargetVersion, configXml); + + var result = reTargetVersion.exec(targetVersion); + if (result !== null) { + var match = result[1]; + isWin10 = parseInt(match.split('.'), 10) > 8; + } + } + + // Non-AnyCPU arch is required for Windows 10 (UWP) projects only: + if (isWin10) { + var rawArchs = ctx.opts.options.archs || args.archs; + var archs = rawArchs ? rawArchs.split(' ') : []; + + // Avoid "anycpu" arch: + if (archs.length === 0 || archs.some(function (item) { + return item.toLowerCase() === 'anycpu'; + })) { + throw new Error('You must specify an architecture to include the proper ZXing library version.' + + '\nUse \'cordova run windows -- --arch="x64"\' or \'cordova run windows -- --arch="arm" --phone --device\' for example.'); + } + } + } +} diff --git a/plugin.xml b/plugin.xml index ffc0f56a..704089ce 100644 --- a/plugin.xml +++ b/plugin.xml @@ -112,6 +112,8 @@ + +