From 42b5d08d8063ee94894f088c1d691f4241fb2710 Mon Sep 17 00:00:00 2001 From: Vladislav Fitc Date: Sun, 12 Feb 2023 21:20:22 +0100 Subject: [PATCH] feat(Insights): add user-agent extension (#274) --- Cartfile | 2 +- InstantSearch.podspec | 4 ++-- Package.swift | 2 +- ...Setter.swift => CoreUserAgentSetter.swift} | 4 ++-- .../InstantSearchCore/Searcher/Searcher.swift | 2 +- .../Helpers/InsightsUserAgentSetter.swift | 18 ++++++++++++++++++ .../Logic/Insights.swift | 1 + .../DataModel/HitsObservableController.swift | 4 ++-- .../Integration/OnlineTestCase.swift | 2 +- .../Unit/UserAgentTest.swift | 19 +++++++++++++++++++ 10 files changed, 48 insertions(+), 10 deletions(-) rename Sources/InstantSearchCore/Helper/{UserAgentSetter.swift => CoreUserAgentSetter.swift} (86%) create mode 100644 Sources/InstantSearchInsights/Helpers/InsightsUserAgentSetter.swift create mode 100644 Tests/InstantSearchInsightsTests/Unit/UserAgentTest.swift diff --git a/Cartfile b/Cartfile index 8631f866..b7d47afc 100644 --- a/Cartfile +++ b/Cartfile @@ -1,3 +1,3 @@ github "apple/swift-log" ~> 1.4 -github "algolia/algoliasearch-client-swift" ~> 8.15 +github "algolia/algoliasearch-client-swift" ~> 8.17 github "algolia/instantsearch-telemetry-native" ~> 0.1.3 diff --git a/InstantSearch.podspec b/InstantSearch.podspec index 2f0010fb..fb8f8a3e 100644 --- a/InstantSearch.podspec +++ b/InstantSearch.podspec @@ -15,7 +15,7 @@ Pod::Spec.new do |s| s.subspec "Insights" do |ss| ss.source_files = 'Sources/InstantSearchInsights/**/*.{swift}' - ss.dependency 'AlgoliaSearchClient', '~> 8.15' + ss.dependency 'AlgoliaSearchClient', '~> 8.17' ss.ios.deployment_target = '9.0' ss.osx.deployment_target = '10.10' ss.watchos.deployment_target = '2.0' @@ -24,7 +24,7 @@ Pod::Spec.new do |s| s.subspec "Core" do |ss| ss.source_files = 'Sources/InstantSearchCore/**/*.{swift}' - ss.dependency 'AlgoliaSearchClient', '~> 8.15' + ss.dependency 'AlgoliaSearchClient', '~> 8.17' ss.dependency 'InstantSearch/Insights' ss.dependency 'InstantSearchTelemetry', '~> 0.1.3' ss.ios.deployment_target = '9.0' diff --git a/Package.swift b/Package.swift index 02e8d19d..4b9b3b88 100644 --- a/Package.swift +++ b/Package.swift @@ -32,7 +32,7 @@ let package = Package( dependencies: [ .package(name: "AlgoliaSearchClient", url: "https://github.com/algolia/algoliasearch-client-swift", - from: "8.15.0"), + from: "8.17.0"), .package(name: "InstantSearchTelemetry", url: "https://github.com/algolia/instantsearch-telemetry-native", from: "0.1.3") diff --git a/Sources/InstantSearchCore/Helper/UserAgentSetter.swift b/Sources/InstantSearchCore/Helper/CoreUserAgentSetter.swift similarity index 86% rename from Sources/InstantSearchCore/Helper/UserAgentSetter.swift rename to Sources/InstantSearchCore/Helper/CoreUserAgentSetter.swift index cf09c46d..17f04647 100644 --- a/Sources/InstantSearchCore/Helper/UserAgentSetter.swift +++ b/Sources/InstantSearchCore/Helper/CoreUserAgentSetter.swift @@ -1,5 +1,5 @@ // -// UserAgentSetter.swift +// CoreUserAgentSetter.swift // // // Created by Vladislav Fitc on 16/06/2020. @@ -7,7 +7,7 @@ import Foundation -struct UserAgentSetter { +struct CoreUserAgentSetter { /// Add the library's version to the client's user agents, if not already present. static let set = Self() diff --git a/Sources/InstantSearchCore/Searcher/Searcher.swift b/Sources/InstantSearchCore/Searcher/Searcher.swift index 83886b6b..aa361b24 100644 --- a/Sources/InstantSearchCore/Searcher/Searcher.swift +++ b/Sources/InstantSearchCore/Searcher/Searcher.swift @@ -60,7 +60,7 @@ public protocol ErrorObservable { extension Searcher { /// Add the library's version to the client's user agents, if not already present. func updateClientUserAgents() { - _ = UserAgentSetter.set + _ = CoreUserAgentSetter.set } } diff --git a/Sources/InstantSearchInsights/Helpers/InsightsUserAgentSetter.swift b/Sources/InstantSearchInsights/Helpers/InsightsUserAgentSetter.swift new file mode 100644 index 00000000..d99d4a4e --- /dev/null +++ b/Sources/InstantSearchInsights/Helpers/InsightsUserAgentSetter.swift @@ -0,0 +1,18 @@ +// +// InsightsUserAgentSetter.swift +// +// +// Created by Vladislav Fitc on 03/02/2023. +// + +import AlgoliaSearchClient +import Foundation + +struct InsightsUserAgentSetter { + /// Add the library's version to the client's user agents, if not already present. + static let set = Self() + + init() { + UserAgentController.append(UserAgent(title: "Algolia insights for iOS", version: Version.current.description)) + } +} diff --git a/Sources/InstantSearchInsights/Logic/Insights.swift b/Sources/InstantSearchInsights/Logic/Insights.swift index 928f2f89..63bf694c 100644 --- a/Sources/InstantSearchInsights/Logic/Insights.swift +++ b/Sources/InstantSearchInsights/Logic/Insights.swift @@ -161,6 +161,7 @@ public class Insights { userToken: UserToken? = .none, generateTimestamps: Bool = true, region: Region? = region) -> Insights { + _ = InsightsUserAgentSetter.set let logger = Logger(label: "Insights (\(appId.rawValue))") logger.info("application registered") let insights = Insights(applicationID: appId, diff --git a/Sources/InstantSearchSwiftUI/DataModel/HitsObservableController.swift b/Sources/InstantSearchSwiftUI/DataModel/HitsObservableController.swift index f884a1df..f7e0d60b 100644 --- a/Sources/InstantSearchSwiftUI/DataModel/HitsObservableController.swift +++ b/Sources/InstantSearchSwiftUI/DataModel/HitsObservableController.swift @@ -30,9 +30,9 @@ import InstantSearchTelemetry public func reload() { if let hitsSource = hitsSource, hitsSource.numberOfHits() > 0 { - self.hits = hitsSource.hits + hits = hitsSource.hits } else { - self.hits = [] + hits = [] } } diff --git a/Tests/InstantSearchCoreTests/Integration/OnlineTestCase.swift b/Tests/InstantSearchCoreTests/Integration/OnlineTestCase.swift index 909aadee..cb3ec92d 100644 --- a/Tests/InstantSearchCoreTests/Integration/OnlineTestCase.swift +++ b/Tests/InstantSearchCoreTests/Integration/OnlineTestCase.swift @@ -33,7 +33,7 @@ class OnlineTestCase: XCTestCase { throw Error.missingCredentials } - _ = UserAgentSetter.set + _ = CoreUserAgentSetter.set client = SearchClient(appID: credentials.applicationID, apiKey: credentials.apiKey) diff --git a/Tests/InstantSearchInsightsTests/Unit/UserAgentTest.swift b/Tests/InstantSearchInsightsTests/Unit/UserAgentTest.swift new file mode 100644 index 00000000..2445fbba --- /dev/null +++ b/Tests/InstantSearchInsightsTests/Unit/UserAgentTest.swift @@ -0,0 +1,19 @@ +// +// UserAgentTest.swift +// +// +// Created by Vladislav Fitc on 03/02/2023. +// + +import AlgoliaSearchClient +@testable import InstantSearchInsights +import XCTest + +class UserAgentTest: XCTestCase { + func testUserAgentUniqueness() { + Insights.register(appId: "a", apiKey: "a") + Insights.register(appId: "b", apiKey: "b") + Insights.register(appId: "c", apiKey: "c") + XCTAssertEqual(UserAgentController.extensions.filter { $0.userAgentExtension.contains("Algolia insights for iOS") }.count, 1) + } +}