diff --git a/Jenkinsfile b/Jenkinsfile index 85bdaad..34c30ee 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,6 +1,6 @@ library "openiumpipeline" -env.DEVELOPER_DIR="/Applications/Xcode-15.0.1.app/Contents/Developer" +env.DEVELOPER_DIR="/Applications/Xcode-15.3.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 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..529bd3a --- /dev/null +++ b/Sources/ResgenSwift/Images/Model/ImageContent.swift @@ -0,0 +1,36 @@ +// +// ImageContent.swift +// +// +// Created by Quentin Bandera on 19/04/2024. +// + +import Foundation + +struct ImageContent: Codable, Equatable { + let images: [Image] + let info: Info + + static func == (lhs: ImageContent, rhs: ImageContent) -> Bool { + let lhsImagesCount = lhs.images.count + let lhsImages = lhs.images.sorted(by: { $0.scale < $1.scale }) + let lhsInfo = lhs.info + + let rhsImagesCount = rhs.images.count + let rhsImages = rhs.images.sorted(by: { $0.scale < $1.scale }) + let rhsInfo = rhs.info + + return lhsImagesCount == rhsImagesCount && lhsImages == rhsImages && lhsInfo == rhsInfo + } +} + +struct Image: Codable, Equatable { + let idiom: String + let scale: String + let filename: String +} + +struct Info: 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..9f72c3b 100644 --- a/Sources/ResgenSwift/Images/Model/ParsedImage.swift +++ b/Sources/ResgenSwift/Images/Model/ParsedImage.swift @@ -42,34 +42,41 @@ 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 { return nil } + + return String(data: data, encoding: .utf8) } - + + var imageContent: ImageContent { + return ImageContent( + images: [ + Image( + idiom: "universal", + scale: "1x", + filename: "\(name).\(XcassetsGenerator.outputImageExtension)" + ), + Image( + idiom: "universal", + scale: "2x", + filename: "\(name)@2x.\(XcassetsGenerator.outputImageExtension)" + ), + Image( + idiom: "universal", + scale: "3x", + filename: "\(name)@3x.\(XcassetsGenerator.outputImageExtension)" + ) + ], + info: Info( + 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..fca593d 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 = ImageContent( + images: [ + Image( + idiom: "universal", + scale: "1x", + filename: "\(parsedImage.name).\(XcassetsGenerator.outputImageExtension)" + ), + Image( + idiom: "universal", + scale: "2x", + filename: "\(parsedImage.name)@2x.\(XcassetsGenerator.outputImageExtension)" + ), + Image( + idiom: "universal", + scale: "3x", + filename: "\(parsedImage.name)@3x.\(XcassetsGenerator.outputImageExtension)" + ) + ], + info: Info( + version: 1, + author: "ResgenSwift-Imagium" + ) + ) + + XCTAssertEqual(property, expect) } }