Browse Source

Xcode: Select executable target for execution in schema

Gregor Jasny 8 years ago
parent
commit
f4977d056b
2 changed files with 24 additions and 2 deletions
  1. 21 2
      Source/cmXCodeScheme.cxx
  2. 3 0
      Source/cmXCodeScheme.h

+ 21 - 2
Source/cmXCodeScheme.cxx

@@ -13,7 +13,8 @@
 cmXCodeScheme::cmXCodeScheme(cmXCodeObject* xcObj,
                              const std::vector<std::string>& configList,
                              unsigned int xcVersion)
-  : TargetName(xcObj->GetTarget()->GetName())
+  : Target(xcObj)
+  , TargetName(xcObj->GetTarget()->GetName())
   , TargetId(xcObj->GetId())
   , ConfigList(configList)
   , XcodeVersion(xcVersion)
@@ -135,7 +136,14 @@ void cmXCodeScheme::WriteLaunchAction(cmXMLWriter& xout,
   xout.Attribute("debugServiceExtension", "internal");
   xout.Attribute("allowLocationSimulation", "YES");
 
-  xout.StartElement("MacroExpansion");
+  if (IsExecutable(this->Target)) {
+    xout.StartElement("BuildableProductRunnable");
+    xout.BreakAttributes();
+    xout.Attribute("runnableDebuggingMode", "0");
+
+  } else {
+    xout.StartElement("MacroExpansion");
+  }
 
   xout.StartElement("BuildableReference");
   xout.BreakAttributes();
@@ -205,3 +213,14 @@ std::string cmXCodeScheme::FindConfiguration(const std::string& name)
 
   return name;
 }
+
+bool cmXCodeScheme::IsExecutable(const cmXCodeObject* target)
+{
+  cmGeneratorTarget* gt = target->GetTarget();
+  if (!gt) {
+    cmSystemTools::Error("Error no target on xobject\n");
+    return false;
+  }
+
+  return gt->GetType() == cmStateEnums::EXECUTABLE;
+}

+ 3 - 0
Source/cmXCodeScheme.h

@@ -24,6 +24,7 @@ public:
                               const std::string& container);
 
 private:
+  const cmXCodeObject* const Target;
   const std::string& TargetName;
   const std::string& TargetId;
   const std::vector<std::string>& ConfigList;
@@ -41,6 +42,8 @@ private:
 
   std::string WriteVersionString();
   std::string FindConfiguration(const std::string& name);
+
+  static bool IsExecutable(const cmXCodeObject* target);
 };
 
 #endif