Пример #1
0
        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);
        }