private bool WriteXcodeWorkspace() { bool bSuccess = true; var WorkspaceDataContent = new StringBuilder(); WorkspaceDataContent.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + ProjectFileGenerator.NewLine); WorkspaceDataContent.Append("<Workspace" + ProjectFileGenerator.NewLine); WorkspaceDataContent.Append(" version = \"1.0\">" + ProjectFileGenerator.NewLine); System.Action <List <MasterProjectFolder> /* Folders */, string /* Ident */> AddProjectsFunction = null; AddProjectsFunction = (FolderList, Ident) => { foreach (XcodeProjectFolder CurFolder in FolderList) { WorkspaceDataContent.Append(Ident + " <Group" + ProjectFileGenerator.NewLine); WorkspaceDataContent.Append(Ident + " location = \"container:\" name = \"" + CurFolder.FolderName + "\">" + ProjectFileGenerator.NewLine); AddProjectsFunction(CurFolder.SubFolders, Ident + " "); foreach (ProjectFile CurProject in CurFolder.ChildProjects) { XcodeProjectFile XcodeProject = CurProject as XcodeProjectFile; if (XcodeProject != null) { WorkspaceDataContent.Append(Ident + " <FileRef" + ProjectFileGenerator.NewLine); WorkspaceDataContent.Append(Ident + " location = \"group:" + XcodeProject.ProjectFilePath.MakeRelativeTo(ProjectFileGenerator.MasterProjectPath) + "\">" + ProjectFileGenerator.NewLine); WorkspaceDataContent.Append(Ident + " </FileRef>" + ProjectFileGenerator.NewLine); } } WorkspaceDataContent.Append(Ident + " </Group>" + ProjectFileGenerator.NewLine); } }; AddProjectsFunction(RootFolder.SubFolders, ""); WorkspaceDataContent.Append("</Workspace>" + ProjectFileGenerator.NewLine); string ProjectName = MasterProjectName; if (ProjectFilePlatform != XcodeProjectFilePlatform.All) { ProjectName += ProjectFilePlatform == XcodeProjectFilePlatform.Mac ? "_Mac" : (ProjectFilePlatform == XcodeProjectFilePlatform.iOS ? "_IOS" : "_TVOS"); } var WorkspaceDataFilePath = MasterProjectPath + "/" + ProjectName + ".xcworkspace/contents.xcworkspacedata"; bSuccess = WriteFileIfChanged(WorkspaceDataFilePath, WorkspaceDataContent.ToString(), new UTF8Encoding()); if (bSuccess) { var WorkspaceSettingsFilePath = MasterProjectPath + "/" + ProjectName + ".xcworkspace/xcuserdata/" + Environment.UserName + ".xcuserdatad/WorkspaceSettings.xcsettings"; bSuccess = WriteWorkspaceSettingsFile(WorkspaceSettingsFilePath); } return(bSuccess); }
private void AddPreGeneratedProject(ref string PBXBuildFileSection, ref string PBXFileReferenceSection, ref string PBXSourcesBuildPhaseSection, ref Dictionary<string, XcodeFileGroup> Groups, string ProjectPath) { var ProjectFileName = Utils.MakePathRelativeTo(ProjectPath, MasterProjectRelativePath); var XcodeProject = new XcodeProjectFile(ProjectFileName); string ProjectDirectory = Path.GetDirectoryName(ProjectPath); XcodeProject.AddFilesToProject(SourceFileSearch.FindFiles(new List<string>() { ProjectDirectory }, ExcludeNoRedistFiles: bExcludeNoRedistFiles, SubdirectoryNamesToExclude:new List<string>() { "obj" }, SearchSubdirectories:true, IncludePrivateSourceCode:true), null); XcodeProject.GenerateSectionsContents(ref PBXBuildFileSection, ref PBXFileReferenceSection, ref PBXSourcesBuildPhaseSection, ref Groups); }
private bool WriteXcodeWorkspace() { bool bSuccess = true; StringBuilder WorkspaceDataContent = new StringBuilder(); WorkspaceDataContent.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + ProjectFileGenerator.NewLine); WorkspaceDataContent.Append("<Workspace" + ProjectFileGenerator.NewLine); WorkspaceDataContent.Append(" version = \"1.0\">" + ProjectFileGenerator.NewLine); System.Action <List <MasterProjectFolder> /* Folders */, string /* Ident */> AddProjectsFunction = null; AddProjectsFunction = (FolderList, Ident) => { int SchemeIndex = 0; foreach (XcodeProjectFolder CurFolder in FolderList) { WorkspaceDataContent.Append(Ident + " <Group" + ProjectFileGenerator.NewLine); WorkspaceDataContent.Append(Ident + " location = \"container:\" name = \"" + CurFolder.FolderName + "\">" + ProjectFileGenerator.NewLine); AddProjectsFunction(CurFolder.SubFolders, Ident + " "); List <ProjectFile> ChildProjects = new List <ProjectFile>(CurFolder.ChildProjects); ChildProjects.Sort((ProjectFile A, ProjectFile B) => { return(A.ProjectFilePath.GetFileName().CompareTo(B.ProjectFilePath.GetFileName())); }); foreach (ProjectFile CurProject in ChildProjects) { XcodeProjectFile XcodeProject = CurProject as XcodeProjectFile; if (XcodeProject != null) { WorkspaceDataContent.Append(Ident + " <FileRef" + ProjectFileGenerator.NewLine); WorkspaceDataContent.Append(Ident + " location = \"group:" + XcodeProject.ProjectFilePath.MakeRelativeTo(ProjectFileGenerator.MasterProjectPath) + "\">" + ProjectFileGenerator.NewLine); WorkspaceDataContent.Append(Ident + " </FileRef>" + ProjectFileGenerator.NewLine); // Also, update project's schemes index so that the schemes list order match projects order in the navigator FileReference SchemeManagementFile = XcodeProject.ProjectFilePath + "/xcuserdata/" + Environment.UserName + ".xcuserdatad/xcschemes/xcschememanagement.plist"; if (FileReference.Exists(SchemeManagementFile)) { string SchemeManagementContent = FileReference.ReadAllText(SchemeManagementFile); SchemeManagementContent = SchemeManagementContent.Replace("<key>orderHint</key>\n\t\t\t<integer>1</integer>", "<key>orderHint</key>\n\t\t\t<integer>" + SchemeIndex.ToString() + "</integer>"); FileReference.WriteAllText(SchemeManagementFile, SchemeManagementContent); SchemeIndex++; } } } WorkspaceDataContent.Append(Ident + " </Group>" + ProjectFileGenerator.NewLine); } }; AddProjectsFunction(RootFolder.SubFolders, ""); WorkspaceDataContent.Append("</Workspace>" + ProjectFileGenerator.NewLine); string ProjectName = MasterProjectName; if (ProjectFilePlatform != XcodeProjectFilePlatform.All) { ProjectName += ProjectFilePlatform == XcodeProjectFilePlatform.Mac ? "_Mac" : (ProjectFilePlatform == XcodeProjectFilePlatform.iOS ? "_IOS" : "_TVOS"); } string WorkspaceDataFilePath = MasterProjectPath + "/" + ProjectName + ".xcworkspace/contents.xcworkspacedata"; bSuccess = WriteFileIfChanged(WorkspaceDataFilePath, WorkspaceDataContent.ToString(), new UTF8Encoding()); if (bSuccess) { string WorkspaceSettingsFilePath = MasterProjectPath + "/" + ProjectName + ".xcworkspace/xcuserdata/" + Environment.UserName + ".xcuserdatad/WorkspaceSettings.xcsettings"; bSuccess = WriteWorkspaceSettingsFile(WorkspaceSettingsFilePath); } return(bSuccess); }