Skip to content

Commit 50eb268

Browse files
ruslic19yonaskolb
andauthored
Fix missing productRefGroup in generated projects (#1591)
* Fix missing productRefGroup in generated projects * Update CHANGELOG --------- Co-authored-by: Yonas Kolb <yonaskolb@users.noreply.github.com>
1 parent 52f91e9 commit 50eb268

8 files changed

Lines changed: 59 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
## Next Version
44

5+
- Fix missing productRefGroup in generated projects #1591 @ruslic19
6+
57
## 2.45.1
68

79
### Added

Sources/XcodeGenKit/PBXProjGenerator.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ public class PBXProjGenerator {
190190
)
191191
)
192192
derivedGroups.append(productGroup)
193+
pbxProject.productsGroup = productGroup
193194

194195
let sortedProjectReferences = project.projectReferences.sorted { $0.name < $1.name }
195196
let subprojectFileReferences: [PBXFileReference] = sortedProjectReferences.map { projectReference in

Tests/Fixtures/CarthageProject/Project.xcodeproj/project.pbxproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,7 @@
335335
mainGroup = 293D0FF827366B513839236A;
336336
minimizedProjectReferenceProxies = 1;
337337
preferredProjectObjectVersion = 77;
338+
productRefGroup = AC523591AC7BE9275003D2DB /* Products */;
338339
projectDirPath = "";
339340
projectRoot = "";
340341
targets = (

Tests/Fixtures/SPM/SPM.xcodeproj/project.pbxproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,7 @@
263263
C6539B364583AE96C18CE377 /* XCLocalSwiftPackageReference "../../.." */,
264264
);
265265
preferredProjectObjectVersion = 77;
266+
productRefGroup = 5D68FDDE55EE935627A1B376 /* Products */;
266267
projectDirPath = "";
267268
projectRoot = "";
268269
targets = (

Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@
132132
mainGroup = 4E8CFA4275C972686621210C;
133133
minimizedProjectReferenceProxies = 1;
134134
preferredProjectObjectVersion = 77;
135+
productRefGroup = 6BB7980FAF18A93459B051A1 /* Products */;
135136
projectDirPath = "";
136137
projectRoot = "";
137138
targets = (

Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2499,6 +2499,7 @@
24992499
4EDA79334592CBBA0E507AD2 /* XCRemoteSwiftPackageReference "Swinject" */,
25002500
);
25012501
preferredProjectObjectVersion = 77;
2502+
productRefGroup = AC523591AC7BE9275003D2DB /* Products */;
25022503
projectDirPath = "";
25032504
projectReferences = (
25042505
{

Tests/Fixtures/scheme_test/TestProject.xcodeproj/project.pbxproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
mainGroup = 2D08B11F4EE060D112B7BCA1;
8686
minimizedProjectReferenceProxies = 1;
8787
preferredProjectObjectVersion = 77;
88+
productRefGroup = 5B8D13EAC88739DF2D92F8AE /* Products */;
8889
projectDirPath = "";
8990
projectRoot = "";
9091
targets = (

Tests/XcodeGenKitTests/PBXProjGeneratorTests.swift

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,57 @@ class PBXProjGeneratorTests: XCTestCase {
436436
}
437437
}
438438

439+
func testProductsGroupIsSet() throws {
440+
let target = Target(name: "TestApp", type: .application, platform: .iOS)
441+
let project = Project(name: "Test", targets: [target])
442+
let projGenerator = PBXProjGenerator(project: project)
443+
444+
let pbxProj = try projGenerator.generate()
445+
446+
let pbxProject = try XCTUnwrap(pbxProj.projects.first)
447+
let productsGroup = try XCTUnwrap(pbxProject.productsGroup)
448+
449+
XCTAssertEqual(productsGroup.name, "Products")
450+
XCTAssertEqual(productsGroup.children.count, 1)
451+
452+
let productReference = try XCTUnwrap(productsGroup.children.first as? PBXFileReference)
453+
XCTAssertEqual(productReference.path, "TestApp.app")
454+
}
455+
456+
func testProductsGroupIsSetWithMultipleTargets() throws {
457+
let appTarget = Target(name: "TestApp", type: .application, platform: .iOS)
458+
let frameworkTarget = Target(name: "TestFramework", type: .framework, platform: .iOS)
459+
let project = Project(name: "Test", targets: [appTarget, frameworkTarget])
460+
let projGenerator = PBXProjGenerator(project: project)
461+
462+
let pbxProj = try projGenerator.generate()
463+
464+
let pbxProject = try XCTUnwrap(pbxProj.projects.first)
465+
let productsGroup = try XCTUnwrap(pbxProject.productsGroup)
466+
467+
XCTAssertEqual(productsGroup.name, "Products")
468+
XCTAssertEqual(productsGroup.children.count, 2)
469+
470+
let productNames = productsGroup.children
471+
.compactMap { $0 as? PBXFileReference }
472+
.compactMap { $0.path }
473+
.sorted()
474+
XCTAssertEqual(productNames, ["TestApp.app", "TestFramework.framework"])
475+
}
476+
477+
func testProductsGroupIsSetWithNoTargets() throws {
478+
let project = Project(name: "Test")
479+
let projGenerator = PBXProjGenerator(project: project)
480+
481+
let pbxProj = try projGenerator.generate()
482+
483+
let pbxProject = try XCTUnwrap(pbxProj.projects.first)
484+
let productsGroup = try XCTUnwrap(pbxProject.productsGroup)
485+
486+
XCTAssertEqual(productsGroup.name, "Products")
487+
XCTAssertEqual(productsGroup.children.count, 0)
488+
}
489+
439490
func testPlatformDependencies() {
440491
describe {
441492
let directoryPath = Path("TestDirectory")

0 commit comments

Comments
 (0)