Skip to content

Commit 15bf493

Browse files
authored
removing unneeded code, cleanup some todo items (#1)
1 parent 905dde9 commit 15bf493

7 files changed

Lines changed: 30 additions & 52 deletions

File tree

Sources/XcodeProject/Archiving/PBXPListArchiver.swift

Lines changed: 12 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import Foundation
1010

1111
public protocol StreamWritable: class {
12-
func write(_ string: String)
12+
func write(_ string: String) throws
1313
}
1414

1515
public class ConsoleStreamWriter: StreamWritable {
@@ -80,41 +80,17 @@ struct Format {
8080
var indentation: Indentation = Indentation()
8181
}
8282

83-
struct PBXObjectType: Hashable, CustomStringConvertible {
84-
let type: PBXObject.Type
85-
86-
init(type: PBXObject.Type) {
87-
self.type = type
88-
}
89-
90-
static func ==(lhs: PBXObjectType, rhs: PBXObjectType) -> Bool {
91-
return lhs.type == rhs.type
92-
}
93-
94-
var hashValue: Int {
95-
return String(describing: type).hashValue
96-
}
97-
98-
var description: String {
99-
return String(describing: type)
100-
}
101-
}
102-
10383
struct ObjectMap {
104-
let objectMap: [PBXObjectType: [PBXObject]]
84+
let objectMap: [String: [PBXObject]]
10585

10686
init(project: PBXProject) {
107-
var buckets: [PBXObjectType: [PBXObject]] = [:]
87+
var buckets: [String: [PBXObject]] = [:]
10888

10989
let visitor = ObjectVisitor()
11090
visitor.visit(object: project)
11191

112-
visitor.types.forEach {
113-
buckets[$0] = []
114-
}
115-
11692
visitor.allObjects.forEach { object in
117-
buckets[PBXObjectType(type: type(of: object))]!.append(object)
93+
buckets[String(describing: type(of: object)), default: []].append(object)
11894
}
11995

12096
self.objectMap = buckets
@@ -134,23 +110,23 @@ public final class PBXPListArchiver {
134110
archiveDictionary[ProjectFile.RootKey.rootObject] = projectFile.project.plistID
135111
}
136112

137-
public func write(stream: StreamWritable) {
113+
public func write(stream: StreamWritable) throws {
138114
var format = Format()
139115

140-
stream.write("// !$*UTF8*$!\(format.endOfLine)")
141-
stream.write("{\(format.endOfLine)")
116+
try stream.write("// !$*UTF8*$!\(format.endOfLine)")
117+
try stream.write("{\(format.endOfLine)")
142118
format.indentation.increase()
143-
archiveDictionary.sorted { (obj1, obj2) in
119+
try archiveDictionary.sorted { (obj1, obj2) in
144120
return obj1.key < obj2.key
145121
}.forEach { (key, value) in
146122
guard let value = value else { return }
147-
stream.write("\(format.indentation)\(key) = ")
148-
stream.write(value.plistRepresentation(format: format))
149-
stream.write(";\(format.endOfLine)")
123+
try stream.write("\(format.indentation)\(key) = ")
124+
try stream.write(value.plistRepresentation(format: format))
125+
try stream.write(";\(format.endOfLine)")
150126
}
151127
format.indentation.decrease()
152128

153-
stream.write("}\(format.endOfLine)")
129+
try stream.write("}\(format.endOfLine)")
154130
}
155131
}
156132

@@ -168,21 +144,13 @@ final class ObjectVisitor {
168144
object.visit(self)
169145
}
170146

171-
var types: [PBXObjectType] {
172-
return Array(Set(objectMap.map { PBXObjectType(type: type(of: $0.value)) }))
173-
}
174-
175147
var allObjects: [PBXObject] {
176148
return objects()
177149
}
178150

179151
func objects<T: PBXObject>() -> [T] {
180152
return objectMap.flatMap { return $0.value as? T }
181153
}
182-
183-
var keys: Set<PBXObject.ID> {
184-
return Set(objectMap.keys)
185-
}
186154
}
187155

188156
extension PBXObject {

Sources/XcodeProject/Archiving/PListArchivable.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,15 @@ extension ObjectMap: PListArchivable {
2424
func plist(objects: [PBXObject], format: Format) -> String {
2525
var str = ""
2626
objects.sorted { (obj1, obj2) -> Bool in
27-
obj1.globalID.rawValue < obj2.globalID.rawValue
27+
obj1.globalID < obj2.globalID
2828
}.forEach {
2929
str += $0.plistRepresentation(format: format)
3030
}
3131
return str
3232
}
3333
var str = "{\n"
3434
objectMap.sorted { (obj1, obj2) -> Bool in
35-
return obj1.key.description < obj2.key.description
35+
return obj1.key < obj2.key
3636
}.forEach { (key, value) in
3737
str += "\n/* Begin \(key) section */\n"
3838
var format = format

Sources/XcodeProject/Objects+Extensions/PBXGroup+FolderSync.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import Foundation
1111
public extension PBXGroup {
1212
@discardableResult
1313
func add(file: URL, createGroupsRecursively: Bool = true) -> PBXFileReference? {
14-
guard let url = url else { return nil } // TODO: return an absolute reference? or maybe a project one?
14+
guard let url = url else { return nil }
1515
var matchingComponentsCount = 0
1616
var filePathComponents = file.pathComponents
1717
for components in zip(url.pathComponents, filePathComponents) {

Sources/XcodeProject/Objects+Extensions/PBXProject+Helpers.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@
88

99
public extension PBXProject {
1010
func generateGlobalId() -> PBXObject.ID {
11-
return PBXObject.ID() // TODO: PBXProject should keep track of its already used ID's and prevent duplicates
11+
var objectId = PBXObject.ID()
12+
while objects[objectId] != nil {
13+
objectId = PBXObject.ID()
14+
}
15+
return objectId
1216
}
1317
}
1418
public extension PBXProject {

Sources/XcodeProject/Objects+Extensions/PBXReference+Extensions.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public extension PBXReference {
1212
var url: URL? {
1313
guard let sourceTree = sourceTree else { return nil }
1414
guard let project = parentProject else { return nil }
15-
let filePath = path ?? "" // TODO: this is probably not quite right
15+
let filePath = path ?? ""
1616
switch sourceTree {
1717
case .absolute:
1818
return URL(fileURLWithPath: filePath)

Sources/XcodeProject/Objects/PBXObject+ID.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,12 @@ extension PBXObject.ID: Hashable {
124124
}
125125
}
126126

127+
extension PBXObject.ID: Comparable {
128+
public static func <(lhs: PBXObject.ID, rhs: PBXObject.ID) -> Bool {
129+
return lhs.rawValue < rhs.rawValue
130+
}
131+
}
132+
127133
extension PropertyList {
128134
var globalID: PBXObject.ID? {
129135
return PBXObject.ID(rawValue: self.string)

Sources/XcodeProject/ProjectFile.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,14 +81,14 @@ public final class ProjectFile {
8181
}
8282
}
8383

84-
public func currentFileWrapper() -> FileWrapper {
84+
public func currentFileWrapper() throws -> FileWrapper {
8585
let currentFileWrapper = fileWrapper
8686

8787
let oldPbxproj = currentFileWrapper.fileWrappers!["project.pbxproj"]!
8888

8989
let dataStream = DataStreamWriter()
9090
let archiver = PBXPListArchiver(projectFile: self)
91-
archiver.write(stream: dataStream)
91+
try archiver.write(stream: dataStream)
9292
let newPbxproj = FileWrapper(regularFileWithContents: dataStream.data)
9393
newPbxproj.preferredFilename = "project.pbxproj"
9494

@@ -113,7 +113,7 @@ extension ProjectFile {
113113

114114
let dataStream = DataStreamWriter()
115115
let archiver = PBXPListArchiver(projectFile: self)
116-
archiver.write(stream: dataStream)
116+
try archiver.write(stream: dataStream)
117117
let newPbxproj = FileWrapper(regularFileWithContents: dataStream.data)
118118
newPbxproj.preferredFilename = "project.pbxproj"
119119

0 commit comments

Comments
 (0)