diff --git a/SampleFiles/Tags/Generated/Analytics+GenAllScript.swift b/SampleFiles/Tags/Generated/Analytics+GenAllScript.swift index 7f279dd..8742801 100644 --- a/SampleFiles/Tags/Generated/Analytics+GenAllScript.swift +++ b/SampleFiles/Tags/Generated/Analytics+GenAllScript.swift @@ -25,7 +25,7 @@ protocol AnalyticsManagerProtocol { // MARK: - Matomo class MatomoAnalyticsManager: AnalyticsManagerProtocol { - + // MARK: - Properties private var tracker: MatomoTracker @@ -39,11 +39,11 @@ class MatomoAnalyticsManager: AnalyticsManagerProtocol { siteId: siteId, baseURL: URL(string: url)! ) - + #if DEBUG tracker.dispatchInterval = 5 #endif - + #if DEBUG tracker.logger = DefaultLogger(minLevel: .verbose) #endif @@ -51,7 +51,7 @@ class MatomoAnalyticsManager: AnalyticsManagerProtocol { debugPrint("[Matomo service] Configured with content base: \(tracker.contentBase?.absoluteString ?? "-")") debugPrint("[Matomo service] Opt out: \(tracker.isOptedOut)") } - + // MARK: - Methods func logScreen( @@ -88,67 +88,6 @@ class MatomoAnalyticsManager: AnalyticsManagerProtocol { } } -// 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) { - guard !tracker.isOptedOut else { return } - 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]? - ) { - guard !tracker.isOptedOut else { return } - - tracker.track( - eventWithCategory: category, - action: action, - name: name, - number: nil, - url: nil - ) - } -} - // MARK: - Firebase class FirebaseAnalyticsManager: AnalyticsManagerProtocol { @@ -223,15 +162,25 @@ class FirebaseAnalyticsManager: AnalyticsManagerProtocol { } } + +// MARK: - Traker Type + +enum TrackerType: CaseIterable { + case matomo + case firebase +} + // MARK: - Manager class AnalyticsManager { static var shared = AnalyticsManager() + private init() {} + // MARK: - Properties - var managers: [TargetType: AnalyticsManagerProtocol] = [] + var managers: [TrackerType: AnalyticsManagerProtocol] = [:] private var isEnabled: Bool { if ProcessInfo.processInfo.environment["XCODE_RUNNING_FOR_PREVIEWS"] == "1" { @@ -243,7 +192,7 @@ class AnalyticsManager { // MARK: - Methods - private func setAnalytics(enable: Bool) { + private func setAnalytics(enable: Bool, _ analytics: [TrackerType]) { managers.forEach { (key, value) in if analytics.contains(where: { type in type == key @@ -253,12 +202,12 @@ class AnalyticsManager { } } - func enableAnalytics(_ analytics: [TargetType] = TargetType.allCases) { - setAnalytics(enable: true) + func enableAnalytics(_ analytics: [TrackerType] = TrackerType.allCases) { + setAnalytics(enable: true, analytics) } - func disableAnalytics(_ analytics: [TargetType] = TargetType.allCases) { - setAnalytics(enable: false) + func disableAnalytics(_ analytics: [TrackerType] = TrackerType.allCases) { + setAnalytics(enable: false, analytics) } func configure(siteId: String, url: String) { @@ -268,8 +217,12 @@ class AnalyticsManager { ) managers[TrackerType.firebase] = FirebaseAnalyticsManager() } - - private func logScreen(name: String, path: String) { + + private func logScreen( + name: String, + path: String, + params: [String: Any]? + ) { guard isEnabled else { return } managers.values.forEach { manager in diff --git a/SampleFiles/genAllRessources.sh b/SampleFiles/genAllRessources.sh index 8f2286b..3de2c99 100755 --- a/SampleFiles/genAllRessources.sh +++ b/SampleFiles/genAllRessources.sh @@ -50,7 +50,7 @@ swift run -c release ResgenSwift strings tags $FORCE_FLAG "./Tags/sampleTags.txt --extension-name "Tags" \ --extension-suffix "GenAllScript" -#echo "\n-------------------------\n" +echo "\n-------------------------\n" # Analytics swift run -c release ResgenSwift analytics $FORCE_FLAG "./Tags/sampleTags.yml" \ diff --git a/Sources/ResgenSwift/Analytics/Generator/AnalyticsGenerator.swift b/Sources/ResgenSwift/Analytics/Generator/AnalyticsGenerator.swift index 8b6dc84..0cff0cf 100644 --- a/Sources/ResgenSwift/Analytics/Generator/AnalyticsGenerator.swift +++ b/Sources/ResgenSwift/Analytics/Generator/AnalyticsGenerator.swift @@ -90,9 +90,9 @@ enum AnalyticsGenerator { """ // Generated by ResgenSwift.\(Analytics.toolName) \(ResgenSwiftVersion) - \(Self.getImport()) + \(Self.getImport(targets: targets)) - \(Self.getAnalyticsProtocol()) + \(Self.getAnalyticsProtocol(targets: targets)) \(Self.getTrackerTypeEnum()) @@ -101,6 +101,8 @@ enum AnalyticsGenerator { class AnalyticsManager { static var shared = AnalyticsManager() + + private init() {} // MARK: - Properties @@ -108,7 +110,7 @@ enum AnalyticsGenerator { \(Self.getEnabledContent()) - \(Self.getAnalyticsProperties()) + \(Self.getAnalyticsProperties(targets: targets)) \(Self.getPrivateLogFunction()) """ @@ -164,6 +166,8 @@ enum AnalyticsGenerator { private static func getImport(targets: [TrackerType]) -> String { var result: [String] = [] + result.append("import Foundation") + if targets.contains(TrackerType.matomo) { result.append("import MatomoTracker") } diff --git a/Sources/ResgenSwift/Analytics/Parser/AnalyticsFileParser.swift b/Sources/ResgenSwift/Analytics/Parser/AnalyticsFileParser.swift index 8b8186f..64a5cec 100644 --- a/Sources/ResgenSwift/Analytics/Parser/AnalyticsFileParser.swift +++ b/Sources/ResgenSwift/Analytics/Parser/AnalyticsFileParser.swift @@ -147,7 +147,7 @@ class AnalyticsFileParser { } if let parameters { - definition.parameters = getParameters(from: parameters) + definition.parameters = AnalyticsFileParser.getParameters(from: parameters) } return definition