public static PBXContainerItemProxyData Create(string containerRef, string proxyType, string remoteGlobalGUID, string remoteInfo) { var res = new PBXContainerItemProxyData(); res.guid = PBXGUID.Generate(); res.SetPropertyString("isa", "PBXContainerItemProxy"); res.SetPropertyString("containerPortal", containerRef); // guid res.SetPropertyString("proxyType", proxyType); res.SetPropertyString("remoteGlobalIDString", remoteGlobalGUID); // guid res.SetPropertyString("remoteInfo", remoteInfo); return(res); }
// Returns the guid of the new target internal string AddAppExtension(string mainTarget, string name, string infoPlistPath) { string ext = ".appex"; var newTarget = CreateNewTarget(name, ext, "com.apple.product-type.app-extension"); SetDefaultAppExtensionReleaseBuildFlags(buildConfigs[BuildConfigByName(newTarget.guid, "Release")], infoPlistPath); SetDefaultAppExtensionDebugBuildFlags(buildConfigs[BuildConfigByName(newTarget.guid, "Debug")], infoPlistPath); var sourcesBuildPhase = PBXSourcesBuildPhaseData.Create(); sources.AddEntry(sourcesBuildPhase); newTarget.phases.AddGUID(sourcesBuildPhase.guid); var resourcesBuildPhase = PBXResourcesBuildPhaseData.Create(); resources.AddEntry(resourcesBuildPhase); newTarget.phases.AddGUID(resourcesBuildPhase.guid); var frameworksBuildPhase = PBXFrameworksBuildPhaseData.Create(); frameworks.AddEntry(frameworksBuildPhase); newTarget.phases.AddGUID(frameworksBuildPhase.guid); var copyFilesBuildPhase = PBXCopyFilesBuildPhaseData.Create("Embed App Extensions", "13"); copyFiles.AddEntry(copyFilesBuildPhase); nativeTargets[mainTarget].phases.AddGUID(copyFilesBuildPhase.guid); var containerProxy = PBXContainerItemProxyData.Create(project.project.guid, "1", newTarget.guid, name); containerItems.AddEntry(containerProxy); var targetDependency = PBXTargetDependencyData.Create(newTarget.guid, containerProxy.guid); targetDependencies.AddEntry(targetDependency); nativeTargets[mainTarget].dependencies.AddGUID(targetDependency.guid); var buildAppCopy = PBXBuildFileData.CreateFromFile(FindFileGuidByProjectPath("Products/" + name + ext), false, ""); BuildFilesAdd(mainTarget, buildAppCopy); copyFilesBuildPhase.files.AddGUID(buildAppCopy.guid); AddFile(infoPlistPath, name + "/Supporting Files/Info.plist", PBXSourceTree.Source); return(newTarget.guid); }
public void AddExternalLibraryDependency(string targetGuid, string filename, string remoteFileGuid, string projectPath, string remoteInfo) { PBXNativeTargetData target = this.nativeTargets[targetGuid]; filename = PBXPath.FixSlashes(filename); projectPath = PBXPath.FixSlashes(projectPath); string containerRef = this.FindFileGuidByRealPath(projectPath); if (containerRef == null) { throw new Exception("No such project"); } string guid = null; foreach (ProjectReference reference in this.project.project.projectReferences) { if (reference.projectRef == containerRef) { guid = reference.group; break; } } if (guid == null) { throw new Exception("Malformed project: no project in project references"); } PBXGroupData data2 = this.GroupsGet(guid); string extension = Path.GetExtension(filename); if (!FileTypeUtils.IsBuildableFile(extension)) { throw new Exception("Wrong file extension"); } PBXContainerItemProxyData data3 = PBXContainerItemProxyData.Create(containerRef, "2", remoteFileGuid, remoteInfo); this.containerItems.AddEntry(data3); string typeName = FileTypeUtils.GetTypeName(extension); PBXReferenceProxyData data4 = PBXReferenceProxyData.Create(filename, typeName, data3.guid, "BUILT_PRODUCTS_DIR"); this.references.AddEntry(data4); PBXBuildFileData buildFile = PBXBuildFileData.CreateFromFile(data4.guid, false, null); this.BuildFilesAdd(targetGuid, buildFile); this.BuildSectionAny(target, extension, false).files.AddGUID(buildFile.guid); data2.children.AddGUID(data4.guid); }
internal static void AddExternalLibraryDependency(this PBXProject proj, string targetGuid, string filename, string remoteFileGuid, string projectPath, string remoteInfo) { PBXNativeTargetData target = proj.nativeTargets[targetGuid]; filename = PBXPath.FixSlashes(filename); projectPath = PBXPath.FixSlashes(projectPath); string fileGuidByRealPath = proj.FindFileGuidByRealPath(projectPath); if (fileGuidByRealPath == null) { throw new Exception("No such project"); } string guid = (string)null; foreach (ProjectReference projectReference in proj.project.project.projectReferences) { if (projectReference.projectRef == fileGuidByRealPath) { guid = projectReference.group; break; } } if (guid == null) { throw new Exception("Malformed project: no project in project references"); } PBXGroupData pbxGroupData = proj.GroupsGet(guid); string extension = Path.GetExtension(filename); if (!FileTypeUtils.IsBuildableFile(extension)) { throw new Exception("Wrong file extension"); } PBXContainerItemProxyData containerItemProxyData = PBXContainerItemProxyData.Create(fileGuidByRealPath, "2", remoteFileGuid, remoteInfo); proj.containerItems.AddEntry(containerItemProxyData); string typeName = FileTypeUtils.GetTypeName(extension); PBXReferenceProxyData referenceProxyData = PBXReferenceProxyData.Create(filename, typeName, containerItemProxyData.guid, "BUILT_PRODUCTS_DIR"); proj.references.AddEntry(referenceProxyData); PBXBuildFileData fromFile = PBXBuildFileData.CreateFromFile(referenceProxyData.guid, false, (string)null); proj.BuildFilesAdd(targetGuid, fromFile); proj.BuildSectionAny(target, extension, false).files.AddGUID(fromFile.guid); pbxGroupData.children.AddGUID(referenceProxyData.guid); }
internal string AddAppExtension(string mainTarget, string name, string infoPlistPath) { string ext = ".appex"; PBXNativeTargetData data = this.CreateNewTarget(name, ext, "com.apple.product-type.app-extension"); this.SetDefaultAppExtensionReleaseBuildFlags(this.buildConfigs[this.BuildConfigByName(data.guid, "Release")], infoPlistPath); this.SetDefaultAppExtensionDebugBuildFlags(this.buildConfigs[this.BuildConfigByName(data.guid, "Debug")], infoPlistPath); PBXSourcesBuildPhaseData data2 = PBXSourcesBuildPhaseData.Create(); this.sources.AddEntry(data2); data.phases.AddGUID(data2.guid); PBXResourcesBuildPhaseData data3 = PBXResourcesBuildPhaseData.Create(); this.resources.AddEntry(data3); data.phases.AddGUID(data3.guid); PBXFrameworksBuildPhaseData data4 = PBXFrameworksBuildPhaseData.Create(); this.frameworks.AddEntry(data4); data.phases.AddGUID(data4.guid); PBXCopyFilesBuildPhaseData data5 = PBXCopyFilesBuildPhaseData.Create("Embed App Extensions", "13"); this.copyFiles.AddEntry(data5); this.nativeTargets[mainTarget].phases.AddGUID(data5.guid); PBXContainerItemProxyData data6 = PBXContainerItemProxyData.Create(this.project.project.guid, "1", data.guid, name); this.containerItems.AddEntry(data6); PBXTargetDependencyData data7 = PBXTargetDependencyData.Create(data.guid, data6.guid); this.targetDependencies.AddEntry(data7); this.nativeTargets[mainTarget].dependencies.AddGUID(data7.guid); PBXBuildFileData buildFile = PBXBuildFileData.CreateFromFile(this.FindFileGuidByProjectPath("Products/" + name + ext), false, ""); this.BuildFilesAdd(mainTarget, buildFile); data5.files.AddGUID(buildFile.guid); this.AddFile(infoPlistPath, name + "/Supporting Files/Info.plist", PBXSourceTree.Source); return(data.guid); }
/** This function must be called only after the project the library is in has * been added as a dependency via AddExternalProjectDependency. projectPath must be * the same as the 'path' parameter passed to the AddExternalProjectDependency. * remoteFileGuid must be the guid of the referenced file as specified in * PBXFileReference section of the external project * * TODO: what. is remoteInfo entry in PBXContainerItemProxy? Is in referenced project name or * referenced library name without extension? */ public void AddExternalLibraryDependency(string targetGuid, string filename, string remoteFileGuid, string projectPath, string remoteInfo) { PBXNativeTargetData target = nativeTargets[targetGuid]; filename = Utils.FixSlashesInPath(filename); projectPath = Utils.FixSlashesInPath(projectPath); // find the products group to put the new library in string projectGuid = FindFileGuidByRealPath(projectPath); if (projectGuid == null) { throw new Exception("No such project"); } string productsGroupGuid = null; foreach (var proj in project.project.projectReferences) { if (proj.projectRef == projectGuid) { productsGroupGuid = proj.group; break; } } if (productsGroupGuid == null) { throw new Exception("Malformed project: no project in project references"); } PBXGroupData productGroup = GroupsGet(productsGroupGuid); // verify file extension string ext = Path.GetExtension(filename); if (!FileTypeUtils.IsBuildableFile(ext)) { throw new Exception("Wrong file extension"); } // create ContainerItemProxy object var container = PBXContainerItemProxyData.Create(projectGuid, "2", remoteFileGuid, remoteInfo); containerItems.AddEntry(container); // create a reference and build file for the library string typeName = FileTypeUtils.GetTypeName(ext); var libRef = PBXReferenceProxyData.Create(filename, typeName, container.guid, "BUILT_PRODUCTS_DIR"); references.AddEntry(libRef); PBXBuildFileData libBuildFile = PBXBuildFileData.CreateFromFile(libRef.guid, false, null); BuildFilesAdd(targetGuid, libBuildFile); BuildSectionAny(target, ext, false).files.AddGUID(libBuildFile.guid); // add to products folder productGroup.children.AddGUID(libRef.guid); }