1*082815dcSEvan Baconinterface pbxFile {
2*082815dcSEvan Bacon  basename: string;
3*082815dcSEvan Bacon  lastKnownFileType?: string;
4*082815dcSEvan Bacon  group?: string;
5*082815dcSEvan Bacon  path?: string;
6*082815dcSEvan Bacon  fileEncoding?: number;
7*082815dcSEvan Bacon  defaultEncoding?: number;
8*082815dcSEvan Bacon  sourceTree: string;
9*082815dcSEvan Bacon  includeInIndex?: number;
10*082815dcSEvan Bacon  explicitFileType?: unknown;
11*082815dcSEvan Bacon  settings?: object;
12*082815dcSEvan Bacon  uuid?: string;
13*082815dcSEvan Bacon  fileRef: string;
14*082815dcSEvan Bacon  target?: string;
15*082815dcSEvan Bacon}
16*082815dcSEvan Bacon
17*082815dcSEvan Bacondeclare module 'xcode' {
18*082815dcSEvan Bacon  /**
19*082815dcSEvan Bacon   * UUID that is a key to each fragment of PBXProject.
20*082815dcSEvan Bacon   */
21*082815dcSEvan Bacon  type UUID = string;
22*082815dcSEvan Bacon
23*082815dcSEvan Bacon  /**
24*082815dcSEvan Bacon   * if has following format `${UUID}_comment`
25*082815dcSEvan Bacon   */
26*082815dcSEvan Bacon  type UUIDComment = string;
27*082815dcSEvan Bacon
28*082815dcSEvan Bacon  type XCObjectType =
29*082815dcSEvan Bacon    | 'PBXBuildFile'
30*082815dcSEvan Bacon    | 'PBXFileReference'
31*082815dcSEvan Bacon    | 'PBXFrameworksBuildPhase'
32*082815dcSEvan Bacon    | 'PBXGroup'
33*082815dcSEvan Bacon    | 'PBXNativeTarget'
34*082815dcSEvan Bacon    | 'PBXProject'
35*082815dcSEvan Bacon    | 'PBXResourcesBuildPhase'
36*082815dcSEvan Bacon    | 'PBXShellScriptBuildPhase'
37*082815dcSEvan Bacon    | 'PBXSourcesBuildPhase'
38*082815dcSEvan Bacon    | 'PBXVariantGroup'
39*082815dcSEvan Bacon    | 'PBXTargetDependency'
40*082815dcSEvan Bacon    | 'XCBuildConfiguration'
41*082815dcSEvan Bacon    | 'XCConfigurationList';
42*082815dcSEvan Bacon
43*082815dcSEvan Bacon  type PBXFile = pbxFile;
44*082815dcSEvan Bacon
45*082815dcSEvan Bacon  interface PBXProject {
46*082815dcSEvan Bacon    isa: 'PBXProject';
47*082815dcSEvan Bacon    attributes: {
48*082815dcSEvan Bacon      LastUpgradeCheck: number;
49*082815dcSEvan Bacon      TargetAttributes: Record<
50*082815dcSEvan Bacon        UUID,
51*082815dcSEvan Bacon        {
52*082815dcSEvan Bacon          CreatedOnToolsVersion?: string;
53*082815dcSEvan Bacon          TestTargetID?: UUID;
54*082815dcSEvan Bacon          LastSwiftMigration?: number;
55*082815dcSEvan Bacon          ProvisioningStyle?: string;
56*082815dcSEvan Bacon        } & Record<string, undefined | number | string>
57*082815dcSEvan Bacon      >;
58*082815dcSEvan Bacon    };
59*082815dcSEvan Bacon    buildConfigurationList: UUID;
60*082815dcSEvan Bacon    buildConfigurationList_comment: string;
61*082815dcSEvan Bacon    compatibilityVersion: string;
62*082815dcSEvan Bacon    developmentRegion: string;
63*082815dcSEvan Bacon    hasScannedForEncodings: number;
64*082815dcSEvan Bacon    knownRegions: string[];
65*082815dcSEvan Bacon    mainGroup: UUID;
66*082815dcSEvan Bacon    productRefGroup: UUID;
67*082815dcSEvan Bacon    productRefGroup_comment: string;
68*082815dcSEvan Bacon    projectDirPath: string;
69*082815dcSEvan Bacon    projectRoot: string;
70*082815dcSEvan Bacon    targets: {
71*082815dcSEvan Bacon      value: UUID;
72*082815dcSEvan Bacon      comment: string;
73*082815dcSEvan Bacon    }[];
74*082815dcSEvan Bacon  }
75*082815dcSEvan Bacon
76*082815dcSEvan Bacon  interface PBXNativeTarget {
77*082815dcSEvan Bacon    isa: 'PBXNativeTarget';
78*082815dcSEvan Bacon    buildConfigurationList: UUID;
79*082815dcSEvan Bacon    buildConfigurationList_comment: string;
80*082815dcSEvan Bacon    buildPhases: {
81*082815dcSEvan Bacon      value: UUID;
82*082815dcSEvan Bacon      comment: string;
83*082815dcSEvan Bacon    }[];
84*082815dcSEvan Bacon    buildRules: [];
85*082815dcSEvan Bacon    dependencies: {
86*082815dcSEvan Bacon      value: UUID;
87*082815dcSEvan Bacon      comment: string;
88*082815dcSEvan Bacon    }[];
89*082815dcSEvan Bacon    name: string;
90*082815dcSEvan Bacon    productName: string;
91*082815dcSEvan Bacon    productReference: UUID;
92*082815dcSEvan Bacon    productReference_comment: string;
93*082815dcSEvan Bacon    productType: string;
94*082815dcSEvan Bacon  }
95*082815dcSEvan Bacon
96*082815dcSEvan Bacon  interface PBXBuildFile {
97*082815dcSEvan Bacon    isa: 'PBXBuildFile';
98*082815dcSEvan Bacon    fileRef: UUID;
99*082815dcSEvan Bacon    // "AppDelegate.m"
100*082815dcSEvan Bacon    fileRef_comment: string;
101*082815dcSEvan Bacon  }
102*082815dcSEvan Bacon
103*082815dcSEvan Bacon  interface PBXTargetDependency {
104*082815dcSEvan Bacon    isa: 'PBXTargetDependency';
105*082815dcSEvan Bacon    target: UUID;
106*082815dcSEvan Bacon    targetProxy: UUID;
107*082815dcSEvan Bacon  }
108*082815dcSEvan Bacon
109*082815dcSEvan Bacon  interface XCConfigurationList {
110*082815dcSEvan Bacon    isa: 'XCConfigurationList';
111*082815dcSEvan Bacon    buildConfigurations: {
112*082815dcSEvan Bacon      value: UUID;
113*082815dcSEvan Bacon      comment: string | 'Release' | 'Debug';
114*082815dcSEvan Bacon    }[];
115*082815dcSEvan Bacon    defaultConfigurationIsVisible: number;
116*082815dcSEvan Bacon    defaultConfigurationName: string;
117*082815dcSEvan Bacon  }
118*082815dcSEvan Bacon
119*082815dcSEvan Bacon  interface XCBuildConfiguration {
120*082815dcSEvan Bacon    isa: 'XCBuildConfiguration';
121*082815dcSEvan Bacon    baseConfigurationReference: UUID;
122*082815dcSEvan Bacon    baseConfigurationReference_comment: string;
123*082815dcSEvan Bacon    buildSettings: Record<string, string | undefined | number | unknown[]> & {
124*082815dcSEvan Bacon      // '"$(TARGET_NAME)"',
125*082815dcSEvan Bacon      PRODUCT_NAME?: string;
126*082815dcSEvan Bacon      // '"io.expo.demo.$(PRODUCT_NAME:rfc1034identifier)"',
127*082815dcSEvan Bacon      PRODUCT_BUNDLE_IDENTIFIER?: string;
128*082815dcSEvan Bacon      PROVISIONING_PROFILE_SPECIFIER?: string;
129*082815dcSEvan Bacon      // '"$(BUILT_PRODUCTS_DIR)/rni.app/rni"'
130*082815dcSEvan Bacon      TEST_HOST?: any;
131*082815dcSEvan Bacon      DEVELOPMENT_TEAM?: string;
132*082815dcSEvan Bacon      CODE_SIGN_IDENTITY?: string;
133*082815dcSEvan Bacon      CODE_SIGN_STYLE?: string;
134*082815dcSEvan Bacon      // '"$(TEST_HOST)"'
135*082815dcSEvan Bacon      BUNDLE_LOADER?: string;
136*082815dcSEvan Bacon      GCC_PREPROCESSOR_DEFINITIONS?: unknown[];
137*082815dcSEvan Bacon      INFOPLIST_FILE?: string;
138*082815dcSEvan Bacon      IPHONEOS_DEPLOYMENT_TARGET?: string;
139*082815dcSEvan Bacon      LD_RUNPATH_SEARCH_PATHS?: string;
140*082815dcSEvan Bacon      OTHER_LDFLAGS?: unknown[];
141*082815dcSEvan Bacon      ASSETCATALOG_COMPILER_APPICON_NAME?: string;
142*082815dcSEvan Bacon      ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME?: string;
143*082815dcSEvan Bacon      CLANG_ANALYZER_NONNULL?: string;
144*082815dcSEvan Bacon      CLANG_WARN_DOCUMENTATION_COMMENTS?: string;
145*082815dcSEvan Bacon      CLANG_WARN_INFINITE_RECURSION?: string;
146*082815dcSEvan Bacon      CLANG_WARN_SUSPICIOUS_MOVE?: string;
147*082815dcSEvan Bacon      DEBUG_INFORMATION_FORMAT?: string;
148*082815dcSEvan Bacon      ENABLE_TESTABILITY?: string;
149*082815dcSEvan Bacon      GCC_NO_COMMON_BLOCKS?: string;
150*082815dcSEvan Bacon      // 'appletvos'
151*082815dcSEvan Bacon      SDKROOT?: string;
152*082815dcSEvan Bacon      TARGETED_DEVICE_FAMILY?: number | string;
153*082815dcSEvan Bacon      // '10.0'
154*082815dcSEvan Bacon      TVOS_DEPLOYMENT_TARGET?: string;
155*082815dcSEvan Bacon    };
156*082815dcSEvan Bacon    name: string;
157*082815dcSEvan Bacon  }
158*082815dcSEvan Bacon
159*082815dcSEvan Bacon  type ProductType =
160*082815dcSEvan Bacon    | 'com.apple.product-type.application'
161*082815dcSEvan Bacon    | 'com.apple.product-type.app-extension'
162*082815dcSEvan Bacon    | 'com.apple.product-type.bundle'
163*082815dcSEvan Bacon    | 'com.apple.product-type.tool'
164*082815dcSEvan Bacon    | 'com.apple.product-type.library.dynamic'
165*082815dcSEvan Bacon    | 'com.apple.product-type.framework'
166*082815dcSEvan Bacon    | 'com.apple.product-type.library.static'
167*082815dcSEvan Bacon    | 'com.apple.product-type.bundle.unit-test'
168*082815dcSEvan Bacon    | 'com.apple.product-type.application.watchapp'
169*082815dcSEvan Bacon    | 'com.apple.product-type.application.watchapp2'
170*082815dcSEvan Bacon    | 'com.apple.product-type.watchkit-extension'
171*082815dcSEvan Bacon    | 'com.apple.product-type.watchkit2-extension';
172*082815dcSEvan Bacon
173*082815dcSEvan Bacon  interface PBXGroup {
174*082815dcSEvan Bacon    isa: 'PBXGroup';
175*082815dcSEvan Bacon    children: {
176*082815dcSEvan Bacon      value: UUID;
177*082815dcSEvan Bacon      comment?: string;
178*082815dcSEvan Bacon    }[];
179*082815dcSEvan Bacon    name: string;
180*082815dcSEvan Bacon    path?: string;
181*082815dcSEvan Bacon    sourceTree: '"<group>"' | unknown;
182*082815dcSEvan Bacon  }
183*082815dcSEvan Bacon
184*082815dcSEvan Bacon  export class XcodeProject {
185*082815dcSEvan Bacon    constructor(pbxprojPath: string);
186*082815dcSEvan Bacon
187*082815dcSEvan Bacon    /**
188*082815dcSEvan Bacon     * `.pbxproj` file path.
189*082815dcSEvan Bacon     */
190*082815dcSEvan Bacon    filepath: string;
191*082815dcSEvan Bacon
192*082815dcSEvan Bacon    // Ex: '$(TARGET_NAME)'
193*082815dcSEvan Bacon    productName: string;
194*082815dcSEvan Bacon
195*082815dcSEvan Bacon    hash: {
196*082815dcSEvan Bacon      headComment: string;
197*082815dcSEvan Bacon      project: {
198*082815dcSEvan Bacon        archiveVersion: number;
199*082815dcSEvan Bacon        objectVersion: number;
200*082815dcSEvan Bacon        objects: {
201*082815dcSEvan Bacon          [T in XCObjectType]: Record<
202*082815dcSEvan Bacon            string,
203*082815dcSEvan Bacon            {
204*082815dcSEvan Bacon              isa: T;
205*082815dcSEvan Bacon              name: string;
206*082815dcSEvan Bacon              [key: string]: any;
207*082815dcSEvan Bacon            }
208*082815dcSEvan Bacon          >;
209*082815dcSEvan Bacon        };
210*082815dcSEvan Bacon        rootObject: string;
211*082815dcSEvan Bacon        rootObject_comment: string;
212*082815dcSEvan Bacon      };
213*082815dcSEvan Bacon    };
214*082815dcSEvan Bacon
215*082815dcSEvan Bacon    // ------------------------------------------------------------------------
216*082815dcSEvan Bacon    //
217*082815dcSEvan Bacon    // `.pbxproj` related operation - starting & ending point.
218*082815dcSEvan Bacon    //
219*082815dcSEvan Bacon    // ------------------------------------------------------------------------
220*082815dcSEvan Bacon
221*082815dcSEvan Bacon    /**
222*082815dcSEvan Bacon     * First step to be executed while working with `.pbxproj` file.
223*082815dcSEvan Bacon     */
224*082815dcSEvan Bacon    parse(callback?: (err: Error | null, results?: string) => void): this;
225*082815dcSEvan Bacon
226*082815dcSEvan Bacon    parseSync(): void;
227*082815dcSEvan Bacon
228*082815dcSEvan Bacon    /**
229*082815dcSEvan Bacon     * @returns Content of .pbxproj file.
230*082815dcSEvan Bacon     */
231*082815dcSEvan Bacon    writeSync(options?: { omitEmptyValues?: boolean }): string;
232*082815dcSEvan Bacon
233*082815dcSEvan Bacon    allUuids(): UUID[];
234*082815dcSEvan Bacon    generateUuid(): UUID;
235*082815dcSEvan Bacon
236*082815dcSEvan Bacon    addPluginFile(path: unknown, opt: unknown): unknown;
237*082815dcSEvan Bacon    removePluginFile(path: unknown, opt: unknown): unknown;
238*082815dcSEvan Bacon    addProductFile(targetPath: unknown, opt: unknown): unknown;
239*082815dcSEvan Bacon    removeProductFile(path: unknown, opt: unknown): unknown;
240*082815dcSEvan Bacon    addSourceFile(path: string, opt: unknown, group: string): unknown;
241*082815dcSEvan Bacon    removeSourceFile(path: string, opt: unknown, group: string): unknown;
242*082815dcSEvan Bacon    addHeaderFile(path: string, opt: unknown, group: string): unknown;
243*082815dcSEvan Bacon    removeHeaderFile(path: string, opt: unknown, group: string): unknown;
244*082815dcSEvan Bacon    addResourceFile(path: string, opt: unknown, group: string): unknown;
245*082815dcSEvan Bacon    removeResourceFile(path: string, opt: unknown, group: string): unknown;
246*082815dcSEvan Bacon    addFramework(fpath: string, opt: unknown): unknown;
247*082815dcSEvan Bacon    removeFramework(fpath: unknown, opt: unknown): unknown;
248*082815dcSEvan Bacon    addCopyfile(fpath: unknown, opt: unknown): unknown;
249*082815dcSEvan Bacon    pbxCopyfilesBuildPhaseObj(target: unknown): unknown;
250*082815dcSEvan Bacon    addToPbxCopyfilesBuildPhase(file: unknown): void;
251*082815dcSEvan Bacon    removeCopyfile(fpath: unknown, opt: unknown): unknown;
252*082815dcSEvan Bacon    removeFromPbxCopyfilesBuildPhase(file: unknown): void;
253*082815dcSEvan Bacon    addStaticLibrary(path: unknown, opt: unknown): unknown;
254*082815dcSEvan Bacon    /**
255*082815dcSEvan Bacon     * Adds to `PBXBuildFile` section
256*082815dcSEvan Bacon     */
257*082815dcSEvan Bacon    addToPbxBuildFileSection(file: PBXFile): void;
258*082815dcSEvan Bacon    removeFromPbxBuildFileSection(file: unknown): void;
259*082815dcSEvan Bacon    addPbxGroup(
260*082815dcSEvan Bacon      filePathsArray: string[],
261*082815dcSEvan Bacon      name: string,
262*082815dcSEvan Bacon      path: string,
263*082815dcSEvan Bacon      sourceTree?: string
264*082815dcSEvan Bacon    ): { uuid: UUID; pbxGroup: PBXGroup };
265*082815dcSEvan Bacon    removePbxGroup(groupName: unknown): void;
266*082815dcSEvan Bacon    addToPbxProjectSection(target: unknown): void;
267*082815dcSEvan Bacon    addToPbxNativeTargetSection(target: unknown): void;
268*082815dcSEvan Bacon    addToPbxFileReferenceSection(file: any): void;
269*082815dcSEvan Bacon    removeFromPbxFileReferenceSection(file: unknown): unknown;
270*082815dcSEvan Bacon    addToXcVersionGroupSection(file: unknown): void;
271*082815dcSEvan Bacon    addToPluginsPbxGroup(file: unknown): void;
272*082815dcSEvan Bacon    removeFromPluginsPbxGroup(file: unknown): unknown;
273*082815dcSEvan Bacon    addToResourcesPbxGroup(file: unknown): void;
274*082815dcSEvan Bacon    removeFromResourcesPbxGroup(file: unknown): unknown;
275*082815dcSEvan Bacon    addToFrameworksPbxGroup(file: unknown): void;
276*082815dcSEvan Bacon    removeFromFrameworksPbxGroup(file: unknown): unknown;
277*082815dcSEvan Bacon    addToPbxEmbedFrameworksBuildPhase(file: unknown): void;
278*082815dcSEvan Bacon    removeFromPbxEmbedFrameworksBuildPhase(file: unknown): void;
279*082815dcSEvan Bacon    addToProductsPbxGroup(file: unknown): void;
280*082815dcSEvan Bacon    removeFromProductsPbxGroup(file: unknown): unknown;
281*082815dcSEvan Bacon    addToPbxSourcesBuildPhase(file: unknown): void;
282*082815dcSEvan Bacon    removeFromPbxSourcesBuildPhase(file: unknown): void;
283*082815dcSEvan Bacon    /**
284*082815dcSEvan Bacon     * Adds to PBXResourcesBuildPhase` section
285*082815dcSEvan Bacon     * @param resourcesBuildPhaseSectionKey Because there's might more than one `Resources` build phase we need to ensure file is placed under correct one.
286*082815dcSEvan Bacon     */
287*082815dcSEvan Bacon    addToPbxResourcesBuildPhase(file: PBXFile): void;
288*082815dcSEvan Bacon    removeFromPbxResourcesBuildPhase(file: unknown): void;
289*082815dcSEvan Bacon    addToPbxFrameworksBuildPhase(file: unknown): void;
290*082815dcSEvan Bacon    removeFromPbxFrameworksBuildPhase(file: unknown): void;
291*082815dcSEvan Bacon    addXCConfigurationList(
292*082815dcSEvan Bacon      configurationObjectsArray: unknown,
293*082815dcSEvan Bacon      defaultConfigurationName: unknown,
294*082815dcSEvan Bacon      comment: unknown
295*082815dcSEvan Bacon    ): {
296*082815dcSEvan Bacon      uuid: unknown;
297*082815dcSEvan Bacon      xcConfigurationList: {
298*082815dcSEvan Bacon        isa: string;
299*082815dcSEvan Bacon        buildConfigurations: unknown[];
300*082815dcSEvan Bacon        defaultConfigurationIsVisible: number;
301*082815dcSEvan Bacon        defaultConfigurationName: unknown;
302*082815dcSEvan Bacon      };
303*082815dcSEvan Bacon    };
304*082815dcSEvan Bacon    addTargetDependency(
305*082815dcSEvan Bacon      target: unknown,
306*082815dcSEvan Bacon      dependencyTargets: unknown
307*082815dcSEvan Bacon    ): {
308*082815dcSEvan Bacon      uuid: unknown;
309*082815dcSEvan Bacon      target: unknown;
310*082815dcSEvan Bacon    };
311*082815dcSEvan Bacon    addBuildPhase(
312*082815dcSEvan Bacon      filePathsArray: unknown,
313*082815dcSEvan Bacon      buildPhaseType: unknown,
314*082815dcSEvan Bacon      comment: unknown,
315*082815dcSEvan Bacon      target: unknown,
316*082815dcSEvan Bacon      optionsOrFolderType: unknown,
317*082815dcSEvan Bacon      subfolderPath: unknown
318*082815dcSEvan Bacon    ): {
319*082815dcSEvan Bacon      uuid: unknown;
320*082815dcSEvan Bacon      buildPhase: {
321*082815dcSEvan Bacon        isa: unknown;
322*082815dcSEvan Bacon        buildActionMask: number;
323*082815dcSEvan Bacon        files: unknown[];
324*082815dcSEvan Bacon        runOnlyForDeploymentPostprocessing: number;
325*082815dcSEvan Bacon      };
326*082815dcSEvan Bacon    };
327*082815dcSEvan Bacon    /**
328*082815dcSEvan Bacon     * Retrieves main part describing PBXProjects that are available in `.pbxproj` file.
329*082815dcSEvan Bacon     */
330*082815dcSEvan Bacon    pbxProjectSection(): Record<UUID, PBXProject> & Record<UUIDComment, string>;
331*082815dcSEvan Bacon    pbxBuildFileSection(): Record<UUID, PBXBuildFile> & Record<UUIDComment, string>;
332*082815dcSEvan Bacon    pbxXCBuildConfigurationSection(): Record<UUID, XCBuildConfiguration> &
333*082815dcSEvan Bacon      Record<UUIDComment, string>;
334*082815dcSEvan Bacon    pbxFileReferenceSection(): Record<UUID, PBXFile> & Record<UUIDComment, string>;
335*082815dcSEvan Bacon    pbxNativeTargetSection(): Record<UUID, PBXNativeTarget> & Record<UUIDComment, string>;
336*082815dcSEvan Bacon    xcVersionGroupSection(): unknown;
337*082815dcSEvan Bacon    pbxXCConfigurationList(): Record<UUID, XCConfigurationList> & Record<UUIDComment, string>;
338*082815dcSEvan Bacon    pbxGroupByName(name: string): PBXGroup | undefined;
339*082815dcSEvan Bacon    /**
340*082815dcSEvan Bacon     * @param targetName in most cases it's the name of the application
341*082815dcSEvan Bacon     */
342*082815dcSEvan Bacon    pbxTargetByName(targetName: string): PBXNativeTarget | undefined;
343*082815dcSEvan Bacon    findTargetKey(name: string): string;
344*082815dcSEvan Bacon    pbxItemByComment(name: string, pbxSectionName: XCObjectType): unknown;
345*082815dcSEvan Bacon    pbxSourcesBuildPhaseObj(target: unknown): unknown;
346*082815dcSEvan Bacon    pbxResourcesBuildPhaseObj(target: unknown): unknown;
347*082815dcSEvan Bacon    pbxFrameworksBuildPhaseObj(target: unknown): unknown;
348*082815dcSEvan Bacon    pbxEmbedFrameworksBuildPhaseObj(target: unknown): unknown;
349*082815dcSEvan Bacon    buildPhase(group: unknown, target: unknown): string;
350*082815dcSEvan Bacon    buildPhaseObject(name: string, group: unknown, target: unknown): unknown;
351*082815dcSEvan Bacon    addBuildProperty(prop: unknown, value: unknown, buildName?: string): void;
352*082815dcSEvan Bacon    removeBuildProperty(prop: unknown, build_name: unknown): void;
353*082815dcSEvan Bacon    updateBuildProperty(prop: string, value: unknown, build: string): void;
354*082815dcSEvan Bacon    updateProductName(name: string): void;
355*082815dcSEvan Bacon    removeFromFrameworkSearchPaths(file: unknown): void;
356*082815dcSEvan Bacon    addToFrameworkSearchPaths(file: unknown): void;
357*082815dcSEvan Bacon    removeFromLibrarySearchPaths(file: unknown): void;
358*082815dcSEvan Bacon    addToLibrarySearchPaths(file: unknown): void;
359*082815dcSEvan Bacon    removeFromHeaderSearchPaths(file: unknown): void;
360*082815dcSEvan Bacon    addToHeaderSearchPaths(file: unknown): void;
361*082815dcSEvan Bacon    addToOtherLinkerFlags(flag: unknown): void;
362*082815dcSEvan Bacon    removeFromOtherLinkerFlags(flag: unknown): void;
363*082815dcSEvan Bacon    addToBuildSettings(buildSetting: unknown, value: unknown): void;
364*082815dcSEvan Bacon    removeFromBuildSettings(buildSetting: unknown): void;
365*082815dcSEvan Bacon    /**
366*082815dcSEvan Bacon     * Checks whether there is a file with given `filePath` in the project.
367*082815dcSEvan Bacon     */
368*082815dcSEvan Bacon    hasFile(filePath): PBXFile | false;
369*082815dcSEvan Bacon    addTarget(
370*082815dcSEvan Bacon      name: unknown,
371*082815dcSEvan Bacon      type: unknown,
372*082815dcSEvan Bacon      subfolder: unknown
373*082815dcSEvan Bacon    ): {
374*082815dcSEvan Bacon      uuid: unknown;
375*082815dcSEvan Bacon      pbxNativeTarget: {
376*082815dcSEvan Bacon        isa: string;
377*082815dcSEvan Bacon        name: string;
378*082815dcSEvan Bacon        productName: string;
379*082815dcSEvan Bacon        productReference: unknown;
380*082815dcSEvan Bacon        productType: string;
381*082815dcSEvan Bacon        buildConfigurationList: unknown;
382*082815dcSEvan Bacon        buildPhases: unknown[];
383*082815dcSEvan Bacon        buildRules: unknown[];
384*082815dcSEvan Bacon        dependencies: unknown[];
385*082815dcSEvan Bacon      };
386*082815dcSEvan Bacon    };
387*082815dcSEvan Bacon    /**
388*082815dcSEvan Bacon     * Get First PBXProject that can be found in `.pbxproj` file.
389*082815dcSEvan Bacon     */
390*082815dcSEvan Bacon    getFirstProject(): { uuid: UUID; firstProject: PBXProject };
391*082815dcSEvan Bacon    getFirstTarget(): {
392*082815dcSEvan Bacon      uuid: UUID;
393*082815dcSEvan Bacon      firstTarget: PBXNativeTarget;
394*082815dcSEvan Bacon    };
395*082815dcSEvan Bacon    /**
396*082815dcSEvan Bacon     * Retrieves PBXNativeTarget by the type
397*082815dcSEvan Bacon     */
398*082815dcSEvan Bacon    getTarget(productType: ProductType): { uuid: UUID; target: PBXNativeTarget } | null;
399*082815dcSEvan Bacon    addToPbxGroupType(file: unknown, groupKey: unknown, groupType: unknown): void;
400*082815dcSEvan Bacon    addToPbxVariantGroup(file: unknown, groupKey: unknown): void;
401*082815dcSEvan Bacon    addToPbxGroup(file: PBXFile, groupKey: UUID): void;
402*082815dcSEvan Bacon    pbxCreateGroupWithType(name: unknown, pathName: unknown, groupType: unknown): unknown;
403*082815dcSEvan Bacon    pbxCreateVariantGroup(name: unknown): unknown;
404*082815dcSEvan Bacon    pbxCreateGroup(name: string, pathName: string): UUID;
405*082815dcSEvan Bacon    removeFromPbxGroupAndType(file: unknown, groupKey: unknown, groupType: unknown): void;
406*082815dcSEvan Bacon    removeFromPbxGroup(file: unknown, groupKey: unknown): void;
407*082815dcSEvan Bacon    removeFromPbxVariantGroup(file: unknown, groupKey: unknown): void;
408*082815dcSEvan Bacon    getPBXGroupByKeyAndType(key: unknown, groupType: unknown): unknown;
409*082815dcSEvan Bacon    /**
410*082815dcSEvan Bacon     * @param groupKey UUID.
411*082815dcSEvan Bacon     */
412*082815dcSEvan Bacon    getPBXGroupByKey(groupKey: string): PBXGroup | undefined;
413*082815dcSEvan Bacon    getPBXVariantGroupByKey(key: unknown): unknown;
414*082815dcSEvan Bacon    findPBXGroupKeyAndType(criteria: unknown, groupType: unknown): string;
415*082815dcSEvan Bacon    /**
416*082815dcSEvan Bacon     * @param criteria Params that should be used to locate desired PBXGroup.
417*082815dcSEvan Bacon     */
418*082815dcSEvan Bacon    findPBXGroupKey(criteria: { name?: string; path?: string }): UUID | undefined;
419*082815dcSEvan Bacon    findPBXVariantGroupKey(criteria: unknown): string;
420*082815dcSEvan Bacon    addLocalizationVariantGroup(
421*082815dcSEvan Bacon      name: unknown
422*082815dcSEvan Bacon    ): {
423*082815dcSEvan Bacon      uuid: unknown;
424*082815dcSEvan Bacon      fileRef: unknown;
425*082815dcSEvan Bacon      basename: unknown;
426*082815dcSEvan Bacon    };
427*082815dcSEvan Bacon    addKnownRegion(name: string): void;
428*082815dcSEvan Bacon    removeKnownRegion(name: string): void;
429*082815dcSEvan Bacon    hasKnownRegion(name: string): boolean;
430*082815dcSEvan Bacon    getPBXObject(name: string): unknown;
431*082815dcSEvan Bacon    /**
432*082815dcSEvan Bacon     * - creates `PBXFile`
433*082815dcSEvan Bacon     * - adds to `PBXFileReference` section
434*082815dcSEvan Bacon     * - adds to `PBXGroup` or `PBXVariantGroup` if applicable
435*082815dcSEvan Bacon     * @returns `null` if file is already in `pbxproj`.
436*082815dcSEvan Bacon     */
437*082815dcSEvan Bacon    addFile(
438*082815dcSEvan Bacon      path: string,
439*082815dcSEvan Bacon      group?: string,
440*082815dcSEvan Bacon      opt?: {
441*082815dcSEvan Bacon        plugin?: string;
442*082815dcSEvan Bacon        target?: string;
443*082815dcSEvan Bacon        variantGroup?: string;
444*082815dcSEvan Bacon        lastKnownFileType?: string;
445*082815dcSEvan Bacon        defaultEncoding?: 4;
446*082815dcSEvan Bacon        customFramework?: true;
447*082815dcSEvan Bacon        explicitFileType?: number;
448*082815dcSEvan Bacon        weak?: true;
449*082815dcSEvan Bacon        compilerFLags?: string;
450*082815dcSEvan Bacon        embed?: boolean;
451*082815dcSEvan Bacon        sign?: boolean;
452*082815dcSEvan Bacon      }
453*082815dcSEvan Bacon    ): PBXFile | null;
454*082815dcSEvan Bacon    removeFile(path: unknown, group: unknown, opt: unknown): unknown;
455*082815dcSEvan Bacon    getBuildProperty(prop: unknown, build: unknown): unknown;
456*082815dcSEvan Bacon    getBuildConfigByName(name: unknown): object;
457*082815dcSEvan Bacon    addDataModelDocument(filePath: unknown, group: unknown, opt: unknown): unknown;
458*082815dcSEvan Bacon    addTargetAttribute(prop: unknown, value: unknown, target: unknown): void;
459*082815dcSEvan Bacon    removeTargetAttribute(prop: unknown, target: unknown): void;
460*082815dcSEvan Bacon  }
461*082815dcSEvan Bacon
462*082815dcSEvan Bacon  export function project(projectPath: string): XcodeProject;
463*082815dcSEvan Bacon}
464*082815dcSEvan Bacon
465*082815dcSEvan Bacondeclare module 'xcode/lib/pbxFile' {
466*082815dcSEvan Bacon  export default class PBXFile implements pbxFile {
467*082815dcSEvan Bacon    constructor(file: string);
468*082815dcSEvan Bacon    basename: string;
469*082815dcSEvan Bacon    lastKnownFileType?: string;
470*082815dcSEvan Bacon    group?: string;
471*082815dcSEvan Bacon    path?: string;
472*082815dcSEvan Bacon    fileEncoding?: number;
473*082815dcSEvan Bacon    defaultEncoding?: number;
474*082815dcSEvan Bacon    sourceTree: string;
475*082815dcSEvan Bacon    includeInIndex?: number;
476*082815dcSEvan Bacon    explicitFileType?: unknown;
477*082815dcSEvan Bacon    settings?: object;
478*082815dcSEvan Bacon    uuid?: string;
479*082815dcSEvan Bacon    fileRef: string;
480*082815dcSEvan Bacon    target?: string;
481*082815dcSEvan Bacon  }
482*082815dcSEvan Bacon}
483