function parseOptions()

in lib/build.js [101:147]


function parseOptions (options) {
    options = options || {};
    options.argv = nopt({
        codeSignIdentity: String,
        developmentTeam: String,
        packageType: String,
        provisioningProfile: String,
        automaticProvisioning: Boolean,
        authenticationKeyPath: String,
        authenticationKeyID: String,
        authenticationKeyIssuerID: String,
        buildFlag: [String, Array],
        iCloudContainerEnvironment: String
    }, {}, options.argv, 0);

    if (options.debug && options.release) {
        throw new CordovaError('Cannot specify "debug" and "release" options together.');
    }

    if (options.device && options.emulator) {
        throw new CordovaError('Cannot specify "device" and "emulator" options together.');
    }

    buildConfigProperties.forEach(key => {
        options[key] = options.argv[key] || options[key];
    });

    if (options.buildConfig) {
        if (!fs.existsSync(options.buildConfig)) {
            throw new CordovaError(`Build config file does not exist: ${options.buildConfig}`);
        }
        events.emit('log', `Reading build config file: ${path.resolve(options.buildConfig)}`);
        const contents = fs.readFileSync(options.buildConfig, 'utf-8');
        const buildConfig = JSON.parse(contents.replace(/^\ufeff/, '')); // Remove BOM
        if (buildConfig.ios) {
            const buildType = options.release ? 'release' : 'debug';
            const config = buildConfig.ios[buildType];
            if (config) {
                buildConfigProperties.forEach(key => {
                    options[key] = options[key] || config[key];
                });
            }
        }
    }

    return options;
}