public XCProject( string filePath ) : this() { if( !System.IO.Directory.Exists( filePath ) ) { Debug.LogWarning( "Path does not exists." ); return; } if( filePath.EndsWith( ".xcodeproj" ) ) { //Debug.Log( "Opening project " + filePath ); this.projectRootPath = Path.GetDirectoryName( filePath ); this.filePath = filePath; } else { //Debug.Log( "Looking for xcodeproj files in " + filePath ); string[] projects = System.IO.Directory.GetDirectories( filePath, "*.xcodeproj" ); if( projects.Length == 0 ) { Debug.LogWarning( "Error: missing xcodeproj file" ); return; } this.projectRootPath = filePath; this.filePath = projects[ 0 ]; } // Convert to absolute this.projectRootPath = Path.GetFullPath(this.projectRootPath); projectFileInfo = new FileInfo( Path.Combine( this.filePath, "project.pbxproj" ) ); StreamReader sr = projectFileInfo.OpenText(); string contents = sr.ReadToEnd(); sr.Close(); PBXParser parser = new PBXParser(); _datastore = parser.Decode( contents ); if( _datastore == null ) { throw new System.Exception( "Project file not found at file path " + filePath ); } if( !_datastore.ContainsKey( "objects" ) ) { Debug.Log( "Errore " + _datastore.Count ); return; } _objects = (PBXDictionary)_datastore["objects"]; modified = false; _rootObjectKey = (string)_datastore["rootObject"]; if( !string.IsNullOrEmpty( _rootObjectKey ) ) { // _rootObject = (PBXDictionary)_objects[ _rootObjectKey ]; _project = new PBXProject( _rootObjectKey, (PBXDictionary)_objects[ _rootObjectKey ] ); // _rootGroup = (PBXDictionary)_objects[ (string)_rootObject[ "mainGroup" ] ]; _rootGroup = new PBXGroup( _rootObjectKey, (PBXDictionary)_objects[ _project.mainGroupID ] ); } else { Debug.LogWarning( "error: project has no root object" ); _project = null; _rootGroup = null; } }
public PBXGroup GetGroup( string name, string path = null, PBXGroup parent = null ) { // Debug.Log( "GetGroup: " + name + ", " + path + ", " + parent ); if( string.IsNullOrEmpty( name ) ) return null; if( parent == null ) parent = rootGroup; foreach( KeyValuePair<string, PBXGroup> current in groups ) { // Debug.Log( "current: " + current.Value.guid + ", " + current.Value.name + ", " + current.Value.path + " - " + parent.HasChild( current.Key ) ); if( string.IsNullOrEmpty( current.Value.name ) ) { if( current.Value.path.CompareTo( name ) == 0 && parent.HasChild( current.Key ) ) { return current.Value; } } else if( current.Value.name.CompareTo( name ) == 0 && parent.HasChild( current.Key ) ) { return current.Value; } } PBXGroup result = new PBXGroup( name, path ); groups.Add( result ); parent.AddChild( result ); modified = true; return result; // def get_or_create_group(self, name, path=None, parent=None): // if not name: // return None // // if not parent: // parent = self.root_group // elif not isinstance(parent, PBXGroup): // # assume it's an id // parent = self.objects.get(parent, self.root_group) // // groups = self.get_groups_by_name(name) // // for grp in groups: // if parent.has_child(grp.id): // return grp // // grp = PBXGroup.Create(name, path) // parent.add_child(grp) // // self.objects[grp.id] = grp // // self.modified = True // // return grp }
// public PBXDictionary<PBXBuildPhase> GetBuildPhase( string buildPhase ) // { // switch( buildPhase ) { // case "PBXFrameworksBuildPhase": // return (PBXDictionary<PBXBuildPhase>)frameworkBuildPhases; // case "PBXResourcesBuildPhase": // return (PBXDictionary<PBXBuildPhase>)resourcesBuildPhases; // case "PBXShellScriptBuildPhase": // return (PBXDictionary<PBXBuildPhase>)shellScriptBuildPhases; // case "PBXSourcesBuildPhase": // return (PBXDictionary<PBXBuildPhase>)sourcesBuildPhases; // case "PBXCopyFilesBuildPhase": // return (PBXDictionary<PBXBuildPhase>)copyBuildPhases; // default: // return default(T); // } // } public PBXDictionary AddFile( string filePath, PBXGroup parent = null, string tree = "SOURCE_ROOT", bool createBuildFiles = true, bool weak = false ) { PBXDictionary results = new PBXDictionary(); string absPath = string.Empty; if( Path.IsPathRooted( filePath ) ) { absPath = filePath; // Debug.Log( "Is rooted: " + absPath ); } else if( tree.CompareTo( "SDKROOT" ) != 0) { absPath = Path.Combine( Application.dataPath.Replace("Assets", ""), filePath ); // Debug.Log( "RElative: " + absPath ); } if( !( File.Exists( absPath ) || Directory.Exists( absPath ) ) && tree.CompareTo( "SDKROOT" ) != 0 ) { Debug.Log( "Missing file: " + absPath + " > " + filePath ); return results; } else if( tree.CompareTo( "SOURCE_ROOT" ) == 0 || tree.CompareTo( "GROUP" ) == 0 ) { System.Uri fileURI = new System.Uri( absPath ); System.Uri rootURI = new System.Uri( ( projectRootPath + "/." ) ); filePath = rootURI.MakeRelativeUri( fileURI ).ToString(); } // else { // tree = "<absolute>"; // Debug.Log( "3: " + filePath ); // } // Debug.Log( "Add file result path: " + filePath ); if( parent == null ) { parent = _rootGroup; } // TODO: Aggiungere controllo se file già presente PBXFileReference fileReference = GetFile( System.IO.Path.GetFileName( filePath ) ); if( fileReference != null ) { // Debug.Log( "File già presente." ); return null; } fileReference = new PBXFileReference( filePath, (TreeEnum)System.Enum.Parse( typeof(TreeEnum), tree ) ); parent.AddChild( fileReference ); fileReferences.Add( fileReference ); results.Add( fileReference.guid, fileReference ); //Create a build file for reference if( !string.IsNullOrEmpty( fileReference.buildPhase ) && createBuildFiles ) { // PBXDictionary<PBXBuildPhase> currentPhase = GetBuildPhase( fileReference.buildPhase ); PBXBuildFile buildFile; switch( fileReference.buildPhase ) { case "PBXFrameworksBuildPhase": foreach( KeyValuePair<string, PBXFrameworksBuildPhase> currentObject in frameworkBuildPhases ) { buildFile = new PBXBuildFile( fileReference, weak ); buildFiles.Add( buildFile ); currentObject.Value.AddBuildFile( buildFile ); } if ( !string.IsNullOrEmpty( absPath ) && File.Exists(absPath) && tree.CompareTo( "SOURCE_ROOT" ) == 0 ) { //Debug.LogError(absPath); string libraryPath = Path.Combine( "$(SRCROOT)", Path.GetDirectoryName( filePath ) ); this.AddLibrarySearchPaths( new PBXList(libraryPath) ); } else if (!string.IsNullOrEmpty( absPath ) && Directory.Exists(absPath) && absPath.EndsWith(".framework") && tree.CompareTo("GROUP") == 0) { // Annt: Add framework search path for FacebookSDK string frameworkPath = Path.Combine( "$(SRCROOT)", Path.GetDirectoryName( filePath ) ); this.AddFrameworkSearchPaths(new PBXList(frameworkPath)); } break; case "PBXResourcesBuildPhase": foreach( KeyValuePair<string, PBXResourcesBuildPhase> currentObject in resourcesBuildPhases ) { buildFile = new PBXBuildFile( fileReference, weak ); buildFiles.Add( buildFile ); currentObject.Value.AddBuildFile( buildFile ); } break; case "PBXShellScriptBuildPhase": foreach( KeyValuePair<string, PBXShellScriptBuildPhase> currentObject in shellScriptBuildPhases ) { buildFile = new PBXBuildFile( fileReference, weak ); buildFiles.Add( buildFile ); currentObject.Value.AddBuildFile( buildFile ); } break; case "PBXSourcesBuildPhase": foreach( KeyValuePair<string, PBXSourcesBuildPhase> currentObject in sourcesBuildPhases ) { buildFile = new PBXBuildFile( fileReference, weak ); buildFiles.Add( buildFile ); currentObject.Value.AddBuildFile( buildFile ); } break; case "PBXCopyFilesBuildPhase": foreach( KeyValuePair<string, PBXCopyFilesBuildPhase> currentObject in copyBuildPhases ) { buildFile = new PBXBuildFile( fileReference, weak ); buildFiles.Add( buildFile ); currentObject.Value.AddBuildFile( buildFile ); } break; case null: Debug.LogWarning( "fase non supportata null" ); break; default: Debug.LogWarning( "fase non supportata def" ); return null; } } // Debug.Log( "Results " + results.Count + " - " ); // foreach( KeyValuePair<string, object> obj in results ){ // Debug.Log( obj.Key + " - " + obj.Value.GetType().Name ); // } return results; // def add_file(self, f_path, parent=None, tree='SOURCE_ROOT', create_build_files=True, weak=False): // results = [] // // abs_path = '' // // if os.path.isabs(f_path): // abs_path = f_path // // if not os.path.exists(f_path): // return results // elif tree == 'SOURCE_ROOT': // f_path = os.path.relpath(f_path, self.source_root) // else: // tree = '<absolute>' // // if not parent: // parent = self.root_group // elif not isinstance(parent, PBXGroup): // # assume it's an id // parent = self.objects.get(parent, self.root_group) // // file_ref = PBXFileReference.Create(f_path, tree) // parent.add_child(file_ref) // results.append(file_ref) // # create a build file for the file ref // if file_ref.build_phase and create_build_files: // phases = self.get_build_phases(file_ref.build_phase) // // for phase in phases: // build_file = PBXBuildFile.Create(file_ref, weak=weak) // // phase.add_build_file(build_file) // results.append(build_file) // // if abs_path and tree == 'SOURCE_ROOT' and os.path.isfile(abs_path)\ // and file_ref.build_phase == 'PBXFrameworksBuildPhase': // // library_path = os.path.join('$(SRCROOT)', os.path.split(f_path)[0]) // // self.add_library_search_paths([library_path], recursive=False) // // for r in results: // self.objects[r.id] = r // // if results: // self.modified = True // // return results }
public bool AddFolder( string folderPath, PBXGroup parent = null, string[] exclude = null, bool recursive = true, bool createBuildFile = true ) { if( !Directory.Exists( folderPath ) ) return false; DirectoryInfo sourceDirectoryInfo = new DirectoryInfo( folderPath ); if( exclude == null ) exclude = new string[] {}; string regexExclude = string.Format( @"{0}", string.Join( "|", exclude ) ); if( parent == null ) parent = rootGroup; // Create group PBXGroup newGroup = GetGroup( sourceDirectoryInfo.Name, null /*relative path*/, parent ); // groups.Add( newGroup ); foreach( string directory in Directory.GetDirectories( folderPath ) ) { if( Regex.IsMatch( directory, regexExclude ) ) { continue; } // special_folders = ['.bundle', '.framework', '.xcodeproj'] //Debug.Log( "DIR: " + directory ); if( directory.EndsWith( ".bundle" ) ) { // Treath it like a file and copy even if not recursive Debug.LogWarning( "This is a special folder: " + directory ); AddFile( directory, newGroup, "SOURCE_ROOT", createBuildFile ); Debug.Log( "fatto" ); continue; } if( recursive ) { Debug.Log( "recursive" ); AddFolder( directory, newGroup, exclude, recursive, createBuildFile ); } } // Adding files. foreach( string file in Directory.GetFiles( folderPath ) ) { if( Regex.IsMatch( file, regexExclude ) ) { continue; } //Debug.Log( "--> " + file + ", " + newGroup ); AddFile( file, newGroup, "SOURCE_ROOT", createBuildFile ); } modified = true; return modified; // def add_folder(self, os_path, parent=None, excludes=None, recursive=True, create_build_files=True): // if not os.path.isdir(os_path): // return [] // // if not excludes: // excludes = [] // // results = [] // // if not parent: // parent = self.root_group // elif not isinstance(parent, PBXGroup): // # assume it's an id // parent = self.objects.get(parent, self.root_group) // // path_dict = {os.path.split(os_path)[0]:parent} // special_list = [] // // for (grp_path, subdirs, files) in os.walk(os_path): // parent_folder, folder_name = os.path.split(grp_path) // parent = path_dict.get(parent_folder, parent) // // if [sp for sp in special_list if parent_folder.startswith(sp)]: // continue // // if folder_name.startswith('.'): // special_list.append(grp_path) // continue // // if os.path.splitext(grp_path)[1] in XcodeProject.special_folders: // # if this file has a special extension (bundle or framework mainly) treat it as a file // special_list.append(grp_path) // // new_files = self.verify_files([folder_name], parent=parent) // // if new_files: // results.extend(self.add_file(grp_path, parent, create_build_files=create_build_files)) // // continue // // # create group // grp = self.get_or_create_group(folder_name, path=self.get_relative_path(grp_path) , parent=parent) // path_dict[grp_path] = grp // // results.append(grp) // // file_dict = {} // // for f in files: // if f[0] == '.' or [m for m in excludes if re.match(m,f)]: // continue // // kwds = { // 'create_build_files': create_build_files, // 'parent': grp, // 'name': f // } // // f_path = os.path.join(grp_path, f) // // file_dict[f_path] = kwds // // new_files = self.verify_files([n.get('name') for n in file_dict.values()], parent=grp) // // add_files = [(k,v) for k,v in file_dict.items() if v.get('name') in new_files] // // for path, kwds in add_files: // kwds.pop('name', None) // // self.add_file(path, **kwds) // // if not recursive: // break // // for r in results: // self.objects[r.id] = r // // return results }
public PBXGroup GetGroup(string name, string path = null, PBXGroup parent = null) { // Debug.Log( "GetGroup: " + name + ", " + path + ", " + parent ); if (string.IsNullOrEmpty(name)) { return(null); } if (parent == null) { parent = rootGroup; } foreach (KeyValuePair <string, PBXGroup> current in groups) { // Debug.Log( "current: " + current.Value.guid + ", " + current.Value.name + ", " + current.Value.path + " - " + parent.HasChild( current.Key ) ); if (string.IsNullOrEmpty(current.Value.name)) { if (current.Value.path.CompareTo(name) == 0 && parent.HasChild(current.Key)) { return(current.Value); } } else if (current.Value.name.CompareTo(name) == 0 && parent.HasChild(current.Key)) { return(current.Value); } } PBXGroup result = new PBXGroup(name, path); groups.Add(result); parent.AddChild(result); modified = true; return(result); // def get_or_create_group(self, name, path=None, parent=None): // if not name: // return None // // if not parent: // parent = self.root_group // elif not isinstance(parent, PBXGroup): // # assume it's an id // parent = self.objects.get(parent, self.root_group) // // groups = self.get_groups_by_name(name) // // for grp in groups: // if parent.has_child(grp.id): // return grp // // grp = PBXGroup.Create(name, path) // parent.add_child(grp) // // self.objects[grp.id] = grp // // self.modified = True // // return grp }
public XCProject(string filePath) : this() { if (!System.IO.Directory.Exists(filePath)) { Debug.LogWarning("Path does not exists."); return; } if (filePath.EndsWith(".xcodeproj")) { //Debug.Log( "Opening project " + filePath ); this.projectRootPath = Path.GetDirectoryName(filePath); this.filePath = filePath; } else { //Debug.Log( "Looking for xcodeproj files in " + filePath ); string[] projects = System.IO.Directory.GetDirectories(filePath, "*.xcodeproj"); if (projects.Length == 0) { Debug.LogWarning("Error: missing xcodeproj file"); return; } this.projectRootPath = filePath; this.filePath = projects[0]; } // Convert to absolute this.projectRootPath = Path.GetFullPath(this.projectRootPath); projectFileInfo = new FileInfo(Path.Combine(this.filePath, "project.pbxproj")); StreamReader sr = projectFileInfo.OpenText(); string contents = sr.ReadToEnd(); sr.Close(); PBXParser parser = new PBXParser(); _datastore = parser.Decode(contents); if (_datastore == null) { throw new System.Exception("Project file not found at file path " + filePath); } if (!_datastore.ContainsKey("objects")) { Debug.Log("Errore " + _datastore.Count); return; } _objects = (PBXDictionary)_datastore["objects"]; modified = false; _rootObjectKey = (string)_datastore["rootObject"]; if (!string.IsNullOrEmpty(_rootObjectKey)) { // _rootObject = (PBXDictionary)_objects[ _rootObjectKey ]; _project = new PBXProject(_rootObjectKey, (PBXDictionary)_objects[_rootObjectKey]); // _rootGroup = (PBXDictionary)_objects[ (string)_rootObject[ "mainGroup" ] ]; _rootGroup = new PBXGroup(_rootObjectKey, (PBXDictionary)_objects[_project.mainGroupID]); } else { Debug.LogWarning("error: project has no root object"); _project = null; _rootGroup = null; } }
public bool AddFolder(string folderPath, PBXGroup parent = null, string[] exclude = null, bool recursive = true, bool createBuildFile = true) { if (!Directory.Exists(folderPath)) { return(false); } DirectoryInfo sourceDirectoryInfo = new DirectoryInfo(folderPath); if (exclude == null) { exclude = new string[] {} } ; string regexExclude = string.Format(@"{0}", string.Join("|", exclude)); if (parent == null) { parent = rootGroup; } // Create group PBXGroup newGroup = GetGroup(sourceDirectoryInfo.Name, null /*relative path*/, parent); // groups.Add( newGroup ); foreach (string directory in Directory.GetDirectories(folderPath)) { if (Regex.IsMatch(directory, regexExclude)) { continue; } // special_folders = ['.bundle', '.framework', '.xcodeproj'] //Debug.Log( "DIR: " + directory ); if (directory.EndsWith(".bundle")) { // Treath it like a file and copy even if not recursive Debug.LogWarning("This is a special folder: " + directory); AddFile(directory, newGroup, "SOURCE_ROOT", createBuildFile); Debug.Log("fatto"); continue; } if (recursive) { Debug.Log("recursive"); AddFolder(directory, newGroup, exclude, recursive, createBuildFile); } } // Adding files. foreach (string file in Directory.GetFiles(folderPath)) { if (Regex.IsMatch(file, regexExclude)) { continue; } //Debug.Log( "--> " + file + ", " + newGroup ); AddFile(file, newGroup, "SOURCE_ROOT", createBuildFile); } modified = true; return(modified); // def add_folder(self, os_path, parent=None, excludes=None, recursive=True, create_build_files=True): // if not os.path.isdir(os_path): // return [] // // if not excludes: // excludes = [] // // results = [] // // if not parent: // parent = self.root_group // elif not isinstance(parent, PBXGroup): // # assume it's an id // parent = self.objects.get(parent, self.root_group) // // path_dict = {os.path.split(os_path)[0]:parent} // special_list = [] // // for (grp_path, subdirs, files) in os.walk(os_path): // parent_folder, folder_name = os.path.split(grp_path) // parent = path_dict.get(parent_folder, parent) // // if [sp for sp in special_list if parent_folder.startswith(sp)]: // continue // // if folder_name.startswith('.'): // special_list.append(grp_path) // continue // // if os.path.splitext(grp_path)[1] in XcodeProject.special_folders: // # if this file has a special extension (bundle or framework mainly) treat it as a file // special_list.append(grp_path) // // new_files = self.verify_files([folder_name], parent=parent) // // if new_files: // results.extend(self.add_file(grp_path, parent, create_build_files=create_build_files)) // // continue // // # create group // grp = self.get_or_create_group(folder_name, path=self.get_relative_path(grp_path) , parent=parent) // path_dict[grp_path] = grp // // results.append(grp) // // file_dict = {} // // for f in files: // if f[0] == '.' or [m for m in excludes if re.match(m,f)]: // continue // // kwds = { // 'create_build_files': create_build_files, // 'parent': grp, // 'name': f // } // // f_path = os.path.join(grp_path, f) // // file_dict[f_path] = kwds // // new_files = self.verify_files([n.get('name') for n in file_dict.values()], parent=grp) // // add_files = [(k,v) for k,v in file_dict.items() if v.get('name') in new_files] // // for path, kwds in add_files: // kwds.pop('name', None) // // self.add_file(path, **kwds) // // if not recursive: // break // // for r in results: // self.objects[r.id] = r // // return results }
// public PBXDictionary<PBXBuildPhase> GetBuildPhase( string buildPhase ) // { // switch( buildPhase ) { // case "PBXFrameworksBuildPhase": // return (PBXDictionary<PBXBuildPhase>)frameworkBuildPhases; // case "PBXResourcesBuildPhase": // return (PBXDictionary<PBXBuildPhase>)resourcesBuildPhases; // case "PBXShellScriptBuildPhase": // return (PBXDictionary<PBXBuildPhase>)shellScriptBuildPhases; // case "PBXSourcesBuildPhase": // return (PBXDictionary<PBXBuildPhase>)sourcesBuildPhases; // case "PBXCopyFilesBuildPhase": // return (PBXDictionary<PBXBuildPhase>)copyBuildPhases; // default: // return default(T); // } // } public PBXDictionary AddFile(string filePath, PBXGroup parent = null, string tree = "SOURCE_ROOT", bool createBuildFiles = true, bool weak = false) { PBXDictionary results = new PBXDictionary(); string absPath = string.Empty; if (Path.IsPathRooted(filePath)) { absPath = filePath; // Debug.Log( "Is rooted: " + absPath ); } else if (tree.CompareTo("SDKROOT") != 0) { absPath = Path.Combine(Application.dataPath.Replace("Assets", ""), filePath); // Debug.Log( "RElative: " + absPath ); } if (!(File.Exists(absPath) || Directory.Exists(absPath)) && tree.CompareTo("SDKROOT") != 0) { Debug.Log("Missing file: " + absPath + " > " + filePath); return(results); } else if (tree.CompareTo("SOURCE_ROOT") == 0 || tree.CompareTo("GROUP") == 0) { System.Uri fileURI = new System.Uri(absPath); System.Uri rootURI = new System.Uri((projectRootPath + "/.")); filePath = rootURI.MakeRelativeUri(fileURI).ToString(); } // else { // tree = "<absolute>"; // Debug.Log( "3: " + filePath ); // } // Debug.Log( "Add file result path: " + filePath ); if (parent == null) { parent = _rootGroup; } // TODO: Aggiungere controllo se file già presente PBXFileReference fileReference = GetFile(System.IO.Path.GetFileName(filePath)); if (fileReference != null) { // Debug.Log( "File già presente." ); return(null); } fileReference = new PBXFileReference(filePath, (TreeEnum)System.Enum.Parse(typeof(TreeEnum), tree)); parent.AddChild(fileReference); fileReferences.Add(fileReference); results.Add(fileReference.guid, fileReference); //Create a build file for reference if (!string.IsNullOrEmpty(fileReference.buildPhase) && createBuildFiles) { // PBXDictionary<PBXBuildPhase> currentPhase = GetBuildPhase( fileReference.buildPhase ); PBXBuildFile buildFile; switch (fileReference.buildPhase) { case "PBXFrameworksBuildPhase": foreach (KeyValuePair <string, PBXFrameworksBuildPhase> currentObject in frameworkBuildPhases) { buildFile = new PBXBuildFile(fileReference, weak); buildFiles.Add(buildFile); currentObject.Value.AddBuildFile(buildFile); } if (!string.IsNullOrEmpty(absPath) && File.Exists(absPath) && tree.CompareTo("SOURCE_ROOT") == 0) { //Debug.LogError(absPath); string libraryPath = Path.Combine("$(SRCROOT)", Path.GetDirectoryName(filePath)); this.AddLibrarySearchPaths(new PBXList(libraryPath)); } else if (!string.IsNullOrEmpty(absPath) && Directory.Exists(absPath) && absPath.EndsWith(".framework") && tree.CompareTo("GROUP") == 0) // Annt: Add framework search path for FacebookSDK { string frameworkPath = Path.Combine("$(SRCROOT)", Path.GetDirectoryName(filePath)); this.AddFrameworkSearchPaths(new PBXList(frameworkPath)); } break; case "PBXResourcesBuildPhase": foreach (KeyValuePair <string, PBXResourcesBuildPhase> currentObject in resourcesBuildPhases) { buildFile = new PBXBuildFile(fileReference, weak); buildFiles.Add(buildFile); currentObject.Value.AddBuildFile(buildFile); } break; case "PBXShellScriptBuildPhase": foreach (KeyValuePair <string, PBXShellScriptBuildPhase> currentObject in shellScriptBuildPhases) { buildFile = new PBXBuildFile(fileReference, weak); buildFiles.Add(buildFile); currentObject.Value.AddBuildFile(buildFile); } break; case "PBXSourcesBuildPhase": foreach (KeyValuePair <string, PBXSourcesBuildPhase> currentObject in sourcesBuildPhases) { buildFile = new PBXBuildFile(fileReference, weak); buildFiles.Add(buildFile); currentObject.Value.AddBuildFile(buildFile); } break; case "PBXCopyFilesBuildPhase": foreach (KeyValuePair <string, PBXCopyFilesBuildPhase> currentObject in copyBuildPhases) { buildFile = new PBXBuildFile(fileReference, weak); buildFiles.Add(buildFile); currentObject.Value.AddBuildFile(buildFile); } break; case null: Debug.LogWarning("fase non supportata null"); break; default: Debug.LogWarning("fase non supportata def"); return(null); } } // Debug.Log( "Results " + results.Count + " - " ); // foreach( KeyValuePair<string, object> obj in results ){ // Debug.Log( obj.Key + " - " + obj.Value.GetType().Name ); // } return(results); // def add_file(self, f_path, parent=None, tree='SOURCE_ROOT', create_build_files=True, weak=False): // results = [] // // abs_path = '' // // if os.path.isabs(f_path): // abs_path = f_path // // if not os.path.exists(f_path): // return results // elif tree == 'SOURCE_ROOT': // f_path = os.path.relpath(f_path, self.source_root) // else: // tree = '<absolute>' // // if not parent: // parent = self.root_group // elif not isinstance(parent, PBXGroup): // # assume it's an id // parent = self.objects.get(parent, self.root_group) // // file_ref = PBXFileReference.Create(f_path, tree) // parent.add_child(file_ref) // results.append(file_ref) // # create a build file for the file ref // if file_ref.build_phase and create_build_files: // phases = self.get_build_phases(file_ref.build_phase) // // for phase in phases: // build_file = PBXBuildFile.Create(file_ref, weak=weak) // // phase.add_build_file(build_file) // results.append(build_file) // // if abs_path and tree == 'SOURCE_ROOT' and os.path.isfile(abs_path)\ // and file_ref.build_phase == 'PBXFrameworksBuildPhase': // // library_path = os.path.join('$(SRCROOT)', os.path.split(f_path)[0]) // // self.add_library_search_paths([library_path], recursive=False) // // for r in results: // self.objects[r.id] = r // // if results: // self.modified = True // // return results }
public void ApplyMod(XCMod mod) { PBXGroup modGroup = this.GetGroup(mod.group); //Debug.Log( "Adding libraries..." ); //PBXGroup librariesGroup = this.GetGroup( "Libraries" ); foreach (XCModFile libRef in mod.libs) { string completeLibPath = System.IO.Path.Combine("usr/lib", libRef.filePath); this.AddFile(completeLibPath, modGroup, "SDKROOT", true, libRef.isWeak); } //Debug.Log( "Adding frameworks..." ); PBXGroup frameworkGroup = this.GetGroup("Frameworks"); foreach (string framework in mod.frameworks) { string[] filename = framework.Split(':'); bool isWeak = (filename.Length > 1) ? true : false; string completePath = System.IO.Path.Combine("System/Library/Frameworks", filename[0]); this.AddFile(completePath, frameworkGroup, "SDKROOT", true, isWeak); } //Debug.Log( "Adding files..." ); foreach (string filePath in mod.files) { string absoluteFilePath = System.IO.Path.Combine(mod.path, filePath); if (filePath.EndsWith(".framework")) { this.AddFile(absoluteFilePath, frameworkGroup, "GROUP", true, false); } else { this.AddFile(absoluteFilePath, modGroup); } } //Debug.Log( "Adding folders..." ); foreach (string folderPath in mod.folders) { string absoluteFolderPath = System.IO.Path.Combine(mod.path, folderPath); this.AddFolder(absoluteFolderPath, modGroup, (string[])mod.excludes.ToArray(typeof(string))); } //Debug.Log( "Adding headerpaths..." ); foreach (string headerpath in mod.headerpaths) { string absoluteHeaderPath = System.IO.Path.Combine(mod.path, headerpath); this.AddHeaderSearchPaths(absoluteHeaderPath); } //Debug.Log( "Configure build settings..." ); Hashtable buildSettings = mod.buildSettings; if (buildSettings.ContainsKey("OTHER_LDFLAGS")) { Debug.Log(" Adding other linker flags..."); ArrayList otherLinkerFlags = (ArrayList)buildSettings["OTHER_LDFLAGS"]; foreach (string linker in otherLinkerFlags) { string _linker = linker; if (!_linker.StartsWith("-")) { _linker = "-" + _linker; } this.AddOtherLDFlags(_linker); } } if (buildSettings.ContainsKey("GCC_ENABLE_CPP_EXCEPTIONS")) { Debug.Log(" GCC_ENABLE_CPP_EXCEPTIONS = " + buildSettings["GCC_ENABLE_CPP_EXCEPTIONS"]); this.GccEnableCppExceptions((string)buildSettings["GCC_ENABLE_CPP_EXCEPTIONS"]); } if (buildSettings.ContainsKey("GCC_ENABLE_OBJC_EXCEPTIONS")) { Debug.Log(" GCC_ENABLE_OBJC_EXCEPTIONS = " + buildSettings["GCC_ENABLE_OBJC_EXCEPTIONS"]); this.GccEnableObjCExceptions((string)buildSettings["GCC_ENABLE_OBJC_EXCEPTIONS"]); } this.Consolidate(); }