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
}