 
 public enum XCSchemeError: Error, CustomStringConvertible {
     case notFound(path: Path)
+    case missing(property: String)
     
     public var description: String {
         switch self {
         case .notFound(let path):
             return ".xcscheme couldn't be found at path \(path)"
+        case .missing(let property):
+            return "Property \(property) missing"
         }
     }
 }

            self.testables = testables
            self.macroExpansion = macroExpansion
        }
        public init(element: AEXMLElement) {
            self.buildConfiguration = element.attributes["buildConfiguration"]!
            self.selectedDebuggerIdentifier = element.attributes["selectedDebuggerIdentifier"]!
            self.selectedLauncherIdentifier = element.attributes["selectedLauncherIdentifier"]!
            self.shouldUseLaunchSchemeArgsEnv = element.attributes["shouldUseLaunchSchemeArgsEnv"] == "YES"
            self.testables = element["Testables"]["TestableReference"]
                .all?
                .map(TestableReference.init) ?? []
            self.macroExpansion = BuildableReference(element: element["MacroExpansion"]["BuildableReference"])
        }
        public func xmlElement() -> AEXMLElement {
            var attributes: [String: String] = [:]

            self.runnableDebuggingMode = runnableDebuggingMode
            self.buildableReference = buildableReference
        }
        public init(element: AEXMLElement) throws {
            self.runnableDebuggingMode = element.attributes["runnableDebuggingMode"]!
            self.buildableReference = try BuildableReference(element:  element["BuildableReference"])
        }
        public func xmlElement() -> AEXMLElement {
            let element = AEXMLElement(name: "BuildableProductRunnable",
