diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e794f8a5..173ca8694 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### Changed - **Breaking** Renamed module from `xcodeproj` to `XcodeProj` https://github.com/tuist/xcodeproj/pull/398 by @pepibumur. +- Add `override` flag to `PBXGroup.addFile(at:,sourceTree:,sourceRoot:)` https://github.com/tuist/xcodeproj/pull/410 by @mrylmz ### Added diff --git a/Sources/xcodeproj/Objects/Files/PBXGroup.swift b/Sources/xcodeproj/Objects/Files/PBXGroup.swift index 80108b827..5451a99bd 100644 --- a/Sources/xcodeproj/Objects/Files/PBXGroup.swift +++ b/Sources/xcodeproj/Objects/Files/PBXGroup.swift @@ -144,14 +144,16 @@ public extension PBXGroup { /// /// - Parameters: /// - filePath: path to the file. - /// - sourceTree: file sourceTree, default is `.group` + /// - sourceTree: file sourceTree, default is `.group`. /// - sourceRoot: path to project's source root. + /// - override: flag to enable overriding of existing file references, default is `true`. /// - Returns: new or existing file and its reference. @discardableResult func addFile( at filePath: Path, sourceTree: PBXSourceTree = .group, - sourceRoot: Path + sourceRoot: Path, + override: Bool = true ) throws -> PBXFileReference { let projectObjects = try objects() guard filePath.exists else { @@ -159,9 +161,11 @@ public extension PBXGroup { } let groupPath = try fullPath(sourceRoot: sourceRoot) - if let existingFileReference = try projectObjects.fileReferences.first(where: { + let isFileReferencePathEqual: (Dictionary.Element) throws -> Bool = { try filePath == $0.value.fullPath(sourceRoot: sourceRoot) - }) { + } + + if let existingFileReference = try projectObjects.fileReferences.first(where: isFileReferencePathEqual), override { if !childrenReferences.contains(existingFileReference.key) { existingFileReference.value.path = groupPath.flatMap { filePath.relative(to: $0) }?.string childrenReferences.append(existingFileReference.key)