Skip to content

Commit 71da754

Browse files
authored
Support for Storyboard assets (#34)
1 parent 45aa2bb commit 71da754

3 files changed

Lines changed: 40 additions & 2 deletions

File tree

Sources/Shark/SharkEnumBuilder.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ enum SharkEnumBuilder {
1414
let localizationsString = try LocalizationEnumBuilder.localizationsEnumString(forFilesAtPaths: resourcePaths.localizationPaths, topLevelName: "L")
1515
let fontsString = try FontEnumBuilder.fontsEnumString(forFilesAtPaths: resourcePaths.fontPaths, topLevelName: "F")
1616
let dataAssetsString = try DataAssetEnumBuilder.dataAssetEnumString(forFilesAtPaths: resourcePaths.assetsPaths, topLevelName: "D")
17-
17+
let storyboardString = try StoryboardBuilder.storyboardEnumString(forFilesAtPaths: resourcePaths.storyboardPaths, topLevelName: "S")
1818
let declarationIndendationLevel = options.topLevelScope ? 0 : 1
19-
let resourcesEnumsString = [imagesString, colorsString, fontsString, localizationsString, dataAssetsString]
19+
let resourcesEnumsString = [imagesString, colorsString, fontsString, localizationsString, storyboardString, dataAssetsString]
2020
.compactMap({ $0?.indented(withLevel: declarationIndendationLevel) })
2121
.joined(separator: "\n\n")
2222

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import Foundation
2+
3+
private struct StoryboardValue: Equatable, Comparable {
4+
let name: String
5+
6+
func declaration(indentLevel: Int) -> String {
7+
return #"\#(String.indent(indentLevel))public static var \#(name.casenameSanitized): UIStoryboard { return UIStoryboard(name: "\#(name)", bundle: bundle) }"#
8+
}
9+
10+
static func <(lhs: StoryboardValue, rhs: StoryboardValue) -> Bool {
11+
return lhs.name < rhs.name
12+
}
13+
}
14+
15+
enum StoryboardBuilder {
16+
private enum Constants {
17+
static let storyboardExtension = "storyboard"
18+
}
19+
20+
static func storyboardEnumString(forFilesAtPaths paths: [String], topLevelName: String) throws -> String? {
21+
let storyboardPaths = Set(paths.map(\.lastPathComponent))
22+
23+
guard storyboardPaths.isEmpty == false else { return nil }
24+
25+
var result = "public enum \(topLevelName) {\n"
26+
for name in storyboardPaths.map({ $0.deletingPathExtension }).sorted() {
27+
result += StoryboardValue(name: name).declaration(indentLevel: 1)
28+
result += "\n"
29+
}
30+
31+
result += "}"
32+
33+
return result
34+
}
35+
}

Sources/Shark/XcodeProjectHelper.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ struct XcodeProjectHelper {
1111
fileprivate(set) var localizationPaths: [String] = []
1212
fileprivate(set) var assetsPaths: [String] = []
1313
fileprivate(set) var fontPaths: [String] = []
14+
fileprivate(set) var storyboardPaths: [String] = []
1415
}
1516

1617
private let projectPath: Path
@@ -62,6 +63,8 @@ struct XcodeProjectHelper {
6263
result.localizationPaths.append(path)
6364
case "ttf", "otf", "ttc":
6465
result.fontPaths.append(path)
66+
case "storyboard":
67+
result.storyboardPaths.append(path)
6568
default:
6669
break
6770
}

0 commit comments

Comments
 (0)