Skip to content

Commit

Permalink
Fix issue that multiple products of the same package cannot be added (#…
Browse files Browse the repository at this point in the history
…801)

* - Also check for productName when trying to avoid duplicate swift packages

* Add equality checks in the unit test when adding a new swift package

---------

Co-authored-by: Kevin Pittevils <[email protected]>
  • Loading branch information
kevin-kp and kevin-kp committed Nov 21, 2023
1 parent 069cdaf commit 447c159
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 4 deletions.
2 changes: 1 addition & 1 deletion Sources/XcodeProj/Objects/Project/PBXProject.swift
Original file line number Diff line number Diff line change
Expand Up @@ -440,7 +440,7 @@ extension PBXProject {

let productDependency: XCSwiftPackageProductDependency
// Avoid duplication
if let product = objects.swiftPackageProductDependencies.first(where: { $0.value.package == reference })?.value {
if let product = objects.swiftPackageProductDependencies.first(where: { $0.value.package == reference && $0.value.productName == productName })?.value {
productDependency = product
} else {
productDependency = XCSwiftPackageProductDependency(productName: productName, package: reference)
Expand Down
17 changes: 14 additions & 3 deletions Tests/XcodeProjTests/Objects/Project/PBXProjectTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -192,19 +192,30 @@ final class PBXProjectTests: XCTestCase {
productName: "Product",
versionRequirement: .branch("main"),
targetName: secondTarget.name)

let thirdPackageProduct = try project.addSwiftPackage(repositoryURL: "url",
productName: "Product2",
versionRequirement: .branch("main"),
targetName: target.name)
// Then
XCTAssertEqual(packageProduct, secondPackageProduct)
XCTAssertEqual(packageProduct, thirdPackageProduct)
XCTAssertEqual(project.remotePackages.count, 1)
XCTAssertEqual(target.packageProductDependencies, secondTarget.packageProductDependencies)
XCTAssertEqual(target.packageProductDependencies.count, 2)
XCTAssertEqual(secondTarget.packageProductDependencies.count, 1)
XCTAssertNotEqual(buildPhase.files?.first?.hashValue, secondBuildPhase.files?.first?.hashValue)
XCTAssertEqual(objects.swiftPackageProductDependencies.count, 1)
XCTAssertEqual(objects.swiftPackageProductDependencies.count, 2)

XCTAssertThrowsSpecificError(try project.addSwiftPackage(repositoryURL: "url",
productName: "Product",
versionRequirement: .branch("second-main"),
targetName: secondTarget.name),
PBXProjError.multipleRemotePackages(productName: "Product"))

XCTAssertThrowsSpecificError(try project.addSwiftPackage(repositoryURL: "url",
productName: "Product2",
versionRequirement: .branch("second-main"),
targetName: target.name),
PBXProjError.multipleRemotePackages(productName: "Product2"))
}

func test_addLocalSwiftPackage_duplication() throws {
Expand Down

0 comments on commit 447c159

Please sign in to comment.