diff --git a/lib/definitions/ios.d.ts b/lib/definitions/ios.d.ts index 5e766c39ca..248b25b7b4 100644 --- a/lib/definitions/ios.d.ts +++ b/lib/definitions/ios.d.ts @@ -57,7 +57,7 @@ declare global { buildConfig: IBuildConfig ): Promise; getXcodeProjectArgs( - projectRoot: string, + platformData: IPlatformData, projectData: IProjectData ): string[]; } diff --git a/lib/services/ios/spm-service.ts b/lib/services/ios/spm-service.ts index c5da44cd64..0d654e45bc 100644 --- a/lib/services/ios/spm-service.ts +++ b/lib/services/ios/spm-service.ts @@ -78,7 +78,7 @@ export class SPMService implements ISPMService { ) { await this.$xcodebuildCommandService.executeCommand( this.$xcodebuildArgsService - .getXcodeProjectArgs(platformData.projectRoot, projectData) + .getXcodeProjectArgs(platformData, projectData) .concat([ "-destination", "generic/platform=iOS", diff --git a/lib/services/ios/xcodebuild-args-service.ts b/lib/services/ios/xcodebuild-args-service.ts index 2282eecbbe..3b74d0b28e 100644 --- a/lib/services/ios/xcodebuild-args-service.ts +++ b/lib/services/ios/xcodebuild-args-service.ts @@ -53,7 +53,7 @@ export class XcodebuildArgsService implements IXcodebuildArgsService { ) ) .concat(this.getBuildLoggingArgs()) - .concat(this.getXcodeProjectArgs(platformData.projectRoot, projectData)); + .concat(this.getXcodeProjectArgs(platformData, projectData)); return args; } @@ -78,7 +78,7 @@ export class XcodebuildArgsService implements IXcodebuildArgsService { buildConfig.release ? Configurations.Release : Configurations.Debug, "-allowProvisioningUpdates", ] - .concat(this.getXcodeProjectArgs(platformData.projectRoot, projectData)) + .concat(this.getXcodeProjectArgs(platformData, projectData)) .concat(architectures) .concat( this.getBuildCommonArgs( @@ -108,38 +108,43 @@ export class XcodebuildArgsService implements IXcodebuildArgsService { } public getXcodeProjectArgs( - projectRoot: string, + platformData: IPlatformData, projectData: IProjectData ): string[] { const xcworkspacePath = path.join( - projectRoot, + platformData.projectRoot, `${projectData.projectName}.xcworkspace` ); // Introduced in Xcode 14+ // ref: https://forums.swift.org/t/telling-xcode-14-beta-4-to-trust-build-tool-plugins-programatically/59305/5 const skipPackageValidation = "-skipPackagePluginValidation"; + const extraArgs: string[] = [ + "-scheme", + projectData.projectName, + skipPackageValidation, + ]; + + const BUILD_SETTINGS_FILE_PATH = path.join( + projectData.appResourcesDirectoryPath, + platformData.normalizedPlatformName, + constants.BUILD_XCCONFIG_FILE_NAME + ); + + if (this.$fs.exists(BUILD_SETTINGS_FILE_PATH)) { + extraArgs.push("-xcconfig"); + extraArgs.push(BUILD_SETTINGS_FILE_PATH); + } + if (this.$fs.exists(xcworkspacePath)) { - return [ - "-workspace", - xcworkspacePath, - "-scheme", - projectData.projectName, - skipPackageValidation, - ]; + return ["-workspace", xcworkspacePath, ...extraArgs]; } const xcodeprojPath = path.join( - projectRoot, + platformData.projectRoot, `${projectData.projectName}.xcodeproj` ); - return [ - "-project", - xcodeprojPath, - "-scheme", - projectData.projectName, - skipPackageValidation, - ]; + return ["-project", xcodeprojPath, ...extraArgs]; } private getBuildLoggingArgs(): string[] {