feat(RES-58): Add new parameter "bundle" (#19)
All checks were successful
gitea-openium/resgen.swift/pipeline/head This commit looks good

Add bundle parameter to define if resource should be load from Bundle.main (app) or Bundle.module (SPM package)

Reviewed-on: #19
This commit is contained in:
2025-07-25 16:14:36 +02:00
parent 5ad219ae89
commit f329386ccf
37 changed files with 866 additions and 403 deletions

View File

@@ -14,21 +14,23 @@ enum ImageExtensionGenerator {
static func generateExtensionFile(
images: [ParsedImage],
staticVar: Bool,
isStatic: Bool,
inputFilename: String,
extensionName: String,
extensionFilePath: String,
isSwiftUI: Bool,
visibility: ExtensionVisibility
visibility: ExtensionVisibility,
assetBundle: AssetBundle
) {
// Create extension conten1t
let extensionContent = Self.getExtensionContent(
images: images,
staticVar: staticVar,
isStatic: isStatic,
extensionName: extensionName,
inputFilename: inputFilename,
isSwiftUI: isSwiftUI,
visibility: visibility
visibility: visibility,
assetBundle: assetBundle
)
// Write content
@@ -44,11 +46,12 @@ enum ImageExtensionGenerator {
static func getExtensionContent(
images: [ParsedImage],
staticVar: Bool,
isStatic: Bool,
extensionName: String,
inputFilename: String,
isSwiftUI: Bool,
visibility: ExtensionVisibility
visibility: ExtensionVisibility,
assetBundle: AssetBundle
) -> String {
[
Self.getHeader(
@@ -58,9 +61,10 @@ enum ImageExtensionGenerator {
),
Self.getProperties(
images: images,
staticVar: staticVar,
isStatic: isStatic,
isSwiftUI: isSwiftUI,
visibility: visibility
visibility: visibility,
assetBundle: assetBundle
),
Self.getFooter()
]
@@ -84,13 +88,20 @@ enum ImageExtensionGenerator {
private static func getProperties(
images: [ParsedImage],
staticVar: Bool,
isStatic: Bool,
isSwiftUI: Bool,
visibility: ExtensionVisibility
visibility: ExtensionVisibility,
assetBundle: AssetBundle
) -> String {
images
.map {
"\n\($0.getImageProperty(isStatic: staticVar, isSwiftUI: isSwiftUI, visibility: visibility))"
.map { parsedImage in
let property = parsedImage.getImageProperty(
isStatic: isStatic,
isSwiftUI: isSwiftUI,
visibility: visibility,
assetBundle: assetBundle
)
return "\n\(property)"
}
.joined(separator: "\n")
}

View File

@@ -57,12 +57,13 @@ struct Images: ParsableCommand {
let extensionFilePath = options.extensionFilePath {
ImageExtensionGenerator.generateExtensionFile(
images: imagesToGenerate,
staticVar: options.staticMembers,
isStatic: options.staticMembers,
inputFilename: options.inputFilenameWithoutExt,
extensionName: extensionName,
extensionFilePath: extensionFilePath,
isSwiftUI: true,
visibility: options.extensionVisibility
visibility: options.extensionVisibility,
assetBundle: options.assetBundle
)
}
@@ -70,12 +71,13 @@ struct Images: ParsableCommand {
let extensionFilePathUIKit = options.extensionFilePathUIKit {
ImageExtensionGenerator.generateExtensionFile(
images: imagesToGenerate,
staticVar: options.staticMembers,
isStatic: options.staticMembers,
inputFilename: options.inputFilenameWithoutExt,
extensionName: extensionNameUIKit,
extensionFilePath: extensionFilePathUIKit,
isSwiftUI: false,
visibility: options.extensionVisibility
visibility: options.extensionVisibility,
assetBundle: options.assetBundle
)
}

View File

@@ -5,6 +5,8 @@
// Created by Thibaut Schmitt on 24/01/2022.
//
// CPD-OFF
import ArgumentParser
import Foundation
import ToolCore
@@ -51,6 +53,11 @@ struct ImagesOptions: ParsableArguments {
)
var extensionVisibility: ExtensionVisibility = .internal
@Option(
help: "Bundle where the asset are generated"
)
var assetBundle: AssetBundle = .main
@Option(
help: "Path where to generate the extension.",
transform: { $0.replaceTiltWithHomeDirectoryPath() }
@@ -113,3 +120,5 @@ extension ImagesOptions {
.lastPathComponent
}
}
// CPD-ON

View File

@@ -130,17 +130,22 @@ struct ParsedImage {
// MARK: - Extension property
func getImageProperty(isStatic: Bool, isSwiftUI: Bool, visibility: ExtensionVisibility) -> String {
func getImageProperty(
isStatic: Bool,
isSwiftUI: Bool,
visibility: ExtensionVisibility,
assetBundle: AssetBundle
) -> String {
if isSwiftUI {
return """
\(visibility) \(isStatic ? "static " : "")var \(name): Image {
Image("\(name)")
Image("\(name)", bundle: Bundle.\(assetBundle))
}
"""
}
return """
\(visibility) \(isStatic ? "static " : "")var \(name): UIImage {
UIImage(named: "\(name)")!
UIImage(named: "\(name)", in: Bundle.\(assetBundle), with: nil)!
}
"""
}