From f0aac3a91bd3f19f062f224788f68e779eb70791 Mon Sep 17 00:00:00 2001 From: Quentin Bandera Date: Mon, 20 Oct 2025 15:21:47 +0200 Subject: [PATCH] RES-73 Ajout d'un debugMode iOS --- .../Generated/Analytics+GenAllScript.swift | 120 +++++------------- SampleFiles/genAllRessources.sh | 23 ++-- .../Generator/AnalyticsGenerator.swift | 38 +++++- .../Generator/StringsFileGenerator.swift | 3 +- 4 files changed, 79 insertions(+), 105 deletions(-) diff --git a/SampleFiles/Tags/Generated/Analytics+GenAllScript.swift b/SampleFiles/Tags/Generated/Analytics+GenAllScript.swift index bbb9d62..5ea9eea 100644 --- a/SampleFiles/Tags/Generated/Analytics+GenAllScript.swift +++ b/SampleFiles/Tags/Generated/Analytics+GenAllScript.swift @@ -1,12 +1,12 @@ // Generated by ResgenSwift.Analytics 2.2.0 import Foundation -import MatomoTracker import FirebaseAnalytics +import os // MARK: - Protocol -public protocol AnalyticsManagerProtocol { +internal protocol AnalyticsManagerProtocol { func logScreen( name: String, @@ -24,72 +24,6 @@ public 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)" + "iOS") - 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 { @@ -170,17 +104,16 @@ class FirebaseAnalyticsManager: AnalyticsManagerProtocol { // MARK: - Traker Type -public enum TrackerType: CaseIterable { +internal enum TrackerType: CaseIterable { - case matomo case firebase } // MARK: - Manager -public class AnalyticsManager { +internal class AnalyticsManager { - public static var shared = AnalyticsManager() + internal static var shared = AnalyticsManager() private init() {} @@ -188,6 +121,8 @@ public class AnalyticsManager { var managers: [TrackerType: AnalyticsManagerProtocol] = [:] + private var isDebugMode: Bool = false + private var isEnabled: Bool { if ProcessInfo.processInfo.environment["XCODE_RUNNING_FOR_PREVIEWS"] == "1" { false @@ -196,6 +131,8 @@ public class AnalyticsManager { } } + private let logger = Logger(subsystem: "resgen", category: "analytics") + // MARK: - Enable Methods private func setAnalytics(enable: Bool, _ analytics: [TrackerType]) { @@ -208,19 +145,16 @@ public class AnalyticsManager { } } - public func enableAnalytics(_ analytics: [TrackerType] = TrackerType.allCases) { + internal func enableAnalytics(_ analytics: [TrackerType] = TrackerType.allCases) { setAnalytics(enable: true, analytics) } - public func disableAnalytics(_ analytics: [TrackerType] = TrackerType.allCases) { + internal func disableAnalytics(_ analytics: [TrackerType] = TrackerType.allCases) { setAnalytics(enable: false, analytics) } - public func configure(siteId: String, url: String) { - managers[TrackerType.matomo] = MatomoAnalyticsManager( - siteId: siteId, - url: url - ) + internal func configure(isDebugMode: Bool = false) { + isDebugMode = isDebugMode managers[TrackerType.firebase] = FirebaseAnalyticsManager() } @@ -231,9 +165,17 @@ public class AnalyticsManager { path: String, params: [String: Any]? ) { - guard isEnabled else { return } + guard isEnabled else { + logger.notice("Analytics disabled") + return + } managers.values.forEach { manager in + + if isDebugMode { + logger.info("🖥️ Screen: \(name, privacy: .public) | path: \(path, privacy: .public) | params: \(paramsString, privacy: .public)") + } + manager.logScreen( name: name, path: path, @@ -248,9 +190,17 @@ public class AnalyticsManager { category: String, params: [String: Any]? ) { - guard isEnabled else { return } + guard isEnabled else { + logger.notice("Analytics disabled") + return + } managers.values.forEach { manager in + + if isDebugMode { + logger.info("📊 Event: \(name, privacy: .public) | action: \(action ?? "-", privacy: .public) | category: \(category ?? "-", privacy: .public) | params: \(paramsString, privacy: .public)") + } + manager.logEvent( name: name, action: action, @@ -262,7 +212,7 @@ public class AnalyticsManager { // MARK: - section_one - public func logScreenS1DefOne(title: String) { + internal func logScreenS1DefOne(title: String) { logScreen( name: "s1 def one \(title)", path: "s1_def_one/\(title)", @@ -270,10 +220,10 @@ public class AnalyticsManager { ) } - public func logEventS1DefTwo( + internal func logEventS1DefTwo( title: String, count: String, - test2: String = "test" + test2: String = "tes" ) { logEvent( name: "s1 def two", @@ -290,7 +240,7 @@ public class AnalyticsManager { // MARK: - section_two - public func logScreenS2DefOne() { + internal func logScreenS2DefOne() { logScreen( name: "s2 def one", path: "s2_def_one/", diff --git a/SampleFiles/genAllRessources.sh b/SampleFiles/genAllRessources.sh index b30e8ec..8cc2645 100755 --- a/SampleFiles/genAllRessources.sh +++ b/SampleFiles/genAllRessources.sh @@ -33,13 +33,13 @@ FORCE_FLAG="$1" #echo "\n-------------------------\n" ## Strings -swift run -c release ResgenSwift strings stringium $FORCE_FLAG "./Strings/sampleStrings.txt" \ - --output-path "./Strings/Generated" \ - --langs "fr en en-us" \ - --default-lang "en" \ - --extension-output-path "./Strings/Generated" \ - --extension-name "String" \ - --extension-suffix "GenAllScript" +#swift run -c release ResgenSwift strings stringium $FORCE_FLAG "./Strings/sampleStrings.txt" \ +# --output-path "./Strings/Generated" \ +# --langs "fr en en-us" \ +# --default-lang "en" \ +# --extension-output-path "./Strings/Generated" \ +# --extension-name "String" \ +# --extension-suffix "GenAllScript" #echo "\n-------------------------\n" # @@ -53,12 +53,9 @@ swift run -c release ResgenSwift strings stringium $FORCE_FLAG "./Strings/sample #echo "\n-------------------------\n" # ## Analytics -#swift run -c release ResgenSwift analytics $FORCE_FLAG "./Tags/sampleTags.yml" \ -# --target "firebase" \ -# --extension-output-path "./Tags/Generated" \ -# --extension-name "Analytics" \ -# --extension-suffix "GenAllScript" \ -# --static-members true +swift run -c release ResgenSwift analytics -f "./Tags/sampleTags.yml" \ + --target "firebase" \ + --output-file "./Tags/Generated/Analytics+GenAllScript.swift" # #echo "\n-------------------------\n" # diff --git a/Sources/ResgenSwift/Analytics/Generator/AnalyticsGenerator.swift b/Sources/ResgenSwift/Analytics/Generator/AnalyticsGenerator.swift index a0f2659..bc9a5dd 100644 --- a/Sources/ResgenSwift/Analytics/Generator/AnalyticsGenerator.swift +++ b/Sources/ResgenSwift/Analytics/Generator/AnalyticsGenerator.swift @@ -143,13 +143,17 @@ enum AnalyticsGenerator { visibility: ExtensionVisibility ) -> String { """ - private var isEnabled: Bool { + private var isDebugMode: Bool = false + + private var isEnabled: Bool { if ProcessInfo.processInfo.environment["XCODE_RUNNING_FOR_PREVIEWS"] == "1" { false } else { true } } + + private let logger = Logger(subsystem: "resgen", category: "analytics") // MARK: - Enable Methods @@ -186,6 +190,8 @@ enum AnalyticsGenerator { result.append("import FirebaseAnalytics") } + result.append("import os") + return result.joined(separator: "\n") } @@ -198,9 +204,19 @@ enum AnalyticsGenerator { path: String, params: [String: Any]? ) { - guard isEnabled else { return } + guard isEnabled else { + if isDebugMode { + logger.log("Analytics disabled") + } + return + } managers.values.forEach { manager in + + if isDebugMode { + logger.debug("🖥️ Screen: \\(name, privacy: .public) | path: \\(path, privacy: .public) | params: \\(String(describing: params ?? [:]), privacy: .public)") + } + manager.logScreen( name: name, path: path, @@ -215,9 +231,19 @@ enum AnalyticsGenerator { category: String, params: [String: Any]? ) { - guard isEnabled else { return } + guard isEnabled else { + if isDebugMode { + logger.log("Analytics disabled") + } + return + } managers.values.forEach { manager in + + if isDebugMode { + logger.debug("📊 Event: \\(name, privacy: .public) | action: \\(action, privacy: .public) | category: \\(category, privacy: .public) | params: \\(String(describing: params ?? [:]), privacy: .public)") + } + manager.logEvent( name: name, action: action, @@ -238,11 +264,13 @@ enum AnalyticsGenerator { let footer = " }" if targets.contains(TrackerType.matomo) { - header = "\(visibility) func configure(siteId: String, url: String) {" + header = "\(visibility) func configure(siteId: String, url: String, isDebugMode: Bool = false) {" } else if targets.contains(TrackerType.firebase) { - header = "\(visibility) func configure() {" + header = "\(visibility) func configure(isDebugMode: Bool = false) {" } + content.append(" self.isDebugMode = isDebugMode") + if targets.contains(TrackerType.matomo) { content.append(""" managers[TrackerType.matomo] = MatomoAnalyticsManager( diff --git a/Sources/ResgenSwift/Strings/Generator/StringsFileGenerator.swift b/Sources/ResgenSwift/Strings/Generator/StringsFileGenerator.swift index 76b2b55..d26fb43 100644 --- a/Sources/ResgenSwift/Strings/Generator/StringsFileGenerator.swift +++ b/Sources/ResgenSwift/Strings/Generator/StringsFileGenerator.swift @@ -175,7 +175,7 @@ enum StringsFileGenerator { guard section.hasOneOrMoreMatchingTags(tags: inputTags) else { return // Go to next section } - print("DOUDOU") + section .definitions .forEach { definition in // swiftlint:disable:this closure_body_length @@ -212,7 +212,6 @@ enum StringsFileGenerator { // Search for langs in twine for (lang, value) in definition.translations where langs.contains(lang) && !value.isEmpty { - print("DOUDOU-> generate for \(lang)") let localization = XCStringLocalization( lang: lang, content: XCStringLocalizationLangContent(