diff --git a/Sources/XcodeProj/Workspace/XCWorkspaceData.swift b/Sources/XcodeProj/Workspace/XCWorkspaceData.swift index 0a5601bee..b2c2d53c0 100644 --- a/Sources/XcodeProj/Workspace/XCWorkspaceData.swift +++ b/Sources/XcodeProj/Workspace/XCWorkspaceData.swift @@ -70,6 +70,8 @@ private extension XCWorkspaceDataElement { self = try .file(XCWorkspaceDataFileRef(element: element)) case "Group": self = try .group(XCWorkspaceDataGroup(element: element)) + case "FileSystemSynchronizedGroup": + self = try .fileSystemSynchronizedGroup(XCWorkspaceDataGroup(element: element, elementName: "FileSystemSynchronizedGroup")) default: throw Error.unknownName(element.name) } @@ -81,6 +83,8 @@ private extension XCWorkspaceDataElement { fileRef.xmlElement() case let .group(group): group.xmlElement() + case let .fileSystemSynchronizedGroup(group): + group.xmlElement(name: "FileSystemSynchronizedGroup") } } } @@ -93,8 +97,8 @@ private extension XCWorkspaceDataGroup { case missingLocationAttribute } - convenience init(element: AEXMLElement) throws { - guard element.name == "Group" else { + convenience init(element: AEXMLElement, elementName: String = "Group") throws { + guard element.name == elementName else { throw Error.wrongElementName } guard let location = element.attributes["location"] else { @@ -106,10 +110,10 @@ private extension XCWorkspaceDataGroup { self.init(location: locationType, name: name, children: children) } - func xmlElement() -> AEXMLElement { + func xmlElement(name: String = "Group") -> AEXMLElement { var attributes = ["location": location.description] - attributes["name"] = name - let element = AEXMLElement(name: "Group", value: nil, attributes: attributes) + attributes["name"] = self.name + let element = AEXMLElement(name: name, value: nil, attributes: attributes) _ = children .map { $0.xmlElement() } diff --git a/Sources/XcodeProj/Workspace/XCWorkspaceDataElement.swift b/Sources/XcodeProj/Workspace/XCWorkspaceDataElement.swift index 78467a716..03f9cc4db 100644 --- a/Sources/XcodeProj/Workspace/XCWorkspaceDataElement.swift +++ b/Sources/XcodeProj/Workspace/XCWorkspaceDataElement.swift @@ -7,6 +7,7 @@ public enum XCWorkspaceDataElement: Equatable { case file(XCWorkspaceDataFileRef) case group(XCWorkspaceDataGroup) + case fileSystemSynchronizedGroup(XCWorkspaceDataGroup) /// Returns the location to the workspace data element. public var location: XCWorkspaceDataElementLocationType { @@ -15,6 +16,8 @@ public enum XCWorkspaceDataElement: Equatable { ref.location case let .group(ref): ref.location + case let .fileSystemSynchronizedGroup(ref): + ref.location } } @@ -26,6 +29,8 @@ public enum XCWorkspaceDataElement: Equatable { lhs == rhs case let (.group(lhs), .group(rhs)): lhs == rhs + case let (.fileSystemSynchronizedGroup(lhs), .fileSystemSynchronizedGroup(rhs)): + lhs == rhs default: false }