Skip to content

Commit 2f925d2

Browse files
kimdvpepicrft
andauthored
feat: make PBXProject.compatibilityVersion optional and add PBXProject.preferredProjectObjectVersion to support Xcode 16 (#854)
* feat: Make compatibilityVersion optional * feat: Introduce `preferredProjectObjectVersion` * Increase the header-max-length of the PR title * Change the value to an array * Fix the syntax (again) --------- Co-authored-by: Pedro <[email protected]>
1 parent 4c9414f commit 2f925d2

File tree

11 files changed

+41
-5
lines changed

11 files changed

+41
-5
lines changed

.github/.commitlint.rules.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
module.exports = {
2+
rules: {
3+
'header-max-length': [2, 'always', 200],
4+
}
5+
}

.github/workflows/conventional-pr.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,6 @@ jobs:
1616
- uses: CondeNast/[email protected]
1717
with:
1818
commitTitleMatch: false
19+
commitlintRulesPath: ".github/.commitlint.rules.js"
1920
env:
2021
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Sources/XcodeProj/Objects/Project/PBXProject.swift

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ public final class PBXProject: PBXObject {
2121
}
2222

2323
/// A string representation of the XcodeCompatibilityVersion.
24-
public var compatibilityVersion: String
24+
public var compatibilityVersion: String?
25+
26+
/// An int representation of the PreferredProjectObjectVersion.
27+
public var preferredProjectObjectVersion: Int?
2528

2629
/// The region of development.
2730
public var developmentRegion: String?
@@ -286,6 +289,7 @@ public final class PBXProject: PBXObject {
286289
/// - name: xcodeproj's name.
287290
/// - buildConfigurationList: project build configuration list.
288291
/// - compatibilityVersion: project compatibility version.
292+
/// - preferredProjectObjectVersion: preferred project object version
289293
/// - mainGroup: project main group.
290294
/// - developmentRegion: project has development region.
291295
/// - hasScannedForEncodings: project has scanned for encodings.
@@ -300,7 +304,8 @@ public final class PBXProject: PBXObject {
300304
/// - targetAttributes: project target's attributes.
301305
public init(name: String,
302306
buildConfigurationList: XCConfigurationList,
303-
compatibilityVersion: String,
307+
compatibilityVersion: String?,
308+
preferredProjectObjectVersion: Int?,
304309
mainGroup: PBXGroup,
305310
developmentRegion: String? = nil,
306311
hasScannedForEncodings: Int = 0,
@@ -316,6 +321,7 @@ public final class PBXProject: PBXObject {
316321
self.name = name
317322
buildConfigurationListReference = buildConfigurationList.reference
318323
self.compatibilityVersion = compatibilityVersion
324+
self.preferredProjectObjectVersion = preferredProjectObjectVersion
319325
mainGroupReference = mainGroup.reference
320326
self.developmentRegion = developmentRegion
321327
self.hasScannedForEncodings = hasScannedForEncodings
@@ -338,6 +344,7 @@ public final class PBXProject: PBXObject {
338344
case name
339345
case buildConfigurationList
340346
case compatibilityVersion
347+
case preferredProjectObjectVersion
341348
case developmentRegion
342349
case hasScannedForEncodings
343350
case knownRegions
@@ -359,7 +366,8 @@ public final class PBXProject: PBXObject {
359366
name = try (container.decodeIfPresent(.name)) ?? ""
360367
let buildConfigurationListReference: String = try container.decode(.buildConfigurationList)
361368
self.buildConfigurationListReference = referenceRepository.getOrCreate(reference: buildConfigurationListReference, objects: objects)
362-
compatibilityVersion = try container.decode(.compatibilityVersion)
369+
compatibilityVersion = try container.decodeIfPresent(.compatibilityVersion)
370+
preferredProjectObjectVersion = try container.decodeIfPresent(.preferredProjectObjectVersion)
363371
developmentRegion = try container.decodeIfPresent(.developmentRegion)
364372
let hasScannedForEncodingsString: String? = try container.decodeIfPresent(.hasScannedForEncodings)
365373
hasScannedForEncodings = hasScannedForEncodingsString.flatMap { Int($0) } ?? 0
@@ -482,7 +490,9 @@ extension PBXProject: PlistSerializable {
482490
let buildConfigurationListCommentedString = CommentedString(buildConfigurationListReference.value,
483491
comment: buildConfigurationListComment)
484492
dictionary["buildConfigurationList"] = .string(buildConfigurationListCommentedString)
485-
dictionary["compatibilityVersion"] = .string(CommentedString(compatibilityVersion))
493+
if let compatibilityVersion {
494+
dictionary["compatibilityVersion"] = .string(CommentedString(compatibilityVersion))
495+
}
486496
if let developmentRegion {
487497
dictionary["developmentRegion"] = .string(CommentedString(developmentRegion))
488498
}
@@ -494,6 +504,9 @@ extension PBXProject: PlistSerializable {
494504
}
495505
let mainGroupObject: PBXGroup? = mainGroupReference.getObject()
496506
dictionary["mainGroup"] = .string(CommentedString(mainGroupReference.value, comment: mainGroupObject?.fileName()))
507+
if let preferredProjectObjectVersion {
508+
dictionary["preferredProjectObjectVersion"] = .string(CommentedString(preferredProjectObjectVersion.description))
509+
}
497510
if let productsGroupReference {
498511
let productRefGroupObject: PBXGroup? = productsGroupReference.getObject()
499512
dictionary["productRefGroup"] = .string(CommentedString(productsGroupReference.value,

Tests/XcodeProjTests/Objects/Files/PBXContainerItemProxyTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ final class PBXContainerItemProxyTests: XCTestCase {
2020

2121
func test_maintains_remoteID() {
2222
let target = PBXNativeTarget(name: "")
23-
let project = PBXProject(name: "", buildConfigurationList: XCConfigurationList(), compatibilityVersion: "", mainGroup: PBXGroup())
23+
let project = PBXProject(name: "", buildConfigurationList: XCConfigurationList(), compatibilityVersion: "", preferredProjectObjectVersion: nil, mainGroup: PBXGroup())
2424
let containerProxy = PBXContainerItemProxy(containerPortal: .project(project), remoteGlobalID: .object(target))
2525

2626
XCTAssertEqual(target.uuid, containerProxy.remoteGlobalID?.uuid)

Tests/XcodeProjTests/Objects/Files/PBXFileElementTests.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ final class PBXFileElementTests: XCTestCase {
5454
let project = PBXProject(name: "ProjectName",
5555
buildConfigurationList: XCConfigurationList(),
5656
compatibilityVersion: "0",
57+
preferredProjectObjectVersion: nil,
5758
mainGroup: mainGroup)
5859

5960
let objects = PBXObjects(objects: [project, mainGroup, fileref, group])
@@ -109,6 +110,7 @@ final class PBXFileElementTests: XCTestCase {
109110
let project = PBXProject(name: "ProjectName",
110111
buildConfigurationList: XCConfigurationList(),
111112
compatibilityVersion: "0",
113+
preferredProjectObjectVersion: nil,
112114
mainGroup: rootGroup)
113115

114116
let objects = PBXObjects(objects: [fileref, nestedGroup, rootGroup, project])

Tests/XcodeProjTests/Objects/Files/PBXGroupTests.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ final class PBXGroupTests: XCTestCase {
1818
let pbxProject = PBXProject(name: "ProjectName",
1919
buildConfigurationList: XCConfigurationList(),
2020
compatibilityVersion: "0",
21+
preferredProjectObjectVersion: nil,
2122
mainGroup: group)
2223
project.add(object: pbxProject)
2324

@@ -139,6 +140,7 @@ final class PBXGroupTests: XCTestCase {
139140
let pbxProject = PBXProject(name: "ProjectName",
140141
buildConfigurationList: XCConfigurationList(),
141142
compatibilityVersion: "0",
143+
preferredProjectObjectVersion: nil,
142144
mainGroup: group)
143145
project.add(object: pbxProject)
144146

@@ -163,6 +165,7 @@ final class PBXGroupTests: XCTestCase {
163165
let pbxProject = PBXProject(name: "ProjectName",
164166
buildConfigurationList: XCConfigurationList(),
165167
compatibilityVersion: "0",
168+
preferredProjectObjectVersion: nil,
166169
mainGroup: group)
167170
project.add(object: pbxProject)
168171

@@ -186,6 +189,7 @@ final class PBXGroupTests: XCTestCase {
186189
let pbxProject = PBXProject(name: "ProjectName",
187190
buildConfigurationList: XCConfigurationList(),
188191
compatibilityVersion: "0",
192+
preferredProjectObjectVersion: nil,
189193
mainGroup: group)
190194
project.add(object: pbxProject)
191195

Tests/XcodeProjTests/Objects/Project/PBXProject+Fixtures.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ extension PBXProject {
1010
PBXProject(name: name,
1111
buildConfigurationList: buildConfigurationList,
1212
compatibilityVersion: compatibilityVersion,
13+
preferredProjectObjectVersion: nil,
1314
mainGroup: mainGroup)
1415
}
1516
}

Tests/XcodeProjTests/Objects/Project/PBXProjectTests.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ final class PBXProjectTests: XCTestCase {
1212
let project = PBXProject(name: "",
1313
buildConfigurationList: XCConfigurationList(),
1414
compatibilityVersion: "",
15+
preferredProjectObjectVersion: nil,
1516
mainGroup: PBXGroup(),
1617
attributes: ["LastUpgradeCheck": "0940"],
1718
targetAttributes: [target: ["TestTargetID": "123"]])
@@ -54,6 +55,7 @@ final class PBXProjectTests: XCTestCase {
5455
let project = PBXProject(name: "Project",
5556
buildConfigurationList: configurationList,
5657
compatibilityVersion: "0",
58+
preferredProjectObjectVersion: nil,
5759
mainGroup: mainGroup,
5860
targets: [target])
5961

@@ -89,6 +91,7 @@ final class PBXProjectTests: XCTestCase {
8991
let project = PBXProject(name: "Project",
9092
buildConfigurationList: configurationList,
9193
compatibilityVersion: "0",
94+
preferredProjectObjectVersion: nil,
9295
mainGroup: mainGroup,
9396
targets: [target])
9497

@@ -125,6 +128,7 @@ final class PBXProjectTests: XCTestCase {
125128
let project = PBXProject(name: "Project",
126129
buildConfigurationList: configurationList,
127130
compatibilityVersion: "0",
131+
preferredProjectObjectVersion: nil,
128132
mainGroup: mainGroup,
129133
targets: [target])
130134

@@ -165,6 +169,7 @@ final class PBXProjectTests: XCTestCase {
165169
let project = PBXProject(name: "Project",
166170
buildConfigurationList: configurationList,
167171
compatibilityVersion: "0",
172+
preferredProjectObjectVersion: nil,
168173
mainGroup: mainGroup,
169174
targets: [target])
170175

@@ -218,6 +223,7 @@ final class PBXProjectTests: XCTestCase {
218223
let project = PBXProject(name: "Project",
219224
buildConfigurationList: configurationList,
220225
compatibilityVersion: "0",
226+
preferredProjectObjectVersion: nil,
221227
mainGroup: mainGroup,
222228
targets: [target, secondTarget])
223229

@@ -292,6 +298,7 @@ final class PBXProjectTests: XCTestCase {
292298
let project = PBXProject(name: "Project",
293299
buildConfigurationList: configurationList,
294300
compatibilityVersion: "0",
301+
preferredProjectObjectVersion: nil,
295302
mainGroup: mainGroup,
296303
targets: [target, secondTarget])
297304

Tests/XcodeProjTests/Objects/Targets/PBXAggregateTargetTests.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ final class PBXAggregateTargetTests: XCTestCase {
3939
let project = PBXProject(name: "Project",
4040
buildConfigurationList: configurationList,
4141
compatibilityVersion: "0",
42+
preferredProjectObjectVersion: nil,
4243
mainGroup: mainGroup)
4344

4445
objects.add(object: project)

Tests/XcodeProjTests/Objects/Targets/PBXNativeTargetTests.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ final class PBXNativeTargetTests: XCTestCase {
4040
let project = PBXProject(name: "Project",
4141
buildConfigurationList: configurationList,
4242
compatibilityVersion: "0",
43+
preferredProjectObjectVersion: nil,
4344
mainGroup: mainGroup)
4445

4546
objects.add(object: project)

0 commit comments

Comments
 (0)