CreateBuildActionEntry(
            System.Xml.XmlDocument doc,
            System.Xml.XmlElement buildActionEntriesEl,
            Target target,
            Bam.Core.Array <Target> buildActionsCreated)
        {
#if true
#else
            // add all required dependencies in first (order matters)
            foreach (var required in target.TargetDependencies)
            {
                this.CreateBuildActionEntry(doc, buildActionEntriesEl, required., buildActionsCreated);
            }
#endif

            // the same target might appear again while iterating through the required targets of dependencies
            // only add it once (first one is important for ordering)
            if (buildActionsCreated.Contains(target))
            {
                return;
            }

            var buildActionEntry = doc.CreateElement("BuildActionEntry");
            buildActionEntriesEl.AppendChild(buildActionEntry);
            var buildableReference = doc.CreateElement("BuildableReference");
            buildActionEntry.AppendChild(buildableReference);
            {
                buildableReference.SetAttribute("BuildableIdentifier", "primary");
                buildableReference.SetAttribute("BlueprintIdentifier", target.GUID);
                if (null != target.getFileReference())
                {
                    buildableReference.SetAttribute("BuildableName", target.getFileReference().Name);
                }
                buildableReference.SetAttribute("BlueprintName", target.Name);
                if (target.Project.ProjectDir == this.Project.ProjectDir)
                {
                    buildableReference.SetAttribute("ReferencedContainer",
                                                    "container:" + System.IO.Path.GetFileName(this.Project.ProjectDir.ToString()));
                }
                else
                {
                    var relative = this.Project.GetRelativePathToProject(target.Project.ProjectDir);
                    buildableReference.SetAttribute("ReferencedContainer",
                                                    "container:" + relative);
                }
            }

            buildActionsCreated.Add(target);
        }
        CreateLaunchActions(
            System.Xml.XmlDocument doc,
            System.Xml.XmlElement schemeElement,
            Target target)
        {
            var launchActionEl = doc.CreateElement("LaunchAction");

            schemeElement.AppendChild(launchActionEl);
            {
                launchActionEl.SetAttribute("selectedDebuggerIdentifier", "Xcode.DebuggerFoundation.Debugger.LLDB");
                launchActionEl.SetAttribute("selectedLauncherIdentifier", "Xcode.DebuggerFoundation.Launcher.LLDB");
                launchActionEl.SetAttribute("buildConfiguration", target.ConfigurationList.ElementAt(0).Name);

                var productRunnableEl = doc.CreateElement("BuildableProductRunnable");
                launchActionEl.AppendChild(productRunnableEl);

                var buildableRefEl = doc.CreateElement("BuildableReference");
                productRunnableEl.AppendChild(buildableRefEl);

                buildableRefEl.SetAttribute("BuildableIdentifier", "primary");

                if (null != target.getFileReference())
                {
                    buildableRefEl.SetAttribute("BlueprintIdentifier", target.GUID);
                    buildableRefEl.SetAttribute("BuildableName", target.getFileReference().Name);
                    buildableRefEl.SetAttribute("BlueprintName", target.Name);
                }

                if (target.Project.ProjectDir == this.Project.ProjectDir)
                {
                    buildableRefEl.SetAttribute("ReferencedContainer",
                                                "container:" + System.IO.Path.GetFileName(target.Project.ProjectDir.ToString()));
                }
                else
                {
                    var relative = this.Project.GetRelativePathToProject(target.Project.ProjectDir);
                    buildableRefEl.SetAttribute("ReferencedContainer",
                                                "container:" + relative);
                }

                var targetAsExe = target.Module as C.ConsoleApplication;
                if (targetAsExe != null && targetAsExe.WorkingDirectory != null)
                {
                    launchActionEl.SetAttribute("useCustomWorkingDirectory", "YES");
                    targetAsExe.WorkingDirectory.Parse();
                    launchActionEl.SetAttribute("customWorkingDirectory", targetAsExe.WorkingDirectory.ToString());
                }
            }
        }