Skip to content

Commit 1344dc2

Browse files
authored
feat: improve ux on swift package resolutions (#6064)
1 parent 4cc5ba1 commit 1344dc2

6 files changed

Lines changed: 434 additions & 45 deletions

File tree

lib/definitions/ios.d.ts

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,36 +8,36 @@ declare global {
88
setupSigningForDevice(
99
projectRoot: string,
1010
projectData: IProjectData,
11-
buildConfig: IOSBuildData
11+
buildConfig: IOSBuildData,
1212
): Promise<void>;
1313
setupSigningFromTeam(
1414
projectRoot: string,
1515
projectData: IProjectData,
16-
teamId: string
16+
teamId: string,
1717
): Promise<void>;
1818
setupSigningFromProvision(
1919
projectRoot: string,
2020
projectData: IProjectData,
2121
provision?: string,
22-
mobileProvisionData?: any
22+
mobileProvisionData?: any,
2323
): Promise<void>;
2424
}
2525

2626
interface IXcodebuildService {
2727
buildForSimulator(
2828
platformData: IPlatformData,
2929
projectData: IProjectData,
30-
buildConfig: IBuildConfig
30+
buildConfig: IBuildConfig,
3131
): Promise<void>;
3232
buildForDevice(
3333
platformData: IPlatformData,
3434
projectData: IProjectData,
35-
buildConfig: IBuildConfig
35+
buildConfig: IBuildConfig,
3636
): Promise<string>;
3737
buildForAppStore(
3838
platformData: IPlatformData,
3939
projectData: IProjectData,
40-
buildConfig: IBuildConfig
40+
buildConfig: IBuildConfig,
4141
): Promise<string>;
4242
}
4343

@@ -47,35 +47,44 @@ declare global {
4747
applySPMPackages(
4848
platformData: IPlatformData,
4949
projectData: IProjectData,
50-
pluginSpmPackages?: IosSPMPackage[]
50+
pluginSpmPackages?: IosSPMPackage[],
5151
);
5252
getSPMPackages(
5353
projectData: IProjectData,
54-
platform: string
54+
platform: string,
5555
): IosSPMPackage[];
56+
resolveSPMDependencies(
57+
platformData: IPlatformData,
58+
projectData: IProjectData,
59+
options?: { showProgress?: boolean },
60+
): Promise<void>;
61+
ensureSPMDependenciesResolved(
62+
platformData: IPlatformData,
63+
projectData: IProjectData,
64+
): Promise<void>;
5665
}
5766

5867
interface IXcodebuildArgsService {
5968
getBuildForSimulatorArgs(
6069
platformData: IPlatformData,
6170
projectData: IProjectData,
62-
buildConfig: IBuildConfig
71+
buildConfig: IBuildConfig,
6372
): Promise<string[]>;
6473
getBuildForDeviceArgs(
6574
platformData: IPlatformData,
6675
projectData: IProjectData,
67-
buildConfig: IBuildConfig
76+
buildConfig: IBuildConfig,
6877
): Promise<string[]>;
6978
getXcodeProjectArgs(
7079
platformData: IPlatformData,
71-
projectData: IProjectData
80+
projectData: IProjectData,
7281
): string[];
7382
}
7483

7584
interface IXcodebuildCommandService {
7685
executeCommand(
7786
args: string[],
78-
options: IXcodebuildCommandOptions
87+
options: IXcodebuildCommandOptions,
7988
): Promise<ISpawnResult>;
8089
}
8190

@@ -84,18 +93,24 @@ declare global {
8493
cwd: string;
8594
stdio?: string;
8695
spawnOptions?: any;
96+
/**
97+
* When provided, xcodebuild's output is piped (rather than inherited) and
98+
* forwarded here so the caller can render its own progress UI (e.g. a
99+
* spinner for Swift Package resolution/download activity).
100+
*/
101+
onProgress?: (chunk: { data: string; pipe: string }) => void;
87102
}
88103

89104
interface IExportOptionsPlistService {
90105
createDevelopmentExportOptionsPlist(
91106
archivePath: string,
92107
projectData: IProjectData,
93-
buildConfig: IBuildConfig
108+
buildConfig: IBuildConfig,
94109
): Promise<IExportOptionsPlistOutput>;
95110
createDistributionExportOptionsPlist(
96111
projectRoot: string,
97112
projectData: IProjectData,
98-
buildConfig: IBuildConfig
113+
buildConfig: IBuildConfig,
99114
): Promise<IExportOptionsPlistOutput>;
100115
}
101116

lib/services/ios-project-service.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,14 @@ export class IOSProjectService
440440
): Promise<void> {
441441
const platformData = this.getPlatformData(projectData);
442442

443+
// On a first build, the runtime (and any other Swift packages) download
444+
// here. Pre-resolve under a clear spinner so the subsequent
445+
// "Xcode build..." step doesn't appear to hang while that happens.
446+
await this.$spmService.ensureSPMDependenciesResolved(
447+
platformData,
448+
projectData,
449+
);
450+
443451
const handler = (data: any) => {
444452
this.emit(constants.BUILD_OUTPUT_EVENT_NAME, data);
445453
};

0 commit comments

Comments
 (0)