/// <summary>
        ///   Adds the file.
        /// </summary>
        /// <param name = "groups">The groups.</param>
        /// <param name = "file">The file.</param>
        /// <param name = "sourceTree">The source tree.</param>
        /// <returns></returns>
        public PBXFileElement AddFile(String groups, String file, PBXSourceTree sourceTree)
        {
            lock (this.syncRoot) {
                // Prepare the group that will contain the file
                PBXGroup group = this.GetGroup (groups);
                PBXFileReference fileReference = null;
                PBXFileElement result = null;

                // Extract information
                String name = Path.GetFileName (file);
                String path = Path.GetFullPath (file);
                String rootDir = Path.GetFullPath (this.Dir);
                if (!String.IsNullOrEmpty(this.BaseDir)) {
                    rootDir = Path.Combine(rootDir, this.BaseDir);
                    rootDir = Path.GetFullPath (rootDir);
                }
                String parentDir = Path.GetDirectoryName (file);

                // If the file is localized, then add it to a variant group
                if (Path.GetExtension (parentDir).Equals (".lproj")) {
                    // The variant group may exists to search for it
                    PBXVariantGroup variantGroup = group.FindVariantGroup (name);
                    if (variantGroup == null) {
                        variantGroup = new PBXVariantGroup (name);
                        group.AddChild (variantGroup);
                    }

                    // The file is named like the language
                    name = Path.GetFileNameWithoutExtension (parentDir);
                    group = variantGroup;
                    result = variantGroup;
                }

                // Check if the file already exists
                fileReference = group.FindFileReference (name);
                if (fileReference == null) {
                    // Create a file reference
                    fileReference = new PBXFileReference (name);

                    // Set the source tree if none specified
                    if (sourceTree != PBXSourceTree.None) {
                        fileReference.SourceTree = sourceTree;
                    } else {
                        if (path.StartsWith (rootDir)) {
                            path = path.Substring (rootDir.Length + 1);
                            fileReference.SourceTree = PBXSourceTree.Group;
                        } else {
                            fileReference.SourceTree = PBXSourceTree.Absolute;
                        }
                    }
                    fileReference.Path = path;
                    fileReference.LastKnownFileType = GetFileType (file);

                    // Add it to the group
                    group.AddChild (fileReference);
                }

                return result ?? fileReference;
            }
        }
Example #2
0
        /// <summary>
        ///   Removes the file.
        /// </summary>
        /// <param name = "groups">The groups.</param>
        /// <param name = "file">The file.</param>
        /// <returns></returns>
        public PBXFileReference RemoveFile(String groups, String file)
        {
            lock (this.syncRoot) {
                // Prepare the group that contains the file
                PBXGroup         group         = this.GetGroup(groups);
                PBXFileReference fileReference = null;
                PBXFileElement   result        = null;

                // Extract information
                String name      = Path.GetFileName(file);
                String parentDir = Path.GetDirectoryName(file);

                // If the file is localized, search for the variant group
                if (Path.GetExtension(parentDir).Equals(".lproj"))
                {
                    PBXVariantGroup variantGroup = group.FindVariantGroup(name);
                    if (variantGroup != null)
                    {
                        // The file is named like the language
                        name = Path.GetFileNameWithoutExtension(parentDir);
                    }
                    group  = variantGroup;
                    result = variantGroup;
                }

                if (group != null)
                {
                    // Search for the file and remove it
                    fileReference = group.FindFileReference(name);
                    if (fileReference != null)
                    {
                        group.RemoveChild(fileReference);
                    }
                }

                if (result == null)
                {
                    result = fileReference;
                }
                return(fileReference);
            }
        }
        public void TestProjectGeneration001()
        {
            // Create the document
            PBXDocument document = new PBXDocument();
            PBXProject project = document.Project;

            PBXFileReference file1 = new PBXFileReference();
            file1.LastKnownFileType = PBXFileType.WrapperFramework;
            file1.Name = "Cocoa.framework";
            file1.Path = "/System/Library/Frameworks/Cocoa.framework";
            file1.LastKnownFileType = PBXFileType.WrapperFramework;
            file1.SourceTree = PBXSourceTree.SdkRoot;

            PBXFileReference file2 = new PBXFileReference();
            file2.LastKnownFileType = PBXFileType.WrapperFramework;
            file2.Name = "SurrogateTestAppDelegate.h";
            file2.Path = "SurrogateTestAppDelegate.h";
            file2.LastKnownFileType = PBXFileType.SourcecodeCH;
            file2.SourceTree = PBXSourceTree.Group;

            PBXFileReference file3 = new PBXFileReference();
            file3.LastKnownFileType = PBXFileType.WrapperFramework;
            file3.Name = "en";
            file3.Path = "en.lproj/MainMenu.xib";
            file3.LastKnownFileType = PBXFileType.FileXib;
            file3.SourceTree = PBXSourceTree.Group;

            PBXFileReference file4 = new PBXFileReference();
            file4.LastKnownFileType = PBXFileType.WrapperFramework;
            file4.Name = "fr";
            file4.Path = "fr.lproj/MainMenu.xib";
            file4.LastKnownFileType = PBXFileType.FileXib;
            file4.SourceTree = PBXSourceTree.Group;

            PBXVariantGroup variantGroup = new PBXVariantGroup("MainMenu.xib");
            variantGroup.SourceTree = PBXSourceTree.Group;
            variantGroup.AddChild(file3);
            variantGroup.AddChild(file4);

            PBXGroup group1 = new PBXGroup("Products");
            group1.SourceTree = PBXSourceTree.Group;

            PBXGroup group2 = new PBXGroup("Frameworks");
            group2.SourceTree = PBXSourceTree.Group;
            group2.AddChild(file1);

            PBXGroup group3 = new PBXGroup("Classes");
            group3.SourceTree = PBXSourceTree.Group;
            group3.AddChild(file2);

            PBXGroup group4 = new PBXGroup("Resources");
            group4.SourceTree = PBXSourceTree.Group;
            group4.AddChild(variantGroup);

            PBXGroup group5 = document.Project.MainGroup;
            group5.SourceTree = PBXSourceTree.Group;
            group5.AddChild(group3);
            group5.AddChild(group4);
            group5.AddChild(group2);
            group5.AddChild(group1);

            document.Project.ProductRefGroup = group1;

            // Add build configuration "Release"
            XCBuildConfiguration releaseConfiguration = new XCBuildConfiguration();
            releaseConfiguration.Name = "Release";
            project.BuildConfigurationList.AddBuildConfiguration(releaseConfiguration);
            project.BuildConfigurationList.DefaultConfigurationName = "Release";

            document.WriteToFile("project-001.pbxproj");
        }
Example #4
0
        /// <summary>
        ///   Adds the file.
        /// </summary>
        /// <param name = "groups">The groups.</param>
        /// <param name = "file">The file.</param>
        /// <param name = "sourceTree">The source tree.</param>
        /// <returns></returns>
        public PBXFileElement AddFile(String groups, String file, PBXSourceTree sourceTree)
        {
            lock (this.syncRoot) {
                // Prepare the group that will contain the file
                PBXGroup         group         = this.GetGroup(groups);
                PBXFileReference fileReference = null;
                PBXFileElement   result        = null;

                // Extract information
                String name    = Path.GetFileName(file);
                String path    = Path.GetFullPath(file);
                String rootDir = Path.GetFullPath(this.Dir);
                if (!String.IsNullOrEmpty(this.BaseDir))
                {
                    rootDir = Path.Combine(rootDir, this.BaseDir);
                    rootDir = Path.GetFullPath(rootDir);
                }
                String parentDir = Path.GetDirectoryName(file);

                // If the file is localized, then add it to a variant group
                if (Path.GetExtension(parentDir).Equals(".lproj"))
                {
                    // The variant group may exists to search for it
                    PBXVariantGroup variantGroup = group.FindVariantGroup(name);
                    if (variantGroup == null)
                    {
                        variantGroup = new PBXVariantGroup(name);
                        group.AddChild(variantGroup);
                    }

                    // The file is named like the language
                    name   = Path.GetFileNameWithoutExtension(parentDir);
                    group  = variantGroup;
                    result = variantGroup;
                }

                // Check if the file already exists
                fileReference = group.FindFileReference(name);
                if (fileReference == null)
                {
                    // Create a file reference
                    fileReference = new PBXFileReference(name);

                    // Set the source tree if none specified
                    if (sourceTree != PBXSourceTree.None)
                    {
                        fileReference.SourceTree = sourceTree;
                    }
                    else
                    {
                        if (path.StartsWith(rootDir))
                        {
                            path = path.Substring(rootDir.Length + 1);
                            fileReference.SourceTree = PBXSourceTree.Group;
                        }
                        else
                        {
                            fileReference.SourceTree = PBXSourceTree.Absolute;
                        }
                    }
                    fileReference.Path = path;
                    fileReference.LastKnownFileType = GetFileType(file);

                    // Add it to the group
                    group.AddChild(fileReference);
                }

                return(result ?? fileReference);
            }
        }