9 Commits

Author SHA1 Message Date
443d8d0727 Edit sample file
Some checks failed
gitea-openium/resgen.swift/pipeline/pr-master There was a failure building this commit
2023-12-13 09:29:19 +01:00
f0d9ac3337 Add parse error 2023-12-13 09:29:19 +01:00
31d20bfe2e Add missing print error 2023-12-13 09:29:19 +01:00
dfe31b5c80 Retours sur la structure du code 2023-12-13 09:29:19 +01:00
5427ff6786 Actualiser Sources/ResgenSwift/Analytics/Generator/AnalyticsGenerator.swift
Some checks failed
gitea-openium/resgen.swift/pipeline/head There was a failure building this commit
2023-12-11 10:19:17 +01:00
abb7c8f8c8 Add Swiftlint
Some checks failed
gitea-openium/resgen.swift/pipeline/head There was a failure building this commit
2023-12-11 10:13:18 +01:00
92626b76ad Fix Image 2023-12-11 10:12:11 +01:00
449f16499b Fix Font 2023-12-11 10:12:11 +01:00
cd873ca5d9 Fix Color 2023-12-11 10:12:11 +01:00
15 changed files with 44 additions and 257 deletions

View File

@ -18,15 +18,6 @@
"version" : "1.8.0" "version" : "1.8.0"
} }
}, },
{
"identity" : "pathkit",
"kind" : "remoteSourceControl",
"location" : "https://github.com/kylef/PathKit.git",
"state" : {
"revision" : "3bfd2737b700b9a36565a8c94f4ad2b050a5e574",
"version" : "1.0.1"
}
},
{ {
"identity" : "sourcekitten", "identity" : "sourcekitten",
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
@ -36,24 +27,6 @@
"version" : "0.34.1" "version" : "0.34.1"
} }
}, },
{
"identity" : "spectre",
"kind" : "remoteSourceControl",
"location" : "https://github.com/kylef/Spectre.git",
"state" : {
"revision" : "26cc5e9ae0947092c7139ef7ba612e34646086c7",
"version" : "0.10.1"
}
},
{
"identity" : "stencil",
"kind" : "remoteSourceControl",
"location" : "https://github.com/stencilproject/Stencil.git",
"state" : {
"revision" : "4f222ac85d673f35df29962fc4c36ccfdaf9da5b",
"version" : "0.15.1"
}
},
{ {
"identity" : "swift-argument-parser", "identity" : "swift-argument-parser",
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",

View File

@ -11,7 +11,6 @@ let package = Package(
.package(url: "https://github.com/apple/swift-argument-parser", from: "1.0.0"), .package(url: "https://github.com/apple/swift-argument-parser", from: "1.0.0"),
.package(url: "https://github.com/jpsim/Yams.git", from: "5.0.1"), .package(url: "https://github.com/jpsim/Yams.git", from: "5.0.1"),
.package(url: "https://github.com/realm/SwiftLint.git", .upToNextMajor(from: "0.54.0")), .package(url: "https://github.com/realm/SwiftLint.git", .upToNextMajor(from: "0.54.0")),
.package(url: "https://github.com/stencilproject/Stencil.git", .upToNextMajor(from: "0.15.1")),
], ],
targets: [ targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite. // Targets are the basic building blocks of a package. A target can define a module or a test suite.
@ -21,8 +20,7 @@ let package = Package(
dependencies: [ dependencies: [
"ToolCore", "ToolCore",
.product(name: "ArgumentParser", package: "swift-argument-parser"), .product(name: "ArgumentParser", package: "swift-argument-parser"),
"Yams", "Yams"
"Stencil",
], ],
plugins: [.plugin(name: "SwiftLintPlugin", package: "SwiftLint")] plugins: [.plugin(name: "SwiftLintPlugin", package: "SwiftLint")]
), ),

View File

@ -133,71 +133,6 @@ swift run -c release ResgenSwift strings tags $FORCE_FLAG "./Tags/tags.txt" \
> ⚠️ If extension name is not set or is `Tags`, it will generate the following typaloas `typealias Tags = String`. > ⚠️ If extension name is not set or is `Tags`, it will generate the following typaloas `typealias Tags = String`.
## Analytics
Analytics will generate all you need to analyze UX with Matomo or Firebase Analytics. Input files are formatted in YAML. This command will generate a manager for each target and an AnalyticsManager. This is this one you will need to use. And it will generate a method for all tags you have declared in the YAML file. Next, you will need to use the `configure()` method of AnalyticsManager and if you want to use matomo to set up the `siteId` and the `url` of the site.
```sh
swift run -c release ResgenSwift strings tags $FORCE_FLAG "./Tags/tags.txt" \
--target "matomo firebase" \
--extension-output-path "./Analytics/Generated" \
--extension-name "AppAnalytics" \
--extension-suffix "GreatApp" \
--static-members true
```
**Parameters**
1. `-f`: force generation
2. Input tags file (must be YAML formatted)
3. `--target`: target with you will log UX
4. `--extension-output-path`: path where to generate generated extension
5. `--extension-name` *(optional)* : name of class to add the extension
6. `--extension-suffix` *(optional)* : additional text which is added to filename (ex: `AppAnalytics+GreatApp.swift`)
7. `--static-members` *(optional)*: generate static properties or not
> ⚠️ If extension name is not set or is `Analytics`, it will generate the following typaloas `typealias Analytics = String`.
### YAML
```
- id: s1_def_one
name: s1 def one _TITLE_
path: s1_def_one/_TITLE_
action: Tap
category: User
tags: ios,droid
comments:
parameters:
- name: title
type: String
replaceIn: name,path
```
1. `id`: name of the method (method name will be composed of `log` + `Event|Screen` + `id`)
2. `name`: name of the tag
3. `path` *(optional with firebase)* : needed for matomo but not with firebase (log screen)
4. `action` *(optional with firebase)* : needed for matomo but not with firebase (log event)
5. `category` *(optional with firebase)* : needed for matomo but not with firebase (log event)
6. `tags`: which platform target
7. `comments` *(optional)*
8. `parameters` *(optional)*
**Parameters**
You can use parameters in generate methods.
1. `name`: name of the parameter
2. `type`: type of the parameter (Int, String, Bool, Double)
3. `replaceIn` *(optional)*
**Replace in**
This is section is equivalent of `%s | %d | %f | %@`. You can put the content of the parameter in *name*, *path*, *action*, *category*.
You need to put `_` + `NAME OF THE PARAMETER` + `_` in the target and which target you want in the value of `replaceIn`. (name need to be in uppercase)
## Images ## 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.

View File

@ -4,25 +4,18 @@ import SwiftUI
extension ColorYolo { extension ColorYolo {
/// Color red is #FF0000 (light) or #FF0000 (dark)"
/// Color red is #FF0000 #FF0000 or #FF0000 #FF0000"
var red: Color { var red: Color {
Color("red") Color("red")
} }
/// Color green_alpha_50 is #A000FF00 (light) or #A000FF00 (dark)"
/// Color green_alpha_50 is #A000FF00 #A000FF00 or #A000FF00 #A000FF00"
var green_alpha_50: Color { var green_alpha_50: Color {
Color("green_alpha_50") Color("green_alpha_50")
} }
/// Color blue_light_dark is #0000FF (light) or #0000AA (dark)"
/// Color blue_light_dark is #0000FF #0000FF or #0000AA #0000AA"
var blue_light_dark: Color { var blue_light_dark: Color {
Color("blue_light_dark") Color("blue_light_dark")
} }
} }

View File

@ -4,25 +4,18 @@ import UIKit
extension UIColorYolo { extension UIColorYolo {
/// Color red is #FF0000 (light) or #FF0000 (dark)"
/// Color red is #FF0000 #FF0000 or #FF0000 #FF0000"
@objc var red: UIColor { @objc var red: UIColor {
UIColor(named: "red")! UIColor(named: "red")!
} }
/// Color green_alpha_50 is #A000FF00 (light) or #A000FF00 (dark)"
/// Color green_alpha_50 is #A000FF00 #A000FF00 or #A000FF00 #A000FF00"
@objc var green_alpha_50: UIColor { @objc var green_alpha_50: UIColor {
UIColor(named: "green_alpha_50")! UIColor(named: "green_alpha_50")!
} }
/// Color blue_light_dark is #0000FF (light) or #0000AA (dark)"
/// Color blue_light_dark is #0000FF #0000FF or #0000AA #0000AA"
@objc var blue_light_dark: UIColor { @objc var blue_light_dark: UIColor {
UIColor(named: "blue_light_dark")! UIColor(named: "blue_light_dark")!
} }
} }

View File

@ -1,32 +0,0 @@
// Generated by ResgenSwift.Color 1.2
import UIKit
extension UIhkjhkColorYolo {
/// Color red is #FF0000 #FF0000 or #FF0000 #FF0000"
@objc var red: UIColor {
UIColor(named: "red")!
}
/// Color green_alpha_50 is #A000FF00 #A000FF00 or #A000FF00 #A000FF00"
@objc var green_alpha_50: UIColor {
UIColor(named: "green_alpha_50")!
}
/// Color blue_light_dark is #0000FF #0000FF or #0000AA #0000AA"
@objc var blue_light_dark: UIColor {
UIColor(named: "blue_light_dark")!
}
}

View File

@ -81,7 +81,7 @@ class MatomoAnalyticsManager: AnalyticsManagerProtocol {
class FirebaseAnalyticsManager: AnalyticsManagerProtocol { class FirebaseAnalyticsManager: AnalyticsManagerProtocol {
func logScreen(name: String, path: String) { func logScreen(name: String, path: String) {
var parameters = [ var parameters = [
AnalyticsParameterScreenName: name as NSObject AnalyticsParameterScreenName: name
] ]
Analytics.logEvent( Analytics.logEvent(
@ -96,25 +96,19 @@ class FirebaseAnalyticsManager: AnalyticsManagerProtocol {
category: String, category: String,
params: [String: Any]? params: [String: Any]?
) { ) {
var parameters: [String:NSObject] = [ var parameters: [String:Any] = [
"action": action as NSObject, "action": action,
"category": category as NSObject, "category": category,
] ]
if let supplementaryParameters = params { if let supplementaryParameters = params {
for (newKey, newValue) in supplementaryParameters { parameters.merge(supplementaryParameters) { (origin, new) -> Any in
if parameters.contains(where: { (key: String, value: NSObject) in return origin
key == newKey
}) {
continue
}
parameters[newKey] = newValue as? NSObject
} }
} }
Analytics.logEvent( Analytics.logEvent(
name.replacingOccurrences(of: [" "], with: "_"), name,
parameters: parameters parameters: parameters
) )
} }

View File

@ -12,14 +12,14 @@ FORCE_FLAG="$1"
# #
#echo "\n-------------------------\n" #echo "\n-------------------------\n"
# #
# Color ## Color
swift run -c release ResgenSwift colors $FORCE_FLAG "./Colors/sampleColors1.txt" \ #swift run -c release ResgenSwift colors $FORCE_FLAG "./Colors/sampleColors1.txt" \
--style all \ # --style all \
--xcassets-path "./Colors/colors.xcassets" \ # --xcassets-path "./Colors/colors.xcassets" \
--extension-output-path "./Colors/Generated/" \ # --extension-output-path "./Colors/Generated/" \
--extension-name "ColorYolo" \ # --extension-name "ColorYolo" \
--extension-name-ui-kit "UIColorYolo" \ # --extension-name-ui-kit "UIhkjhkColorYolo" \
--extension-suffix "GenAllScript" # --extension-suffix "GenAllScript"
# #
#echo "\n-------------------------\n" #echo "\n-------------------------\n"
# #
@ -61,10 +61,10 @@ swift run -c release ResgenSwift colors $FORCE_FLAG "./Colors/sampleColors1.txt"
#echo "\n-------------------------\n" #echo "\n-------------------------\n"
# #
## Images # Images
#swift run -c release ResgenSwift images $FORCE_FLAG "./Images/sampleImages.txt" \ swift run -c release ResgenSwift images $FORCE_FLAG "./Images/sampleImages.txt" \
# --xcassets-path "./Images/imagium.xcassets" \ --xcassets-path "./Images/imagium.xcassets" \
# --extension-output-path "./Images/Generated" \ --extension-output-path "./Images/Generated" \
# --extension-name "ImageYolo" \ --extension-name "ImageYolo" \
# --extension-name-ui-kit "UIImageYolo" \ --extension-name-ui-kit "UIImageYolo" \
# --extension-suffix "GenAllScript" --extension-suffix "GenAllScript"

View File

@ -33,7 +33,7 @@ enum FirebaseGenerator {
""" """
func logScreen(name: String, path: String) { func logScreen(name: String, path: String) {
var parameters = [ var parameters = [
AnalyticsParameterScreenName: name as NSObject AnalyticsParameterScreenName: name
] ]
Analytics.logEvent( Analytics.logEvent(
@ -53,25 +53,19 @@ enum FirebaseGenerator {
category: String, category: String,
params: [String: Any]? params: [String: Any]?
) { ) {
var parameters: [String:NSObject] = [ var parameters: [String:Any] = [
"action": action as NSObject, "action": action,
"category": category as NSObject, "category": category,
] ]
if let supplementaryParameters = params { if let supplementaryParameters = params {
for (newKey, newValue) in supplementaryParameters { parameters.merge(supplementaryParameters) { (origin, new) -> Any in
if parameters.contains(where: { (key: String, value: NSObject) in return origin
key == newKey
}) {
continue
}
parameters[newKey] = newValue as? NSObject
} }
} }
Analytics.logEvent( Analytics.logEvent(
name.replacingOccurrences(of: [" "], with: "_"), name,
parameters: parameters parameters: parameters
) )
} }

View File

@ -41,28 +41,12 @@ struct ColorExtensionGenerator {
staticVar: Bool, staticVar: Bool,
extensionName: String, extensionName: String,
isSwiftUI: Bool) -> String { isSwiftUI: Bool) -> String {
// [ [
// Self.getHeader(extensionClassname: extensionName, isSwiftUI: isSwiftUI), Self.getHeader(extensionClassname: extensionName, isSwiftUI: isSwiftUI),
// Self.getProperties(for: colors, withStaticVar: staticVar, isSwiftUI: isSwiftUI), Self.getProperties(for: colors, withStaticVar: staticVar, isSwiftUI: isSwiftUI),
// Self.getFooter() Self.getFooter()
// ]
// .joined(separator: "\n")
do {
let context: [String: Any] = [
"colors": colors,
"isStatic": staticVar,
"isSwiftUI": isSwiftUI,
"toolName": Colors.toolName,
"resgenVersion": ResgenSwiftVersion,
"extensionClassname": extensionName
] ]
.joined(separator: "\n")
return try ResgenSwift.environment.renderTemplate(name: "Colors/main_template", context: context)
} catch {
// let error = ColorsToolError.writeExtension(extensionFilePath, error.localizedDescription)
// print(error.description)
Colors.exit(withError: error)
}
} }
private static func getHeader(extensionClassname: String, isSwiftUI: Bool) -> String { private static func getHeader(extensionClassname: String, isSwiftUI: Bool) -> String {

View File

@ -8,8 +8,6 @@
import ToolCore import ToolCore
import Foundation import Foundation
import ArgumentParser import ArgumentParser
import Stencil
import PathKit
struct ResgenSwift: ParsableCommand { struct ResgenSwift: ParsableCommand {
@ -34,20 +32,6 @@ struct ResgenSwift: ParsableCommand {
// subcommand is not given on the command line. // subcommand is not given on the command line.
//defaultSubcommand: Twine.self //defaultSubcommand: Twine.self
) )
static let projectDirectory = URL(fileURLWithPath: #file) // ProjectDir/Sources/ResgenSwift/main.swift
.deletingLastPathComponent() // ProjectDir/Sources/ResgenSwift/
.deletingLastPathComponent() // ProjectDir/Sources/
.deletingLastPathComponent() // ProjectDir/
static let environment = Environment(
loader: FileSystemLoader(
paths: [
Path("\(projectDirectory.path)/Templates/")
]
)
)
} }
print(ResgenSwift.projectDirectory.path)
ResgenSwift.main() ResgenSwift.main()

View File

@ -1,21 +0,0 @@
// Generated by ResgenSwift.{{ toolName }} {{ resgenVersion }}
{% if isSwiftUI %}
import SwiftUI
{% else %}
import UIKit
{% endif %}
extension {{ extensionClassname }} {
{% for color in colors %}
{% if isSwiftUI %}
/// Color {{ color.name }} is {{ color.light }} {{ color.light }} or {{ color.dark }} {{ color.dark }}"
{% if isStatic %}static {% endif %}var {{ color.name }}: Color {
Color("{{ color.name }}")
}
{% else %}
/// Color {{ color.name }} is {{ color.light }} {{ color.light }} or {{ color.dark }} {{ color.dark }}"
{% if isStatic %}static {% else %}@objc {% endif %}var {{ color.name }}: UIColor {
UIColor(named: "{{ color.name }}")!
}
{% endif %}
{% endfor %}
}

View File

@ -1,4 +0,0 @@
/// Color {{ color.name }} is {{ color.light }} {{ color.light }} or {{ color.dark }} {{ color.dark }}"
{% if isStatic %}static {% endif %}var {{ color.name }}: Color {
Color("{{ color.name }}")
}

View File

@ -1,4 +0,0 @@
/// Color {{ color.name }} is {{ color.light }} {{ color.light }} or {{ color.dark }} {{ color.dark }}"
{% if isStatic %}static {% else %}@objc {% endif %}var {{ color.name }}: UIColor {
UIColor(named: "{{ color.name }}")!
}