@sentry/wizard 3.40.0 → 3.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/README.md +19 -19
  3. package/bin.ts +5 -0
  4. package/codecov.yml +15 -0
  5. package/dist/bin.js +4 -0
  6. package/dist/bin.js.map +1 -1
  7. package/dist/e2e-tests/jest.config.d.ts +1 -0
  8. package/dist/e2e-tests/jest.config.js +1 -0
  9. package/dist/e2e-tests/jest.config.js.map +1 -1
  10. package/dist/package.json +3 -2
  11. package/dist/src/apple/apple-wizard.js +1 -2
  12. package/dist/src/apple/apple-wizard.js.map +1 -1
  13. package/dist/src/apple/code-tools.d.ts +10 -0
  14. package/dist/src/apple/code-tools.js +16 -12
  15. package/dist/src/apple/code-tools.js.map +1 -1
  16. package/dist/src/apple/fastlane.d.ts +23 -0
  17. package/dist/src/apple/fastlane.js +11 -7
  18. package/dist/src/apple/fastlane.js.map +1 -1
  19. package/dist/src/apple/templates.d.ts +1 -1
  20. package/dist/src/apple/templates.js +0 -2
  21. package/dist/src/apple/templates.js.map +1 -1
  22. package/dist/src/apple/xcode-manager.d.ts +10 -6
  23. package/dist/src/apple/xcode-manager.js +146 -61
  24. package/dist/src/apple/xcode-manager.js.map +1 -1
  25. package/dist/src/nextjs/nextjs-wizard.js +5 -3
  26. package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
  27. package/dist/src/nuxt/nuxt-wizard.js +6 -4
  28. package/dist/src/nuxt/nuxt-wizard.js.map +1 -1
  29. package/dist/src/nuxt/sdk-setup.d.ts +1 -1
  30. package/dist/src/nuxt/sdk-setup.js +2 -1
  31. package/dist/src/nuxt/sdk-setup.js.map +1 -1
  32. package/dist/src/react-native/react-native-wizard.js +5 -3
  33. package/dist/src/react-native/react-native-wizard.js.map +1 -1
  34. package/dist/src/remix/remix-wizard.js +5 -3
  35. package/dist/src/remix/remix-wizard.js.map +1 -1
  36. package/dist/src/run.d.ts +1 -0
  37. package/dist/src/run.js +1 -0
  38. package/dist/src/run.js.map +1 -1
  39. package/dist/src/sveltekit/sveltekit-wizard.js +5 -3
  40. package/dist/src/sveltekit/sveltekit-wizard.js.map +1 -1
  41. package/dist/src/utils/clack-utils.d.ts +3 -1
  42. package/dist/src/utils/clack-utils.js +18 -12
  43. package/dist/src/utils/clack-utils.js.map +1 -1
  44. package/dist/src/utils/package-manager.d.ts +1 -0
  45. package/dist/src/utils/package-manager.js +5 -0
  46. package/dist/src/utils/package-manager.js.map +1 -1
  47. package/dist/src/utils/types.d.ts +9 -0
  48. package/dist/src/utils/types.js.map +1 -1
  49. package/dist/test/apple/cocoapod.test.d.ts +1 -0
  50. package/dist/test/apple/cocoapod.test.js +409 -0
  51. package/dist/test/apple/cocoapod.test.js.map +1 -0
  52. package/dist/test/apple/code-tools.test.d.ts +1 -0
  53. package/dist/test/apple/code-tools.test.js +673 -0
  54. package/dist/test/apple/code-tools.test.js.map +1 -0
  55. package/dist/test/apple/fastfile.test.d.ts +1 -0
  56. package/dist/test/apple/fastfile.test.js +431 -0
  57. package/dist/test/apple/fastfile.test.js.map +1 -0
  58. package/dist/test/apple/templates.test.d.ts +1 -0
  59. package/dist/test/apple/templates.test.js +73 -0
  60. package/dist/test/apple/templates.test.js.map +1 -0
  61. package/dist/test/apple/xcode-manager.test.d.ts +1 -0
  62. package/dist/test/apple/xcode-manager.test.js +834 -0
  63. package/dist/test/apple/xcode-manager.test.js.map +1 -0
  64. package/dist/test/utils/clack-utils.test.js +89 -0
  65. package/dist/test/utils/clack-utils.test.js.map +1 -1
  66. package/e2e-tests/jest.config.ts +1 -0
  67. package/e2e-tests/test-applications/apple/damaged-missing-configuration-list/Project.xcodeproj/project.pbxproj +52 -0
  68. package/e2e-tests/test-applications/apple/damaged-missing-configuration-list/Project.xcodeproj/xcshareddata/xcschemes/Project1.xcscheme +78 -0
  69. package/e2e-tests/test-applications/apple/no-targets/Project.xcodeproj/project.pbxproj +62 -0
  70. package/e2e-tests/test-applications/apple/no-targets/Project.xcodeproj/xcshareddata/xcschemes/Project1.xcscheme +78 -0
  71. package/e2e-tests/test-applications/apple/spm-swiftui-multi-targets/Project.xcodeproj/project.pbxproj +470 -0
  72. package/e2e-tests/test-applications/apple/spm-swiftui-multi-targets/Project.xcodeproj/xcshareddata/xcschemes/Project1.xcscheme +78 -0
  73. package/e2e-tests/test-applications/apple/spm-swiftui-multi-targets/Project1/ContentView.swift +7 -0
  74. package/e2e-tests/test-applications/apple/spm-swiftui-multi-targets/Project1/Project1App.swift +10 -0
  75. package/e2e-tests/test-applications/apple/spm-swiftui-multi-targets/Project2/ContentView.swift +7 -0
  76. package/e2e-tests/test-applications/apple/spm-swiftui-multi-targets/Project2/Project2App.swift +10 -0
  77. package/e2e-tests/test-applications/apple/spm-swiftui-single-target/Project.xcodeproj/project.pbxproj +382 -0
  78. package/e2e-tests/test-applications/apple/spm-swiftui-single-target/Project.xcodeproj/xcshareddata/xcschemes/Project.xcscheme +78 -0
  79. package/e2e-tests/test-applications/apple/spm-swiftui-single-target/Sources/ContentView.swift +7 -0
  80. package/e2e-tests/test-applications/apple/spm-swiftui-single-target/Sources/MainApp.swift +10 -0
  81. package/package.json +3 -2
  82. package/src/apple/apple-wizard.ts +1 -2
  83. package/src/apple/code-tools.ts +21 -6
  84. package/src/apple/fastlane.ts +18 -2
  85. package/src/apple/templates.ts +2 -2
  86. package/src/apple/xcode-manager.ts +181 -94
  87. package/src/nextjs/nextjs-wizard.ts +5 -2
  88. package/src/nuxt/nuxt-wizard.ts +6 -3
  89. package/src/nuxt/sdk-setup.ts +2 -0
  90. package/src/react-native/react-native-wizard.ts +5 -2
  91. package/src/remix/remix-wizard.ts +5 -2
  92. package/src/run.ts +2 -0
  93. package/src/sveltekit/sveltekit-wizard.ts +5 -2
  94. package/src/utils/clack-utils.ts +12 -2
  95. package/src/utils/package-manager.ts +6 -0
  96. package/src/utils/types.ts +10 -0
  97. package/test/apple/cocoapod.test.ts +306 -0
  98. package/test/apple/code-tools.test.ts +1042 -0
  99. package/test/apple/fastfile.test.ts +550 -0
  100. package/test/apple/templates.test.ts +191 -0
  101. package/test/apple/xcode-manager.test.ts +1066 -0
  102. package/test/utils/clack-utils.test.ts +92 -0
  103. package/types/xcode.d.ts +526 -0
@@ -1,9 +1,12 @@
1
1
  import {
2
2
  askForToolConfigPath,
3
3
  createNewConfigFile,
4
+ installPackage,
4
5
  } from '../../src/utils/clack-utils';
5
6
 
6
7
  import * as fs from 'fs';
8
+ import * as ChildProcess from 'child_process';
9
+ import { PackageManager } from '../../src/utils/package-manager';
7
10
 
8
11
  type ClackMock = {
9
12
  confirm: jest.Mock;
@@ -15,6 +18,7 @@ type ClackMock = {
15
18
  success: jest.Mock;
16
19
  warn: jest.Mock;
17
20
  };
21
+ spinner: () => { start: jest.Mock; stop: jest.Mock };
18
22
  };
19
23
 
20
24
  let clackMock: ClackMock;
@@ -31,6 +35,9 @@ jest.mock('@clack/prompts', () => {
31
35
  cancel: jest.fn(),
32
36
  // passthrough for abortIfCancelled
33
37
  isCancel: jest.fn().mockReturnValue(false),
38
+ spinner: jest
39
+ .fn()
40
+ .mockImplementation(() => ({ start: jest.fn(), stop: jest.fn() })),
34
41
  };
35
42
  return clackMock;
36
43
  });
@@ -140,3 +147,88 @@ describe('createNewConfigFile', () => {
140
147
  expect(result).toBe(false);
141
148
  });
142
149
  });
150
+
151
+ describe('installPackage', () => {
152
+ afterEach(() => {
153
+ jest.clearAllMocks();
154
+ });
155
+
156
+ it('force-installs a package if the forceInstall flag is set', async () => {
157
+ const packageManagerMock: PackageManager = {
158
+ name: 'npm',
159
+ label: 'NPM',
160
+ installCommand: 'npm install',
161
+ buildCommand: 'npm run build',
162
+ runScriptCommand: 'npm run',
163
+ flags: '',
164
+ forceInstallFlag: '--force',
165
+ detect: jest.fn(),
166
+ addOverride: jest.fn(),
167
+ };
168
+
169
+ const execSpy = jest
170
+ .spyOn(ChildProcess, 'exec')
171
+ // @ts-expect-error - don't care about the return value
172
+ .mockImplementationOnce((cmd, cb) => {
173
+ if (cb) {
174
+ // @ts-expect-error - don't care about the options value
175
+ cb(null, '', '');
176
+ }
177
+ });
178
+
179
+ await installPackage({
180
+ alreadyInstalled: false,
181
+ packageName: '@sentry/sveltekit',
182
+ packageNameDisplayLabel: '@sentry/sveltekit',
183
+ forceInstall: true,
184
+ askBeforeUpdating: false,
185
+ packageManager: packageManagerMock,
186
+ });
187
+
188
+ expect(execSpy).toHaveBeenCalledWith(
189
+ 'npm install @sentry/sveltekit --force',
190
+ expect.any(Function),
191
+ );
192
+ });
193
+
194
+ it.each([false, undefined])(
195
+ "doesn't force-install a package if the forceInstall flag is %s",
196
+ async (flag) => {
197
+ const packageManagerMock: PackageManager = {
198
+ name: 'npm',
199
+ label: 'NPM',
200
+ installCommand: 'npm install',
201
+ buildCommand: 'npm run build',
202
+ runScriptCommand: 'npm run',
203
+ flags: '',
204
+ forceInstallFlag: '--force',
205
+ detect: jest.fn(),
206
+ addOverride: jest.fn(),
207
+ };
208
+
209
+ const execSpy = jest
210
+ .spyOn(ChildProcess, 'exec')
211
+ // @ts-expect-error - don't care about the return value
212
+ .mockImplementationOnce((cmd, cb) => {
213
+ if (cb) {
214
+ // @ts-expect-error - don't care about the options value
215
+ cb(null, '', '');
216
+ }
217
+ });
218
+
219
+ await installPackage({
220
+ alreadyInstalled: false,
221
+ packageName: '@sentry/sveltekit',
222
+ packageNameDisplayLabel: '@sentry/sveltekit',
223
+ forceInstall: flag,
224
+ askBeforeUpdating: false,
225
+ packageManager: packageManagerMock,
226
+ });
227
+
228
+ expect(execSpy).toHaveBeenCalledWith(
229
+ 'npm install @sentry/sveltekit ',
230
+ expect.any(Function),
231
+ );
232
+ },
233
+ );
234
+ });
@@ -0,0 +1,526 @@
1
+ // The xcode package is not typed, so we need to manually maintain this file.
2
+ // This typing is created by hand and needs to be updated when the types change.
3
+ // As most fields are from parsing Xcode project files, it is hard to tell which fields are optional.
4
+ // Therefore most fields are marked as nullable, except the ones we are certain about.
5
+
6
+ declare module 'xcode' {
7
+ interface PBXFileOptions {
8
+ lastKnownFileType?: string;
9
+ group?: string;
10
+ customFramework?: boolean;
11
+ defaultEncoding?: string;
12
+ explicitFileType?: string;
13
+ sourceTree?: string;
14
+ weak?: boolean;
15
+ compilerFlags?: string;
16
+ embed?: boolean;
17
+ sign?: boolean;
18
+ }
19
+
20
+ class PBXFile {
21
+ basename?: string;
22
+ lastKnownFileType?: string;
23
+ group?: string;
24
+ customFramework?: boolean;
25
+ dirname?: string;
26
+ path?: string;
27
+ fileEncoding?: string;
28
+ explicitFileType?: string;
29
+ defaultEncoding?: string;
30
+ sourceTree?: string;
31
+ includeInIndex?: number;
32
+ settings?: {
33
+ ATTRIBUTES?: string[];
34
+ COMPILER_FLAGS?: string;
35
+ };
36
+
37
+ constructor(filepath: string, opt?: PBXFileOptions);
38
+ }
39
+
40
+ export interface PBXBuildFile {
41
+ isa: 'PBXBuildFile';
42
+ fileRef?: string;
43
+ fileRef_comment?: string;
44
+ productRef?: string;
45
+ productRef_comment?: string;
46
+ settings?: {
47
+ ATTRIBUTES?: string[];
48
+ COMPILER_FLAGS?: string;
49
+ };
50
+ }
51
+
52
+ interface PBXWriterOptions {
53
+ omitEmptyValues?: boolean;
54
+ }
55
+
56
+ class PBXWriter {
57
+ constructor(contents: string, options: PBXWriterOptions);
58
+
59
+ write(output: string): void;
60
+ writeFlush(output: string): void;
61
+ writeSync(): string;
62
+ writeHeadComment(): void;
63
+ writeProject(): void;
64
+ writeObject(object: Record<string, Array | object | string | number>): void;
65
+ writeObjectsSections(
66
+ objects: Record<string, Array | object | string | number>,
67
+ ): void;
68
+ writeArray(
69
+ arr: Array<
70
+ | {
71
+ value?: string;
72
+ comment?: string;
73
+ }
74
+ | Record<string, Array | object | string | number>
75
+ >,
76
+ name: string,
77
+ ): void;
78
+
79
+ writeSectionComment(name: string, begin: boolean): void;
80
+ writeSection(
81
+ section: Record<string, Array | object | string | number>,
82
+ ): void;
83
+ writeInlineObject(
84
+ name: string,
85
+ comment: string,
86
+ object: Record<string, Array | object | string | number>,
87
+ ): void;
88
+ }
89
+
90
+ export interface PBXNativeTarget {
91
+ name: string;
92
+ productType: string;
93
+
94
+ buildConfigurationList?: string;
95
+ buildConfigurationList_comment?: string;
96
+ buildPhases?: {
97
+ value: string;
98
+ comment?: string;
99
+ }[];
100
+ buildRules?: {
101
+ [key: string]: unknown;
102
+ }[];
103
+ dependencies?: {
104
+ [key: string]: unknown;
105
+ }[];
106
+ fileSystemSynchronizedGroups?: {
107
+ value: string;
108
+ comment?: string;
109
+ }[];
110
+ packageProductDependencies?: {
111
+ value: string;
112
+ comment: string;
113
+ }[];
114
+ productName?: string;
115
+ productReference?: string;
116
+ productReference_comment?: string;
117
+ productType?: string;
118
+ }
119
+
120
+ export interface XCConfigurationList {
121
+ buildConfigurations?: {
122
+ value: string;
123
+ }[];
124
+ }
125
+
126
+ export interface PBXGroup {
127
+ path?: string;
128
+ children?: {
129
+ value: string;
130
+ comment?: string;
131
+ }[];
132
+ }
133
+
134
+ interface PBXCopyFilesBuildPhase {
135
+ [key: string]: unknown;
136
+ }
137
+
138
+ export interface XCBuildConfiguration {
139
+ buildSettings?: {
140
+ [key: string]: string;
141
+ };
142
+ }
143
+
144
+ export interface PBXFrameworksBuildPhase {
145
+ files?: {
146
+ value: string;
147
+ comment?: string;
148
+ }[];
149
+ }
150
+
151
+ interface XCRemoteSwiftPackageReference {
152
+ isa: 'XCRemoteSwiftPackageReference';
153
+ repositoryURL: string;
154
+ requirement: {
155
+ kind: string;
156
+ minimumVersion: string;
157
+ };
158
+ }
159
+
160
+ interface XCSwiftPackageProductDependency {
161
+ isa: 'XCSwiftPackageProductDependency';
162
+ package: string;
163
+ productName: string;
164
+ package_comment?: string;
165
+ }
166
+
167
+ export interface PBXShellScriptBuildPhase {
168
+ shellScript: string;
169
+ inputFileListPaths?: string[];
170
+ outputFileListPaths?: string[];
171
+ inputPaths?: string[];
172
+ outputPaths?: string[];
173
+ shellPath?: string;
174
+ }
175
+
176
+ export interface PBXSourcesBuildPhase {
177
+ files?: {
178
+ value: string;
179
+ comment?: string;
180
+ }[];
181
+ }
182
+
183
+ export interface PBXFileReference {
184
+ path: string;
185
+ }
186
+
187
+ export interface PBXObjects {
188
+ PBXBuildFile?: {
189
+ [key: string]: PBXBuildFile | string;
190
+ };
191
+ PBXCopyFilesBuildPhase?: {
192
+ [key: string]: PBXCopyFilesBuildPhase | string;
193
+ };
194
+ PBXFileReference?: {
195
+ [key: string]: PBXFileReference | string;
196
+ };
197
+ PBXFrameworksBuildPhase?: {
198
+ [key: string]: PBXFrameworksBuildPhase | string;
199
+ };
200
+ PBXGroup?: {
201
+ [key: string]: PBXGroup | string;
202
+ };
203
+ PBXNativeTarget?: {
204
+ [key: string]: PBXNativeTarget | string;
205
+ };
206
+ PBXProject?: {
207
+ [key: string]: PBXProject | string;
208
+ };
209
+ PBXShellScriptBuildPhase?: {
210
+ [key: string]: PBXShellScriptBuildPhase | string;
211
+ };
212
+ PBXSourcesBuildPhase?: {
213
+ [key: string]: PBXSourcesBuildPhase | string;
214
+ };
215
+
216
+ XCBuildConfiguration?: {
217
+ [key: string]: XCBuildConfiguration | string;
218
+ };
219
+ /**
220
+ * The XCConfigurationList is not always present in the project file.
221
+ *
222
+ * If the configuration list is not present, Xcode will declare the project as damaged.
223
+ */
224
+ XCConfigurationList?: {
225
+ [key: string]: XCConfigurationList | string;
226
+ };
227
+ XCRemoteSwiftPackageReference?: {
228
+ [key: string]: XCRemoteSwiftPackageReference | string;
229
+ };
230
+ XCSwiftPackageProductDependency?: {
231
+ [key: string]: XCSwiftPackageProductDependency | string;
232
+ };
233
+
234
+ mainGroup: string;
235
+ packageReferences?: {
236
+ value: string;
237
+ comment?: string;
238
+ }[];
239
+ }
240
+
241
+ export interface PBXProject {
242
+ attributes?: {
243
+ BuildIndependentTargetsInParallel?: number;
244
+ LastSwiftUpdateCheck?: number;
245
+ LastUpgradeCheck?: number;
246
+ TargetAttributes?: {
247
+ [key: string]: {
248
+ CreatedOnToolsVersion?: string;
249
+ };
250
+ };
251
+ };
252
+ buildConfigurationList?: string;
253
+ buildConfigurationList_comment?: string;
254
+ developmentRegion?: string;
255
+ hasScannedForEncodings?: number;
256
+ knownRegions?: string[];
257
+ mainGroup?: string;
258
+ minimizedProjectReferenceProxies?: number;
259
+ preferredProjectObjectVersion?: number;
260
+ productRefGroup?: string;
261
+ productRefGroup_comment?: string;
262
+ projectDirPath?: string;
263
+ projectRoot?: string;
264
+ targets?: {
265
+ value: string;
266
+ comment?: string;
267
+ }[];
268
+ }
269
+
270
+ export class Project extends import('events').EventEmitter {
271
+ hash: {
272
+ project: {
273
+ objects: PBXObjects;
274
+ };
275
+ };
276
+
277
+ filepath: string;
278
+
279
+ constructor(filename: string);
280
+
281
+ parse(cb: (err: Error | null) => void): void;
282
+ parseSync(): void;
283
+
284
+ writeSync(options?: PBXWriterOptions): string;
285
+ allUuids(): string[];
286
+ generateUuid(): string;
287
+
288
+ addPluginFile(path: string, opt?: PBXFileOptions): void;
289
+ removePluginFile(path: string, opt?: PBXFileOptions): void;
290
+
291
+ addProductFile(targetPath: string, opt?: PBXFileOptions): void;
292
+ removeProductFile(path: string, opt?: PBXFileOptions): void;
293
+
294
+ addSourceFile(path: string, opt?: PBXFileOptions, group?: string): void;
295
+ removeSourceFile(path: string, opt?: PBXFileOptions, group?: string): void;
296
+
297
+ addHeaderFile(path: string, opt?: PBXFileOptions, group?: string): void;
298
+ removeHeaderFile(path: string, opt?: PBXFileOptions, group?: string): void;
299
+
300
+ addResourceFile(path: string, opt?: PBXFileOptions, group?: string): void;
301
+ removeResourceFile(
302
+ path: string,
303
+ opt?: PBXFileOptions,
304
+ group?: string,
305
+ ): void;
306
+
307
+ addFramework(fpath: string, opt?: PBXFileOptions): void;
308
+ removeFramework(fpath: string, opt?: PBXFileOptions): void;
309
+
310
+ addCopyfile(fpath: string, opt?: PBXFileOptions): void;
311
+ removeCopyfile(fpath: string, opt?: PBXFileOptions): void;
312
+
313
+ pbxCopyfilesBuildPhaseObj(target: string): PBXObjects;
314
+ addToPbxCopyfilesBuildPhase(file: PBXObjects): void;
315
+ removeFromPbxCopyfilesBuildPhase(file: PBXObjects): void;
316
+
317
+ addStaticLibrary(
318
+ path: string,
319
+ opt: {
320
+ plugin?: boolean;
321
+ target?: string;
322
+ },
323
+ ): void;
324
+
325
+ addToPbxBuildFileSection(file: PBXFile): void;
326
+ removeFromPbxBuildFileSection(file: PBXFile): void;
327
+
328
+ addPbxGroup(
329
+ filePathsArray: string[],
330
+ name: string,
331
+ path: string,
332
+ sourceTree: string,
333
+ ): void;
334
+ removePbxGroup(name: string): void;
335
+
336
+ addToPbxProjectSection(target: PBXNativeTarget): void;
337
+ addToPbxNativeTargetSection(target: PBXNativeTarget): void;
338
+ addToPbxFileReferenceSection(file: PBXFile): void;
339
+
340
+ removeFromPbxFileReferenceSection(file: PBXFile): void;
341
+
342
+ addToXcVersionGroupSection(file: PBXFile): void;
343
+
344
+ addToPluginsPbxGroup(file: PBXFile): void;
345
+ removeFromPluginsPbxGroup(file: PBXFile): void;
346
+
347
+ addToResourcesPbxGroup(file: PBXFile): void;
348
+ removeFromResourcesPbxGroup(file: PBXFile): void;
349
+
350
+ addToFrameworksPbxGroup(file: PBXFile): void;
351
+ removeFromFrameworksPbxGroup(file: PBXFile): void;
352
+
353
+ addToProductsPbxGroup(file: PBXFile): void;
354
+ removeFromProductsPbxGroup(file: PBXFile): void;
355
+
356
+ addToPbxSourcesBuildPhase(file: PBXFile): void;
357
+ removeFromPbxSourcesBuildPhase(file: PBXFile): void;
358
+
359
+ addToPbxResourcesBuildPhase(file: PBXFile): void;
360
+ removeFromPbxResourcesBuildPhase(file: PBXFile): void;
361
+
362
+ addToPbxFrameworksBuildPhase(file: PBXFile): void;
363
+ removeFromPbxFrameworksBuildPhase(file: PBXFile): void;
364
+
365
+ addXCConfigurationList(
366
+ configurationObjectsArray: string[],
367
+ defaultConfigurationName: string,
368
+ comment: string,
369
+ ): void;
370
+
371
+ addTargetDependency(target: string, dependencyTargets: string[]): void;
372
+
373
+ addBuildPhase(
374
+ filePathsArray: string[],
375
+ buildPhaseType: 'PBXShellScriptBuildPhase',
376
+ comment: string,
377
+ target: string,
378
+ optionsOrFolderType:
379
+ | {
380
+ inputPaths: string[];
381
+ outputPaths?: string[];
382
+ inputFileListPaths: string[];
383
+ outputFileListPaths: string[];
384
+ shellPath: string;
385
+ shellScript: string;
386
+ }
387
+ | string,
388
+ subfolderPath?: string,
389
+ ): void;
390
+
391
+ pbxProjectSection(): PBXObjects;
392
+ pbxBuildFileSection(): PBXObjects;
393
+ pbxXCBuildConfigurationSection(): PBXObjects;
394
+ pbxFileReferenceSection(): PBXObjects;
395
+ pbxNativeTargetSection(): PBXObjects;
396
+ xcVersionGroupSection(): PBXObjects;
397
+
398
+ pbxXCConfigurationList(): PBXObjects;
399
+ pbxGroupByName(name: string): PBXObjects;
400
+ pbxTargetByName(name: string): PBXObjects;
401
+ findTargetKey(name: string): string;
402
+
403
+ pbxItemByComment(name: string, pbxSectionName: string): PBXObjects;
404
+ pbxSourcesBuildPhaseObj(target: string): PBXObjects;
405
+ pbxResourcesBuildPhaseObj(target: string): PBXObjects;
406
+ pbxFrameworksBuildPhaseObj(target: string): PBXObjects;
407
+ pbxEmbedFrameworksBuildPhaseObj(target: string): PBXObjects;
408
+
409
+ buildPhase(group: string, target: string): PBXObjects;
410
+ buildPhaseObject(name: string, group: string, target: string): PBXObjects;
411
+
412
+ addBuildProperty(prop: string, value: string, build_name: string): void;
413
+ removeBuildProperty(prop: string, build_name: string): void;
414
+
415
+ updateBuildProperty(
416
+ prop: string,
417
+ value: string,
418
+ build: string,
419
+ targetName: string,
420
+ ): void;
421
+
422
+ updateProductName(name: string): void;
423
+ removeFromFrameworkSearchPaths(file: string): void;
424
+
425
+ addToFrameworkSearchPaths(file: string): void;
426
+ removeFromLibrarySearchPaths(file: string): void;
427
+
428
+ addToLibrarySearchPaths(file: string): void;
429
+ removeFromHeaderSearchPaths(file: string): void;
430
+
431
+ addToHeaderSearchPaths(file: string): void;
432
+ addToOtherLinkerFlags(flag: string): void;
433
+ removeFromOtherLinkerFlags(flag: string): void;
434
+
435
+ addToBuildSettings(buildSetting: string, value: string): void;
436
+ removeFromBuildSettings(buildSetting: string): void;
437
+
438
+ readonly productName: string;
439
+
440
+ hasFile(filePath: string): boolean;
441
+
442
+ addTarget(
443
+ name: string,
444
+ type: string,
445
+ subfolder: string,
446
+ bundleId: string,
447
+ ): void;
448
+
449
+ getFirstProject(): {
450
+ uuid: string;
451
+ firstProject: PBXObjects;
452
+ };
453
+ getFirstTarget(): {
454
+ uuid: string;
455
+ firstTarget: PBXObjects;
456
+ } | null;
457
+ getTarget(productType: string): {
458
+ uuid: string;
459
+ target: PBXObjects;
460
+ } | null;
461
+
462
+ addToPbxGroupType(file: string, groupKey: string, groupType: string): void;
463
+ addToPbxVariantGroup(file: string, groupKey: string): void;
464
+ addToPbxGroup(file: string, groupKey: string): void;
465
+
466
+ pbxCreateGroupWithType(
467
+ name: string,
468
+ pathName: string,
469
+ groupType: string,
470
+ ): void;
471
+ pbxCreateVariantGroup(name: string): void;
472
+ pbxCreateGroup(name: string, pathName: string): void;
473
+
474
+ removeFromPbxGroupAndType(
475
+ file: string,
476
+ groupKey: string,
477
+ groupType: string,
478
+ ): void;
479
+ removeFromPbxGroup(file: string, groupKey: string): void;
480
+ removeFromPbxVariantGroup(file: string, groupKey: string): void;
481
+
482
+ getPBXGroupByKeyAndType(key: string, groupType: string): PBXObjects;
483
+ getPBXGroupByKey(key: string): PBXObjects;
484
+ getPBXVariantGroupByKey(key: string): PBXObjects;
485
+
486
+ findPBXGroupKeyAndType(
487
+ criteria: {
488
+ path?: string;
489
+ },
490
+ groupType: string,
491
+ ): string;
492
+
493
+ findPBXGroupKey(criteria: { path?: string }): string;
494
+
495
+ findPBXVariantGroupKey(criteria: { path?: string }): string;
496
+
497
+ addLocalizationVariantGroup(name: string): void;
498
+
499
+ addKnownRegion(name: string): void;
500
+ removeKnownRegion(name: string): void;
501
+
502
+ hasKnownRegion(name: string): boolean;
503
+
504
+ getPBXObject(name: string): PBXObjects;
505
+
506
+ addFile(path: string, group: string, opt?: PBXFileOptions): void;
507
+ removeFile(path: string, group: string, opt?: PBXFileOptions): void;
508
+
509
+ getBuildProperty(prop: string, build: string, targetName: string): string;
510
+ getBuildConfigByName(name: string): PBXObjects;
511
+
512
+ addDataModelDocument(
513
+ filePath: string,
514
+ group: string,
515
+ opt?: PBXFileOptions,
516
+ ): void;
517
+ addTargetAttribute(prop: string, value: string, target: string): void;
518
+ removeTargetAttribute(prop: string, target: string): void;
519
+ }
520
+
521
+ export const project: (filename: string) => Project;
522
+
523
+ export default {
524
+ project: project,
525
+ };
526
+ }