Skip to content

Commit c6b7501

Browse files
committed
refactor: extract addExtensionToProject method
1 parent 9ae3d14 commit c6b7501

File tree

3 files changed

+64
-28
lines changed

3 files changed

+64
-28
lines changed

lib/definitions/xcode.d.ts

+29
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,34 @@ declare module "nativescript-dev-xcode" {
2727
updateBuildProperty(key: string, value: any): void;
2828

2929
pbxXCBuildConfigurationSection(): any;
30+
31+
addTarget(targetName: string, targetType: string, targetPath?: string): target;
32+
addBuildPhase(filePathsArray: string[],
33+
buildPhaseType: string,
34+
comment: string,
35+
target?: string,
36+
optionsOrFolderType?: Object|string,
37+
subfolderPath?: string
38+
): any;
39+
addToBuildSettings(buildSetting: string, value: any, targetUuid?: string): void;
40+
addPbxGroup(
41+
filePathsArray: string[],
42+
name: string,
43+
path: string,
44+
sourceTree: string,
45+
opt: {filesRelativeToProject?: boolean, target?: string, uuid?: string, isMain?: boolean }
46+
): group;
47+
addBuildProperty(prop: string, value: any, build_name?: string, productName?: string): void;
48+
addToHeaderSearchPaths(file: string|Object, productName?: string): void;
49+
}
50+
51+
class target {
52+
uuid: string;
53+
pbxNativeTarget: {productName: string}
54+
}
55+
56+
class group {
57+
uuid: string;
58+
pbxGroup: Object;
3059
}
3160
}

lib/node/xcode.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ import * as xcode from "nativescript-dev-xcode";
33
declare global {
44
type IXcode = typeof xcode;
55
export namespace IXcode {
6-
export type project = typeof xcode.project;
6+
export type target = xcode.target;
7+
export type project = xcode.project;
78
export interface Options extends xcode.Options {} // tslint:disable-line
89
}
910
}

lib/services/ios-project-service.ts

+33-27
Original file line numberDiff line numberDiff line change
@@ -1126,39 +1126,45 @@ We will now place an empty obsolete compatability white screen LauncScreen.xib f
11261126
return stats.isDirectory() && !fileName.startsWith(".");
11271127
})
11281128
.forEach(extensionFolder => {
1129-
const extensionPath = path.join(extensionsFolderPath, extensionFolder);
1130-
const extensionRelativePath = path.relative(this.getPlatformData(projectData).projectRoot, extensionPath);
1131-
const group = this.getRootGroup(extensionFolder, extensionPath);
1132-
const target = project.addTarget(extensionFolder, 'app_extension', extensionRelativePath);
1133-
project.addBuildPhase([], 'PBXSourcesBuildPhase', 'Sources', target.uuid);
1134-
project.addBuildPhase([], 'PBXResourcesBuildPhase', 'Resources', target.uuid);
1135-
project.addBuildPhase([], 'PBXFrameworksBuildPhase', 'Frameworks', target.uuid);
1136-
1137-
const extJsonPath = path.join(extensionsFolderPath, extensionFolder, "extension.json");
1138-
if(this.$fs.exists(extJsonPath)) {
1139-
const extensionJson = this.$fs.readJson(extJsonPath);
1140-
_.forEach(extensionJson.frameworks, framework => {
1141-
project.addFramework(
1142-
framework,
1143-
{ target: target.uuid }
1144-
);
1145-
});
1146-
if(extensionJson.assetcatalogCompilerAppiconName){
1147-
project.addToBuildSettings("ASSETCATALOG_COMPILER_APPICON_NAME", extensionJson.assetcatalogCompilerAppiconName, target.uuid);
1148-
}
1149-
}
1150-
1151-
project.addPbxGroup(group.files, group.name, group.path, null, { isMain: true, target: target.uuid, filesRelativeToProject: true });
1152-
project.addBuildProperty("PRODUCT_BUNDLE_IDENTIFIER", `${projectData.projectIdentifiers.ios}.${extensionFolder}`, "Debug", extensionFolder);
1153-
project.addBuildProperty("PRODUCT_BUNDLE_IDENTIFIER", `${projectData.projectIdentifiers.ios}.${extensionFolder}`, "Release", extensionFolder);
1154-
targetUuids.push(target.uuid);
1155-
project.addToHeaderSearchPaths(group.path, target.pbxNativeTarget.productName);
1129+
const targetUuid = this.addExtensionToProject(extensionsFolderPath, extensionFolder, project, projectData);
1130+
targetUuids.push(targetUuid);
11561131
});
11571132

11581133
this.savePbxProj(project, projectData, true);
11591134
this.prepareExtensionSigning(targetUuids, projectData);
11601135
}
11611136

1137+
private addExtensionToProject(extensionsFolderPath: string, extensionFolder: string, project: IXcode.project, projectData: IProjectData): string {
1138+
const extensionPath = path.join(extensionsFolderPath, extensionFolder);
1139+
const extensionRelativePath = path.relative(this.getPlatformData(projectData).projectRoot, extensionPath);
1140+
const group = this.getRootGroup(extensionFolder, extensionPath);
1141+
const target = project.addTarget(extensionFolder, 'app_extension', extensionRelativePath);
1142+
project.addBuildPhase([], 'PBXSourcesBuildPhase', 'Sources', target.uuid);
1143+
project.addBuildPhase([], 'PBXResourcesBuildPhase', 'Resources', target.uuid);
1144+
project.addBuildPhase([], 'PBXFrameworksBuildPhase', 'Frameworks', target.uuid);
1145+
1146+
const extJsonPath = path.join(extensionsFolderPath, extensionFolder, "extension.json");
1147+
if(this.$fs.exists(extJsonPath)) {
1148+
const extensionJson = this.$fs.readJson(extJsonPath);
1149+
_.forEach(extensionJson.frameworks, framework => {
1150+
project.addFramework(
1151+
framework,
1152+
{ target: target.uuid }
1153+
);
1154+
});
1155+
if(extensionJson.assetcatalogCompilerAppiconName){
1156+
project.addToBuildSettings("ASSETCATALOG_COMPILER_APPICON_NAME", extensionJson.assetcatalogCompilerAppiconName, target.uuid);
1157+
}
1158+
}
1159+
1160+
project.addPbxGroup(group.files, group.name, group.path, null, { isMain: true, target: target.uuid, filesRelativeToProject: true });
1161+
project.addBuildProperty("PRODUCT_BUNDLE_IDENTIFIER", `${projectData.projectIdentifiers.ios}.${extensionFolder}`, "Debug", extensionFolder);
1162+
project.addBuildProperty("PRODUCT_BUNDLE_IDENTIFIER", `${projectData.projectIdentifiers.ios}.${extensionFolder}`, "Release", extensionFolder);
1163+
project.addToHeaderSearchPaths(group.path, target.pbxNativeTarget.productName);
1164+
1165+
return target.uuid
1166+
}
1167+
11621168
private prepareExtensionSigning(targetUuids: string[], projectData:IProjectData) {
11631169
const xcode = this.$pbxprojDomXcode.Xcode.open(this.getPbxProjPath(projectData));
11641170
const signing = xcode.getSigning(projectData.projectName);

0 commit comments

Comments
 (0)