DEVTOOLS-185 Remplacer le json en dur des images resgen #11

Merged
q.bandera merged 1 commits from DEVTOOLS-186/SVG_resgen into master 2024-04-19 17:02:26 +02:00
4 changed files with 97 additions and 56 deletions

View File

@ -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)

View File

@ -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 }
q.bandera marked this conversation as resolved Outdated

Tu peux optimiser les performances:

guard lhs.images.count == rhs.images.count else { return false }
let lhsImages = ...
....
return lhsImages == rhsImages

Pas besoin de check les infos.
Si tu as pas le meme count, tu ne vas pas parcourir ton tableau images c'est toujours ca de gagné.

Tu peux optimiser les performances: ``` guard lhs.images.count == rhs.images.count else { return false } let lhsImages = ... .... return lhsImages == rhsImages ``` Pas besoin de check les infos. Si tu as pas le meme count, tu ne vas pas parcourir ton tableau `images` c'est toujours ca de gagné.
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
}

View File

@ -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 {

Si la méthode appelante ne le fait pas déjà, dans le else regarde comment j'ai fais pour générer un warning pour Xcode. Avec le warning, le dev saura qu'il y a eu un soucis

Si la méthode appelante ne le fait pas déjà, dans le else regarde comment j'ai fais pour générer un warning pour Xcode. Avec le warning, le dev saura qu'il y a eu un soucis
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 {

View File

@ -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)
}
}