@@ -13,6 +13,7 @@ final class ProjectService {
13
13
enum Error : Swift . Error {
14
14
case noProjectFile
15
15
case cannotReadProject
16
+ case cannotFindProjectResources
16
17
}
17
18
18
19
enum PathType {
@@ -26,6 +27,7 @@ final class ProjectService {
26
27
static let outputPath = " $(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ "
27
28
static let projectExtension = " xcodeproj "
28
29
static let frameworkExtension = " framework "
30
+ static let resourcesBuildSectionEnd = " /* End PBXResourcesBuildPhase section */"
29
31
}
30
32
31
33
let fileManager : FileManager
@@ -59,7 +61,7 @@ final class ProjectService {
59
61
throw Error . cannotReadProject
60
62
}
61
63
let ( targetsRange, targets) = try targetsService. targets ( fromProjectString: body)
62
- let ( scriptsRange, scripts) = try shellScriptsService. scripts ( fromProjectString: body)
64
+ let ( scriptsRange, scripts) = shellScriptsService. scripts ( fromProjectString: body)
63
65
let ( _, frameworkScripts) = try frameworksService. scripts ( fromProjectString: body)
64
66
65
67
return Project ( name: projectFileName,
@@ -75,15 +77,29 @@ final class ProjectService {
75
77
/// - Parameter project: a project for updating.
76
78
/// - Throws: throws if it can not white a project to project file.
77
79
func update( _ project: Project ) throws {
78
- let newScriptsProjectString = project. body. replacingCharacters ( in: project. scriptsRange,
80
+ let newScriptsProjectString : String
81
+ if let scriptsRange = project. scriptsRange {
82
+ newScriptsProjectString = project. body. replacingCharacters ( in: scriptsRange,
79
83
with: shellScriptsService. string ( from: project. scripts) )
84
+ }
85
+ else if let range = project. body. range ( of: Keys . resourcesBuildSectionEnd) {
86
+ var body = project. body
87
+ let scriptsString = shellScriptsService. string ( from: project. scripts,
88
+ needSectionBlock: true )
89
+ body. insert ( contentsOf: " \n \n \( scriptsString) " . characters,
90
+ at: range. upperBound)
91
+ newScriptsProjectString = body
92
+ }
93
+ else {
94
+ throw Error . cannotFindProjectResources
95
+ }
80
96
let newTargetsProjectString = newScriptsProjectString. replacingCharacters ( in: project. targetsRange,
81
97
with: targetsService. string ( from: project. targets) )
82
98
83
99
let path = fileManager. currentDirectoryPath + " / \( project. name) " + Keys. projectPath
84
100
try newTargetsProjectString. write ( toFile: path,
85
- atomically: true ,
86
- encoding: . utf8)
101
+ atomically: true ,
102
+ encoding: . utf8)
87
103
}
88
104
89
105
/// - Parameters:
@@ -130,6 +146,7 @@ extension ProjectService.Error: LocalizedError {
130
146
switch self {
131
147
case . noProjectFile: return " Can't find any .pbxproj file. "
132
148
case . cannotReadProject: return " Can't read a project. "
149
+ case . cannotFindProjectResources: return " Can't fine Resources section in a project. "
133
150
}
134
151
}
135
152
}
0 commit comments