Add new analytics parameters pathSuffix
Some checks failed
openium/resgen.swift/pipeline/head There was a failure building this commit
Some checks failed
openium/resgen.swift/pipeline/head There was a failure building this commit
This commit is contained in:
@@ -6,16 +6,16 @@ extension ColorYolo {
|
||||
|
||||
/// Color red is #FF0000 (light) or #FF0000 (dark)"
|
||||
public var red: Color {
|
||||
Color("red")
|
||||
Color("red", bundle: Bundle.main)
|
||||
}
|
||||
|
||||
/// Color green_alpha_50 is #A000FF00 (light) or #A000FF00 (dark)"
|
||||
public var green_alpha_50: Color {
|
||||
Color("green_alpha_50")
|
||||
Color("green_alpha_50", bundle: Bundle.main)
|
||||
}
|
||||
|
||||
/// Color blue_light_dark is #0000FF (light) or #0000AA (dark)"
|
||||
public var blue_light_dark: Color {
|
||||
Color("blue_light_dark")
|
||||
Color("blue_light_dark", bundle: Bundle.main)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,16 +6,16 @@ extension UIColorYolo {
|
||||
|
||||
/// Color red is #FF0000 (light) or #FF0000 (dark)"
|
||||
@objc public var red: UIColor {
|
||||
UIColor(named: "red")!
|
||||
UIColor(named: "red", in: Bundle.main, compatibleWith: nil)!
|
||||
}
|
||||
|
||||
/// Color green_alpha_50 is #A000FF00 (light) or #A000FF00 (dark)"
|
||||
@objc public var green_alpha_50: UIColor {
|
||||
UIColor(named: "green_alpha_50")!
|
||||
UIColor(named: "green_alpha_50", in: Bundle.main, compatibleWith: nil)!
|
||||
}
|
||||
|
||||
/// Color blue_light_dark is #0000FF (light) or #0000AA (dark)"
|
||||
@objc public var blue_light_dark: UIColor {
|
||||
UIColor(named: "blue_light_dark")!
|
||||
UIColor(named: "blue_light_dark", in: Bundle.main, compatibleWith: nil)!
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,26 +6,26 @@ import SwiftUI
|
||||
extension ImageYolo {
|
||||
|
||||
public var article_notification_pull_detail: Image {
|
||||
Image("article_notification_pull_detail")
|
||||
Image("article_notification_pull_detail", bundle: Bundle.main)
|
||||
}
|
||||
|
||||
public var article_notification_pull: Image {
|
||||
Image("article_notification_pull")
|
||||
Image("article_notification_pull", bundle: Bundle.main)
|
||||
}
|
||||
|
||||
public var new_article: Image {
|
||||
Image("new_article")
|
||||
Image("new_article", bundle: Bundle.main)
|
||||
}
|
||||
|
||||
public var welcome_background: Image {
|
||||
Image("welcome_background")
|
||||
Image("welcome_background", bundle: Bundle.main)
|
||||
}
|
||||
|
||||
public var article_trash: Image {
|
||||
Image("article_trash")
|
||||
Image("article_trash", bundle: Bundle.main)
|
||||
}
|
||||
|
||||
public var ic_close_article: Image {
|
||||
Image("ic_close_article")
|
||||
Image("ic_close_article", bundle: Bundle.main)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,26 +6,26 @@ import UIKit
|
||||
extension UIImageYolo {
|
||||
|
||||
public var article_notification_pull_detail: UIImage {
|
||||
UIImage(named: "article_notification_pull_detail")!
|
||||
UIImage(named: "article_notification_pull_detail", in: Bundle.main, with: nil)!
|
||||
}
|
||||
|
||||
public var article_notification_pull: UIImage {
|
||||
UIImage(named: "article_notification_pull")!
|
||||
UIImage(named: "article_notification_pull", in: Bundle.main, with: nil)!
|
||||
}
|
||||
|
||||
public var new_article: UIImage {
|
||||
UIImage(named: "new_article")!
|
||||
UIImage(named: "new_article", in: Bundle.main, with: nil)!
|
||||
}
|
||||
|
||||
public var welcome_background: UIImage {
|
||||
UIImage(named: "welcome_background")!
|
||||
UIImage(named: "welcome_background", in: Bundle.main, with: nil)!
|
||||
}
|
||||
|
||||
public var article_trash: UIImage {
|
||||
UIImage(named: "article_trash")!
|
||||
UIImage(named: "article_trash", in: Bundle.main, with: nil)!
|
||||
}
|
||||
|
||||
public var ic_close_article: UIImage {
|
||||
UIImage(named: "ic_close_article")!
|
||||
UIImage(named: "ic_close_article", in: Bundle.main, with: nil)!
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ fileprivate let kStringsFileName = "sampleStrings"
|
||||
|
||||
extension String {
|
||||
|
||||
internal enum KeyGenAllScript: String {
|
||||
public enum KeyGenAllScript: String {
|
||||
case param_lang = "param_lang"
|
||||
case generic_back = "generic_back"
|
||||
case generic_loading_data = "generic_loading_data"
|
||||
@@ -14,7 +14,7 @@ extension String {
|
||||
case test_equal_symbol = "test_equal_symbol"
|
||||
case placeholders_test_one = "placeholders_test_one"
|
||||
|
||||
internal var keyPath: KeyPath<String, String> {
|
||||
public var keyPath: KeyPath<String, String> {
|
||||
switch self {
|
||||
case .param_lang: return \String.param_lang
|
||||
case .generic_back: return \String.generic_back
|
||||
@@ -33,7 +33,7 @@ extension String {
|
||||
///
|
||||
/// Comment :
|
||||
/// No comment
|
||||
internal var param_lang: String {
|
||||
public var param_lang: String {
|
||||
NSLocalizedString("param_lang", tableName: kStringsFileName, bundle: Bundle.main, value: "en", comment: "")
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ extension String {
|
||||
///
|
||||
/// Comment :
|
||||
/// No comment
|
||||
internal var generic_back: String {
|
||||
public var generic_back: String {
|
||||
NSLocalizedString("generic_back", tableName: kStringsFileName, bundle: Bundle.main, value: "Back", comment: "")
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ extension String {
|
||||
///
|
||||
/// Comment :
|
||||
/// No comment
|
||||
internal var generic_loading_data: String {
|
||||
public var generic_loading_data: String {
|
||||
NSLocalizedString("generic_loading_data", tableName: kStringsFileName, bundle: Bundle.main, value: "Loading\ndata...", comment: "")
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ extension String {
|
||||
///
|
||||
/// Comment :
|
||||
/// No comment
|
||||
internal var generic_welcome_firstname_format: String {
|
||||
public var generic_welcome_firstname_format: String {
|
||||
NSLocalizedString("generic_welcome_firstname_format", tableName: kStringsFileName, bundle: Bundle.main, value: "Welcome \"%@\" !", comment: "")
|
||||
}
|
||||
/// Translation in en :
|
||||
@@ -70,7 +70,7 @@ extension String {
|
||||
///
|
||||
/// Comment :
|
||||
/// No comment
|
||||
internal func generic_welcome_firstname_format(arg0: String) -> String {
|
||||
public func generic_welcome_firstname_format(arg0: String) -> String {
|
||||
String(format: self.generic_welcome_firstname_format, arg0)
|
||||
}
|
||||
|
||||
@@ -81,7 +81,7 @@ extension String {
|
||||
///
|
||||
/// Comment :
|
||||
/// No comment
|
||||
internal var test_equal_symbol: String {
|
||||
public var test_equal_symbol: String {
|
||||
NSLocalizedString("test_equal_symbol", tableName: kStringsFileName, bundle: Bundle.main, value: "1€ = 1 point !", comment: "")
|
||||
}
|
||||
|
||||
@@ -92,7 +92,7 @@ extension String {
|
||||
///
|
||||
/// Comment :
|
||||
/// No comment
|
||||
internal var placeholders_test_one: String {
|
||||
public var placeholders_test_one: String {
|
||||
NSLocalizedString("placeholders_test_one", tableName: kStringsFileName, bundle: Bundle.main, value: "You %%: %2$@ %1$@ Age: %3$d", comment: "")
|
||||
}
|
||||
/// Translation in en :
|
||||
@@ -100,7 +100,7 @@ extension String {
|
||||
///
|
||||
/// Comment :
|
||||
/// No comment
|
||||
internal func placeholders_test_one(arg0: String, arg1: String, arg2: Int) -> String {
|
||||
public func placeholders_test_one(arg0: String, arg1: String, arg2: Int) -> String {
|
||||
String(format: self.placeholders_test_one, arg0, arg1, arg2)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
// Generated by ResgenSwift.Analytics 2.2.0
|
||||
|
||||
import Foundation
|
||||
import MatomoTracker
|
||||
import FirebaseAnalytics
|
||||
import os
|
||||
|
||||
@@ -24,6 +25,72 @@ internal protocol AnalyticsManagerProtocol {
|
||||
func setEnable(_ enable: Bool)
|
||||
}
|
||||
|
||||
// MARK: - Matomo
|
||||
|
||||
class MatomoAnalyticsManager: AnalyticsManagerProtocol {
|
||||
|
||||
// MARK: - Properties
|
||||
|
||||
private var tracker: MatomoTracker
|
||||
|
||||
// MARK: - Init
|
||||
|
||||
init(siteId: String, url: String) {
|
||||
debugPrint("[Matomo service] Server URL: \(url)")
|
||||
debugPrint("[Matomo service] Site ID: \(siteId)")
|
||||
tracker = MatomoTracker(
|
||||
siteId: siteId,
|
||||
baseURL: URL(string: url)!
|
||||
)
|
||||
|
||||
#if DEBUG
|
||||
tracker.dispatchInterval = 5
|
||||
#endif
|
||||
|
||||
#if DEBUG
|
||||
tracker.logger = DefaultLogger(minLevel: .verbose)
|
||||
#endif
|
||||
|
||||
debugPrint("[Matomo service] Configured with content base: \(tracker.contentBase?.absoluteString ?? "-")")
|
||||
debugPrint("[Matomo service] Opt out: \(tracker.isOptedOut)")
|
||||
}
|
||||
|
||||
// MARK: - Methods
|
||||
|
||||
func logScreen(
|
||||
name: String,
|
||||
path: String,
|
||||
params: [String: Any]?
|
||||
) {
|
||||
guard let trackerUrl = tracker.contentBase?.absoluteString else { return }
|
||||
|
||||
let urlString = URL(string: "\(trackerUrl)" + "/" + "\(path)" + "yolo"
|
||||
tracker.track(
|
||||
view: [name],
|
||||
url: urlString
|
||||
)
|
||||
}
|
||||
|
||||
func logEvent(
|
||||
name: String,
|
||||
action: String,
|
||||
category: String,
|
||||
params: [String: Any]?
|
||||
) {
|
||||
tracker.track(
|
||||
eventWithCategory: category,
|
||||
action: action,
|
||||
name: name,
|
||||
number: nil,
|
||||
url: nil
|
||||
)
|
||||
}
|
||||
|
||||
func setEnable(_ enable: Bool) {
|
||||
tracker.isOptedOut = !enable
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Firebase
|
||||
|
||||
class FirebaseAnalyticsManager: AnalyticsManagerProtocol {
|
||||
@@ -40,7 +107,7 @@ class FirebaseAnalyticsManager: AnalyticsManagerProtocol {
|
||||
]
|
||||
|
||||
if path.isEmpty == false {
|
||||
parameters["path"] = path + "/iOS" as NSObject
|
||||
parameters["path"] = path + "/yolo" as NSObject
|
||||
}
|
||||
|
||||
if let supplementaryParameters = params {
|
||||
@@ -106,6 +173,7 @@ class FirebaseAnalyticsManager: AnalyticsManagerProtocol {
|
||||
|
||||
internal enum TrackerType: CaseIterable {
|
||||
|
||||
case matomo
|
||||
case firebase
|
||||
}
|
||||
|
||||
@@ -113,6 +181,7 @@ internal enum TrackerType: CaseIterable {
|
||||
|
||||
internal class AnalyticsManager {
|
||||
|
||||
@MainActor
|
||||
internal static var shared = AnalyticsManager()
|
||||
|
||||
private init() {}
|
||||
@@ -153,8 +222,12 @@ internal class AnalyticsManager {
|
||||
setAnalytics(enable: false, analytics)
|
||||
}
|
||||
|
||||
internal func configure(isDebugMode: Bool = false) {
|
||||
internal func configure(siteId: String, url: String, isDebugMode: Bool = false) {
|
||||
self.isDebugMode = isDebugMode
|
||||
managers[TrackerType.matomo] = MatomoAnalyticsManager(
|
||||
siteId: siteId,
|
||||
url: url
|
||||
)
|
||||
managers[TrackerType.firebase] = FirebaseAnalyticsManager()
|
||||
}
|
||||
|
||||
@@ -162,12 +235,12 @@ internal class AnalyticsManager {
|
||||
|
||||
private func formattedParams(_ params: [String: Any]?) -> String {
|
||||
guard let params = params, !params.isEmpty else { return "-" }
|
||||
|
||||
|
||||
let formattedParams = params.map { key, value in
|
||||
" \(key): \(value)"
|
||||
}
|
||||
.joined(separator: "\n")
|
||||
|
||||
|
||||
return "\n" + formattedParams
|
||||
}
|
||||
|
||||
@@ -180,11 +253,11 @@ internal class AnalyticsManager {
|
||||
if isDebugMode {
|
||||
logger.log("Analytics disabled")
|
||||
}
|
||||
return
|
||||
return
|
||||
}
|
||||
|
||||
managers.values.forEach { manager in
|
||||
|
||||
|
||||
if isDebugMode {
|
||||
logger.debug("""
|
||||
🖥️ Screen:
|
||||
@@ -212,11 +285,11 @@ internal class AnalyticsManager {
|
||||
if isDebugMode {
|
||||
logger.log("Analytics disabled")
|
||||
}
|
||||
return
|
||||
return
|
||||
}
|
||||
|
||||
managers.values.forEach { manager in
|
||||
|
||||
|
||||
if isDebugMode {
|
||||
logger.debug("""
|
||||
📊 Event:
|
||||
@@ -269,7 +342,7 @@ internal class AnalyticsManager {
|
||||
internal func logScreenS2DefOne() {
|
||||
logScreen(
|
||||
name: "s2 def one",
|
||||
path: "s2_def_one/",
|
||||
path: "s2_def_one",
|
||||
params: nil
|
||||
)
|
||||
}
|
||||
|
||||
29
SampleFiles/Tags/R.swift
Normal file
29
SampleFiles/Tags/R.swift
Normal file
@@ -0,0 +1,29 @@
|
||||
// Generated by ResgenSwift.Generate 2.2.0
|
||||
|
||||
class R: Sendable {
|
||||
static let images = R2Image()
|
||||
static let strings = R2String()
|
||||
static let fonts = R2Font()
|
||||
static let images = R2Image()
|
||||
static let ui = R2UI()
|
||||
}
|
||||
|
||||
final class R2Image: Sendable {}
|
||||
|
||||
final class R2String: Sendable {}
|
||||
|
||||
final class R2Font: Sendable {}
|
||||
|
||||
final class R2Image: Sendable {}
|
||||
|
||||
class R2UI: Sendable {
|
||||
let images = R2UIImage()
|
||||
let fonts = R2UIFont()
|
||||
let images = R2UIImage()
|
||||
}
|
||||
|
||||
final class R2UIImage: Sendable {}
|
||||
|
||||
final class R2UIFont: Sendable {}
|
||||
|
||||
final class R2UIImage: Sendable {}
|
||||
@@ -33,7 +33,7 @@ categories:
|
||||
screens:
|
||||
- id: s2_def_one
|
||||
name: s2 def one
|
||||
path: s2_def_one/
|
||||
path: s2_def_one///
|
||||
tags: ios
|
||||
|
||||
events:
|
||||
|
||||
@@ -54,8 +54,9 @@ FORCE_FLAG="$1"
|
||||
#
|
||||
## Analytics
|
||||
swift run -c release ResgenSwift analytics -f "./Tags/sampleTags.yml" \
|
||||
--target "firebase" \
|
||||
--output-file "./Tags/Generated/Analytics+GenAllScript.swift"
|
||||
--target "firebase matomo" \
|
||||
--output-file "./Tags/Generated/Analytics+GenAllScript.swift" \
|
||||
--path-suffix "sampleApp"
|
||||
#
|
||||
#echo "\n-------------------------\n"
|
||||
#
|
||||
|
||||
@@ -91,6 +91,7 @@ analytics:
|
||||
target: "matomo firebase"
|
||||
outputFile: ./Tags/Generated/Analytics+GenAllScript.swift
|
||||
visibility: internal
|
||||
pathSuffix: "yolo"
|
||||
|
||||
|
||||
#
|
||||
|
||||
Reference in New Issue
Block a user