1082815dcSEvan Baconimport { XcodeProject } from 'xcode'; 2082815dcSEvan Bacon 3082815dcSEvan Baconimport { resolvePathOrProject } from './Xcodeproj'; 4*8a424bebSJames Ideimport { getXCBuildConfigurationFromPbxproj } from '../Target'; 5082815dcSEvan Bacon 6082815dcSEvan Bacon/** 7082815dcSEvan Bacon * Find the Info.plist path linked to a specific build configuration. 8082815dcSEvan Bacon * 9082815dcSEvan Bacon * @param projectRoot 10082815dcSEvan Bacon * @param param1 11082815dcSEvan Bacon * @returns 12082815dcSEvan Bacon */ 13082815dcSEvan Baconexport function getInfoPlistPathFromPbxproj( 14082815dcSEvan Bacon projectRootOrProject: string | XcodeProject, 15082815dcSEvan Bacon { 16082815dcSEvan Bacon targetName, 17082815dcSEvan Bacon buildConfiguration = 'Release', 18082815dcSEvan Bacon }: { targetName?: string; buildConfiguration?: string | 'Release' | 'Debug' } = {} 19082815dcSEvan Bacon): string | null { 20082815dcSEvan Bacon const project = resolvePathOrProject(projectRootOrProject); 21082815dcSEvan Bacon if (!project) { 22082815dcSEvan Bacon return null; 23082815dcSEvan Bacon } 24082815dcSEvan Bacon 25082815dcSEvan Bacon const xcBuildConfiguration = getXCBuildConfigurationFromPbxproj(project, { 26082815dcSEvan Bacon targetName, 27082815dcSEvan Bacon buildConfiguration, 28082815dcSEvan Bacon }); 29082815dcSEvan Bacon if (!xcBuildConfiguration) { 30082815dcSEvan Bacon return null; 31082815dcSEvan Bacon } 32082815dcSEvan Bacon // The `INFOPLIST_FILE` is relative to the project folder, ex: app/Info.plist. 33082815dcSEvan Bacon return sanitizeInfoPlistBuildProperty(xcBuildConfiguration.buildSettings.INFOPLIST_FILE); 34082815dcSEvan Bacon} 35082815dcSEvan Bacon 36082815dcSEvan Baconfunction sanitizeInfoPlistBuildProperty(infoPlist?: string): string | null { 37082815dcSEvan Bacon return infoPlist?.replace(/"/g, '').replace('$(SRCROOT)', '') ?? null; 38082815dcSEvan Bacon} 39