Skip to content

Commit 50f7b54

Browse files
authored
Add headerVisibility support on PIFBuilder (#6167)
* Add headerVisibility for PIF builders * Add test for encoding header phase
1 parent b6f64f7 commit 50f7b54

File tree

3 files changed

+47
-14
lines changed

3 files changed

+47
-14
lines changed

Sources/XCBuildSupport/PIF.swift

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -775,44 +775,50 @@ public enum PIF {
775775
public var headerVisibility: HeaderVisibility? = nil
776776
public var platformFilters: [PlatformFilter]
777777

778-
public init(guid: GUID, file: FileReference, platformFilters: [PlatformFilter]) {
778+
public init(guid: GUID, file: FileReference, platformFilters: [PlatformFilter], headerVisibility: HeaderVisibility? = nil) {
779779
self.guid = guid
780780
self.reference = .file(guid: file.guid)
781781
self.platformFilters = platformFilters
782+
self.headerVisibility = headerVisibility
782783
}
783784

784-
public init(guid: GUID, fileGUID: PIF.GUID, platformFilters: [PlatformFilter]) {
785+
public init(guid: GUID, fileGUID: PIF.GUID, platformFilters: [PlatformFilter], headerVisibility: HeaderVisibility? = nil) {
785786
self.guid = guid
786787
self.reference = .file(guid: fileGUID)
787788
self.platformFilters = platformFilters
789+
self.headerVisibility = headerVisibility
788790
}
789791

790-
public init(guid: GUID, target: PIF.BaseTarget, platformFilters: [PlatformFilter]) {
792+
public init(guid: GUID, target: PIF.BaseTarget, platformFilters: [PlatformFilter], headerVisibility: HeaderVisibility? = nil) {
791793
self.guid = guid
792794
self.reference = .target(guid: target.guid)
793795
self.platformFilters = platformFilters
796+
self.headerVisibility = headerVisibility
794797
}
795798

796-
public init(guid: GUID, targetGUID: PIF.GUID, platformFilters: [PlatformFilter]) {
799+
public init(guid: GUID, targetGUID: PIF.GUID, platformFilters: [PlatformFilter], headerVisibility: HeaderVisibility? = nil) {
797800
self.guid = guid
798801
self.reference = .target(guid: targetGUID)
799802
self.platformFilters = platformFilters
803+
self.headerVisibility = headerVisibility
800804
}
801805

802-
public init(guid: GUID, reference: Reference, platformFilters: [PlatformFilter]) {
806+
public init(guid: GUID, reference: Reference, platformFilters: [PlatformFilter], headerVisibility: HeaderVisibility? = nil) {
803807
self.guid = guid
804808
self.reference = reference
805809
self.platformFilters = platformFilters
810+
self.headerVisibility = headerVisibility
806811
}
807812

808813
private enum CodingKeys: CodingKey {
809-
case guid, platformFilters, fileReference, targetReference
814+
case guid, platformFilters, fileReference, targetReference, headerVisibility
810815
}
811816

812817
public func encode(to encoder: Encoder) throws {
813818
var container = encoder.container(keyedBy: CodingKeys.self)
814819
try container.encode(guid, forKey: .guid)
815820
try container.encode(platformFilters, forKey: .platformFilters)
821+
try container.encodeIfPresent(headerVisibility, forKey: .headerVisibility)
816822

817823
switch self.reference {
818824
case .file(let fileGUID):
@@ -826,6 +832,7 @@ public enum PIF {
826832
let container = try decoder.container(keyedBy: CodingKeys.self)
827833
guid = try container.decode(GUID.self, forKey: .guid)
828834
platformFilters = try container.decode([PlatformFilter].self, forKey: .platformFilters)
835+
headerVisibility = try container.decodeIfPresent(HeaderVisibility.self, forKey: .headerVisibility)
829836

830837
if container.allKeys.contains(.fileReference) {
831838
reference = try .file(guid: container.decode(GUID.self, forKey: .fileReference))

Sources/XCBuildSupport/PIFBuilder.swift

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1151,9 +1151,9 @@ class PIFBaseTargetBuilder {
11511151

11521152
/// Convenience function to add a file reference to the Headers build phase, after creating it if needed.
11531153
@discardableResult
1154-
public func addHeaderFile(_ fileReference: PIFFileReferenceBuilder) -> PIFBuildFileBuilder {
1154+
public func addHeaderFile(_ fileReference: PIFFileReferenceBuilder, headerVisibility: PIF.BuildFile.HeaderVisibility) -> PIFBuildFileBuilder {
11551155
let headerPhase = buildPhases.first { $0 is PIFHeadersBuildPhaseBuilder } ?? addHeadersBuildPhase()
1156-
return headerPhase.addBuildFile(to: fileReference, platformFilters: [])
1156+
return headerPhase.addBuildFile(to: fileReference, platformFilters: [], headerVisibility: headerVisibility)
11571157
}
11581158

11591159
/// Convenience function to add a file reference to the Sources build phase, after creating it if needed.
@@ -1244,8 +1244,8 @@ class PIFBuildPhaseBuilder {
12441244
/// - Parameters:
12451245
/// - file: The builder for the file reference.
12461246
@discardableResult
1247-
func addBuildFile(to file: PIFFileReferenceBuilder, platformFilters: [PIF.PlatformFilter]) -> PIFBuildFileBuilder {
1248-
let builder = PIFBuildFileBuilder(file: file, platformFilters: platformFilters)
1247+
func addBuildFile(to file: PIFFileReferenceBuilder, platformFilters: [PIF.PlatformFilter], headerVisibility: PIF.BuildFile.HeaderVisibility? = nil) -> PIFBuildFileBuilder {
1248+
let builder = PIFBuildFileBuilder(file: file, platformFilters: platformFilters, headerVisibility: headerVisibility)
12491249
buildFiles.append(builder)
12501250
return builder
12511251
}
@@ -1319,18 +1319,22 @@ final class PIFBuildFileBuilder {
13191319

13201320
let platformFilters: [PIF.PlatformFilter]
13211321

1322-
fileprivate init(file: PIFFileReferenceBuilder, platformFilters: [PIF.PlatformFilter]) {
1322+
let headerVisibility: PIF.BuildFile.HeaderVisibility?
1323+
1324+
fileprivate init(file: PIFFileReferenceBuilder, platformFilters: [PIF.PlatformFilter], headerVisibility: PIF.BuildFile.HeaderVisibility? = nil) {
13231325
reference = .file(builder: file)
13241326
self.platformFilters = platformFilters
1327+
self.headerVisibility = headerVisibility
13251328
}
13261329

1327-
fileprivate init(targetGUID: PIF.GUID, platformFilters: [PIF.PlatformFilter]) {
1330+
fileprivate init(targetGUID: PIF.GUID, platformFilters: [PIF.PlatformFilter], headerVisibility: PIF.BuildFile.HeaderVisibility? = nil) {
13281331
reference = .target(guid: targetGUID)
13291332
self.platformFilters = platformFilters
1333+
self.headerVisibility = headerVisibility
13301334
}
13311335

13321336
func construct() -> PIF.BuildFile {
1333-
return PIF.BuildFile(guid: guid, reference: reference.pifReference, platformFilters: platformFilters)
1337+
PIF.BuildFile(guid: guid, reference: reference.pifReference, platformFilters: platformFilters, headerVisibility: headerVisibility)
13341338
}
13351339
}
13361340

Tests/XCBuildSupportTests/PIFTests.swift

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,17 @@ class PIFTests: XCTestCase {
103103
platformFilters: []
104104
)
105105
]
106+
),
107+
PIF.HeadersBuildPhase(
108+
guid: "target-exe-headers-build-phase-guid",
109+
buildFiles: [
110+
PIF.BuildFile(
111+
guid: "target-exe-headers-build-file-guid",
112+
targetGUID: "target-lib-guid",
113+
platformFilters: [],
114+
headerVisibility: .public
115+
)
116+
]
106117
)
107118
],
108119
dependencies: [
@@ -371,7 +382,7 @@ class PIFTests: XCTestCase {
371382
XCTFail("invalid number of build configurations")
372383
}
373384

374-
if let buildPhases = exeTargetContents["buildPhases"]?.array, buildPhases.count == 2 {
385+
if let buildPhases = exeTargetContents["buildPhases"]?.array, buildPhases.count == 3 {
375386
let buildPhase1 = buildPhases[0]
376387
XCTAssertEqual(buildPhase1["guid"]?.string, "target-exe-sources-build-phase-guid")
377388
XCTAssertEqual(buildPhase1["type"]?.string, "com.apple.buildphase.sources")
@@ -391,6 +402,17 @@ class PIFTests: XCTestCase {
391402
} else {
392403
XCTFail("invalid number of build files")
393404
}
405+
406+
let buildPhase3 = buildPhases[2]
407+
XCTAssertEqual(buildPhase3["guid"]?.string, "target-exe-headers-build-phase-guid")
408+
XCTAssertEqual(buildPhase3["type"]?.string, "com.apple.buildphase.headers")
409+
if let frameworks = buildPhase3["buildFiles"]?.array, frameworks.count == 1 {
410+
XCTAssertEqual(frameworks[0]["guid"]?.string, "target-exe-headers-build-file-guid")
411+
XCTAssertEqual(frameworks[0]["targetReference"]?.string, "target-lib-guid@11")
412+
XCTAssertEqual(frameworks[0]["headerVisibility"]?.string, "public")
413+
} else {
414+
XCTFail("invalid number of build files")
415+
}
394416
} else {
395417
XCTFail("invalid number of build configurations")
396418
}

0 commit comments

Comments
 (0)