From 2357a40fff95523faa396b73ff2ff93264c0f52b Mon Sep 17 00:00:00 2001 From: Quentin Bandera Date: Mon, 22 Apr 2024 12:05:24 +0200 Subject: [PATCH 1/5] DEVTOOLS-186 Exporter les images de resgen en svg --- .../Images/Generator/XcassetsGenerator.swift | 42 +++++++--- .../Images/Model/ImageContent.swift | 50 +++++++++++- .../Images/Model/ParsedImage.swift | 81 ++++++++++++++----- .../Images/Parser/ImageFileParser.swift | 16 +++- .../Images/ImageFileParserTests.swift | 10 ++- .../Images/ParsedImageTests.swift | 42 +++++++++- 6 files changed, 194 insertions(+), 47 deletions(-) diff --git a/Sources/ResgenSwift/Images/Generator/XcassetsGenerator.swift b/Sources/ResgenSwift/Images/Generator/XcassetsGenerator.swift index fec56e7..768695b 100644 --- a/Sources/ResgenSwift/Images/Generator/XcassetsGenerator.swift +++ b/Sources/ResgenSwift/Images/Generator/XcassetsGenerator.swift @@ -8,10 +8,13 @@ import Foundation import ToolCore +enum OutputImageExtension: String { + case png + case svg +} + class XcassetsGenerator { - - static let outputImageExtension = "png" - + let forceGeneration: Bool // MARK: - Init @@ -60,10 +63,10 @@ class XcassetsGenerator { generatedAssetsPaths.append(imagesetName) // Generate output images path - let output1x = "\(imagesetPath)/\(parsedImage.name).\(XcassetsGenerator.outputImageExtension)" - let output2x = "\(imagesetPath)/\(parsedImage.name)@2x.\(XcassetsGenerator.outputImageExtension)" - let output3x = "\(imagesetPath)/\(parsedImage.name)@3x.\(XcassetsGenerator.outputImageExtension)" - + let output1x = "\(imagesetPath)/\(parsedImage.name).\(OutputImageExtension.png.rawValue)" + let output2x = "\(imagesetPath)/\(parsedImage.name)@2x.\(OutputImageExtension.png.rawValue)" + let output3x = "\(imagesetPath)/\(parsedImage.name)@3x.\(OutputImageExtension.png.rawValue)" + // Check if we need to convert image guard self.shouldGenerate(inputImagePath: imageData.path, xcassetImagePath: output1x) else { //print("\(parsedImage.name) -> Not regenerating") @@ -81,25 +84,38 @@ class XcassetsGenerator { Images.exit(withError: error) } } - - // Convert image + let convertArguments = parsedImage.convertArguments - if imageData.ext == "svg" { + + if parsedImage.imageExtensions.contains(.vector) { + let output = "\(imagesetPath)/\(parsedImage.name).\(OutputImageExtension.svg.rawValue)" + let tempURL = URL(fileURLWithPath: output) + + do { + if FileManager.default.fileExists(atPath: tempURL.path) { + try FileManager.default.removeItem(atPath: tempURL.path) + } + try FileManager.default.copyItem(atPath: imageData.path, toPath: tempURL.path) + } catch { + print(error.localizedDescription) + } + + } else if imageData.ext == "svg" { // /usr/local/bin/rsvg-convert path/to/image.png -w 200 -h 300 -o path/to/output.png // /usr/local/bin/rsvg-convert path/to/image.png -w 200 -o path/to/output.png // /usr/local/bin/rsvg-convert path/to/image.png -h 300 -o path/to/output.png var command1x = ["\(svgConverter)", "\(imageData.path)"] var command2x = ["\(svgConverter)", "\(imageData.path)"] var command3x = ["\(svgConverter)", "\(imageData.path)"] - + self.addConvertArgument(command: &command1x, convertArgument: convertArguments.x1) self.addConvertArgument(command: &command2x, convertArgument: convertArguments.x2) self.addConvertArgument(command: &command3x, convertArgument: convertArguments.x3) - + command1x.append(contentsOf: ["-o", output1x]) command2x.append(contentsOf: ["-o", output2x]) command3x.append(contentsOf: ["-o", output3x]) - + Shell.shell(command1x) Shell.shell(command2x) Shell.shell(command3x) diff --git a/Sources/ResgenSwift/Images/Model/ImageContent.swift b/Sources/ResgenSwift/Images/Model/ImageContent.swift index 55847d8..fc6f37f 100644 --- a/Sources/ResgenSwift/Images/Model/ImageContent.swift +++ b/Sources/ResgenSwift/Images/Model/ImageContent.swift @@ -7,14 +7,30 @@ import Foundation +enum TemplateRenderingIntent: String, Codable { + case template + case original +} + struct AssetContent: Codable, Equatable { let images: [AssetImageDescription] let info: AssetInfo + let properties: AssetProperties? + + init( + images: [AssetImageDescription], + info: AssetInfo, + properties: AssetProperties? = nil + ) { + self.images = images + self.info = info + self.properties = properties + } static func == (lhs: AssetContent, rhs: AssetContent) -> Bool { guard lhs.images.count == rhs.images.count else { return false } - let lhsImages = lhs.images.sorted(by: { $0.scale < $1.scale }) - let rhsImages = rhs.images.sorted(by: { $0.scale < $1.scale }) + let lhsImages = lhs.images.sorted(by: { $0.filename < $1.filename }) + let rhsImages = rhs.images.sorted(by: { $0.filename < $1.filename }) return lhsImages == rhsImages } @@ -22,11 +38,39 @@ struct AssetContent: Codable, Equatable { struct AssetImageDescription: Codable, Equatable { let idiom: String - let scale: String + let scale: String? let filename: String + + init( + idiom: String, + scale: String? = nil, + filename: String + ) { + self.idiom = idiom + self.scale = scale + self.filename = filename + } } struct AssetInfo: Codable, Equatable { let version: Int let author: String } + +struct AssetProperties: Codable, Equatable { + let preservesVectorRepresentation: Bool + let templateRenderingIntent: TemplateRenderingIntent? + + init( + preservesVectorRepresentation: Bool, + templateRenderingIntent: TemplateRenderingIntent? = nil + ) { + self.preservesVectorRepresentation = preservesVectorRepresentation + self.templateRenderingIntent = templateRenderingIntent + } + + enum CodingKeys: String, CodingKey { + case preservesVectorRepresentation = "preserves-vector-representation" + case templateRenderingIntent = "template-rendering-intent" + } +} diff --git a/Sources/ResgenSwift/Images/Model/ParsedImage.swift b/Sources/ResgenSwift/Images/Model/ParsedImage.swift index 096c5c0..f43368c 100644 --- a/Sources/ResgenSwift/Images/Model/ParsedImage.swift +++ b/Sources/ResgenSwift/Images/Model/ParsedImage.swift @@ -7,12 +7,31 @@ import Foundation +enum ImageExtension: String { + case vector +} + struct ParsedImage { let name: String let tags: String let width: Int let height: Int - + let imageExtensions: [ImageExtension] + + init( + name: String, + tags: String, + width: Int, + height: Int, + imageExtensions: [ImageExtension] = [] + ) { + self.name = name + self.tags = tags + self.width = width + self.height = height + self.imageExtensions = imageExtensions + } + // MARK: - Convert var convertArguments: (x1: ConvertArgument, x2: ConvertArgument, x3: ConvertArgument) { @@ -56,29 +75,49 @@ struct ParsedImage { } var imageContent: AssetContent { - return AssetContent( - images: [ - AssetImageDescription( - idiom: "universal", - scale: "1x", - filename: "\(name).\(XcassetsGenerator.outputImageExtension)" + if imageExtensions.contains(.vector) { + return AssetContent( + images: [ + AssetImageDescription( + idiom: "universal", + filename: "\(name).\(OutputImageExtension.svg.rawValue)" + ) + ], + info: AssetInfo( + version: 1, + author: "ResgenSwift-Imagium" ), - AssetImageDescription( - idiom: "universal", - scale: "2x", - filename: "\(name)@2x.\(XcassetsGenerator.outputImageExtension)" - ), - AssetImageDescription( - idiom: "universal", - scale: "3x", - filename: "\(name)@3x.\(XcassetsGenerator.outputImageExtension)" + properties: AssetProperties( + preservesVectorRepresentation: true, + templateRenderingIntent: .template ) - ], - info: AssetInfo( - version: 1, - author: "ResgenSwift-Imagium" ) - ) + } else { + + return AssetContent( + images: [ + AssetImageDescription( + idiom: "universal", + scale: "1x", + filename: "\(name).\(OutputImageExtension.png.rawValue)" + ), + AssetImageDescription( + idiom: "universal", + scale: "2x", + filename: "\(name)@2x.\(OutputImageExtension.png.rawValue)" + ), + AssetImageDescription( + idiom: "universal", + scale: "3x", + filename: "\(name)@3x.\(OutputImageExtension.png.rawValue)" + ) + ], + info: AssetInfo( + version: 1, + author: "ResgenSwift-Imagium" + ) + ) + } } // MARK: - Extension property diff --git a/Sources/ResgenSwift/Images/Parser/ImageFileParser.swift b/Sources/ResgenSwift/Images/Parser/ImageFileParser.swift index 8a66d41..eb2278b 100644 --- a/Sources/ResgenSwift/Images/Parser/ImageFileParser.swift +++ b/Sources/ResgenSwift/Images/Parser/ImageFileParser.swift @@ -38,11 +38,21 @@ class ImageFileParser { } return Int(splittedLine[3])! }() - - let image = ParsedImage(name: String(splittedLine[1]), tags: String(splittedLine[0]), width: width, height: height) + + var imageExtensions: [ImageExtension] = [] + + splittedLine.forEach { stringExtension in + if let imageExtension = ImageExtension(rawValue: String(stringExtension)) { + imageExtensions.append(imageExtension) + } + } + + let image = ParsedImage(name: String(splittedLine[1]), tags: String(splittedLine[0]), width: width, height: height, imageExtensions: imageExtensions) imagesToGenerate.append(image) } - + + print(imagesToGenerate) + return imagesToGenerate.filter { $0.tags.contains(platform.rawValue) } diff --git a/Tests/ResgenSwiftTests/Images/ImageFileParserTests.swift b/Tests/ResgenSwiftTests/Images/ImageFileParserTests.swift index 0dad2e6..8122150 100644 --- a/Tests/ResgenSwiftTests/Images/ImageFileParserTests.swift +++ b/Tests/ResgenSwiftTests/Images/ImageFileParserTests.swift @@ -17,8 +17,8 @@ class ImageFileParserTests: XCTestCase { # # SMAAS Support # - id image_one 25 ? - di image_two ? 50 + id image_one 25 ? vector + di image_two ? 50 webp vector d image_three 25 ? d image_four 75 ? """ @@ -38,13 +38,15 @@ class ImageFileParserTests: XCTestCase { XCTAssertEqual(firstImage!.tags, "id") XCTAssertEqual(firstImage!.width, 25) XCTAssertEqual(firstImage!.height, -1) - + XCTAssertEqual(firstImage!.imageExtensions, [.vector]) + let secondImage = parsedImages.first { $0.name == "image_two" } XCTAssertEqual(secondImage!.name, "image_two") XCTAssertEqual(secondImage!.tags, "di") XCTAssertEqual(secondImage!.width, -1) - XCTAssertEqual(secondImage!.height, 50) + XCTAssertEqual(secondImage!.height, 50) + XCTAssertEqual(firstImage!.imageExtensions, [.vector]) } } diff --git a/Tests/ResgenSwiftTests/Images/ParsedImageTests.swift b/Tests/ResgenSwiftTests/Images/ParsedImageTests.swift index 0fea3d8..45a0401 100644 --- a/Tests/ResgenSwiftTests/Images/ParsedImageTests.swift +++ b/Tests/ResgenSwiftTests/Images/ParsedImageTests.swift @@ -135,17 +135,17 @@ final class ParsedImageTests: XCTestCase { AssetImageDescription( idiom: "universal", scale: "1x", - filename: "\(parsedImage.name).\(XcassetsGenerator.outputImageExtension)" + filename: "\(parsedImage.name).\(OutputImageExtension.png.rawValue)" ), AssetImageDescription( idiom: "universal", scale: "2x", - filename: "\(parsedImage.name)@2x.\(XcassetsGenerator.outputImageExtension)" + filename: "\(parsedImage.name)@2x.\(OutputImageExtension.png.rawValue)" ), AssetImageDescription( idiom: "universal", scale: "3x", - filename: "\(parsedImage.name)@3x.\(XcassetsGenerator.outputImageExtension)" + filename: "\(parsedImage.name)@3x.\(OutputImageExtension.png.rawValue)" ) ], info: AssetInfo( @@ -156,4 +156,40 @@ final class ParsedImageTests: XCTestCase { XCTAssertEqual(property, expect) } + + func testAssetVector() { + // Given + let imageName = "the_name" + let parsedImage = ParsedImage(name: imageName, + tags: "id", + width: 10, + height: 10, + imageExtensions: [.vector]) + + // When + let property = parsedImage.imageContent + + // Expect + let expect = AssetContent( + images: [ + AssetImageDescription( + idiom: "universal", + filename: "\(parsedImage.name).\(OutputImageExtension.svg.rawValue)" + ) + ], + info: AssetInfo( + version: 1, + author: "ResgenSwift-Imagium" + ), + properties: AssetProperties( + preservesVectorRepresentation: true, + templateRenderingIntent: .template + ) + ) + + debugPrint(property) + debugPrint(expect) + + XCTAssertEqual(property, expect) + } } -- 2.39.5 From be4c561ea8129ef80846a8fda46dc43d5aed82a6 Mon Sep 17 00:00:00 2001 From: Quentin Bandera Date: Fri, 21 Jun 2024 09:18:51 +0200 Subject: [PATCH 2/5] DEVTOOLS-192 Resgen iOS vector --- .../Images/Generator/XcassetsGenerator.swift | 64 ++++++++++--------- .../Images/Model/ParsedImage.swift | 16 +++-- .../Images/ImageFileParserTests.swift | 8 +-- .../Images/ParsedImageTests.swift | 26 +++++--- 4 files changed, 65 insertions(+), 49 deletions(-) diff --git a/Sources/ResgenSwift/Images/Generator/XcassetsGenerator.swift b/Sources/ResgenSwift/Images/Generator/XcassetsGenerator.swift index 768695b..f6d58ed 100644 --- a/Sources/ResgenSwift/Images/Generator/XcassetsGenerator.swift +++ b/Sources/ResgenSwift/Images/Generator/XcassetsGenerator.swift @@ -87,38 +87,42 @@ class XcassetsGenerator { let convertArguments = parsedImage.convertArguments - if parsedImage.imageExtensions.contains(.vector) { - let output = "\(imagesetPath)/\(parsedImage.name).\(OutputImageExtension.svg.rawValue)" - let tempURL = URL(fileURLWithPath: output) + if imageData.ext == "svg" { + if parsedImage.imageExtensions.contains(.png) { - do { - if FileManager.default.fileExists(atPath: tempURL.path) { - try FileManager.default.removeItem(atPath: tempURL.path) + // /usr/local/bin/rsvg-convert path/to/image.png -w 200 -h 300 -o path/to/output.png + // /usr/local/bin/rsvg-convert path/to/image.png -w 200 -o path/to/output.png + // /usr/local/bin/rsvg-convert path/to/image.png -h 300 -o path/to/output.png + var command1x = ["\(svgConverter)", "\(imageData.path)"] + var command2x = ["\(svgConverter)", "\(imageData.path)"] + var command3x = ["\(svgConverter)", "\(imageData.path)"] + + self.addConvertArgument(command: &command1x, convertArgument: convertArguments.x1) + self.addConvertArgument(command: &command2x, convertArgument: convertArguments.x2) + self.addConvertArgument(command: &command3x, convertArgument: convertArguments.x3) + + command1x.append(contentsOf: ["-o", output1x]) + command2x.append(contentsOf: ["-o", output2x]) + command3x.append(contentsOf: ["-o", output3x]) + + Shell.shell(command1x) + Shell.shell(command2x) + Shell.shell(command3x) + + } else { + + let output = "\(imagesetPath)/\(parsedImage.name).\(OutputImageExtension.svg.rawValue)" + let tempURL = URL(fileURLWithPath: output) + + do { + if FileManager.default.fileExists(atPath: tempURL.path) { + try FileManager.default.removeItem(atPath: tempURL.path) + } + try FileManager.default.copyItem(atPath: imageData.path, toPath: tempURL.path) + } catch { + print(error.localizedDescription) } - try FileManager.default.copyItem(atPath: imageData.path, toPath: tempURL.path) - } catch { - print(error.localizedDescription) } - - } else if imageData.ext == "svg" { - // /usr/local/bin/rsvg-convert path/to/image.png -w 200 -h 300 -o path/to/output.png - // /usr/local/bin/rsvg-convert path/to/image.png -w 200 -o path/to/output.png - // /usr/local/bin/rsvg-convert path/to/image.png -h 300 -o path/to/output.png - var command1x = ["\(svgConverter)", "\(imageData.path)"] - var command2x = ["\(svgConverter)", "\(imageData.path)"] - var command3x = ["\(svgConverter)", "\(imageData.path)"] - - self.addConvertArgument(command: &command1x, convertArgument: convertArguments.x1) - self.addConvertArgument(command: &command2x, convertArgument: convertArguments.x2) - self.addConvertArgument(command: &command3x, convertArgument: convertArguments.x3) - - command1x.append(contentsOf: ["-o", output1x]) - command2x.append(contentsOf: ["-o", output2x]) - command3x.append(contentsOf: ["-o", output3x]) - - Shell.shell(command1x) - Shell.shell(command2x) - Shell.shell(command3x) } else { // convert path/to/image.png -resize 200x300 path/to/output.png // convert path/to/image.png -resize 200x path/to/output.png @@ -135,7 +139,7 @@ class XcassetsGenerator { } // Write Content.json - guard let imagesetContentJson = parsedImage.contentJson else { return } + guard let imagesetContentJson = parsedImage.generateContentJson(isVector: imageData.ext == "svg") else { return } let contentJsonFilePath = "\(imagesetPath)/Contents.json" let contentJsonFilePathURL = URL(fileURLWithPath: contentJsonFilePath) diff --git a/Sources/ResgenSwift/Images/Model/ParsedImage.swift b/Sources/ResgenSwift/Images/Model/ParsedImage.swift index f43368c..42a3885 100644 --- a/Sources/ResgenSwift/Images/Model/ParsedImage.swift +++ b/Sources/ResgenSwift/Images/Model/ParsedImage.swift @@ -8,7 +8,7 @@ import Foundation enum ImageExtension: String { - case vector + case png } struct ParsedImage { @@ -61,10 +61,12 @@ struct ParsedImage { // MARK: - Assets - var contentJson: String? { + func generateContentJson(isVector: Bool) -> String? { let encoder = JSONEncoder() encoder.outputFormatting = .prettyPrinted - + + let imageContent = generateImageContent(isVector: isVector) + guard let data = try? encoder.encode(imageContent) else { let error = ImagesError.writeFile("Contents.json", "Error encoding json file") print(error.description) @@ -74,8 +76,10 @@ struct ParsedImage { return String(data: data, encoding: .utf8) } - var imageContent: AssetContent { - if imageExtensions.contains(.vector) { + func generateImageContent(isVector: Bool) -> AssetContent { + + if !imageExtensions.contains(.png) && isVector { + //Generate svg return AssetContent( images: [ AssetImageDescription( @@ -93,7 +97,7 @@ struct ParsedImage { ) ) } else { - + //Generate png return AssetContent( images: [ AssetImageDescription( diff --git a/Tests/ResgenSwiftTests/Images/ImageFileParserTests.swift b/Tests/ResgenSwiftTests/Images/ImageFileParserTests.swift index 8122150..1668fdd 100644 --- a/Tests/ResgenSwiftTests/Images/ImageFileParserTests.swift +++ b/Tests/ResgenSwiftTests/Images/ImageFileParserTests.swift @@ -17,8 +17,8 @@ class ImageFileParserTests: XCTestCase { # # SMAAS Support # - id image_one 25 ? vector - di image_two ? 50 webp vector + id image_one 25 ? png + di image_two ? 50 webp png d image_three 25 ? d image_four 75 ? """ @@ -38,7 +38,7 @@ class ImageFileParserTests: XCTestCase { XCTAssertEqual(firstImage!.tags, "id") XCTAssertEqual(firstImage!.width, 25) XCTAssertEqual(firstImage!.height, -1) - XCTAssertEqual(firstImage!.imageExtensions, [.vector]) + XCTAssertEqual(firstImage!.imageExtensions, [.png]) let secondImage = parsedImages.first { $0.name == "image_two" @@ -47,6 +47,6 @@ class ImageFileParserTests: XCTestCase { XCTAssertEqual(secondImage!.tags, "di") XCTAssertEqual(secondImage!.width, -1) XCTAssertEqual(secondImage!.height, 50) - XCTAssertEqual(firstImage!.imageExtensions, [.vector]) + XCTAssertEqual(firstImage!.imageExtensions, [.png]) } } diff --git a/Tests/ResgenSwiftTests/Images/ParsedImageTests.swift b/Tests/ResgenSwiftTests/Images/ParsedImageTests.swift index 45a0401..da73498 100644 --- a/Tests/ResgenSwiftTests/Images/ParsedImageTests.swift +++ b/Tests/ResgenSwiftTests/Images/ParsedImageTests.swift @@ -127,7 +127,7 @@ final class ParsedImageTests: XCTestCase { height: 10) // When - let property = parsedImage.imageContent + let property = parsedImage.generateImageContent(isVector: false) // Expect let expect = AssetContent( @@ -157,33 +157,41 @@ final class ParsedImageTests: XCTestCase { XCTAssertEqual(property, expect) } - func testAssetVector() { + func testAssetPng() { // Given let imageName = "the_name" let parsedImage = ParsedImage(name: imageName, tags: "id", width: 10, height: 10, - imageExtensions: [.vector]) + imageExtensions: [.png]) // When - let property = parsedImage.imageContent + let property = parsedImage.generateImageContent(isVector: false) // Expect + let expect = AssetContent( images: [ AssetImageDescription( idiom: "universal", - filename: "\(parsedImage.name).\(OutputImageExtension.svg.rawValue)" + scale: "1x", + filename: "\(parsedImage.name).\(OutputImageExtension.png.rawValue)" + ), + AssetImageDescription( + idiom: "universal", + scale: "2x", + filename: "\(parsedImage.name)@2x.\(OutputImageExtension.png.rawValue)" + ), + AssetImageDescription( + idiom: "universal", + scale: "3x", + filename: "\(parsedImage.name)@3x.\(OutputImageExtension.png.rawValue)" ) ], info: AssetInfo( version: 1, author: "ResgenSwift-Imagium" - ), - properties: AssetProperties( - preservesVectorRepresentation: true, - templateRenderingIntent: .template ) ) -- 2.39.5 From 8686ae974c386d8f74a538b95a36b70e1b3a7fe8 Mon Sep 17 00:00:00 2001 From: Quentin Bandera Date: Fri, 21 Jun 2024 14:54:20 +0200 Subject: [PATCH 3/5] Suppression des anciens assets si svg --- Jenkinsfile | 2 +- .../Images/Generator/XcassetsGenerator.swift | 24 +++++++++++++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 34c30ee..d43fb68 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,6 +1,6 @@ library "openiumpipeline" -env.DEVELOPER_DIR="/Applications/Xcode-15.3.0.app/Contents/Developer" +env.DEVELOPER_DIR="/Applications/Xcode-15.4.0.app/Contents/Developer" //env.SIMULATOR_DEVICE_TYPES="iPad--7th-generation-" env.IS_PACKAGE_SWIFT=1 env.TARGETS_MACOS=1 diff --git a/Sources/ResgenSwift/Images/Generator/XcassetsGenerator.swift b/Sources/ResgenSwift/Images/Generator/XcassetsGenerator.swift index f6d58ed..82c512c 100644 --- a/Sources/ResgenSwift/Images/Generator/XcassetsGenerator.swift +++ b/Sources/ResgenSwift/Images/Generator/XcassetsGenerator.swift @@ -68,8 +68,15 @@ class XcassetsGenerator { let output3x = "\(imagesetPath)/\(parsedImage.name)@3x.\(OutputImageExtension.png.rawValue)" // Check if we need to convert image - guard self.shouldGenerate(inputImagePath: imageData.path, xcassetImagePath: output1x) else { - //print("\(parsedImage.name) -> Not regenerating") + + var needToGenerateForSvg = false + + if imageData.ext == "svg" && !parsedImage.imageExtensions.contains(.png) { + needToGenerateForSvg = true + } + + guard self.shouldGenerate(inputImagePath: imageData.path, xcassetImagePath: output1x, needToGenerateForSvg: needToGenerateForSvg) else { + print("\(parsedImage.name) -> Not regenerating") return } @@ -83,6 +90,15 @@ class XcassetsGenerator { print(error.description) Images.exit(withError: error) } + } else { + do { + let documentsDirectory = try fileManager.contentsOfDirectory(atPath: imagesetPath) + for filePath in documentsDirectory { + try fileManager.removeItem(atPath: "\(imagesetPath)/\(filePath)") + } + } catch { + print("Error deleting previous assets") + } } let convertArguments = parsedImage.convertArguments @@ -181,8 +197,8 @@ class XcassetsGenerator { // MARK: - Helpers: bypass generation - private func shouldGenerate(inputImagePath: String, xcassetImagePath: String) -> Bool { - if forceGeneration { + private func shouldGenerate(inputImagePath: String, xcassetImagePath: String, needToGenerateForSvg: Bool) -> Bool { + if forceGeneration || needToGenerateForSvg { return true } -- 2.39.5 From 07575bd2bfad8df722b058244af9d818b544be9f Mon Sep 17 00:00:00 2001 From: Quentin Bandera Date: Thu, 11 Jul 2024 10:08:47 +0200 Subject: [PATCH 4/5] =?UTF-8?q?DEVTOOLS-195=20Ne=20pas=20g=C3=A9n=C3=A9rer?= =?UTF-8?q?=20les=20svg=20en=20template=20par=20d=C3=A9faut?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sources/ResgenSwift/Images/Model/ParsedImage.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/ResgenSwift/Images/Model/ParsedImage.swift b/Sources/ResgenSwift/Images/Model/ParsedImage.swift index 42a3885..9383f3e 100644 --- a/Sources/ResgenSwift/Images/Model/ParsedImage.swift +++ b/Sources/ResgenSwift/Images/Model/ParsedImage.swift @@ -93,7 +93,7 @@ struct ParsedImage { ), properties: AssetProperties( preservesVectorRepresentation: true, - templateRenderingIntent: .template + templateRenderingIntent: .original ) ) } else { -- 2.39.5 From dea57dc1e2c04b3270c7cee19d2488b5715cdaa4 Mon Sep 17 00:00:00 2001 From: Quentin Bandera Date: Thu, 11 Jul 2024 10:29:32 +0200 Subject: [PATCH 5/5] Maj du readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7c23c29..580516f 100644 --- a/README.md +++ b/README.md @@ -202,7 +202,7 @@ You need to put `_` + `NAME OF THE PARAMETER` + `_` in the target and which targ ## Images -Images generator will generate images assets along with extensions to access those images easily. +Images generator will generate images assets along with extensions to access those images easily. ```sh swift run -c release ResgenSwift images $FORCE_FLAG "./Images/images.txt" \ @@ -225,6 +225,7 @@ swift run -c release ResgenSwift images $FORCE_FLAG "./Images/images.txt" \ 6. `--extension-suffix` *(optional)* : additional text which is added to filename (ex: `AppImage+GreatApp.swift`) 7. `--static-members` *(optional)*: generate static properties or not +> ⚠️ Svg images will be copied in the assets and rendered as "Original", however if those images are not rendered correctly you can force the png generation by adding the key word "png" like this: id arrow_back 15 ? png ## All at once -- 2.39.5