diff --git a/Sources/ResgenSwift/Images/Generator/XcassetsGenerator.swift b/Sources/ResgenSwift/Images/Generator/XcassetsGenerator.swift index 6d55599..fec56e7 100644 --- a/Sources/ResgenSwift/Images/Generator/XcassetsGenerator.swift +++ b/Sources/ResgenSwift/Images/Generator/XcassetsGenerator.swift @@ -119,7 +119,7 @@ class XcassetsGenerator { } // Write Content.json - let imagesetContentJson = parsedImage.contentJson + guard let imagesetContentJson = parsedImage.contentJson else { return } let contentJsonFilePath = "\(imagesetPath)/Contents.json" let contentJsonFilePathURL = URL(fileURLWithPath: contentJsonFilePath) diff --git a/Sources/ResgenSwift/Images/Model/ImageContent.swift b/Sources/ResgenSwift/Images/Model/ImageContent.swift new file mode 100644 index 0000000..55847d8 --- /dev/null +++ b/Sources/ResgenSwift/Images/Model/ImageContent.swift @@ -0,0 +1,32 @@ +// +// ImageContent.swift +// +// +// Created by Quentin Bandera on 19/04/2024. +// + +import Foundation + +struct AssetContent: Codable, Equatable { + let images: [AssetImageDescription] + let info: AssetInfo + + 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 }) + + return lhsImages == rhsImages + } +} + +struct AssetImageDescription: Codable, Equatable { + let idiom: String + let scale: String + let filename: String +} + +struct AssetInfo: Codable, Equatable { + let version: Int + let author: String +} diff --git a/Sources/ResgenSwift/Images/Model/ParsedImage.swift b/Sources/ResgenSwift/Images/Model/ParsedImage.swift index 2c42916..096c5c0 100644 --- a/Sources/ResgenSwift/Images/Model/ParsedImage.swift +++ b/Sources/ResgenSwift/Images/Model/ParsedImage.swift @@ -42,34 +42,45 @@ struct ParsedImage { // MARK: - Assets - var contentJson: String { - """ - { - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "\(name).\(XcassetsGenerator.outputImageExtension)" - }, - { - "idiom" : "universal", - "scale" : "2x", - "filename" : "\(name)@2x.\(XcassetsGenerator.outputImageExtension)" - }, - { - "idiom" : "universal", - "scale" : "3x", - "filename" : "\(name)@3x.\(XcassetsGenerator.outputImageExtension)" - } - ], - "info" : { - "version" : 1, - "author" : "ResgenSwift-Imagium" - } + var contentJson: String? { + let encoder = JSONEncoder() + encoder.outputFormatting = .prettyPrinted + + guard let data = try? encoder.encode(imageContent) else { + let error = ImagesError.writeFile("Contents.json", "Error encoding json file") + print(error.description) + Images.exit(withError: error) } - """ + + return String(data: data, encoding: .utf8) } - + + var imageContent: AssetContent { + return AssetContent( + images: [ + AssetImageDescription( + idiom: "universal", + scale: "1x", + filename: "\(name).\(XcassetsGenerator.outputImageExtension)" + ), + AssetImageDescription( + idiom: "universal", + scale: "2x", + filename: "\(name)@2x.\(XcassetsGenerator.outputImageExtension)" + ), + AssetImageDescription( + idiom: "universal", + scale: "3x", + filename: "\(name)@3x.\(XcassetsGenerator.outputImageExtension)" + ) + ], + info: AssetInfo( + version: 1, + author: "ResgenSwift-Imagium" + ) + ) + } + // MARK: - Extension property func getImageProperty(isStatic: Bool, isSwiftUI: Bool) -> String { diff --git a/Tests/ResgenSwiftTests/Images/ParsedImageTests.swift b/Tests/ResgenSwiftTests/Images/ParsedImageTests.swift index b4a8093..0fea3d8 100644 --- a/Tests/ResgenSwiftTests/Images/ParsedImageTests.swift +++ b/Tests/ResgenSwiftTests/Images/ParsedImageTests.swift @@ -127,35 +127,33 @@ final class ParsedImageTests: XCTestCase { height: 10) // When - let property = parsedImage.contentJson - + let property = parsedImage.imageContent + // Expect - let expect = """ - { - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "\(imageName).\(XcassetsGenerator.outputImageExtension)" - }, - { - "idiom" : "universal", - "scale" : "2x", - "filename" : "\(imageName)@2x.\(XcassetsGenerator.outputImageExtension)" - }, - { - "idiom" : "universal", - "scale" : "3x", - "filename" : "\(imageName)@3x.\(XcassetsGenerator.outputImageExtension)" - } - ], - "info" : { - "version" : 1, - "author" : "ResgenSwift-Imagium" - } - } - """ - - XCTAssertEqual(property.adaptForXCTest(), expect.adaptForXCTest()) + let expect = AssetContent( + images: [ + AssetImageDescription( + idiom: "universal", + scale: "1x", + filename: "\(parsedImage.name).\(XcassetsGenerator.outputImageExtension)" + ), + AssetImageDescription( + idiom: "universal", + scale: "2x", + filename: "\(parsedImage.name)@2x.\(XcassetsGenerator.outputImageExtension)" + ), + AssetImageDescription( + idiom: "universal", + scale: "3x", + filename: "\(parsedImage.name)@3x.\(XcassetsGenerator.outputImageExtension)" + ) + ], + info: AssetInfo( + version: 1, + author: "ResgenSwift-Imagium" + ) + ) + + XCTAssertEqual(property, expect) } }