From 1ec45b652a2aef904fac5477a3579d62c7545097 Mon Sep 17 00:00:00 2001 From: "v.barabanov" Date: Wed, 24 Sep 2025 22:20:58 +0300 Subject: [PATCH 1/2] Add support for specific external analytics tracker protocols in Stencil - Introduced ability to specify protocol based on the external tracker defined in the YAML schema - Added mapping for AppsFlyerEvent, AppMetricaEvent and default AllExternalAnalyticsEvent - Updated Stencil templates to use the resolved protocol dynamically instead of a hardcoded default --- .../Event/DefaultEventGenerator.swift | 15 ++++++++++++ .../Event/ExternalEventContext.swift | 1 + .../Models/Event/External/ExternalEvent.swift | 1 + .../Event/External/ExternalEventTracker.swift | 23 +++++++++++++++++++ 4 files changed, 40 insertions(+) create mode 100644 Sources/AnalyticsGen/Models/Event/External/ExternalEventTracker.swift diff --git a/Sources/AnalyticsGen/Generators/Event/DefaultEventGenerator.swift b/Sources/AnalyticsGen/Generators/Event/DefaultEventGenerator.swift index a12a1e1..af9a099 100644 --- a/Sources/AnalyticsGen/Generators/Event/DefaultEventGenerator.swift +++ b/Sources/AnalyticsGen/Generators/Event/DefaultEventGenerator.swift @@ -80,6 +80,20 @@ final class DefaultEventGenerator: EventGenerator { return parameters } + private func resolveEventProtocol(event: ExternalEvent) -> String { + let protocolName: String + switch event.tracker { + case .appsFlyer: + protocolName = "AppsFlyerEvent" + case .appMetrica: + protocolName = "AppMetricaEvent" + case .none: + protocolName = "AllExternalAnalyticsEvent" + } + + return protocolName + } + private func generate( parameters: GenerationParameters, event: Event, @@ -165,6 +179,7 @@ final class DefaultEventGenerator: EventGenerator { oneOf: label.oneOf ) }, + eventProtocol: resolveEventProtocol(event: externalEvent), initialisationParameters: resolveExternalEventInitialisationParameters(event: externalEvent) ) ) diff --git a/Sources/AnalyticsGen/Generators/Event/ExternalEventContext.swift b/Sources/AnalyticsGen/Generators/Event/ExternalEventContext.swift index 366233c..be4bbbd 100644 --- a/Sources/AnalyticsGen/Generators/Event/ExternalEventContext.swift +++ b/Sources/AnalyticsGen/Generators/Event/ExternalEventContext.swift @@ -53,5 +53,6 @@ struct ExternalEventContext: Encodable { let schemePath: String let action: Action let label: Label? + let eventProtocol: String let initialisationParameters: [Parameter] } diff --git a/Sources/AnalyticsGen/Models/Event/External/ExternalEvent.swift b/Sources/AnalyticsGen/Models/Event/External/ExternalEvent.swift index 2c85045..ffacdab 100644 --- a/Sources/AnalyticsGen/Models/Event/External/ExternalEvent.swift +++ b/Sources/AnalyticsGen/Models/Event/External/ExternalEvent.swift @@ -9,4 +9,5 @@ struct ExternalEvent: Decodable { let forContractor: Bool? let label: ExternalEventLabel? let platform: EventPlatform? + let tracker: ExternalEventTracker? } diff --git a/Sources/AnalyticsGen/Models/Event/External/ExternalEventTracker.swift b/Sources/AnalyticsGen/Models/Event/External/ExternalEventTracker.swift new file mode 100644 index 0000000..5306c18 --- /dev/null +++ b/Sources/AnalyticsGen/Models/Event/External/ExternalEventTracker.swift @@ -0,0 +1,23 @@ +import Foundation + +enum ExternalEventTracker: Decodable { + case appsFlyer + case appMetrica + + init(from decoder: Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(String.self).lowercased() + + switch rawValue { + case "appsflyer": + self = .appsFlyer + case "appmetrica": + self = .appMetrica + default: + throw DecodingError.dataCorruptedError( + in: container, + debugDescription: "Unknown tracker value: \(rawValue)" + ) + } + } +} From be51fe04ab74a50cda998c839d7f5b97e93655b1 Mon Sep 17 00:00:00 2001 From: "v.barabanov" Date: Thu, 25 Sep 2025 14:51:05 +0300 Subject: [PATCH 2/2] Release 0.6.9 --- Makefile | 2 +- Sources/AnalyticsGen/main.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 91fa8c7..f8c3661 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ PREFIX?=/usr/local PRODUCT_NAME=analyticsgen -PRODUCT_VERSION=0.6.8 +PRODUCT_VERSION=0.6.9 TEMPLATES_NAME=Templates README_NAME=README.md LICENSE_NAME=LICENSE diff --git a/Sources/AnalyticsGen/main.swift b/Sources/AnalyticsGen/main.swift index 35af511..feacd57 100644 --- a/Sources/AnalyticsGen/main.swift +++ b/Sources/AnalyticsGen/main.swift @@ -20,6 +20,6 @@ private extension String { // MARK: - Type Properties - static let version = "0.6.8" + static let version = "0.6.9" static let description = "Generate analytics code for you Swift iOS project" }