1082815dcSEvan Baconimport { ExpoConfig } from '@expo/config-types';
2082815dcSEvan Baconimport xcode, { PBXFile, PBXGroup, PBXNativeTarget, PBXProject, XCBuildConfiguration, XCConfigurationList, XcodeProject } from 'xcode';
3*9b26454eSBartosz Kaszubowskiexport type ProjectSectionEntry = [string, PBXProject];
4*9b26454eSBartosz Kaszubowskiexport type NativeTargetSection = Record<string, PBXNativeTarget>;
5*9b26454eSBartosz Kaszubowskiexport type NativeTargetSectionEntry = [string, PBXNativeTarget];
6*9b26454eSBartosz Kaszubowskiexport type ConfigurationLists = Record<string, XCConfigurationList>;
7*9b26454eSBartosz Kaszubowskiexport type ConfigurationListEntry = [string, XCConfigurationList];
8*9b26454eSBartosz Kaszubowskiexport type ConfigurationSectionEntry = [string, XCBuildConfiguration];
9082815dcSEvan Baconexport declare function getProjectName(projectRoot: string): string;
10082815dcSEvan Baconexport declare function resolvePathOrProject(projectRootOrProject: string | XcodeProject): XcodeProject | null;
11082815dcSEvan Baconexport declare function sanitizedName(name: string): string;
12082815dcSEvan Baconexport declare function getHackyProjectName(projectRoot: string, config: ExpoConfig): string;
13082815dcSEvan Bacon/**
14082815dcSEvan Bacon * Add a resource file (ex: `SplashScreen.storyboard`, `Images.xcassets`) to an Xcode project.
15082815dcSEvan Bacon * This is akin to creating a new code file in Xcode with `⌘+n`.
16082815dcSEvan Bacon */
17082815dcSEvan Baconexport declare function addResourceFileToGroup({ filepath, groupName, isBuildFile, project, verbose, targetUuid, }: {
18082815dcSEvan Bacon    filepath: string;
19082815dcSEvan Bacon    groupName: string;
20082815dcSEvan Bacon    isBuildFile?: boolean;
21082815dcSEvan Bacon    project: XcodeProject;
22082815dcSEvan Bacon    verbose?: boolean;
23082815dcSEvan Bacon    targetUuid?: string;
24082815dcSEvan Bacon}): XcodeProject;
25082815dcSEvan Bacon/**
26082815dcSEvan Bacon * Add a build source file (ex: `AppDelegate.m`, `ViewController.swift`) to an Xcode project.
27082815dcSEvan Bacon * This is akin to creating a new code file in Xcode with `⌘+n`.
28082815dcSEvan Bacon */
29082815dcSEvan Baconexport declare function addBuildSourceFileToGroup({ filepath, groupName, project, verbose, targetUuid, }: {
30082815dcSEvan Bacon    filepath: string;
31082815dcSEvan Bacon    groupName: string;
32082815dcSEvan Bacon    project: XcodeProject;
33082815dcSEvan Bacon    verbose?: boolean;
34082815dcSEvan Bacon    targetUuid?: string;
35082815dcSEvan Bacon}): XcodeProject;
36082815dcSEvan Baconexport declare function addFileToGroupAndLink({ filepath, groupName, project, verbose, addFileToProject, targetUuid, }: {
37082815dcSEvan Bacon    filepath: string;
38082815dcSEvan Bacon    groupName: string;
39082815dcSEvan Bacon    project: XcodeProject;
40082815dcSEvan Bacon    verbose?: boolean;
41082815dcSEvan Bacon    targetUuid?: string;
42082815dcSEvan Bacon    addFileToProject: (props: {
43082815dcSEvan Bacon        file: PBXFile;
44082815dcSEvan Bacon        project: XcodeProject;
45082815dcSEvan Bacon    }) => void;
46082815dcSEvan Bacon}): XcodeProject;
47082815dcSEvan Baconexport declare function getApplicationNativeTarget({ project, projectName, }: {
48082815dcSEvan Bacon    project: XcodeProject;
49082815dcSEvan Bacon    projectName: string;
50082815dcSEvan Bacon}): {
51082815dcSEvan Bacon    uuid: string;
52082815dcSEvan Bacon    target: xcode.PBXNativeTarget;
53082815dcSEvan Bacon};
54082815dcSEvan Bacon/**
55082815dcSEvan Bacon * Add a framework to the default app native target.
56082815dcSEvan Bacon *
57082815dcSEvan Bacon * @param projectName Name of the PBX project.
58082815dcSEvan Bacon * @param framework String ending in `.framework`, i.e. `StoreKit.framework`
59082815dcSEvan Bacon */
60082815dcSEvan Baconexport declare function addFramework({ project, projectName, framework, }: {
61082815dcSEvan Bacon    project: XcodeProject;
62082815dcSEvan Bacon    projectName: string;
63082815dcSEvan Bacon    framework: string;
64082815dcSEvan Bacon}): unknown;
65082815dcSEvan Baconexport declare function ensureGroupRecursively(project: XcodeProject, filepath: string): PBXGroup | null;
66082815dcSEvan Bacon/**
67082815dcSEvan Bacon * Get the pbxproj for the given path
68082815dcSEvan Bacon */
69082815dcSEvan Baconexport declare function getPbxproj(projectRoot: string): XcodeProject;
70082815dcSEvan Bacon/**
71082815dcSEvan Bacon * Get the productName for a project, if the name is using a variable `$(TARGET_NAME)`, then attempt to get the value of that variable.
72082815dcSEvan Bacon *
73082815dcSEvan Bacon * @param project
74082815dcSEvan Bacon */
75082815dcSEvan Baconexport declare function getProductName(project: XcodeProject): string;
76082815dcSEvan Baconexport declare function getProjectSection(project: XcodeProject): Record<string, xcode.PBXProject> & Record<string, string>;
77082815dcSEvan Baconexport declare function getXCConfigurationListEntries(project: XcodeProject): ConfigurationListEntry[];
78082815dcSEvan Baconexport declare function getBuildConfigurationsForListId(project: XcodeProject, configurationListId: string): ConfigurationSectionEntry[];
79082815dcSEvan Baconexport declare function getBuildConfigurationForListIdAndName(project: XcodeProject, { configurationListId, buildConfiguration, }: {
80082815dcSEvan Bacon    configurationListId: string;
81082815dcSEvan Bacon    buildConfiguration: string;
82082815dcSEvan Bacon}): ConfigurationSectionEntry;
83082815dcSEvan Baconexport declare function isBuildConfig([, sectionItem]: ConfigurationSectionEntry): boolean;
84082815dcSEvan Baconexport declare function isNotTestHost([, sectionItem]: ConfigurationSectionEntry): boolean;
85082815dcSEvan Baconexport declare function isNotComment([key]: ConfigurationSectionEntry | ProjectSectionEntry | ConfigurationListEntry | NativeTargetSectionEntry): boolean;
86082815dcSEvan Baconexport declare function unquote(value: string): string;
87