Skip to content

Commit 85a4b91

Browse files
author
Fatme
authored
Merge pull request #3370 from NativeScript/fatme/faster-ios-build
fix(build): Speedup iOS build
2 parents 31d6ccd + 7cb2e40 commit 85a4b91

File tree

1 file changed

+28
-22
lines changed

1 file changed

+28
-22
lines changed

lib/services/ios-project-service.ts

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -198,12 +198,17 @@ export class IOSProjectService extends projectServiceBaseLib.PlatformProjectServ
198198
* Archive the Xcode project to .xcarchive.
199199
* Returns the path to the .xcarchive.
200200
*/
201-
public async archive(projectData: IProjectData, buildConfig?: IBuildConfig, options?: { archivePath?: string }): Promise<string> {
201+
public async archive(projectData: IProjectData, buildConfig?: IBuildConfig, options?: { archivePath?: string, additionalArgs?: string[] }): Promise<string> {
202202
const projectRoot = this.getPlatformData(projectData).projectRoot;
203203
const archivePath = options && options.archivePath ? path.resolve(options.archivePath) : path.join(projectRoot, "/build/archive/", projectData.projectName + ".xcarchive");
204-
const args = ["archive", "-archivePath", archivePath, "-configuration",
204+
let args = ["archive", "-archivePath", archivePath, "-configuration",
205205
(!buildConfig || buildConfig.release) ? "Release" : "Debug"]
206206
.concat(this.xcbuildProjectArgs(projectRoot, projectData, "scheme"));
207+
208+
if (options && options.additionalArgs) {
209+
args = args.concat(options.additionalArgs);
210+
}
211+
207212
await this.xcodebuild(args, projectRoot, buildConfig && buildConfig.buildOutputStdio);
208213
return archivePath;
209214
}
@@ -320,12 +325,9 @@ export class IOSProjectService extends projectServiceBaseLib.PlatformProjectServ
320325
}
321326

322327
public async buildProject(projectRoot: string, projectData: IProjectData, buildConfig: IBuildConfig): Promise<void> {
323-
let basicArgs = [
324-
"-configuration", buildConfig.release ? "Release" : "Debug",
325-
"build",
328+
const basicArgs = [
326329
'SHARED_PRECOMPS_DIR=' + path.join(projectRoot, 'build', 'sharedpch')
327330
];
328-
basicArgs = basicArgs.concat(this.xcbuildProjectArgs(projectRoot, projectData));
329331

330332
// Starting from tns-ios 1.4 the xcconfig file is referenced in the project template
331333
const frameworkVersion = this.getFrameworkVersion(this.getPlatformData(projectData).frameworkPackageName, projectData.projectDir);
@@ -353,7 +355,7 @@ export class IOSProjectService extends projectServiceBaseLib.PlatformProjectServ
353355
await attachAwaitDetach(constants.BUILD_OUTPUT_EVENT_NAME,
354356
this.$childProcess,
355357
handler,
356-
this.buildForSimulator(projectRoot, basicArgs, projectData, buildConfig.buildOutputStdio));
358+
this.buildForSimulator(projectRoot, basicArgs, projectData, buildConfig));
357359
}
358360

359361
this.validateApplicationIdentifier(projectData);
@@ -413,8 +415,7 @@ export class IOSProjectService extends projectServiceBaseLib.PlatformProjectServ
413415
await this.setupSigningForDevice(projectRoot, buildConfig, projectData);
414416
}
415417

416-
await this.xcodebuild(args, projectRoot, buildConfig.buildOutputStdio);
417-
await this.createIpa(projectRoot, projectData, buildConfig);
418+
await this.createIpa(projectRoot, projectData, buildConfig, args);
418419
}
419420

420421
private async xcodebuild(args: string[], cwd: string, stdio: any = "inherit"): Promise<ISpawnResult> {
@@ -535,20 +536,25 @@ export class IOSProjectService extends projectServiceBaseLib.PlatformProjectServ
535536
}
536537
}
537538

538-
private async buildForSimulator(projectRoot: string, args: string[], projectData: IProjectData, buildOutputStdio?: string): Promise<void> {
539-
args = args.concat([
540-
"-sdk", "iphonesimulator",
541-
"ARCHS=i386 x86_64",
542-
"VALID_ARCHS=i386 x86_64",
543-
"ONLY_ACTIVE_ARCH=NO",
544-
"CONFIGURATION_BUILD_DIR=" + path.join(projectRoot, "build", "emulator"),
545-
"CODE_SIGN_IDENTITY="
546-
]);
547-
await this.xcodebuild(args, projectRoot, buildOutputStdio);
539+
private async buildForSimulator(projectRoot: string, args: string[], projectData: IProjectData, buildConfig?: IBuildConfig): Promise<void> {
540+
args = args
541+
.concat([
542+
"build",
543+
"-configuration", buildConfig.release ? "Release" : "Debug",
544+
"-sdk", "iphonesimulator",
545+
"ARCHS=i386 x86_64",
546+
"VALID_ARCHS=i386 x86_64",
547+
"ONLY_ACTIVE_ARCH=NO",
548+
"CONFIGURATION_BUILD_DIR=" + path.join(projectRoot, "build", "emulator"),
549+
"CODE_SIGN_IDENTITY=",
550+
])
551+
.concat(this.xcbuildProjectArgs(projectRoot, projectData));
552+
553+
await this.xcodebuild(args, projectRoot, buildConfig.buildOutputStdio);
548554
}
549555

550-
private async createIpa(projectRoot: string, projectData: IProjectData, buildConfig: IBuildConfig): Promise<string> {
551-
const archivePath = await this.archive(projectData, buildConfig);
556+
private async createIpa(projectRoot: string, projectData: IProjectData, buildConfig: IBuildConfig, args: string[]): Promise<string> {
557+
const archivePath = await this.archive(projectData, buildConfig, { additionalArgs: args });
552558
const exportFileIpa = await this.exportDevelopmentArchive(projectData, buildConfig, { archivePath, provision: buildConfig.provision || buildConfig.mobileProvisionIdentifier });
553559
return exportFileIpa;
554560
}
@@ -1363,7 +1369,7 @@ We will now place an empty obsolete compatability white screen LauncScreen.xib f
13631369
}
13641370

13651371
private getExportOptionsMethod(projectData: IProjectData): string {
1366-
const embeddedMobileProvisionPath = path.join(this.getPlatformData(projectData).deviceBuildOutputPath, `${projectData.projectName}.app`, "embedded.mobileprovision");
1372+
const embeddedMobileProvisionPath = path.join(this.getPlatformData(projectData).projectRoot, "build", "archive", `${projectData.projectName}.xcarchive`, 'Products', 'Applications', `${projectData.projectName}.app`, "embedded.mobileprovision");
13671373
const provision = mobileprovision.provision.readFromFile(embeddedMobileProvisionPath);
13681374

13691375
return {

0 commit comments

Comments
 (0)