Skip to content

Commit 447c159

Browse files
authored
Fix issue that multiple products of the same package cannot be added (#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]>
1 parent 069cdaf commit 447c159

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

Sources/XcodeProj/Objects/Project/PBXProject.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,7 @@ extension PBXProject {
440440

441441
let productDependency: XCSwiftPackageProductDependency
442442
// Avoid duplication
443-
if let product = objects.swiftPackageProductDependencies.first(where: { $0.value.package == reference })?.value {
443+
if let product = objects.swiftPackageProductDependencies.first(where: { $0.value.package == reference && $0.value.productName == productName })?.value {
444444
productDependency = product
445445
} else {
446446
productDependency = XCSwiftPackageProductDependency(productName: productName, package: reference)

Tests/XcodeProjTests/Objects/Project/PBXProjectTests.swift

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,19 +192,30 @@ final class PBXProjectTests: XCTestCase {
192192
productName: "Product",
193193
versionRequirement: .branch("main"),
194194
targetName: secondTarget.name)
195-
195+
let thirdPackageProduct = try project.addSwiftPackage(repositoryURL: "url",
196+
productName: "Product2",
197+
versionRequirement: .branch("main"),
198+
targetName: target.name)
196199
// Then
197200
XCTAssertEqual(packageProduct, secondPackageProduct)
201+
XCTAssertEqual(packageProduct, thirdPackageProduct)
198202
XCTAssertEqual(project.remotePackages.count, 1)
199-
XCTAssertEqual(target.packageProductDependencies, secondTarget.packageProductDependencies)
203+
XCTAssertEqual(target.packageProductDependencies.count, 2)
204+
XCTAssertEqual(secondTarget.packageProductDependencies.count, 1)
200205
XCTAssertNotEqual(buildPhase.files?.first?.hashValue, secondBuildPhase.files?.first?.hashValue)
201-
XCTAssertEqual(objects.swiftPackageProductDependencies.count, 1)
206+
XCTAssertEqual(objects.swiftPackageProductDependencies.count, 2)
202207

203208
XCTAssertThrowsSpecificError(try project.addSwiftPackage(repositoryURL: "url",
204209
productName: "Product",
205210
versionRequirement: .branch("second-main"),
206211
targetName: secondTarget.name),
207212
PBXProjError.multipleRemotePackages(productName: "Product"))
213+
214+
XCTAssertThrowsSpecificError(try project.addSwiftPackage(repositoryURL: "url",
215+
productName: "Product2",
216+
versionRequirement: .branch("second-main"),
217+
targetName: target.name),
218+
PBXProjError.multipleRemotePackages(productName: "Product2"))
208219
}
209220

210221
func test_addLocalSwiftPackage_duplication() throws {

0 commit comments

Comments
 (0)