 
     var objects: [PBXObject] = []
     var fileReferencesByPath: [Path: String] = [:]
-    var groupsByPath: [String: PBXGroup] = [:]
+    var groupsByPath: [Path: PBXGroup] = [:]
 
     var targetNativeReferences: [String: String] = [:]
     var targetBuildFileReferences: [String: String] = [:]


        let groupPath: String = depth == 0 ? path.byRemovingBase(path: basePath).string : path.lastComponent
        let group: PBXGroup
        if let cachedGroup = groupsByPath[groupPath] {
            group = cachedGroup
        } else {
            group = PBXGroup(reference: groupReference, children: groupChildren, sourceTree: .group, name: path.lastComponent, path: groupPath)

        //TODO: handle targets with shared sources

        let sourceGroups = try getGroups(path: source, groupReference: id())

        let configs: [XCBuildConfiguration] = try spec.configs.map { config in
            let buildSettings = try getTargetBuildSettings(config: config, target: target)
