1import { Command } from '@expo/commander'; 2import path from 'path'; 3 4import { generateDynamicMacrosAsync } from '../dynamic-macros/generateDynamicMacros'; 5import { Directories } from '../expotools'; 6 7const EXPO_DIR = Directories.getExpoRepositoryRootDir(); 8const IOS_DIR = Directories.getIosDir(); 9const SUPPORTING_DIR = path.join(IOS_DIR, 'Exponent', 'Supporting'); 10const TEMPLATE_FILES_DIR = path.join(EXPO_DIR, 'template-files'); 11 12async function generateAction(options): Promise<void> { 13 const buildConstantsPath = 14 options.buildConstantsPath || path.join(SUPPORTING_DIR, 'EXBuildConstants.plist'); 15 const infoPlistPath = options.infoPlistPath || path.join(SUPPORTING_DIR, 'Info.plist'); 16 const configuration = options.configuration || process.env.CONFIGURATION; 17 18 await generateDynamicMacrosAsync({ 19 buildConstantsPath, 20 platform: 'ios', 21 infoPlistPath, 22 expoKitPath: EXPO_DIR, 23 templateFilesPath: TEMPLATE_FILES_DIR, 24 configuration, 25 skipTemplates: options.skipTemplate, 26 }); 27} 28 29function collect(val, memo) { 30 memo.push(val); 31 return memo; 32} 33 34export default (program: Command) => { 35 program 36 .command('ios-generate-dynamic-macros') 37 .option( 38 '--buildConstantsPath [string]', 39 'Path to EXBuildConstants.plist relative to `ios` folder. Optional.' 40 ) 41 .option( 42 '--infoPlistPath [string]', 43 "Path to app's Info.plist relative to `ios` folder. Optional." 44 ) 45 .option( 46 '--configuration [string]', 47 'Build configuration. Defaults to `process.env.CONFIGURATION`.' 48 ) 49 .option( 50 '--skip-template [string]', 51 'Skip generating a template (ie) GoogleService-Info.plist. Optional.', 52 collect, 53 [] 54 ) 55 .description('Generates dynamic macros for iOS client.') 56 .asyncAction(generateAction); 57}; 58