Fix plist font file name and fix all tests
Some checks failed
gitea-openium/resgen.swift/pipeline/head There was a failure building this commit

This commit is contained in:
Thibaut Schmitt 2025-04-30 11:37:17 +02:00
parent 8442c89944
commit ae7c0abbc2
16 changed files with 183 additions and 103 deletions

6
Jenkinsfile vendored
View File

@ -1,8 +1,10 @@
library "openiumpipeline"
env.DEVELOPER_DIR="/Applications/Xcode-15.4.0.app/Contents/Developer"
//env.SIMULATOR_DEVICE_TYPES="iPad--7th-generation-"
env.DEVELOPER_DIR="/Applications/Xcode-16.3.0.app/Contents/Developer"
// env.SIMULATOR_DEVICE_TYPES="iPhone-14-Pro"
// env.SLACK_CHANNEL = "prj-skdevkit"
env.IS_PACKAGE_SWIFT=1
env.TARGETS_MACOS=1
env.PACKAGE_NAME="ResgenSwift" // xcodebuild -list => Only 1 scheme
iOSpipeline()

View File

@ -6,16 +6,16 @@
<array/>
<key>UIAppFonts</key>
<array>
<string>Lato-Italic</string>
<string>Lato-LightItalic</string>
<string>Lato-Hairline</string>
<string>Lato-Bold</string>
<string>Lato-Black</string>
<string>Lato-Regular</string>
<string>Lato-BlackItalic</string>
<string>Lato-BoldItalic</string>
<string>Lato-Light</string>
<string>Lato-HairlineItalic</string>
<string>Lato-Italic.ttf</string>
<string>Lato-LightItalic.ttf</string>
<string>Lato-Thin.ttf</string>
<string>Lato-Bold.ttf</string>
<string>Lato-Black.ttf</string>
<string>Lato-Regular.ttf</string>
<string>Lato-BlackItalic.ttf</string>
<string>Lato-BoldItalic.ttf</string>
<string>Lato-Light.ttf</string>
<string>Lato-ThinItalic.ttf</string>
</array>
</dict>
</plist>

View File

@ -6,16 +6,16 @@
<array/>
<key>UIAppFonts</key>
<array>
<string>Lato-Italic</string>
<string>Lato-LightItalic</string>
<string>Lato-Hairline</string>
<string>Lato-Bold</string>
<string>Lato-Black</string>
<string>Lato-Regular</string>
<string>Lato-BlackItalic</string>
<string>Lato-BoldItalic</string>
<string>Lato-Light</string>
<string>Lato-HairlineItalic</string>
<string>Lato-Italic.ttf</string>
<string>Lato-LightItalic.ttf</string>
<string>Lato-Thin.ttf</string>
<string>Lato-Bold.ttf</string>
<string>Lato-Black.ttf</string>
<string>Lato-Regular.ttf</string>
<string>Lato-BlackItalic.ttf</string>
<string>Lato-BoldItalic.ttf</string>
<string>Lato-Light.ttf</string>
<string>Lato-ThinItalic.ttf</string>
</array>
</dict>
</plist>

View File

@ -3,12 +3,12 @@
FORCE_FLAG="$1"
## Font
#swift run -c release ResgenSwift fonts $FORCE_FLAG "./Fonts/sampleFontsAll.txt" \
# --extension-output-path "./Fonts/Generated" \
# --extension-name "FontYolo" \
# --extension-name-ui-kit "UIFontYolo" \
# --extension-suffix "GenAllScript" \
# --info-plist-paths "./Fonts/Generated/test.plist ./Fonts/Generated/test2.plist"
swift run -c release ResgenSwift fonts $FORCE_FLAG "./Fonts/sampleFontsAll.txt" \
--extension-output-path "./Fonts/Generated" \
--extension-name "FontYolo" \
--extension-name-ui-kit "UIFontYolo" \
--extension-suffix "GenAllScript" \
--info-plist-paths "./Fonts/Generated/test.plist ./Fonts/Generated/test2.plist"
#
#echo "\n-------------------------\n"
#

View File

@ -43,22 +43,31 @@ struct Fonts: ParsableCommand {
let fontsToGenerate = FontFileParser.parse(options.inputFile)
// Get real font names
let inputFolder = URL(fileURLWithPath: options.inputFile).deletingLastPathComponent().relativePath
let fontsNames = FontsToolHelper.getFontPostScriptName(for: fontsToGenerate,
inputFolder: inputFolder)
let inputFolder = URL(fileURLWithPath: options.inputFile)
.deletingLastPathComponent()
.relativePath
let fontsNames = FontsToolHelper.getFontPostScriptName(
for: fontsToGenerate,
inputFolder: inputFolder
)
// Generate extension
FontExtensionGenerator.writeExtensionFile(fontsNames: fontsNames,
FontExtensionGenerator.writeExtensionFile(
fontsNames: fontsNames,
staticVar: options.staticMembers,
extensionName: options.extensionName,
extensionFilePath: options.extensionFilePath,
isSwiftUI: true)
isSwiftUI: true
)
FontExtensionGenerator.writeExtensionFile(fontsNames: fontsNames,
FontExtensionGenerator.writeExtensionFile(
fontsNames: fontsNames,
staticVar: options.staticMembers,
extensionName: options.extensionNameUIKit,
extensionFilePath: options.extensionFilePathUIKit,
isSwiftUI: false)
isSwiftUI: false
)
print("Info.plist has been updated with:")
print("\(FontPlistGenerator.generatePlistUIAppsFontContent(for: fontsNames, infoPlistPaths: options.infoPlistPaths))")

View File

@ -57,17 +57,26 @@ class FontsToolHelper {
return fontsFileNames
}
private static func getFontName(atPath path: String) -> String {
private static func getFontName(atPath path: String) -> FontName {
//print("fc-scan --format %{postscriptname} \(path)")
// Get real font name
let task = Shell.shell(["fc-scan", "--format", "%{postscriptname}", path])
guard let fontName = task.output, task.terminationStatus == 0 else {
guard let postscriptName = task.output, task.terminationStatus == 0 else {
let error = FontsToolError.fcScan(path, task.terminationStatus, task.output)
print(error.description)
Fonts.exit(withError: error)
}
return fontName
let pathURL = URL(fileURLWithPath: path)
let filename = pathURL
.deletingPathExtension()
.lastPathComponent
return FontName(
postscriptName: postscriptName,
filename: filename,
fileExtension: pathURL.pathExtension
)
}
}

View File

@ -26,16 +26,16 @@ class FontPlistGenerator {
// Fill array with fonts
fontsToAddToPlist
.forEach {
.forEach { fontName in
Shell.shell(launchPath: "/usr/libexec/PlistBuddy",
["-c", "add :UIAppFonts: string \($0)", infoPlist])
["-c", "add :UIAppFonts: string \(fontName.filename).\(fontName.fileExtension)", infoPlist])
}
}
var plistData = "<key>UIAppFonts</key>\n\t<array>\n"
fontsToAddToPlist
.forEach {
plistData += "\t\t<string>\($0)</string>\n"
.forEach { fontName in
plistData += "\t\t<string>\(fontName.filename).\(fontName.fileExtension)</string>\n"
}
plistData += "\t</array>"

View File

@ -10,18 +10,18 @@ import ToolCore
class FontExtensionGenerator {
private static func getFontNameEnum(fontsNames: [String]) -> String {
private static func getFontNameEnum(fontsNames: [FontName]) -> String {
var enumDefinition = " enum FontName: String {\n"
fontsNames.forEach {
enumDefinition += " case \($0.fontNameSanitize) = \"\($0)\"\n"
enumDefinition += " case \($0.fontNameSanitize) = \"\($0.postscriptName)\"\n"
}
enumDefinition += " }\n"
return enumDefinition
}
static func writeExtensionFile(fontsNames: [String],
static func writeExtensionFile(fontsNames: [FontName],
staticVar: Bool,
extensionName: String,
extensionFilePath: String,
@ -43,7 +43,7 @@ class FontExtensionGenerator {
}
}
static func getExtensionContent(fontsNames: [String],
static func getExtensionContent(fontsNames: [FontName],
staticVar: Bool,
extensionName: String,
isSwiftUI: Bool) -> String {

View File

@ -7,11 +7,18 @@
import Foundation
typealias FontName = String
//typealias FontName = String
struct FontName: Hashable {
let postscriptName: String
let filename: String
let fileExtension: String
}
extension FontName {
var fontNameSanitize: String {
self.removeCharacters(from: "[]+-_")
postscriptName.removeCharacters(from: "[]+-_")
}
func getProperty(isStatic: Bool, isSwiftUI: Bool) -> String {

View File

@ -7,4 +7,4 @@
import Foundation
public let ResgenSwiftVersion = "1.2"
public let ResgenSwiftVersion = "2.1.0"

View File

@ -84,7 +84,7 @@ final class AnalyticsDefinitionTests: XCTestCase {
name: "Ecran un",
action: "",
category: "",
params: []
params: [:]
)
}
"""
@ -127,7 +127,7 @@ final class AnalyticsDefinitionTests: XCTestCase {
name: "Ecran un",
action: "",
category: "",
params: []
params: [:]
)
}
"""

View File

@ -60,7 +60,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
let expect = """
// Generated by ResgenSwift.Analytics 1.2
import Firebase
import FirebaseAnalytics
// MARK: - Protocol
@ -79,7 +79,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
class FirebaseAnalyticsManager: AnalyticsManagerProtocol {
func logScreen(name: String, path: String) {
var parameters = [
AnalyticsParameterScreenName: name
AnalyticsParameterScreenName: name as NSObject
]
Analytics.logEvent(
@ -94,19 +94,25 @@ final class AnalyticsGeneratorTests: XCTestCase {
category: String,
params: [String: Any]?
) {
var parameters: [String:Any] = [
"action": action,
"category": category,
var parameters: [String:NSObject] = [
"action": action as NSObject,
"category": category as NSObject,
]
if let supplementaryParameters = params {
parameters.merge(supplementaryParameters) { (origin, new) -> Any in
return origin
for (newKey, newValue) in supplementaryParameters {
if parameters.contains(where: { (key: String, value: NSObject) in
key == newKey
}) {
continue
}
parameters[newKey] = newValue as? NSObject
}
}
Analytics.logEvent(
name,
name.replacingOccurrences(of: [" "], with: "_"),
parameters: parameters
)
}
@ -173,7 +179,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
name: "s1 def two",
action: "",
category: "",
params: []
params: [:]
)
}
@ -366,7 +372,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
name: "s1 def two",
action: "test",
category: "test",
params: []
params: [:]
)
}
@ -419,7 +425,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
// Generated by ResgenSwift.Analytics 1.2
import MatomoTracker
import Firebase
import FirebaseAnalytics
// MARK: - Protocol
@ -499,7 +505,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
class FirebaseAnalyticsManager: AnalyticsManagerProtocol {
func logScreen(name: String, path: String) {
var parameters = [
AnalyticsParameterScreenName: name
AnalyticsParameterScreenName: name as NSObject
]
Analytics.logEvent(
@ -514,19 +520,25 @@ final class AnalyticsGeneratorTests: XCTestCase {
category: String,
params: [String: Any]?
) {
var parameters: [String:Any] = [
"action": action,
"category": category,
var parameters: [String:NSObject] = [
"action": action as NSObject,
"category": category as NSObject,
]
if let supplementaryParameters = params {
parameters.merge(supplementaryParameters) { (origin, new) -> Any in
return origin
for (newKey, newValue) in supplementaryParameters {
if parameters.contains(where: { (key: String, value: NSObject) in
key == newKey
}) {
continue
}
parameters[newKey] = newValue as? NSObject
}
}
Analytics.logEvent(
name,
name.replacingOccurrences(of: [" "], with: "_"),
parameters: parameters
)
}
@ -599,7 +611,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
name: "s1 def two",
action: "test",
category: "test",
params: []
params: [:]
)
}

View File

@ -16,8 +16,8 @@ final class FontExtensionGeneratorTests: XCTestCase {
func test_uiKit_GeneratedExtensionContent() {
// Given
let fontNames: [FontName] = [
"CircularStd-Regular",
"CircularStd-Bold"
FontName(postscriptName: "CircularStd-Regular", filename: "CircularStd-Regular", fileExtension: "ttf"),
FontName(postscriptName: "CircularStd-Bold", filename: "CircularStd-Bold", fileExtension: "ttf")
]
// When
@ -59,8 +59,8 @@ final class FontExtensionGeneratorTests: XCTestCase {
func test_swiftUI_GeneratedExtensionContent() {
// Given
let fontNames: [FontName] = [
"CircularStd-Regular",
"CircularStd-Bold"
FontName(postscriptName: "CircularStd-Regular", filename: "CircularStd-Regular", fileExtension: "ttf"),
FontName(postscriptName: "CircularStd-Bold", filename: "CircularStd-Bold", fileExtension: "ttf")
]
// When

View File

@ -14,7 +14,11 @@ final class FontNameTests: XCTestCase {
func test_uiKit_GeneratedProperty_noForbiddenCharacter() {
// Given
let fontName: FontName = "CircularStdBold"
let fontName = FontName(
postscriptName: "CircularStdBold",
filename: "CircularStd-Bold",
fileExtension: "ttf"
)
// When
let property = fontName.getProperty(isStatic: true, isSwiftUI: false)
@ -31,7 +35,11 @@ final class FontNameTests: XCTestCase {
func test_uiKit_GeneratedProperty_withForbiddenCharacter() {
// Given
let fontName: FontName = "[Circular_Std+Bold-Underline]"
let fontName = FontName(
postscriptName: "[Circular_Std+Bold-Underline]",
filename: "Circular_Std+Bold-Underline",
fileExtension: "ttf"
)
// When
let property = fontName.getProperty(isStatic: true, isSwiftUI: false)
@ -48,7 +56,11 @@ final class FontNameTests: XCTestCase {
func test_uiKit_GeneratedMethod_noForbiddenCharacter() {
// Given
let fontName: FontName = "CircularStdBold"
let fontName = FontName(
postscriptName: "CircularStdBold",
filename: "CircularStd-Bold",
fileExtension: "ttf"
)
// When
let property = fontName.getProperty(isStatic: false, isSwiftUI: false)
@ -65,7 +77,11 @@ final class FontNameTests: XCTestCase {
func test_uiKit_GeneratedMethod_withForbiddenCharacter() {
// Given
let fontName: FontName = "[Circular_Std+Bold-Underline]"
let fontName = FontName(
postscriptName: "[Circular_Std+Bold-Underline]",
filename: "Circular_Std+Bold-Underline",
fileExtension: "ttf"
)
// When
let property = fontName.getProperty(isStatic: false, isSwiftUI: false)
@ -82,7 +98,11 @@ final class FontNameTests: XCTestCase {
func test_swiftUI_GeneratedProperty_noForbiddenCharacter() {
// Given
let fontName: FontName = "CircularStdBold"
let fontName = FontName(
postscriptName: "CircularStdBold",
filename: "CircularStd-Bold",
fileExtension: "ttf"
)
// When
let property = fontName.getProperty(isStatic: true, isSwiftUI: true)
@ -99,7 +119,11 @@ final class FontNameTests: XCTestCase {
func test_swiftUI_GeneratedProperty_withForbiddenCharacter() {
// Given
let fontName: FontName = "[Circular_Std+Bold-Underline]"
let fontName = FontName(
postscriptName: "[Circular_Std+Bold-Underline]",
filename: "Circular_Std+Bold-Underline",
fileExtension: "ttf"
)
// When
let property = fontName.getProperty(isStatic: true, isSwiftUI: true)
@ -116,7 +140,11 @@ final class FontNameTests: XCTestCase {
func test_swiftUI_GeneratedMethod_noForbiddenCharacter() {
// Given
let fontName: FontName = "CircularStdBold"
let fontName = FontName(
postscriptName: "CircularStdBold",
filename: "CircularStd-Bold",
fileExtension: "ttf"
)
// When
let property = fontName.getProperty(isStatic: false, isSwiftUI: true)
@ -133,7 +161,11 @@ final class FontNameTests: XCTestCase {
func test_swiftUI_GeneratedMethod_withForbiddenCharacter() {
// Given
let fontName: FontName = "[Circular_Std+Bold-Underline]"
let fontName = FontName(
postscriptName: "[Circular_Std+Bold-Underline]",
filename: "Circular_Std+Bold-Underline",
fileExtension: "ttf"
)
// When
let property = fontName.getProperty(isStatic: false, isSwiftUI: true)

View File

@ -14,8 +14,8 @@ final class FontPlistGeneratorTests: XCTestCase {
func testGeneratedPlist() {
// Given
let fontNames: [FontName] = [
"CircularStd-Regular",
"CircularStd-Bold"
FontName(postscriptName: "CircularStd-Regular", filename: "CircularStd-Regular", fileExtension: "ttf"),
FontName(postscriptName: "CircularStd-Bold", filename: "CircularStd-Bold", fileExtension: "ttf")
]
// When
@ -25,8 +25,8 @@ final class FontPlistGeneratorTests: XCTestCase {
let expect = """
<key>UIAppFonts</key>
<array>
<string>CircularStd-Regular</string>
<string>CircularStd-Bold</string>
<string>CircularStd-Regular.ttf</string>
<string>CircularStd-Bold.ttf</string>
</array>
"""

View File

@ -57,12 +57,18 @@ final class TagsGeneratorTests: XCTestCase {
/// Translation in ium :
/// Some translation
///
/// Comment :
/// No comment
var s1_def_one: String {
"Some translation"
}
/// Translation in ium :
/// Some translation
///
/// Comment :
/// No comment
var s1_def_two: String {
"Some translation"
}
@ -71,6 +77,9 @@ final class TagsGeneratorTests: XCTestCase {
/// Translation in ium :
/// Some translation
///
/// Comment :
/// No comment
var s2_def_one: String {
"Some translation"
}