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