diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 4ca17f9a..9cafd4aa 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -10,7 +10,7 @@ jobs:
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1
with:
- ruby-version: '2.7'
+ ruby-version: '3.0'
- name: Install Fastlane
run: |
gem install fastlane
@@ -24,7 +24,7 @@ jobs:
working-directory: ./builder
strategy:
matrix:
- destination: ["platform=iOS Simulator,OS=14.5,name=iPhone 14"]
+ destination: ["platform=iOS Simulator,OS=17.5,name=iPhone 15 Pro"]
scheme:
- TealiumAppDelegateProxyTests-iOS
- TealiumAttributionTests-iOS
@@ -40,6 +40,7 @@ jobs:
- TealiumTagManagementIntegrationTests-iOS
- TealiumTagManagementTests-iOS
- TealiumVisitorServiceTests-iOS
+ - TealiumMomentsAPITests-iOS
steps:
- name: Setup Xcode version
uses: maxim-lobanov/setup-xcode@v1.4.1
@@ -47,7 +48,7 @@ jobs:
xcode-version: latest-stable
- uses: actions/checkout@v2
- name: Test - "${{ matrix.scheme }}"
- run: fastlane scan --scheme "${{ matrix.scheme }}" --output_files "${{ matrix.scheme }}".html
+ run: fastlane scan --scheme "${{ matrix.scheme }}" --output_files "${{ matrix.scheme }}" --derived-data-path "./build" --skip_build true --result_bundle true --output_types junit --xcodebuild_formatter "xcbeautify -q --is-ci" --destination "${{ matrix.destination }}"
working-directory: ${{env.working-directory}}
- name: Archive Code Coverage Report
uses: actions/upload-artifact@v2
@@ -86,7 +87,7 @@ jobs:
working-directory: ./builder
strategy:
matrix:
- destination: ["platform=macOS,arch=x86_64"]
+ destination: ["platform=macOS"]
scheme:
- TealiumAutotrackingTests-macOS
- TealiumCoreTests-macOS
@@ -94,6 +95,7 @@ jobs:
- TealiumLifecycleTests-macOS
- TealiumMediaTests-macOS
- TealiumVisitorServiceTests-macOS
+ - TealiumMomentsAPITests-macOS
steps:
- name: Setup Xcode version
uses: maxim-lobanov/setup-xcode@v1.4.1
@@ -101,7 +103,7 @@ jobs:
xcode-version: latest-stable
- uses: actions/checkout@v2
- name: Test - "${{ matrix.scheme }}"
- run: rm -rf output && fastlane scan --scheme "${{ matrix.scheme }}" --derived_data_path ./output --code_coverage true --skip_build true
+ run: rm -rf output && fastlane scan --scheme "${{ matrix.scheme }}" --derived_data_path ./output --code_coverage true --skip_build true --destination "${{ matrix.destination }}"
working-directory: ${{env.working-directory}}
- name: Archive Code Coverage Report
uses: actions/upload-artifact@v2
@@ -147,6 +149,7 @@ jobs:
- TealiumLifecycleTests-tvOS
- TealiumMediaTests-tvOS
- TealiumVisitorServiceTests-tvOS
+ - TealiumMomentsAPITests-tvOS
steps:
- name: Setup Xcode version
uses: maxim-lobanov/setup-xcode@v1.4.1
@@ -154,7 +157,7 @@ jobs:
xcode-version: latest-stable
- uses: actions/checkout@v2
- name: Test - "${{ matrix.scheme }}"
- run: rm -rf output && fastlane scan --scheme "${{ matrix.scheme }}" --derived_data_path ./output --code_coverage true --skip_build true
+ run: rm -rf output && fastlane scan --scheme "${{ matrix.scheme }}" --derived_data_path ./output --code_coverage true --skip_build true --destination "${{ matrix.destination }}"
working-directory: ${{env.working-directory}}
- name: Archive Code Coverage Report
uses: actions/upload-artifact@v2
@@ -206,7 +209,7 @@ jobs:
working-directory: ./builder
strategy:
matrix:
- destination: ["platform=iOS Simulator,OS=14.5,name=iPhone 14"]
+ destination: ["platform=iOS Simulator,OS=17.5,name=iPhone 15 Pro"]
steps:
- name: Setup Xcode version
uses: maxim-lobanov/setup-xcode@v1.4.1
@@ -214,7 +217,7 @@ jobs:
xcode-version: latest-stable
- uses: actions/checkout@v2
- name: Test TealiumAutotracking iOS UI Tests
- run: rm -rf output && fastlane scan --scheme "TealiumAutotrackingUITests-iOS" --derived_data_path ./output --code_coverage false --skip_build true
+ run: rm -rf output && fastlane scan --scheme "TealiumAutotrackingUITests-iOS" --derived_data_path ./output --code_coverage false --skip_build true --destination "${{ matrix.destination }}"
working-directory: ${{ env.working-directory }}
test_Autotracking_macOS_uiTests:
needs: install
@@ -226,7 +229,7 @@ jobs:
working-directory: ./builder
strategy:
matrix:
- destination: ["platform=macOS,arch=x86_64"]
+ destination: ["platform=macOS"]
steps:
- name: Setup Xcode version
uses: maxim-lobanov/setup-xcode@v1.3.0
@@ -234,7 +237,7 @@ jobs:
xcode-version: latest-stable
- uses: actions/checkout@v2
- name: Test TealiumAutotracking macOS UI Tests
- run: rm -rf output && fastlane scan --scheme "TealiumAutotrackingUITests-macOS" --derived_data_path ./output --code_coverage false --skip_build true
+ run: rm -rf output && fastlane scan --scheme "TealiumAutotrackingUITests-macOS" --derived_data_path ./output --code_coverage false --skip_build true --destination "${{ matrix.destination }}"
working-directory: ${{ env.working-directory }}
test_Autotracking_tvOS_uiTests:
needs: install
@@ -254,5 +257,5 @@ jobs:
xcode-version: latest-stable
- uses: actions/checkout@v2
- name: Test TealiumAutotracking tvOS UI Tests
- run: rm -rf output && fastlane scan --scheme "TealiumAutotrackingUITests-tvOS" --derived_data_path ./output --code_coverage false --skip_build true
+ run: rm -rf output && fastlane scan --scheme "TealiumAutotrackingUITests-tvOS" --derived_data_path ./output --code_coverage false --skip_build true --destination "${{ matrix.destination }}"
working-directory: ${{ env.working-directory }}
diff --git a/.swiftlint.yml b/.swiftlint.yml
index 0ef869da..0d4c0c9f 100644
--- a/.swiftlint.yml
+++ b/.swiftlint.yml
@@ -43,7 +43,6 @@ file_length:
identifier_name:
excluded:
- id
- severity: warning
line_length:
warning: 200
error: 500
diff --git a/Package.swift b/Package.swift
index be49f410..a6e591d0 100644
--- a/Package.swift
+++ b/Package.swift
@@ -38,7 +38,10 @@ let package = Package(
targets: ["TealiumTagManagement"]),
.library(
name: "TealiumVisitorService",
- targets: ["TealiumVisitorService"])
+ targets: ["TealiumVisitorService"]),
+ .library(
+ name: "TealiumMomentsAPI",
+ targets: ["TealiumMomentsAPI"])
],
dependencies: [
@@ -124,5 +127,11 @@ let package = Package(
path: "tealium/collectors/visitorservice/",
swiftSettings: [.define("visitorservice")]
),
+ .target(
+ name: "TealiumMomentsAPI",
+ dependencies: ["TealiumCore"],
+ path: "tealium/collectors/momentsapi/",
+ swiftSettings: [.define("momentsapi")]
+ ),
]
)
diff --git a/builder/SM/Surfile b/builder/SM/Surfile
index ac96167e..095dfd8b 100644
--- a/builder/SM/Surfile
+++ b/builder/SM/Surfile
@@ -627,10 +627,81 @@
+
+ name
+ TealiumMomentsAPI
+ targets
+
+
+ sdk
+ iOS
+ workspace
+ tealium-swift.xcworkspace
+ scheme
+ TealiumMomentsAPI
+
+
+ sdk
+ iOSSimulator
+ workspace
+ tealium-swift.xcworkspace
+ scheme
+ TealiumMomentsAPI
+
+
+ sdk
+ watchSimulator
+ workspace
+ tealium-swift.xcworkspace
+ scheme
+ TealiumMomentsAPI
+
+
+ sdk
+ watchOS
+ workspace
+ tealium-swift.xcworkspace
+ scheme
+ TealiumMomentsAPI
+
+
+ sdk
+ macOS
+ workspace
+ tealium-swift.xcworkspace
+ scheme
+ TealiumMomentsAPI
+
+
+ sdk
+ macOSCatalyst
+ workspace
+ tealium-swift.xcworkspace
+ scheme
+ TealiumMomentsAPI
+
+
+ sdk
+ tvOS
+ workspace
+ tealium-swift.xcworkspace
+ scheme
+ TealiumMomentsAPI
+
+
+ sdk
+ tvOSSimulator
+ workspace
+ tealium-swift.xcworkspace
+ scheme
+ TealiumMomentsAPI
+
+
+
finalActions
openDirectory
-
\ No newline at end of file
+
diff --git a/builder/TealiumMoments-Info.plist b/builder/TealiumMoments-Info.plist
new file mode 100644
index 00000000..323e5ecf
--- /dev/null
+++ b/builder/TealiumMoments-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/builder/iOSTealiumTest/ContentView.swift b/builder/iOSTealiumTest/ContentView.swift
index 9640815e..95e94f7e 100644
--- a/builder/iOSTealiumTest/ContentView.swift
+++ b/builder/iOSTealiumTest/ContentView.swift
@@ -69,6 +69,8 @@ struct ContentView: View {
@ObservedObject var iapHelper = IAPHelper.shared
@State private var traceId: String = ""
@State private var showAlert = false
+ @State private var navigateToMoments = false
+ @State private var navigateToVisitorService = false
@State private var email: String = TealiumHelper.shared.tealium?.dataLayer.all[TealiumDataKey.email] as? String ?? ""
let name = "Main Screen"
// Timed event start
@@ -152,6 +154,18 @@ struct ContentView: View {
TealiumTextButton(title: "VisitorProfileRequest") {
TealiumHelper.shared.tealium?.visitorService?.requestVisitorProfile()
}
+ TealiumTextButton(title: "Moments API") {
+ navigateToMoments = true
+ }
+ TealiumTextButton(title: "Visitor Service") {
+ navigateToVisitorService = true
+ }
+ NavigationLink(destination: MomentsView(), isActive: $navigateToMoments) {
+ EmptyView()
+ }
+ NavigationLink(destination: VisitorServiceView(), isActive: $navigateToVisitorService) {
+ EmptyView()
+ }
}
Spacer()
}
diff --git a/builder/iOSTealiumTest/Info.plist b/builder/iOSTealiumTest/Info.plist
index ff684aea..2fd0fab4 100644
--- a/builder/iOSTealiumTest/Info.plist
+++ b/builder/iOSTealiumTest/Info.plist
@@ -35,8 +35,15 @@
Intent
+ LSApplicationCategoryType
+
LSRequiresIPhoneOS
+ NSAppTransportSecurity
+
+ NSAllowsArbitraryLoads
+
+
NSLocationAlwaysAndWhenInUseUsageDescription
We'd like to access your location
NSLocationAlwaysUsageDescription
diff --git a/builder/iOSTealiumTest/MomentsView.swift b/builder/iOSTealiumTest/MomentsView.swift
new file mode 100644
index 00000000..94a91080
--- /dev/null
+++ b/builder/iOSTealiumTest/MomentsView.swift
@@ -0,0 +1,139 @@
+//
+// MomentsView.swift
+// iOSTealiumTest
+//
+// Copyright © 2024 Tealium, Inc. All rights reserved.
+//
+
+import Foundation
+import SwiftUI
+
+struct MomentsView: View {
+ @State private var audiencesContent = "Awaiting API request"
+ @State private var badgesContent = "Awaiting API request"
+ @State private var numbersContent = "Awaiting API request"
+ @State private var datesContent = "Awaiting API request"
+ @State private var stringsContent = "Awaiting API request"
+ @AppStorage("engineId") private var engineId = ""
+ @State private var isEngineIdEditable = true
+ @State private var isLoading = false
+ @State private var showAlert = false
+ @State private var alertMessage = ""
+
+ var body: some View {
+ NavigationView {
+ VStack {
+ HStack {
+ TextField("Enter Engine ID", text: $engineId)
+ .textFieldStyle(RoundedBorderTextFieldStyle())
+ .disabled(!isEngineIdEditable)
+ if isEngineIdEditable {
+ Button("Confirm") {
+ isEngineIdEditable = false
+ loadData()
+ }
+ .padding()
+ .background(Color.blue)
+ .foregroundColor(.white)
+ .cornerRadius(8)
+ } else {
+ Button("Edit") {
+ isEngineIdEditable = true
+ }
+ .padding()
+ .background(Color.gray)
+ .foregroundColor(.white)
+ .cornerRadius(8)
+ }
+ }
+ .padding()
+
+ Button(action: {
+ loadData()
+ }) {
+ Text("Moments API Request")
+ .padding()
+ .foregroundColor(.white)
+ .background(isLoading ? Color.gray : Color.blue)
+ .cornerRadius(8)
+ }
+ .disabled(engineId.isEmpty || isEngineIdEditable || isLoading)
+
+ List {
+ RowView(label: "Audiences", content: $audiencesContent)
+ RowView(label: "Badges", content: $badgesContent)
+ RowView(label: "Numbers", content: $numbersContent)
+ RowView(label: "Dates", content: $datesContent)
+ RowView(label: "Strings", content: $stringsContent)
+ }
+ }
+ .navigationBarTitle("Moments API")
+ .alert(isPresented: $showAlert) {
+ Alert(
+ title: Text("Error"),
+ message: Text(alertMessage),
+ dismissButton: .default(Text("OK"))
+ )
+ }
+ }
+ .onAppear {
+ TealiumHelper.shared.trackView(title: "Moments API View", data: nil)
+ if !engineId.isEmpty {
+ isEngineIdEditable = false
+ }
+ }
+ }
+
+ func loadData() {
+ isLoading = true
+ TealiumHelper.shared.fetchMoments(engineId: engineId) { engineResponse in
+ isLoading = false
+ switch engineResponse {
+ case .success(let engineResponse):
+ stringsContent = (engineResponse.strings ?? [:])
+ .sorted(by: { $0.key < $1.key })
+ .compactMap {
+ "\($0.key) : \($0.value)"
+ }
+ .joined(separator: "\n")
+ audiencesContent = (engineResponse.audiences ?? [])
+ .joined(separator: "\n")
+ badgesContent = (engineResponse.badges ?? [])
+ .joined(separator: "\n")
+ datesContent = (engineResponse.dates ?? [String: Int64]())
+ .sorted(by: { $0.key < $1.key })
+ .compactMap {
+ "\($0.key) : \($0.value)"
+ }
+ .joined(separator: "\n")
+ numbersContent = (engineResponse.numbers ?? [String: Double]())
+ .sorted(by: { $0.key < $1.key })
+ .compactMap {
+ "\($0.key) : \(String(format: "%.2f", $0.value))"
+ }
+ .joined(separator: "\n")
+ case .failure(let error):
+ print("Error fetching moments:", error.localizedDescription)
+ alertMessage = error.localizedDescription
+ if let suggestion = (error as? LocalizedError)?.recoverySuggestion {
+ alertMessage += "\n\(suggestion)"
+ }
+ showAlert = true
+ }
+ }
+ }
+}
+
+struct RowView: View {
+ var label: String
+ @Binding var content: String
+
+ var body: some View {
+ HStack {
+ Text(label + ":")
+ .bold()
+ Spacer()
+ Text(content)
+ }
+ }
+}
diff --git a/builder/iOSTealiumTest/TealiumHelper.swift b/builder/iOSTealiumTest/TealiumHelper.swift
index dc978c3b..25146e74 100644
--- a/builder/iOSTealiumTest/TealiumHelper.swift
+++ b/builder/iOSTealiumTest/TealiumHelper.swift
@@ -6,49 +6,51 @@
//
import Foundation
-
+import TealiumAutotracking
import TealiumCollect
import TealiumCore
+import TealiumInAppPurchase
import TealiumLifecycle
+import TealiumMomentsAPI
import TealiumVisitorService
-import TealiumAutotracking
-import TealiumInAppPurchase
+
#if os(iOS)
-import WebKit
-import TealiumAttribution
-import TealiumLocation
-import TealiumRemoteCommands
-import TealiumTagManagement
+ import WebKit
+ import TealiumAttribution
+ import TealiumLocation
+ import TealiumRemoteCommands
+ import TealiumTagManagement
#endif
extension TealiumDataKey {
static let email = "email"
}
-class TealiumHelper {
+class TealiumHelper: ObservableObject {
@ToAnyObservable(TealiumBufferedSubject(bufferSize: 10))
- var onWillTrack: TealiumObservable<[String:Any]>
-
+ var onWillTrack: TealiumObservable<[String: Any]>
+ @Published var visitorProfile: TealiumVisitorProfile?
static let shared = TealiumHelper()
var tealium: Tealium?
var enableHelperLogs = true
- private init() { }
+ private init() {}
func start() {
- let config = TealiumConfig(account: "tealiummobile",
- profile: "demo",
- environment: "prod",
- dataSource: "test12",
- options: nil)
+ let config = TealiumConfig(
+ account: "tealiummobile",
+ profile: "demo",
+ environment: "prod",
+ dataSource: "test12",
+ options: nil)
config.connectivityRefreshInterval = 5
config.loggerType = .os
- config.logLevel = .info
+ config.logLevel = .debug
config.consentPolicy = .gdpr
config.consentLoggingEnabled = true
-// config.remoteHTTPCommandDisabled = false
+ // config.remoteHTTPCommandDisabled = false
config.dispatchListeners = [self]
config.dispatchValidators = [self]
config.shouldUseRemotePublishSettings = false
@@ -62,10 +64,12 @@ class TealiumHelper {
config.autoTrackingCollectorDelegate = self
config.batterySaverEnabled = true
config.hostedDataLayerKeys = ["hdl-test": "product_id"]
- config.timedEventTriggers = [TimedEventTrigger(start: "product_view", end: "order_complete"),
- TimedEventTrigger(start: "start_game", end: "buy_coins")]
+ config.timedEventTriggers = [
+ TimedEventTrigger(start: "product_view", end: "order_complete"),
+ TimedEventTrigger(start: "start_game", end: "buy_coins"),
+ ]
- config.consentExpiry = (time: 2, unit: .minutes)
+ config.consentExpiry = (time: 2, unit: .years)
config.onConsentExpiration = {
print("Consent expired")
}
@@ -79,17 +83,18 @@ class TealiumHelper {
Collectors.Connectivity,
Collectors.Device,
Collectors.Location,
+ Collectors.MomentsAPI,
Collectors.VisitorService,
Collectors.InAppPurchase,
- Collectors.AutoTracking
+ Collectors.AutoTracking,
]
-
+
config.dispatchers = [
Dispatchers.Collect,
-// Dispatchers.TagManagement,
- Dispatchers.RemoteCommands
+ // Dispatchers.TagManagement,
+ Dispatchers.RemoteCommands,
]
-
+
// config.appDelegateProxyEnabled = false
config.remoteAPIEnabled = true
config.remoteCommandConfigRefresh = .every(24, .hours)
@@ -99,6 +104,7 @@ class TealiumHelper {
config.geofenceUrl = "https://tags.tiqcdn.com/dle/tealiummobile/location/geofences.json"
config.desiredAccuracy = .best
config.updateDistance = 100.0
+ config.momentsAPIRegion = .us_east
#else
config.collectors = [
Collectors.Lifecycle,
@@ -107,49 +113,52 @@ class TealiumHelper {
Collectors.Device,
Collectors.VisitorService,
Collectors.AutoTracking,
- Collectors.InAppPurchase
+ Collectors.InAppPurchase,
]
config.dispatchers = [
- Dispatchers.Collect,
+ Dispatchers.Collect
]
#endif
tealium = Tealium(config: config) { [weak self] response in
guard let self = self,
- let teal = self.tealium else {
+ let teal = self.tealium
+ else {
return
-
}
let dataLayer = teal.dataLayer
teal.consentManager?.userConsentStatus = .consented
dataLayer.add(key: "myvarforever", value: 123_456, expiry: .forever)
dataLayer.add(data: ["some_key1": "some_val1"], expiry: .session)
- dataLayer.add(data: ["some_key_forever": "some_val_forever"], expiry: .forever) // forever
+ dataLayer.add(data: ["some_key_forever": "some_val_forever"], expiry: .forever) // forever
dataLayer.add(data: ["until": "restart"], expiry: .untilRestart)
dataLayer.add(data: ["custom": "expire in 3 min"], expiry: .afterCustom((.minutes, 3)))
#if os(iOS)
- teal.location?.requestAuthorization()
+ teal.location?.requestAuthorization()
- guard let remoteCommands = self.tealium?.remoteCommands else {
- return
- }
+ guard let remoteCommands = self.tealium?.remoteCommands else {
+ return
+ }
- teal.getTagManagementWebView { webView in
- if #available(iOS 16.4, *) {
-// webView.isInspectable = true // Uncomment to inspect tagManagement webviews on XCode 14.3+ and iOS 16.4+
+ teal.getTagManagementWebView { webView in
+ if #available(iOS 16.4, *) {
+ // webView.isInspectable = true // Uncomment to inspect tagManagement webviews on XCode 14.3+ and iOS 16.4+
+ }
}
- }
- let display = RemoteCommand(commandId: "display", description: "Test") { response in
- guard let payload = response.payload,
- let hello = payload["hello"] as? String,
- let key = payload["key"] as? String,
- let tealium = payload["tealium"] as? String else {
- return
+ let display = RemoteCommand(commandId: "display", description: "Test") { response in
+ guard let payload = response.payload,
+ let hello = payload["hello"] as? String,
+ let key = payload["key"] as? String,
+ let tealium = payload["tealium"] as? String
+ else {
+ return
+ }
+ print(
+ "Remote Command data: hello = \(hello), key = \(key), tealium = \(tealium) 🎉🎊"
+ )
}
- print("Remote Command data: hello = \(hello), key = \(key), tealium = \(tealium) 🎉🎊")
- }
- remoteCommands.add(display)
+ remoteCommands.add(display)
#endif
}
}
@@ -162,7 +171,9 @@ class TealiumHelper {
if let consentStatus = tealium?.consentManager?.userConsentStatus {
switch consentStatus {
case .notConsented:
- TealiumHelper.shared.tealium?.consentManager?.userConsentCategories = [.affiliates, .analytics, .bigData]
+ TealiumHelper.shared.tealium?.consentManager?.userConsentCategories = [
+ .affiliates, .analytics, .bigData,
+ ]
case .unknown:
TealiumHelper.shared.tealium?.consentManager?.userConsentStatus = .consented
default:
@@ -176,6 +187,32 @@ class TealiumHelper {
tealium?.track(dispatch)
}
+ func fetchMoments(engineId: String, completion: @escaping (Result) -> Void) {
+ // example showing all the different types of attributes
+ tealium?.momentsAPI?.fetchEngineResponse(
+ engineID: engineId,
+ completion: { engineResponse in
+ switch engineResponse {
+ case .success(let engineResponse):
+ print(
+ "Moments fetched successfully - String attributes:", engineResponse.strings ?? [])
+ print(
+ "Moments fetched successfully - Boolean attributes:",
+ engineResponse.booleans ?? [])
+ print("Moments fetched successfully - Audiences:", engineResponse.audiences ?? [])
+ print("Moments fetched successfully - Date attributes:", engineResponse.dates ?? [String: Int64]())
+ print("Moments fetched successfully - Badges:", engineResponse.badges ?? [])
+ print("Moments fetched successfully - Numbers:", engineResponse.numbers ?? [String: Double]())
+ case .failure(let error):
+ print("Error fetching moments:", error.localizedDescription)
+ if let suggestion = (error as? LocalizedError)?.recoverySuggestion {
+ print("Recovery suggestion:", suggestion)
+ }
+ }
+ completion(engineResponse)
+ })
+ }
+
func trackView(title: String, data: [String: Any]?) {
let dispatch = TealiumView(title, dataLayer: data)
tealium?.track(dispatch)
@@ -190,21 +227,26 @@ class TealiumHelper {
}
func crash() {
- NSException.raise(NSExceptionName(rawValue: "Exception"), format: "This is a test exception", arguments: getVaList(["nil"]))
+ NSException.raise(
+ NSExceptionName(rawValue: "Exception"), format: "This is a test exception",
+ arguments: getVaList(["nil"]))
}
}
extension TealiumHelper: VisitorServiceDelegate {
func didUpdate(visitorProfile: TealiumVisitorProfile) {
+ DispatchQueue.main.async {
+ self.visitorProfile = visitorProfile
+ }
if let json = try? JSONEncoder().encode(visitorProfile),
- let string = String(data: json, encoding: .utf8) {
+ let string = String(data: json, encoding: .utf8)
+ {
if self.enableHelperLogs {
print("Visitor Profile: \(string)")
}
}
}
-
}
extension TealiumHelper: DispatchListener {
@@ -219,7 +261,7 @@ extension TealiumHelper: DispatchListener {
}
extension TealiumHelper: DispatchValidator {
-
+
var id: String {
return "Helper"
}
@@ -238,7 +280,7 @@ extension TealiumHelper: DispatchValidator {
}
extension TealiumHelper: AutoTrackingDelegate {
- func onCollectScreenView(screenName: String) -> [String : Any] {
+ func onCollectScreenView(screenName: String) -> [String: Any] {
return ["from_delegate": "true"]
}
}
@@ -253,10 +295,12 @@ class MyDateCollector: Collector {
var config: TealiumConfig
- required init(context: TealiumContext,
- delegate: ModuleDelegate?,
- diskStorage: TealiumDiskStorageProtocol?,
- completion: ((Result, [String: Any]?)) -> Void) {
+ required init(
+ context: TealiumContext,
+ delegate: ModuleDelegate?,
+ diskStorage: TealiumDiskStorageProtocol?,
+ completion: ((Result, [String: Any]?)) -> Void
+ ) {
self.config = context.config
}
@@ -271,7 +315,8 @@ class MyCustomDispatcher: Dispatcher {
var config: TealiumConfig
- required init(context: TealiumContext, delegate: ModuleDelegate, completion: ModuleCompletion?) {
+ required init(context: TealiumContext, delegate: ModuleDelegate, completion: ModuleCompletion?)
+ {
self.config = context.config
}
@@ -281,12 +326,12 @@ class MyCustomDispatcher: Dispatcher {
if TealiumHelper.shared.enableHelperLogs {
print("Track received: \(request.event ?? "no event name")")
}
- // perform track action, e.g. send to custom endpoint
+ // perform track action, e.g. send to custom endpoint
case _ as TealiumBatchTrackRequest:
if TealiumHelper.shared.enableHelperLogs {
print("Batch track received")
}
- // perform batch track action, e.g. send to custom endpoint
+ // perform batch track action, e.g. send to custom endpoint
default:
return
}
diff --git a/builder/iOSTealiumTest/VisitorServiceView.swift b/builder/iOSTealiumTest/VisitorServiceView.swift
new file mode 100644
index 00000000..de9fe940
--- /dev/null
+++ b/builder/iOSTealiumTest/VisitorServiceView.swift
@@ -0,0 +1,77 @@
+//
+// VisitorServiceView.swift
+// iOSTealiumTest
+//
+// Copyright © 2024 Tealium, Inc. All rights reserved.
+//
+
+import Foundation
+import TealiumVisitorService
+import SwiftUI
+
+struct VisitorServiceView: View {
+ @State private var audiencesContent = "Awaiting API request"
+ @State private var badgesContent = "Awaiting API request"
+ @State private var numbersContent = "Awaiting API request"
+ @State private var datesContent = "Awaiting API request"
+ @State private var stringsContent = "Awaiting API request"
+ @State private var visitorProfile: TealiumVisitorProfile? = nil
+ @ObservedObject var tealiumHelper = TealiumHelper.shared
+
+ var body: some View {
+ NavigationView {
+ VStack {
+ Button("Visitor Service Request") {
+ TealiumHelper.shared.track(title: "Some Event", data: [:])
+ }
+ .padding()
+ .foregroundColor(.white)
+ .background(Color.blue)
+ .cornerRadius(8)
+
+ List {
+ RowView(label: "Audiences", content: $audiencesContent)
+ RowView(label: "Badges", content: $badgesContent)
+ RowView(label: "Numbers", content: $numbersContent)
+ RowView(label: "Dates", content: $datesContent)
+ RowView(label: "Strings", content: $stringsContent)
+ }
+ }
+ .onReceive(tealiumHelper.$visitorProfile) { visitorProfile in
+ if let strings = visitorProfile?.strings {
+ self.stringsContent = strings
+ .compactMap({ string in
+ string.value
+ }).joined(separator: "\n")
+ }
+
+ if let audiences = visitorProfile?.audiences {
+ self.audiencesContent = audiences.compactMap({ string in
+ string.value
+ }).joined(separator: "\n")
+ }
+ if let badges = visitorProfile?.badges {
+ self.badgesContent = badges.compactMap({ badge in
+ badge.key
+ }).joined(separator: "\n")
+ }
+ if let dates = visitorProfile?.dates {
+ datesContent = dates
+ .sorted(by: { $0.key < $1.key })
+ .compactMap {
+ "\($0.key) : \($0.value)"
+ }.joined(separator: "\n")
+ }
+ if let numbers = visitorProfile?.numbers {
+ numbersContent = numbers
+ .sorted(by: { $0.key < $1.key })
+ .compactMap {
+ "\($0.key) : \(String(format: "%.2f", $0.value))"
+ }.joined(separator: "\n")
+ }
+ }
+ .navigationBarTitle("Visitor Service Demo")
+ }
+ }
+}
+
diff --git a/builder/tealium-swift.xcodeproj/project.pbxproj b/builder/tealium-swift.xcodeproj/project.pbxproj
index 53357975..310a780d 100644
--- a/builder/tealium-swift.xcodeproj/project.pbxproj
+++ b/builder/tealium-swift.xcodeproj/project.pbxproj
@@ -3,10 +3,56 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 54;
+ objectVersion = 55;
objects = {
/* Begin PBXBuildFile section */
+ 08191EC72BCEC1AB003EEE36 /* TealiumCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D755DD0D21945E41003C6BA1 /* TealiumCore.framework */; };
+ 08191EC92BCEC1AB003EEE36 /* VisitorServiceModule.swift in Headers */ = {isa = PBXBuildFile; fileRef = D7805876233A691800DAD90E /* VisitorServiceModule.swift */; settings = {ATTRIBUTES = (Public, ); }; };
+ 08191ECF2BCEC1C9003EEE36 /* MomentsAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08191EB92BCE88B2003EEE36 /* MomentsAPI.swift */; };
+ 08191ED02BCEC1C9003EEE36 /* MomentsAPIExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08191EBA2BCE890C003EEE36 /* MomentsAPIExtensions.swift */; };
+ 08191ED32BD00F55003EEE36 /* MomentsAPIModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08191ED22BD00F55003EEE36 /* MomentsAPIModule.swift */; };
+ 08191ED42BD031E7003EEE36 /* TealiumMomentsAPI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08191ECD2BCEC1AB003EEE36 /* TealiumMomentsAPI.framework */; };
+ 08191ED52BD031E7003EEE36 /* TealiumMomentsAPI.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 08191ECD2BCEC1AB003EEE36 /* TealiumMomentsAPI.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 08191EDB2BD16EF5003EEE36 /* MomentsAPIEngineResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08191EDA2BD16EF5003EEE36 /* MomentsAPIEngineResponse.swift */; };
+ 08191EFE2BD2C555003EEE36 /* MomentsAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08191EDC2BD2C21F003EEE36 /* MomentsAPITests.swift */; };
+ 08191F292BDFAB08003EEE36 /* MomentsAPIHTTPError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08191F282BDFAB08003EEE36 /* MomentsAPIHTTPError.swift */; };
+ 08191F2B2BDFEA24003EEE36 /* MomentsAPIError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08191F2A2BDFEA24003EEE36 /* MomentsAPIError.swift */; };
+ 08191F2E2BE10451003EEE36 /* MomentsAPIModuleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08191F2C2BE10451003EEE36 /* MomentsAPIModuleTests.swift */; };
+ 087AA34D2C46C62B00ADC001 /* MockURLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15A0E69D2BC406B80077FFEB /* MockURLSession.swift */; };
+ 087AA34E2C46C62C00ADC001 /* MockURLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15A0E69D2BC406B80077FFEB /* MockURLSession.swift */; };
+ 087AA34F2C46C62C00ADC001 /* MockURLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15A0E69D2BC406B80077FFEB /* MockURLSession.swift */; };
+ 08CA23D52BE2437D002AC47A /* TestTealiumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 716C7D1B1DDBC3A500512C99 /* TestTealiumHelper.swift */; };
+ 08CA23D62BE245CF002AC47A /* CoreMocks.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFA558BF24E4E6B200BFBED8 /* CoreMocks.swift */; };
+ 08CA23D72BE245E1002AC47A /* MockSessionStarter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7187F1A24768F5000CF0AB0 /* MockSessionStarter.swift */; };
+ 08CA23D82BE24DA3002AC47A /* MockDiskStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D780585B233A68DD00DAD90E /* MockDiskStorage.swift */; };
+ 08CA23DA2BE39905002AC47A /* MomentsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08CA23D92BE39905002AC47A /* MomentsView.swift */; };
+ 08CA23DC2BE3ABCA002AC47A /* VisitorServiceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08CA23DB2BE3ABCA002AC47A /* VisitorServiceView.swift */; };
+ 08CA23E32BE50019002AC47A /* MomentsAPIModuleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08191F2C2BE10451003EEE36 /* MomentsAPIModuleTests.swift */; };
+ 08CA23E42BE50019002AC47A /* MockDiskStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D780585B233A68DD00DAD90E /* MockDiskStorage.swift */; };
+ 08CA23E52BE50019002AC47A /* CoreMocks.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFA558BF24E4E6B200BFBED8 /* CoreMocks.swift */; };
+ 08CA23E72BE50019002AC47A /* MomentsAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08191EDC2BD2C21F003EEE36 /* MomentsAPITests.swift */; };
+ 08CA23E82BE50019002AC47A /* MockSessionStarter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7187F1A24768F5000CF0AB0 /* MockSessionStarter.swift */; };
+ 08CA23E92BE50019002AC47A /* TestTealiumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 716C7D1B1DDBC3A500512C99 /* TestTealiumHelper.swift */; };
+ 08CA23F72BE50022002AC47A /* MomentsAPIModuleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08191F2C2BE10451003EEE36 /* MomentsAPIModuleTests.swift */; };
+ 08CA23F82BE50022002AC47A /* MockDiskStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D780585B233A68DD00DAD90E /* MockDiskStorage.swift */; };
+ 08CA23F92BE50022002AC47A /* CoreMocks.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFA558BF24E4E6B200BFBED8 /* CoreMocks.swift */; };
+ 08CA23FB2BE50022002AC47A /* MomentsAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08191EDC2BD2C21F003EEE36 /* MomentsAPITests.swift */; };
+ 08CA23FC2BE50022002AC47A /* MockSessionStarter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7187F1A24768F5000CF0AB0 /* MockSessionStarter.swift */; };
+ 08CA23FD2BE50022002AC47A /* TestTealiumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 716C7D1B1DDBC3A500512C99 /* TestTealiumHelper.swift */; };
+ 08DAC3CC2C2093B800089032 /* TealiumMomentsAPI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08191ECD2BCEC1AB003EEE36 /* TealiumMomentsAPI.framework */; };
+ 08DAC3CD2C2093B800089032 /* TealiumMomentsAPI.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 08191ECD2BCEC1AB003EEE36 /* TealiumMomentsAPI.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 08DAC3D02C2093BF00089032 /* TealiumMomentsAPI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08191ECD2BCEC1AB003EEE36 /* TealiumMomentsAPI.framework */; };
+ 08DAC3D12C2093BF00089032 /* TealiumMomentsAPI.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 08191ECD2BCEC1AB003EEE36 /* TealiumMomentsAPI.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 08DAC3D52C2093C400089032 /* TealiumMomentsAPI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08191ECD2BCEC1AB003EEE36 /* TealiumMomentsAPI.framework */; };
+ 08DAC3D62C2093C400089032 /* TealiumMomentsAPI.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 08191ECD2BCEC1AB003EEE36 /* TealiumMomentsAPI.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 08DAC3DF2C20997300089032 /* TealiumMomentsAPI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08191ECD2BCEC1AB003EEE36 /* TealiumMomentsAPI.framework */; };
+ 08DAC3E02C20997300089032 /* TealiumMomentsAPI.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 08191ECD2BCEC1AB003EEE36 /* TealiumMomentsAPI.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 08DAC3E32C21E49000089032 /* TealiumMomentsAPI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08191ECD2BCEC1AB003EEE36 /* TealiumMomentsAPI.framework */; };
+ 08DAC3E42C21E49000089032 /* TealiumMomentsAPI.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 08191ECD2BCEC1AB003EEE36 /* TealiumMomentsAPI.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 08EFB6D82C418341006459F6 /* MockAppDataDiskStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE69B0E20126B91000759D8 /* MockAppDataDiskStorage.swift */; };
+ 08EFB6D92C418341006459F6 /* MockAppDataDiskStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE69B0E20126B91000759D8 /* MockAppDataDiskStorage.swift */; };
+ 08EFB6DA2C418342006459F6 /* MockAppDataDiskStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE69B0E20126B91000759D8 /* MockAppDataDiskStorage.swift */; };
15046A0F28C8CBF000B0535E /* allEventsCommands.json in Resources */ = {isa = PBXBuildFile; fileRef = 15046A0E28C8CBF000B0535E /* allEventsCommands.json */; };
15062EEB270758EC00734060 /* large-event-data.json in Resources */ = {isa = PBXBuildFile; fileRef = D7187F1524768F5000CF0AB0 /* large-event-data.json */; };
15062EEC270758EC00734060 /* big-visitor.json in Resources */ = {isa = PBXBuildFile; fileRef = CF8FF2C524466FD90081C1A9 /* big-visitor.json */; };
@@ -861,6 +907,97 @@
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
+ 08191EBD2BCEC1AB003EEE36 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7182DD011D77492D0001A95B /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = D755DC9821945E41003C6BA1;
+ remoteInfo = TealiumCore;
+ };
+ 08191ED62BD031E7003EEE36 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7182DD011D77492D0001A95B /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 08191EBB2BCEC1AB003EEE36;
+ remoteInfo = TealiumMoments;
+ };
+ 08191EE02BD2C4F4003EEE36 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7182DD011D77492D0001A95B /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = D755DC9821945E41003C6BA1;
+ remoteInfo = TealiumCore;
+ };
+ 08191EFB2BD2C547003EEE36 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7182DD011D77492D0001A95B /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 08191EBB2BCEC1AB003EEE36;
+ remoteInfo = TealiumMoments;
+ };
+ 08CA23DF2BE50019002AC47A /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7182DD011D77492D0001A95B /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 08191EBB2BCEC1AB003EEE36;
+ remoteInfo = TealiumMoments;
+ };
+ 08CA23E12BE50019002AC47A /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7182DD011D77492D0001A95B /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = D755DC9821945E41003C6BA1;
+ remoteInfo = TealiumCore;
+ };
+ 08CA23F32BE50022002AC47A /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7182DD011D77492D0001A95B /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 08191EBB2BCEC1AB003EEE36;
+ remoteInfo = TealiumMoments;
+ };
+ 08CA23F52BE50022002AC47A /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7182DD011D77492D0001A95B /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = D755DC9821945E41003C6BA1;
+ remoteInfo = TealiumCore;
+ };
+ 08DAC3CE2C2093B800089032 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7182DD011D77492D0001A95B /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 08191EBB2BCEC1AB003EEE36;
+ remoteInfo = TealiumMoments;
+ };
+ 08DAC3D22C2093BF00089032 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7182DD011D77492D0001A95B /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 08191EBB2BCEC1AB003EEE36;
+ remoteInfo = TealiumMoments;
+ };
+ 08DAC3D72C2093C400089032 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7182DD011D77492D0001A95B /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 08191EBB2BCEC1AB003EEE36;
+ remoteInfo = TealiumMoments;
+ };
+ 08DAC3E12C20997300089032 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7182DD011D77492D0001A95B /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 08191EBB2BCEC1AB003EEE36;
+ remoteInfo = TealiumMomentsAPI;
+ };
+ 08DAC3E52C21E49000089032 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7182DD011D77492D0001A95B /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 08191EBB2BCEC1AB003EEE36;
+ remoteInfo = TealiumMomentsAPI;
+ };
150334B227907D600014CD63 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 7182DD011D77492D0001A95B /* Project object */;
@@ -2033,6 +2170,17 @@
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
+ 08DAC3D42C2093BF00089032 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ 08DAC3D12C2093BF00089032 /* TealiumMomentsAPI.framework in Embed Frameworks */,
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
1510990A273D5B150022AD66 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
@@ -2047,6 +2195,7 @@
15109903273D5B150022AD66 /* TealiumTagManagement.framework in Embed Frameworks */,
151098F3273D5B150022AD66 /* TealiumLifecycle.framework in Embed Frameworks */,
151098F7273D5B150022AD66 /* TealiumLocation.framework in Embed Frameworks */,
+ 08DAC3CD2C2093B800089032 /* TealiumMomentsAPI.framework in Embed Frameworks */,
151098EB273D5B150022AD66 /* TealiumCollect.framework in Embed Frameworks */,
151098EF273D5B150022AD66 /* TealiumCore.framework in Embed Frameworks */,
151098FB273D5B150022AD66 /* TealiumMedia.framework in Embed Frameworks */,
@@ -2060,6 +2209,7 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
+ 08DAC3D62C2093C400089032 /* TealiumMomentsAPI.framework in Embed Frameworks */,
1561915927904E5E00A73543 /* TealiumInAppPurchase.framework in Embed Frameworks */,
15D43D4126F20869004E52FE /* TealiumCore.framework in Embed Frameworks */,
15D43D5126F20869004E52FE /* TealiumVisitorService.framework in Embed Frameworks */,
@@ -2104,6 +2254,7 @@
CF8807B62554BB3B0020E1B2 /* TealiumLocation.framework in Embed Frameworks */,
48B28449273D67D700FE908D /* TealiumInAppPurchase.framework in Embed Frameworks */,
CF8807BE2554BB3B0020E1B2 /* TealiumTagManagement.framework in Embed Frameworks */,
+ 08191ED52BD031E7003EEE36 /* TealiumMomentsAPI.framework in Embed Frameworks */,
CF8807AA2554BB3B0020E1B2 /* TealiumCollect.framework in Embed Frameworks */,
CF8807BA2554BB3B0020E1B2 /* TealiumRemoteCommands.framework in Embed Frameworks */,
CF8807AE2554BB3B0020E1B2 /* TealiumCore.framework in Embed Frameworks */,
@@ -2117,6 +2268,7 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
+ 08DAC3E42C21E49000089032 /* TealiumMomentsAPI.framework in Embed Frameworks */,
1561915227904E1000A73543 /* TealiumInAppPurchase.framework in Embed Frameworks */,
CF8807CF2554BB480020E1B2 /* TealiumLifecycle.framework in Embed Frameworks */,
CF8807D32554BB480020E1B2 /* TealiumVisitorService.framework in Embed Frameworks */,
@@ -2133,6 +2285,7 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
+ 08DAC3E02C20997300089032 /* TealiumMomentsAPI.framework in Embed Frameworks */,
15755DDB27904DA200F894CA /* TealiumInAppPurchase.framework in Embed Frameworks */,
CF8807E02554BB600020E1B2 /* TealiumLifecycle.framework in Embed Frameworks */,
CF8807E42554BB600020E1B2 /* TealiumVisitorService.framework in Embed Frameworks */,
@@ -2156,6 +2309,21 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
+ 08191EB92BCE88B2003EEE36 /* MomentsAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MomentsAPI.swift; sourceTree = ""; };
+ 08191EBA2BCE890C003EEE36 /* MomentsAPIExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MomentsAPIExtensions.swift; sourceTree = ""; };
+ 08191ECD2BCEC1AB003EEE36 /* TealiumMomentsAPI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TealiumMomentsAPI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 08191ECE2BCEC1AC003EEE36 /* TealiumMoments-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "TealiumMoments-Info.plist"; path = "/Users/craig.rouse/mobiledev/swift-library/tealium-swift/builder/TealiumMoments-Info.plist"; sourceTree = ""; };
+ 08191ED22BD00F55003EEE36 /* MomentsAPIModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MomentsAPIModule.swift; sourceTree = ""; };
+ 08191EDA2BD16EF5003EEE36 /* MomentsAPIEngineResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MomentsAPIEngineResponse.swift; sourceTree = ""; };
+ 08191EDC2BD2C21F003EEE36 /* MomentsAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MomentsAPITests.swift; sourceTree = ""; };
+ 08191EF92BD2C4F4003EEE36 /* TealiumMomentsAPITests-iOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "TealiumMomentsAPITests-iOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 08191F282BDFAB08003EEE36 /* MomentsAPIHTTPError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MomentsAPIHTTPError.swift; sourceTree = ""; };
+ 08191F2A2BDFEA24003EEE36 /* MomentsAPIError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MomentsAPIError.swift; sourceTree = ""; };
+ 08191F2C2BE10451003EEE36 /* MomentsAPIModuleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MomentsAPIModuleTests.swift; sourceTree = ""; };
+ 08CA23D92BE39905002AC47A /* MomentsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MomentsView.swift; sourceTree = ""; };
+ 08CA23DB2BE3ABCA002AC47A /* VisitorServiceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VisitorServiceView.swift; sourceTree = ""; };
+ 08CA23EF2BE50019002AC47A /* TealiumMomentsAPITests-tvOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "TealiumMomentsAPITests-tvOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 08CA24032BE50022002AC47A /* TealiumMomentsAPITests-macOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "TealiumMomentsAPITests-macOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
15046A0E28C8CBF000B0535E /* allEventsCommands.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = allEventsCommands.json; sourceTree = ""; };
150F9FB328BFB3DB00E75B31 /* VisitorIdentityListenerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VisitorIdentityListenerTests.swift; sourceTree = ""; };
150F9FB728BFB86500E75B31 /* VisitorIdProviderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VisitorIdProviderTests.swift; sourceTree = ""; };
@@ -2615,6 +2783,35 @@
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
+ 08191EC62BCEC1AB003EEE36 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 08191EC72BCEC1AB003EEE36 /* TealiumCore.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 08191EEF2BD2C4F4003EEE36 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 08CA23EA2BE50019002AC47A /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 08CA23FE2BE50022002AC47A /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
1516A2DB26EF7F26003DF8F2 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -2655,6 +2852,7 @@
15109902273D5B150022AD66 /* TealiumTagManagement.framework in Frameworks */,
151098F2273D5B150022AD66 /* TealiumLifecycle.framework in Frameworks */,
151098F6273D5B150022AD66 /* TealiumLocation.framework in Frameworks */,
+ 08DAC3CC2C2093B800089032 /* TealiumMomentsAPI.framework in Frameworks */,
151098EA273D5B150022AD66 /* TealiumCollect.framework in Frameworks */,
151098EE273D5B150022AD66 /* TealiumCore.framework in Frameworks */,
151098FA273D5B150022AD66 /* TealiumMedia.framework in Frameworks */,
@@ -2665,6 +2863,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ 08DAC3D52C2093C400089032 /* TealiumMomentsAPI.framework in Frameworks */,
1561915827904E5600A73543 /* TealiumInAppPurchase.framework in Frameworks */,
15D43D4026F20869004E52FE /* TealiumCore.framework in Frameworks */,
15D43D5026F20869004E52FE /* TealiumVisitorService.framework in Frameworks */,
@@ -2701,6 +2900,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ 08DAC3D02C2093BF00089032 /* TealiumMomentsAPI.framework in Frameworks */,
1561915527904E4100A73543 /* TealiumInAppPurchase.framework in Frameworks */,
15D43D3126F207FA004E52FE /* TealiumCollect.framework in Frameworks */,
15D43D3226F207FA004E52FE /* TealiumLifecycle.framework in Frameworks */,
@@ -2776,6 +2976,7 @@
CF8807B52554BB3B0020E1B2 /* TealiumLocation.framework in Frameworks */,
48B28448273D67D600FE908D /* TealiumInAppPurchase.framework in Frameworks */,
CF8807BD2554BB3B0020E1B2 /* TealiumTagManagement.framework in Frameworks */,
+ 08191ED42BD031E7003EEE36 /* TealiumMomentsAPI.framework in Frameworks */,
CF8807A92554BB3B0020E1B2 /* TealiumCollect.framework in Frameworks */,
CF8807B92554BB3B0020E1B2 /* TealiumRemoteCommands.framework in Frameworks */,
CF8807AD2554BB3B0020E1B2 /* TealiumCore.framework in Frameworks */,
@@ -2786,6 +2987,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ 08DAC3E32C21E49000089032 /* TealiumMomentsAPI.framework in Frameworks */,
1561915127904E0800A73543 /* TealiumInAppPurchase.framework in Frameworks */,
CF8807CE2554BB480020E1B2 /* TealiumLifecycle.framework in Frameworks */,
CF8807D22554BB480020E1B2 /* TealiumVisitorService.framework in Frameworks */,
@@ -2799,6 +3001,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ 08DAC3DF2C20997300089032 /* TealiumMomentsAPI.framework in Frameworks */,
15755DDA27904D9200F894CA /* TealiumInAppPurchase.framework in Frameworks */,
CF8807DF2554BB600020E1B2 /* TealiumLifecycle.framework in Frameworks */,
CF8807E32554BB600020E1B2 /* TealiumVisitorService.framework in Frameworks */,
@@ -3037,6 +3240,28 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
+ 08191EB82BCE8894003EEE36 /* momentsapi */ = {
+ isa = PBXGroup;
+ children = (
+ 08191EB92BCE88B2003EEE36 /* MomentsAPI.swift */,
+ 08191ED22BD00F55003EEE36 /* MomentsAPIModule.swift */,
+ 08191EBA2BCE890C003EEE36 /* MomentsAPIExtensions.swift */,
+ 08191EDA2BD16EF5003EEE36 /* MomentsAPIEngineResponse.swift */,
+ 08191F282BDFAB08003EEE36 /* MomentsAPIHTTPError.swift */,
+ 08191F2A2BDFEA24003EEE36 /* MomentsAPIError.swift */,
+ );
+ path = momentsapi;
+ sourceTree = "";
+ };
+ 08191ED82BD15F22003EEE36 /* test_tealium_moments_api */ = {
+ isa = PBXGroup;
+ children = (
+ 08191EDC2BD2C21F003EEE36 /* MomentsAPITests.swift */,
+ 08191F2C2BE10451003EEE36 /* MomentsAPIModuleTests.swift */,
+ );
+ path = test_tealium_moments_api;
+ sourceTree = "";
+ };
1516A2E826EF7F6A003DF8F2 /* ui_tests */ = {
isa = PBXGroup;
children = (
@@ -3300,6 +3525,7 @@
716C7D0B1DDBC3A500512C99 /* tests */ = {
isa = PBXGroup;
children = (
+ 08191ED82BD15F22003EEE36 /* test_tealium_moments_api */,
48A13B01273C22800031E2B5 /* test_tealium_inapppurchase */,
71EBA7541DDCD63D00813470 /* test_tealium_attribution */,
7102BF6E1E0CF03300ED5783 /* test_tealium_autotracking */,
@@ -3390,6 +3616,7 @@
15B84D7626F206950094DC05 /* AutoTrackingTvOSTest */,
7182DD0A1D77492D0001A95B /* Products */,
D79876C11FACE5B100FFA96B /* Frameworks */,
+ 08191ECE2BCEC1AC003EEE36 /* TealiumMoments-Info.plist */,
);
sourceTree = "";
};
@@ -3446,6 +3673,10 @@
48AB110E275E42C30011D4D6 /* TealiumInAppPurchaseTests-iOS.xctest */,
15C6015127902A2900497901 /* TealiumMediaIntegrationTests-iOS.xctest */,
15274F97279191E0009F645A /* TealiumInAppPurchaseTests-tvOS.xctest */,
+ 08191ECD2BCEC1AB003EEE36 /* TealiumMomentsAPI.framework */,
+ 08191EF92BD2C4F4003EEE36 /* TealiumMomentsAPITests-iOS.xctest */,
+ 08CA23EF2BE50019002AC47A /* TealiumMomentsAPITests-tvOS.xctest */,
+ 08CA24032BE50022002AC47A /* TealiumMomentsAPITests-macOS.xctest */,
);
name = Products;
sourceTree = "";
@@ -3743,6 +3974,8 @@
CF8809272554BD490020E1B2 /* iOSTealiumTestApp.swift */,
CF8809282554BD490020E1B2 /* Assets.xcassets */,
CF88092B2554BD490020E1B2 /* ContentView.swift */,
+ 08CA23D92BE39905002AC47A /* MomentsView.swift */,
+ 08CA23DB2BE3ABCA002AC47A /* VisitorServiceView.swift */,
CF88092C2554BD490020E1B2 /* Info.plist */,
CF88092D2554BD490020E1B2 /* iOSTealiumTest.entitlements */,
CF88092E2554BD490020E1B2 /* Supporting Views */,
@@ -3886,9 +4119,10 @@
D70FC7AD24508146004AD838 /* collectors */ = {
isa = PBXGroup;
children = (
+ D780586F233A68E900DAD90E /* visitorservice */,
+ 08191EB82BCE8894003EEE36 /* momentsapi */,
48405B362739B9690094EA18 /* inapppurchase */,
CFAD9D5B25A66C040079B19A /* media */,
- D780586F233A68E900DAD90E /* visitorservice */,
CFF242BF23CE77F10091B7BF /* location */,
71F085BD1DDE154C008850C8 /* attribution */,
71D2B34C1E2FE3670049BCF3 /* autotracking */,
@@ -4120,6 +4354,14 @@
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
+ 08191EC82BCEC1AB003EEE36 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 08191EC92BCEC1AB003EEE36 /* VisitorServiceModule.swift in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
48B2843A273D674700FE908D /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
@@ -4259,6 +4501,88 @@
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
+ 08191EBB2BCEC1AB003EEE36 /* TealiumMomentsAPI */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 08191ECA2BCEC1AB003EEE36 /* Build configuration list for PBXNativeTarget "TealiumMomentsAPI" */;
+ buildPhases = (
+ 08191EBE2BCEC1AB003EEE36 /* SwiftLint */,
+ 08191EBF2BCEC1AB003EEE36 /* Sources */,
+ 08191EC62BCEC1AB003EEE36 /* Frameworks */,
+ 08191EC82BCEC1AB003EEE36 /* Headers */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 08191EBC2BCEC1AB003EEE36 /* PBXTargetDependency */,
+ );
+ name = TealiumMomentsAPI;
+ productName = ios;
+ productReference = 08191ECD2BCEC1AB003EEE36 /* TealiumMomentsAPI.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ 08191EDE2BD2C4F4003EEE36 /* TealiumMomentsAPITests-iOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 08191EF62BD2C4F4003EEE36 /* Build configuration list for PBXNativeTarget "TealiumMomentsAPITests-iOS" */;
+ buildPhases = (
+ 08191EE32BD2C4F4003EEE36 /* Sources */,
+ 08191EEF2BD2C4F4003EEE36 /* Frameworks */,
+ 08191EF02BD2C4F4003EEE36 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 08191EFC2BD2C547003EEE36 /* PBXTargetDependency */,
+ 08191EDF2BD2C4F4003EEE36 /* PBXTargetDependency */,
+ );
+ name = "TealiumMomentsAPITests-iOS";
+ packageProductDependencies = (
+ );
+ productName = "tealium-swift-tests";
+ productReference = 08191EF92BD2C4F4003EEE36 /* TealiumMomentsAPITests-iOS.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ 08CA23DD2BE50019002AC47A /* TealiumMomentsAPITests-tvOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 08CA23EC2BE50019002AC47A /* Build configuration list for PBXNativeTarget "TealiumMomentsAPITests-tvOS" */;
+ buildPhases = (
+ 08CA23E22BE50019002AC47A /* Sources */,
+ 08CA23EA2BE50019002AC47A /* Frameworks */,
+ 08CA23EB2BE50019002AC47A /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 08CA23DE2BE50019002AC47A /* PBXTargetDependency */,
+ 08CA23E02BE50019002AC47A /* PBXTargetDependency */,
+ );
+ name = "TealiumMomentsAPITests-tvOS";
+ packageProductDependencies = (
+ );
+ productName = "tealium-swift-tests";
+ productReference = 08CA23EF2BE50019002AC47A /* TealiumMomentsAPITests-tvOS.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ 08CA23F12BE50022002AC47A /* TealiumMomentsAPITests-macOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 08CA24002BE50022002AC47A /* Build configuration list for PBXNativeTarget "TealiumMomentsAPITests-macOS" */;
+ buildPhases = (
+ 08CA23F62BE50022002AC47A /* Sources */,
+ 08CA23FE2BE50022002AC47A /* Frameworks */,
+ 08CA23FF2BE50022002AC47A /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 08CA23F22BE50022002AC47A /* PBXTargetDependency */,
+ 08CA23F42BE50022002AC47A /* PBXTargetDependency */,
+ );
+ name = "TealiumMomentsAPITests-macOS";
+ packageProductDependencies = (
+ );
+ productName = "tealium-swift-tests";
+ productReference = 08CA24032BE50022002AC47A /* TealiumMomentsAPITests-macOS.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
1516A2DD26EF7F26003DF8F2 /* TealiumAutotrackingUITests-iOS */ = {
isa = PBXNativeTarget;
buildConfigurationList = 1516A2E526EF7F26003DF8F2 /* Build configuration list for PBXNativeTarget "TealiumAutotrackingUITests-iOS" */;
@@ -4359,6 +4683,7 @@
15109901273D5B150022AD66 /* PBXTargetDependency */,
15109905273D5B150022AD66 /* PBXTargetDependency */,
15109909273D5B150022AD66 /* PBXTargetDependency */,
+ 08DAC3CF2C2093B800089032 /* PBXTargetDependency */,
);
name = AutoTrackingIOSTest;
productName = AutoTrackingIOSTest;
@@ -4384,6 +4709,7 @@
15D43D4726F20869004E52FE /* PBXTargetDependency */,
15D43D4F26F20869004E52FE /* PBXTargetDependency */,
15D43D5326F20869004E52FE /* PBXTargetDependency */,
+ 08DAC3D82C2093C400089032 /* PBXTargetDependency */,
);
name = AutoTrackingTvOSTest;
productName = AutoTrackingTvOSTest;
@@ -4455,6 +4781,7 @@
15F8E22026F0AF5900C4F6A1 /* Sources */,
15F8E22126F0AF5900C4F6A1 /* Frameworks */,
15F8E22226F0AF5900C4F6A1 /* Resources */,
+ 08DAC3D42C2093BF00089032 /* Embed Frameworks */,
);
buildRules = (
);
@@ -4466,6 +4793,7 @@
15D43D2F26F207EE004E52FE /* PBXTargetDependency */,
15D43D1F26F207CF004E52FE /* PBXTargetDependency */,
15D43D1D26F207C5004E52FE /* PBXTargetDependency */,
+ 08DAC3D32C2093BF00089032 /* PBXTargetDependency */,
);
name = AutoTrackingMacOSTest;
productName = AutoTrackingMacOSTest;
@@ -4635,6 +4963,7 @@
CF8807C42554BB3B0020E1B2 /* PBXTargetDependency */,
CFAD9D3025A66BE90079B19A /* PBXTargetDependency */,
48B2844B273D67D700FE908D /* PBXTargetDependency */,
+ 08191ED72BD031E7003EEE36 /* PBXTargetDependency */,
);
name = iOSTealiumTest;
packageProductDependencies = (
@@ -4661,6 +4990,7 @@
CF8807D12554BB480020E1B2 /* PBXTargetDependency */,
CF8807D52554BB480020E1B2 /* PBXTargetDependency */,
1555F59926E64C7900AFDC3D /* PBXTargetDependency */,
+ 08DAC3E62C21E49000089032 /* PBXTargetDependency */,
);
name = tvOSTealiumTest;
productName = tvOSTealiumTest;
@@ -4685,6 +5015,7 @@
CF8807E22554BB600020E1B2 /* PBXTargetDependency */,
CF8807E62554BB600020E1B2 /* PBXTargetDependency */,
1555F59526E64C7000AFDC3D /* PBXTargetDependency */,
+ 08DAC3E22C20997300089032 /* PBXTargetDependency */,
);
name = macOSTealiumTest;
productName = macOSTealiumTest;
@@ -5313,8 +5644,9 @@
7182DD011D77492D0001A95B /* Project object */ = {
isa = PBXProject;
attributes = {
+ BuildIndependentTargetsInParallel = YES;
LastSwiftUpdateCheck = 1320;
- LastUpgradeCheck = 1100;
+ LastUpgradeCheck = 1540;
ORGANIZATIONNAME = "Tealium, Inc";
TargetAttributes = {
1516A2DD26EF7F26003DF8F2 = {
@@ -5495,6 +5827,7 @@
D7881EF121998DAD002CDCC1 /* TealiumLifecycle */,
CFF242A023CE774C0091B7BF /* TealiumLocation */,
CFAD9D1B25A66BE80079B19A /* TealiumMedia */,
+ 08191EBB2BCEC1AB003EEE36 /* TealiumMomentsAPI */,
D7B04D08219994D400C87E22 /* TealiumRemoteCommands */,
D755DD1121945F99003C6BA1 /* TealiumTagManagement */,
D7805825233A65FB00DAD90E /* TealiumVisitorService */,
@@ -5538,11 +5871,35 @@
15A0077B27284EF9005E1927 /* AutoTrackingIOSTest */,
15F8E22326F0AF5900C4F6A1 /* AutoTrackingMacOSTest */,
15B84D7426F206950094DC05 /* AutoTrackingTvOSTest */,
+ 08191EDE2BD2C4F4003EEE36 /* TealiumMomentsAPITests-iOS */,
+ 08CA23DD2BE50019002AC47A /* TealiumMomentsAPITests-tvOS */,
+ 08CA23F12BE50022002AC47A /* TealiumMomentsAPITests-macOS */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
+ 08191EF02BD2C4F4003EEE36 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 08CA23EB2BE50019002AC47A /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 08CA23FF2BE50022002AC47A /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
1516A2DC26EF7F26003DF8F2 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
@@ -5895,6 +6252,25 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
+ 08191EBE2BCEC1AB003EEE36 /* SwiftLint */ = {
+ isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ );
+ name = SwiftLint;
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n# Type a script or drag a script file from your workspace to insert its path.\nif which swiftlint >/dev/null; then\nswiftlint --config \"$PROJECT_DIR\"/../.swiftlint.yml\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n";
+ };
15037B9F2982904400EB8175 /* SwiftLint */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
@@ -6107,6 +6483,64 @@
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
+ 08191EBF2BCEC1AB003EEE36 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 08191F292BDFAB08003EEE36 /* MomentsAPIHTTPError.swift in Sources */,
+ 08191ED32BD00F55003EEE36 /* MomentsAPIModule.swift in Sources */,
+ 08191EDB2BD16EF5003EEE36 /* MomentsAPIEngineResponse.swift in Sources */,
+ 08191F2B2BDFEA24003EEE36 /* MomentsAPIError.swift in Sources */,
+ 08191ECF2BCEC1C9003EEE36 /* MomentsAPI.swift in Sources */,
+ 08191ED02BCEC1C9003EEE36 /* MomentsAPIExtensions.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 08191EE32BD2C4F4003EEE36 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 087AA34D2C46C62B00ADC001 /* MockURLSession.swift in Sources */,
+ 08191F2E2BE10451003EEE36 /* MomentsAPIModuleTests.swift in Sources */,
+ 08CA23D82BE24DA3002AC47A /* MockDiskStorage.swift in Sources */,
+ 08CA23D62BE245CF002AC47A /* CoreMocks.swift in Sources */,
+ 08EFB6D82C418341006459F6 /* MockAppDataDiskStorage.swift in Sources */,
+ 08191EFE2BD2C555003EEE36 /* MomentsAPITests.swift in Sources */,
+ 08CA23D72BE245E1002AC47A /* MockSessionStarter.swift in Sources */,
+ 08CA23D52BE2437D002AC47A /* TestTealiumHelper.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 08CA23E22BE50019002AC47A /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 087AA34E2C46C62C00ADC001 /* MockURLSession.swift in Sources */,
+ 08CA23E32BE50019002AC47A /* MomentsAPIModuleTests.swift in Sources */,
+ 08CA23E42BE50019002AC47A /* MockDiskStorage.swift in Sources */,
+ 08CA23E52BE50019002AC47A /* CoreMocks.swift in Sources */,
+ 08EFB6D92C418341006459F6 /* MockAppDataDiskStorage.swift in Sources */,
+ 08CA23E72BE50019002AC47A /* MomentsAPITests.swift in Sources */,
+ 08CA23E82BE50019002AC47A /* MockSessionStarter.swift in Sources */,
+ 08CA23E92BE50019002AC47A /* TestTealiumHelper.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 08CA23F62BE50022002AC47A /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 087AA34F2C46C62C00ADC001 /* MockURLSession.swift in Sources */,
+ 08CA23F72BE50022002AC47A /* MomentsAPIModuleTests.swift in Sources */,
+ 08CA23F82BE50022002AC47A /* MockDiskStorage.swift in Sources */,
+ 08CA23F92BE50022002AC47A /* CoreMocks.swift in Sources */,
+ 08EFB6DA2C418342006459F6 /* MockAppDataDiskStorage.swift in Sources */,
+ 08CA23FB2BE50022002AC47A /* MomentsAPITests.swift in Sources */,
+ 08CA23FC2BE50022002AC47A /* MockSessionStarter.swift in Sources */,
+ 08CA23FD2BE50022002AC47A /* TestTealiumHelper.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
1516A2DA26EF7F26003DF8F2 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -6312,6 +6746,8 @@
files = (
CF8809312554BD510020E1B2 /* TealiumHelper.swift in Sources */,
CFB6B53B2679119B00D62D87 /* Colors.swift in Sources */,
+ 08CA23DC2BE3ABCA002AC47A /* VisitorServiceView.swift in Sources */,
+ 08CA23DA2BE39905002AC47A /* MomentsView.swift in Sources */,
CFB6B53A2679119B00D62D87 /* UIColor+Hex.swift in Sources */,
CF88094A2554BD560020E1B2 /* iOSTealiumTestApp.swift in Sources */,
CFB6B5372679119B00D62D87 /* ButtonViews.swift in Sources */,
@@ -7064,6 +7500,91 @@
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
+ 08191EBC2BCEC1AB003EEE36 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = D755DC9821945E41003C6BA1 /* TealiumCore */;
+ targetProxy = 08191EBD2BCEC1AB003EEE36 /* PBXContainerItemProxy */;
+ };
+ 08191ED72BD031E7003EEE36 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 08191EBB2BCEC1AB003EEE36 /* TealiumMomentsAPI */;
+ targetProxy = 08191ED62BD031E7003EEE36 /* PBXContainerItemProxy */;
+ };
+ 08191EDF2BD2C4F4003EEE36 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = D755DC9821945E41003C6BA1 /* TealiumCore */;
+ targetProxy = 08191EE02BD2C4F4003EEE36 /* PBXContainerItemProxy */;
+ };
+ 08191EFC2BD2C547003EEE36 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 08191EBB2BCEC1AB003EEE36 /* TealiumMomentsAPI */;
+ targetProxy = 08191EFB2BD2C547003EEE36 /* PBXContainerItemProxy */;
+ };
+ 08CA23DE2BE50019002AC47A /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ platformFilters = (
+ ios,
+ maccatalyst,
+ tvos,
+ );
+ target = 08191EBB2BCEC1AB003EEE36 /* TealiumMomentsAPI */;
+ targetProxy = 08CA23DF2BE50019002AC47A /* PBXContainerItemProxy */;
+ };
+ 08CA23E02BE50019002AC47A /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ platformFilters = (
+ ios,
+ maccatalyst,
+ tvos,
+ );
+ target = D755DC9821945E41003C6BA1 /* TealiumCore */;
+ targetProxy = 08CA23E12BE50019002AC47A /* PBXContainerItemProxy */;
+ };
+ 08CA23F22BE50022002AC47A /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ platformFilters = (
+ ios,
+ maccatalyst,
+ macos,
+ );
+ target = 08191EBB2BCEC1AB003EEE36 /* TealiumMomentsAPI */;
+ targetProxy = 08CA23F32BE50022002AC47A /* PBXContainerItemProxy */;
+ };
+ 08CA23F42BE50022002AC47A /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ platformFilters = (
+ ios,
+ maccatalyst,
+ macos,
+ );
+ target = D755DC9821945E41003C6BA1 /* TealiumCore */;
+ targetProxy = 08CA23F52BE50022002AC47A /* PBXContainerItemProxy */;
+ };
+ 08DAC3CF2C2093B800089032 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 08191EBB2BCEC1AB003EEE36 /* TealiumMomentsAPI */;
+ targetProxy = 08DAC3CE2C2093B800089032 /* PBXContainerItemProxy */;
+ };
+ 08DAC3D32C2093BF00089032 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 08191EBB2BCEC1AB003EEE36 /* TealiumMomentsAPI */;
+ targetProxy = 08DAC3D22C2093BF00089032 /* PBXContainerItemProxy */;
+ };
+ 08DAC3D82C2093C400089032 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 08191EBB2BCEC1AB003EEE36 /* TealiumMomentsAPI */;
+ targetProxy = 08DAC3D72C2093C400089032 /* PBXContainerItemProxy */;
+ };
+ 08DAC3E22C20997300089032 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 08191EBB2BCEC1AB003EEE36 /* TealiumMomentsAPI */;
+ targetProxy = 08DAC3E12C20997300089032 /* PBXContainerItemProxy */;
+ };
+ 08DAC3E62C21E49000089032 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 08191EBB2BCEC1AB003EEE36 /* TealiumMomentsAPI */;
+ targetProxy = 08DAC3E52C21E49000089032 /* PBXContainerItemProxy */;
+ };
150334B327907D600014CD63 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = CF8806D92554B8620020E1B2 /* macOSTealiumTest */;
@@ -7772,11 +8293,19 @@
};
D788A4F2231988B000BC6D60 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
+ platformFilters = (
+ ios,
+ maccatalyst,
+ );
target = D755DC9821945E41003C6BA1 /* TealiumCore */;
targetProxy = D788A4F3231988B000BC6D60 /* PBXContainerItemProxy */;
};
D788A507231988F000BC6D60 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
+ platformFilters = (
+ ios,
+ maccatalyst,
+ );
target = D7881EF121998DAD002CDCC1 /* TealiumLifecycle */;
targetProxy = D788A506231988F000BC6D60 /* PBXContainerItemProxy */;
};
@@ -7914,12 +8443,362 @@
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
- 1516A2E626EF7F26003DF8F2 /* Debug */ = {
+ 08191ECB2BCEC1AB003EEE36 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
- CLANG_ENABLE_OBJC_WEAK = YES;
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
+ APPLICATION_EXTENSION_API_ONLY = YES;
+ BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
+ BUILD_SCRIPT = NO;
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_SUSPICIOUS_MOVES = YES;
+ CODE_SIGN_IDENTITY = "";
+ CODE_SIGN_STYLE = Manual;
+ CURRENT_PROJECT_VERSION = 1;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ DEFINES_MODULE = YES;
+ DEVELOPMENT_TEAM = "";
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
+ EXCLUDED_ARCHS = "";
+ FRAMEWORK_SEARCH_PATHS = "";
+ INFOPLIST_FILE = "TealiumMoments-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11";
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ OTHER_LDFLAGS = "";
+ PRODUCT_BUNDLE_IDENTIFIER = tealium.ios.moments;
+ PRODUCT_MODULE_NAME = "$(PRODUCT_NAME)";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = "";
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = NO;
+ SUPPORTED_PLATFORMS = "iphonesimulator iphoneos watchsimulator appletvsimulator watchos appletvos macosx";
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "momentsapi DEBUG";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2,3,4,6";
+ TVOS_DEPLOYMENT_TARGET = 12.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ WATCHOS_DEPLOYMENT_TARGET = 4.0;
+ };
+ name = Debug;
+ };
+ 08191ECC2BCEC1AB003EEE36 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
+ APPLICATION_EXTENSION_API_ONLY = YES;
+ BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
+ BUILD_SCRIPT = NO;
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_SUSPICIOUS_MOVES = YES;
+ CODE_SIGN_IDENTITY = "";
+ CODE_SIGN_STYLE = Manual;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DEVELOPMENT_TEAM = "";
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
+ EXCLUDED_ARCHS = "";
+ FRAMEWORK_SEARCH_PATHS = "";
+ INFOPLIST_FILE = "TealiumMoments-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11";
+ OTHER_LDFLAGS = "";
+ PRODUCT_BUNDLE_IDENTIFIER = tealium.ios.moments;
+ PRODUCT_MODULE_NAME = "$(PRODUCT_NAME)";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = "";
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = NO;
+ SUPPORTED_PLATFORMS = "iphonesimulator iphoneos watchsimulator appletvsimulator watchos appletvos macosx";
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = momentsapi;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2,3,4,6";
+ TVOS_DEPLOYMENT_TARGET = 12.0;
+ VALIDATE_PRODUCT = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ WATCHOS_DEPLOYMENT_TARGET = 4.0;
+ };
+ name = Release;
+ };
+ 08191EF72BD2C4F4003EEE36 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_IDENTITY = "";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+ CODE_SIGN_STYLE = Manual;
+ COMBINE_HIDPI_IMAGES = YES;
+ DEVELOPMENT_TEAM = XC939GDC9P;
+ EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = YES;
+ FRAMEWORK_SEARCH_PATHS = "";
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ "TEST=1",
+ );
+ INFOPLIST_FILE = "TealiumTests-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 16.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@loader_path/Frameworks",
+ "@loader_path/../Frameworks",
+ "@executable_path/Frameworks",
+ );
+ LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ OTHER_LDFLAGS = "";
+ OTHER_SWIFT_FLAGS = "-DTEST";
+ PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SDKROOT = iphoneos;
+ SUPPORTED_PLATFORMS = "iphonesimulator iphoneos";
+ SUPPORTS_MACCATALYST = YES;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_OBJC_BRIDGING_HEADER = "";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 08191EF82BD2C4F4003EEE36 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_IDENTITY = "";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+ CODE_SIGN_STYLE = Manual;
+ COMBINE_HIDPI_IMAGES = YES;
+ DEVELOPMENT_TEAM = XC939GDC9P;
+ EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = YES;
+ FRAMEWORK_SEARCH_PATHS = "";
+ GCC_PREPROCESSOR_DEFINITIONS = "";
+ INFOPLIST_FILE = "TealiumTests-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 16.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@loader_path/Frameworks",
+ "@loader_path/../Frameworks",
+ "@executable_path/Frameworks",
+ );
+ LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ OTHER_LDFLAGS = "";
+ OTHER_SWIFT_FLAGS = "-DTEST";
+ PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SDKROOT = iphoneos;
+ SUPPORTED_PLATFORMS = "iphonesimulator iphoneos";
+ SUPPORTS_MACCATALYST = YES;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_OBJC_BRIDGING_HEADER = "";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Release;
+ };
+ 08CA23ED2BE50019002AC47A /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_IDENTITY = "";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+ CODE_SIGN_STYLE = Manual;
+ COMBINE_HIDPI_IMAGES = YES;
+ DEVELOPMENT_TEAM = XC939GDC9P;
+ EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = YES;
+ FRAMEWORK_SEARCH_PATHS = "";
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ "TEST=1",
+ );
+ INFOPLIST_FILE = "TealiumTests-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 16.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@loader_path/Frameworks",
+ "@loader_path/../Frameworks",
+ "@executable_path/Frameworks",
+ );
+ LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ OTHER_LDFLAGS = "";
+ OTHER_SWIFT_FLAGS = "-DTEST";
+ PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SDKROOT = iphoneos;
+ SUPPORTED_PLATFORMS = "appletvos appletvsimulator";
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_OBJC_BRIDGING_HEADER = "";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 3;
+ };
+ name = Debug;
+ };
+ 08CA23EE2BE50019002AC47A /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_IDENTITY = "";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+ CODE_SIGN_STYLE = Manual;
+ COMBINE_HIDPI_IMAGES = YES;
+ DEVELOPMENT_TEAM = XC939GDC9P;
+ EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = YES;
+ FRAMEWORK_SEARCH_PATHS = "";
+ GCC_PREPROCESSOR_DEFINITIONS = "";
+ INFOPLIST_FILE = "TealiumTests-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 16.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@loader_path/Frameworks",
+ "@loader_path/../Frameworks",
+ "@executable_path/Frameworks",
+ );
+ LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ OTHER_LDFLAGS = "";
+ OTHER_SWIFT_FLAGS = "-DTEST";
+ PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SDKROOT = iphoneos;
+ SUPPORTED_PLATFORMS = "appletvos appletvsimulator";
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_OBJC_BRIDGING_HEADER = "";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 3;
+ };
+ name = Release;
+ };
+ 08CA24012BE50022002AC47A /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_IDENTITY = "";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+ CODE_SIGN_STYLE = Manual;
+ COMBINE_HIDPI_IMAGES = YES;
+ DEVELOPMENT_TEAM = XC939GDC9P;
+ EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = YES;
+ FRAMEWORK_SEARCH_PATHS = "";
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ "TEST=1",
+ );
+ INFOPLIST_FILE = "TealiumTests-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 16.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@loader_path/Frameworks",
+ "@loader_path/../Frameworks",
+ "@executable_path/Frameworks",
+ );
+ LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ OTHER_LDFLAGS = "";
+ OTHER_SWIFT_FLAGS = "-DTEST";
+ PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SDKROOT = iphoneos;
+ SUPPORTED_PLATFORMS = macosx;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_OBJC_BRIDGING_HEADER = "";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ };
+ name = Debug;
+ };
+ 08CA24022BE50022002AC47A /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_IDENTITY = "";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+ CODE_SIGN_STYLE = Manual;
+ COMBINE_HIDPI_IMAGES = YES;
+ DEVELOPMENT_TEAM = XC939GDC9P;
+ EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = YES;
+ FRAMEWORK_SEARCH_PATHS = "";
+ GCC_PREPROCESSOR_DEFINITIONS = "";
+ INFOPLIST_FILE = "TealiumTests-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 16.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@loader_path/Frameworks",
+ "@loader_path/../Frameworks",
+ "@executable_path/Frameworks",
+ );
+ LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ OTHER_LDFLAGS = "";
+ OTHER_SWIFT_FLAGS = "-DTEST";
+ PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SDKROOT = iphoneos;
+ SUPPORTED_PLATFORMS = macosx;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_OBJC_BRIDGING_HEADER = "";
+ SWIFT_VERSION = 5.0;
+ };
+ name = Release;
+ };
+ 1516A2E626EF7F26003DF8F2 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
@@ -7932,6 +8811,7 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -7962,6 +8842,7 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -7988,6 +8869,7 @@
DEVELOPMENT_TEAM = XC939GDC9P;
GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MARKETING_VERSION = 1.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
@@ -8018,6 +8900,7 @@
DEVELOPMENT_TEAM = XC939GDC9P;
GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MARKETING_VERSION = 1.0;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "com.tealium.TealiumInAppPurchaseTests-tvOS";
@@ -8056,7 +8939,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -8090,7 +8973,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -8127,6 +9010,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -8161,6 +9045,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -8206,6 +9091,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MARKETING_VERSION = 1.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
@@ -8251,6 +9137,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MARKETING_VERSION = 1.0;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.AutoTrackingIOSTest;
@@ -8285,6 +9172,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.AutoTrackingTvOSTest;
@@ -8319,6 +9207,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.AutoTrackingTvOSTest;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -8350,6 +9239,7 @@
);
INFOPLIST_FILE = "TealiumTests-info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 15.2;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MARKETING_VERSION = 1.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
@@ -8378,6 +9268,7 @@
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = "TealiumTests-info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 15.2;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MARKETING_VERSION = 1.0;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -8407,6 +9298,7 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -8437,6 +9329,7 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -8466,6 +9359,7 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -8495,6 +9389,7 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -8520,6 +9415,7 @@
CODE_SIGN_ENTITLEMENTS = AutoTrackingMacOSTest/AutoTrackingMacOSTest.entitlements;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
+ DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_ASSET_PATHS = "\"AutoTrackingMacOSTest/Preview Content\"";
ENABLE_PREVIEWS = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -8553,6 +9449,7 @@
CODE_SIGN_ENTITLEMENTS = AutoTrackingMacOSTest/AutoTrackingMacOSTest.entitlements;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
+ DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_ASSET_PATHS = "\"AutoTrackingMacOSTest/Preview Content\"";
ENABLE_PREVIEWS = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -8581,6 +9478,7 @@
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
+ DEAD_CODE_STRIPPING = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = "TealiumTests-info.plist";
LD_RUNPATH_SEARCH_PATHS = (
@@ -8611,6 +9509,7 @@
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
+ DEAD_CODE_STRIPPING = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = "TealiumTests-info.plist";
LD_RUNPATH_SEARCH_PATHS = (
@@ -8654,6 +9553,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -8690,6 +9590,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -8713,8 +9614,7 @@
BUILD_SCRIPT = NO;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_SUSPICIOUS_MOVES = YES;
- CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+ CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
@@ -8723,6 +9623,7 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
EXCLUDED_ARCHS = "";
FRAMEWORK_SEARCH_PATHS = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO;
@@ -8735,7 +9636,8 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11";
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = tealium.ios.inapppurchase;
PRODUCT_MODULE_NAME = TealiumInAppPurchase;
@@ -8766,8 +9668,7 @@
BUILD_SCRIPT = NO;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_SUSPICIOUS_MOVES = YES;
- CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+ CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
@@ -8775,6 +9676,7 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
EXCLUDED_ARCHS = "";
FRAMEWORK_SEARCH_PATHS = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO;
@@ -8787,7 +9689,8 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11";
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = tealium.ios.inapppurchase;
PRODUCT_MODULE_NAME = TealiumInAppPurchase;
@@ -8833,6 +9736,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -8840,6 +9744,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "-";
COPY_PHASE_STRIP = NO;
+ DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
@@ -8859,7 +9764,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LIBRARY_SEARCH_PATHS = "";
MACOSX_DEPLOYMENT_TARGET = 10.11;
MTL_ENABLE_DEBUG_INFO = YES;
@@ -8896,6 +9801,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -8903,6 +9809,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "-";
COPY_PHASE_STRIP = NO;
+ DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = YES;
ENABLE_NS_ASSERTIONS = NO;
@@ -8916,7 +9823,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LIBRARY_SEARCH_PATHS = "";
MACOSX_DEPLOYMENT_TARGET = 10.11;
MTL_ENABLE_DEBUG_INFO = NO;
@@ -8952,6 +9859,7 @@
"@loader_path/../Frameworks",
"@executable_path/Frameworks",
);
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -8983,6 +9891,7 @@
"@loader_path/../Frameworks",
"@executable_path/Frameworks",
);
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -9023,6 +9932,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -9061,6 +9971,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -9098,6 +10009,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.iOSTealiumMediaTest;
@@ -9132,6 +10044,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.iOSTealiumMediaTest;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -9169,6 +10082,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MARKETING_VERSION = 1.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
@@ -9210,6 +10124,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MARKETING_VERSION = 1.0;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.iOSTealiumTestApp;
@@ -9244,6 +10159,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.tvOSTealiumTest;
@@ -9278,6 +10194,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.tvOSTealiumTest;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -9304,6 +10221,7 @@
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
+ DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = XC939GDC9P;
ENABLE_HARDENED_RUNTIME = YES;
@@ -9340,6 +10258,7 @@
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
+ DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = XC939GDC9P;
ENABLE_HARDENED_RUNTIME = YES;
@@ -9384,6 +10303,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -9417,6 +10337,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -9440,8 +10361,7 @@
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+ CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
@@ -9450,6 +10370,7 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = "TealiumMedia-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
@@ -9459,7 +10380,8 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++14";
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.media;
@@ -9492,8 +10414,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = iOSTealiumTest/iOSTealiumTest.entitlements;
- CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+ CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
@@ -9501,6 +10422,7 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = "TealiumMedia-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
@@ -9510,7 +10432,8 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++14";
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.media;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
@@ -9557,6 +10480,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = "com.tealium.tealium-swift-tests";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -9592,6 +10516,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = "com.tealium.tealium-swift-tests";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -9627,6 +10552,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -9667,6 +10593,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -9705,7 +10632,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = "com.tealium.tealium-swift-tests";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -9746,7 +10673,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = "com.tealium.tealium-swift-tests";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -9785,6 +10712,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -9821,6 +10749,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -9846,8 +10775,7 @@
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+ CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
@@ -9856,6 +10784,7 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
EXCLUDED_ARCHS = "";
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = "TealiumLocation-Info.plist";
@@ -9866,7 +10795,8 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++14";
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.location;
@@ -9898,8 +10828,7 @@
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+ CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
@@ -9907,6 +10836,7 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
EXCLUDED_ARCHS = "";
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = "TealiumLocation-Info.plist";
@@ -9917,7 +10847,8 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++14";
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.location;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
@@ -9946,9 +10877,7 @@
BUILD_SCRIPT = NO;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_SUSPICIOUS_MOVES = YES;
- CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+ CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
@@ -9957,6 +10886,7 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
EXCLUDED_ARCHS = "";
FRAMEWORK_SEARCH_PATHS = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO;
@@ -9969,7 +10899,8 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11";
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = tealium.ios.collect;
PRODUCT_MODULE_NAME = TealiumCollect;
@@ -9998,9 +10929,7 @@
BUILD_SCRIPT = NO;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_SUSPICIOUS_MOVES = YES;
- CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+ CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
@@ -10008,6 +10937,7 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
EXCLUDED_ARCHS = "";
FRAMEWORK_SEARCH_PATHS = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO;
@@ -10020,7 +10950,8 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11";
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = tealium.ios.collect;
PRODUCT_MODULE_NAME = TealiumCollect;
@@ -10051,8 +10982,7 @@
CLANG_ENABLE_MODULES = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_SUSPICIOUS_MOVES = YES;
- CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+ CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
@@ -10061,6 +10991,8 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
EXCLUDED_ARCHS = "";
FRAMEWORK_SEARCH_PATHS = "";
INFOPLIST_FILE = "TealiumCore-Info.plist";
@@ -10071,7 +11003,8 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11";
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = tealium.ios.core;
PRODUCT_MODULE_NAME = "$(PRODUCT_NAME)";
@@ -10102,8 +11035,7 @@
CLANG_ENABLE_MODULES = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_SUSPICIOUS_MOVES = YES;
- CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+ CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
@@ -10111,6 +11043,8 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
EXCLUDED_ARCHS = "";
FRAMEWORK_SEARCH_PATHS = "";
INFOPLIST_FILE = "TealiumCore-Info.plist";
@@ -10121,7 +11055,8 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11";
ONLY_ACTIVE_ARCH = NO;
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = tealium.ios.core;
@@ -10152,9 +11087,7 @@
BUILD_SCRIPT = NO;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_SUSPICIOUS_MOVES = YES;
- CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+ CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
@@ -10163,6 +11096,7 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
EXCLUDED_ARCHS = "";
FRAMEWORK_SEARCH_PATHS = "";
INFOPLIST_FILE = "TealiumTagManagement-Info.plist";
@@ -10173,7 +11107,8 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11";
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = tealium.ios.tagmanagement;
PRODUCT_MODULE_NAME = "${PRODUCT_NAME}";
@@ -10186,7 +11121,7 @@
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "tagmanagement DEBUG";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
- TVOS_DEPLOYMENT_TARGET = 11.0;
+ TVOS_DEPLOYMENT_TARGET = 12.0;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
WATCHOS_DEPLOYMENT_TARGET = 4.0;
@@ -10202,9 +11137,7 @@
BUILD_SCRIPT = NO;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_SUSPICIOUS_MOVES = YES;
- CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+ CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
@@ -10212,6 +11145,7 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
EXCLUDED_ARCHS = "";
FRAMEWORK_SEARCH_PATHS = "";
INFOPLIST_FILE = "TealiumTagManagement-Info.plist";
@@ -10222,7 +11156,8 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11";
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = tealium.ios.tagmanagement;
PRODUCT_MODULE_NAME = "${PRODUCT_NAME}";
@@ -10235,7 +11170,7 @@
SWIFT_ACTIVE_COMPILATION_CONDITIONS = tagmanagement;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
- TVOS_DEPLOYMENT_TARGET = 11.0;
+ TVOS_DEPLOYMENT_TARGET = 12.0;
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
@@ -10268,6 +11203,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -10303,6 +11239,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -10325,8 +11262,7 @@
BUILD_SCRIPT = NO;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_SUSPICIOUS_MOVES = YES;
- CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+ CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
@@ -10335,6 +11271,7 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
EXCLUDED_ARCHS = "";
FRAMEWORK_SEARCH_PATHS = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO;
@@ -10347,7 +11284,8 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11";
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = tealium.ios.attribution;
PRODUCT_MODULE_NAME = TealiumAttribution;
@@ -10376,8 +11314,7 @@
BUILD_SCRIPT = NO;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_SUSPICIOUS_MOVES = YES;
- CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+ CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
@@ -10385,6 +11322,7 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
EXCLUDED_ARCHS = "";
FRAMEWORK_SEARCH_PATHS = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO;
@@ -10397,7 +11335,8 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11";
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = tealium.ios.attribution;
PRODUCT_MODULE_NAME = TealiumAttribution;
@@ -10428,9 +11367,7 @@
CLANG_ENABLE_MODULES = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_SUSPICIOUS_MOVES = YES;
- CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+ CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
@@ -10439,6 +11376,7 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
EXCLUDED_ARCHS = "";
FRAMEWORK_SEARCH_PATHS = "";
INFOPLIST_FILE = "TealiumVisitorService-Info.plist";
@@ -10449,7 +11387,8 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11";
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
OTHER_LDFLAGS = "";
@@ -10482,9 +11421,7 @@
CLANG_ENABLE_MODULES = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_SUSPICIOUS_MOVES = YES;
- CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+ CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
@@ -10492,6 +11429,7 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
EXCLUDED_ARCHS = "";
FRAMEWORK_SEARCH_PATHS = "";
INFOPLIST_FILE = "TealiumVisitorService-Info.plist";
@@ -10502,7 +11440,8 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11";
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = tealium.ios.visitorservice;
PRODUCT_MODULE_NAME = "$(PRODUCT_NAME)";
@@ -10549,6 +11488,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -10584,6 +11524,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -10605,9 +11546,7 @@
BUILD_SCRIPT = NO;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_SUSPICIOUS_MOVES = YES;
- CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+ CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
@@ -10616,6 +11555,7 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
EXCLUDED_ARCHS = "";
FRAMEWORK_SEARCH_PATHS = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO;
@@ -10628,7 +11568,8 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11";
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = tealium.ios.lifecycle;
PRODUCT_MODULE_NAME = TealiumLifecycle;
@@ -10658,9 +11599,7 @@
BUILD_SCRIPT = NO;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_SUSPICIOUS_MOVES = YES;
- CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+ CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
@@ -10668,6 +11607,7 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
EXCLUDED_ARCHS = "";
FRAMEWORK_SEARCH_PATHS = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO;
@@ -10680,7 +11620,8 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11";
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = tealium.ios.lifecycle;
PRODUCT_MODULE_NAME = TealiumLifecycle;
@@ -10728,6 +11669,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -10737,7 +11679,7 @@
SWIFT_OBJC_BRIDGING_HEADER = "";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
- TVOS_DEPLOYMENT_TARGET = 9.0;
+ TVOS_DEPLOYMENT_TARGET = 12.0;
WATCHOS_DEPLOYMENT_TARGET = 3.0;
};
name = Debug;
@@ -10764,6 +11706,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -10772,7 +11715,7 @@
SDKROOT = iphoneos;
SWIFT_OBJC_BRIDGING_HEADER = "";
SWIFT_VERSION = 5.0;
- TVOS_DEPLOYMENT_TARGET = 9.0;
+ TVOS_DEPLOYMENT_TARGET = 12.0;
WATCHOS_DEPLOYMENT_TARGET = 3.0;
};
name = Release;
@@ -10802,6 +11745,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -10835,6 +11779,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -10871,6 +11816,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -10905,6 +11851,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -10942,12 +11889,16 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = iphoneos;
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+ SUPPORTS_MACCATALYST = YES;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = YES;
SWIFT_OBJC_BRIDGING_HEADER = "";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
@@ -10976,12 +11927,16 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = iphoneos;
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+ SUPPORTS_MACCATALYST = YES;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = YES;
SWIFT_OBJC_BRIDGING_HEADER = "";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
@@ -11013,6 +11968,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -11047,6 +12003,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -11084,6 +12041,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -11119,6 +12077,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -11156,6 +12115,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -11190,6 +12150,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -11227,7 +12188,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "-fprofile-instr-generate";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -11262,7 +12223,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "-fprofile-instr-generate";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -11299,6 +12260,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -11333,6 +12295,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -11370,7 +12333,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -11405,7 +12368,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -11443,6 +12406,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -11477,6 +12441,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -11515,7 +12480,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -11551,7 +12516,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -11575,9 +12540,7 @@
CLANG_ENABLE_MODULES = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_SUSPICIOUS_MOVES = YES;
- CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+ CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
@@ -11586,6 +12549,7 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
EXCLUDED_ARCHS = "$(inherited) $(EXCLUDED_ARCHS__IS_MACCATALYST_$(IS_MACCATALYST)__NATIVE_ARCH_64_BIT_$(NATIVE_ARCH_64_BIT))";
EXCLUDED_ARCHS__IS_MACCATALYST_YES__NATIVE_ARCH_64_BIT_x86_64 = "arm64 arm64e armv7 armv7s armv6 armv8";
FRAMEWORK_SEARCH_PATHS = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
@@ -11599,7 +12563,8 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11";
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = tealium.ios.remotecommands;
PRODUCT_MODULE_NAME = TealiumRemoteCommands;
@@ -11614,7 +12579,7 @@
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.3.3;
TARGETED_DEVICE_FAMILY = "1,2";
- TVOS_DEPLOYMENT_TARGET = 11.0;
+ TVOS_DEPLOYMENT_TARGET = 12.0;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
WATCHOS_DEPLOYMENT_TARGET = 4.0;
@@ -11631,9 +12596,7 @@
CLANG_ENABLE_MODULES = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_SUSPICIOUS_MOVES = YES;
- CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+ CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
@@ -11641,6 +12604,7 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
EXCLUDED_ARCHS = "$(inherited) $(EXCLUDED_ARCHS__IS_MACCATALYST_$(IS_MACCATALYST)__NATIVE_ARCH_64_BIT_$(NATIVE_ARCH_64_BIT))";
EXCLUDED_ARCHS__IS_MACCATALYST_YES__NATIVE_ARCH_64_BIT_x86_64 = "arm64 arm64e armv7 armv7s armv6 armv8";
FRAMEWORK_SEARCH_PATHS = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
@@ -11654,7 +12618,8 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11";
ONLY_ACTIVE_ARCH = NO;
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = tealium.ios.remotecommands;
@@ -11669,7 +12634,7 @@
SWIFT_ACTIVE_COMPILATION_CONDITIONS = remotecommands;
SWIFT_VERSION = 5.3.3;
TARGETED_DEVICE_FAMILY = "1,2";
- TVOS_DEPLOYMENT_TARGET = 11.0;
+ TVOS_DEPLOYMENT_TARGET = 12.0;
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
@@ -11686,9 +12651,7 @@
BUILD_SCRIPT = NO;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_SUSPICIOUS_MOVES = YES;
- CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+ CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
@@ -11697,6 +12660,7 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
EXCLUDED_ARCHS = "$(inherited) $(EXCLUDED_ARCHS__IS_MACCATALYST_$(IS_MACCATALYST)__NATIVE_ARCH_64_BIT_$(NATIVE_ARCH_64_BIT))";
EXCLUDED_ARCHS__IS_MACCATALYST_YES__NATIVE_ARCH_64_BIT_x86_64 = "arm64 arm64e armv7 armv7s armv6 armv8";
FRAMEWORK_SEARCH_PATHS = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
@@ -11710,7 +12674,8 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11";
ONLY_ACTIVE_ARCH = YES;
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = tealium.ios.autotracking;
@@ -11741,9 +12706,7 @@
BUILD_SCRIPT = NO;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_SUSPICIOUS_MOVES = YES;
- CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+ CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
@@ -11751,6 +12714,7 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
EXCLUDED_ARCHS = "$(inherited) $(EXCLUDED_ARCHS__IS_MACCATALYST_$(IS_MACCATALYST)__NATIVE_ARCH_64_BIT_$(NATIVE_ARCH_64_BIT))";
EXCLUDED_ARCHS__IS_MACCATALYST_YES__NATIVE_ARCH_64_BIT_x86_64 = "arm64 arm64e armv7 armv7s armv6 armv8";
FRAMEWORK_SEARCH_PATHS = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
@@ -11764,7 +12728,8 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11";
ONLY_ACTIVE_ARCH = NO;
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = tealium.ios.autotracking;
@@ -11889,6 +12854,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -11926,6 +12892,7 @@
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
+ MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
OTHER_LDFLAGS = "";
OTHER_SWIFT_FLAGS = "-DTEST";
PRODUCT_BUNDLE_IDENTIFIER = com.tealium.TealiumTests;
@@ -11944,6 +12911,42 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
+ 08191ECA2BCEC1AB003EEE36 /* Build configuration list for PBXNativeTarget "TealiumMomentsAPI" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 08191ECB2BCEC1AB003EEE36 /* Debug */,
+ 08191ECC2BCEC1AB003EEE36 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+ 08191EF62BD2C4F4003EEE36 /* Build configuration list for PBXNativeTarget "TealiumMomentsAPITests-iOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 08191EF72BD2C4F4003EEE36 /* Debug */,
+ 08191EF82BD2C4F4003EEE36 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+ 08CA23EC2BE50019002AC47A /* Build configuration list for PBXNativeTarget "TealiumMomentsAPITests-tvOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 08CA23ED2BE50019002AC47A /* Debug */,
+ 08CA23EE2BE50019002AC47A /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+ 08CA24002BE50022002AC47A /* Build configuration list for PBXNativeTarget "TealiumMomentsAPITests-macOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 08CA24012BE50022002AC47A /* Debug */,
+ 08CA24022BE50022002AC47A /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
1516A2E526EF7F26003DF8F2 /* Build configuration list for PBXNativeTarget "TealiumAutotrackingUITests-iOS" */ = {
isa = XCConfigurationList;
buildConfigurations = (
diff --git a/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/AutoTrackingIOSTest.xcscheme b/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/AutoTrackingIOSTest.xcscheme
index 4b44f875..23bcfaeb 100644
--- a/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/AutoTrackingIOSTest.xcscheme
+++ b/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/AutoTrackingIOSTest.xcscheme
@@ -1,6 +1,6 @@
+
+
+
+
diff --git a/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumAttribution.xcscheme b/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumAttribution.xcscheme
index 17e35e22..01ba11b5 100644
--- a/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumAttribution.xcscheme
+++ b/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumAttribution.xcscheme
@@ -1,6 +1,6 @@
-
-
-
-
diff --git a/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumInAppPurchaseTests-tvOS.xcscheme b/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumInAppPurchaseTests-tvOS.xcscheme
index b60f72f6..8fe094c7 100644
--- a/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumInAppPurchaseTests-tvOS.xcscheme
+++ b/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumInAppPurchaseTests-tvOS.xcscheme
@@ -1,6 +1,6 @@
+
+
+
+
diff --git a/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumLifecycle.xcscheme b/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumLifecycle.xcscheme
index 8d2757d2..6c94dd1e 100644
--- a/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumLifecycle.xcscheme
+++ b/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumLifecycle.xcscheme
@@ -1,6 +1,6 @@
-
-
-
-
diff --git a/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumMedia.xcscheme b/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumMedia.xcscheme
index ead2cae5..129104b7 100644
--- a/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumMedia.xcscheme
+++ b/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumMedia.xcscheme
@@ -1,6 +1,6 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumMomentsAPITests-iOS.xcscheme b/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumMomentsAPITests-iOS.xcscheme
new file mode 100644
index 00000000..0f61cf9a
--- /dev/null
+++ b/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumMomentsAPITests-iOS.xcscheme
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumMomentsAPITests-macOS.xcscheme b/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumMomentsAPITests-macOS.xcscheme
new file mode 100644
index 00000000..cc1c1875
--- /dev/null
+++ b/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumMomentsAPITests-macOS.xcscheme
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumMomentsAPITests-tvOS.xcscheme b/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumMomentsAPITests-tvOS.xcscheme
new file mode 100644
index 00000000..ec075eff
--- /dev/null
+++ b/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumMomentsAPITests-tvOS.xcscheme
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumRemoteCommands.xcscheme b/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumRemoteCommands.xcscheme
index f814d0bd..d68dfa53 100644
--- a/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumRemoteCommands.xcscheme
+++ b/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumRemoteCommands.xcscheme
@@ -1,6 +1,6 @@
-
-
-
-
diff --git a/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumTagManagementTests-iOS.xcscheme b/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumTagManagementTests-iOS.xcscheme
index 24016638..3f06ebd6 100644
--- a/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumTagManagementTests-iOS.xcscheme
+++ b/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumTagManagementTests-iOS.xcscheme
@@ -1,6 +1,6 @@
+
+
+
+
diff --git a/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumTraceTests-iOS.xcscheme b/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumTraceTests-iOS.xcscheme
index bcefd6fe..002f46ed 100644
--- a/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumTraceTests-iOS.xcscheme
+++ b/builder/tealium-swift.xcodeproj/xcshareddata/xcschemes/TealiumTraceTests-iOS.xcscheme
@@ -1,6 +1,6 @@
(_ block: () -> T) -> T {
+ return TealiumQueues.backgroundSerialQueue.sync {
+ return block()
+ }
+ }
+
+ override func setUpWithError() throws {
+ super.setUp()
+ }
+
+ override func tearDownWithError() throws {
+ super.tearDown()
+ }
+
+ func testModuleInitializationWithMissingRegion() {
+ let contextWithoutRegion = TealiumContext(config: testTealiumConfig, dataLayer: mockDataLayer)
+ let _ = TealiumMomentsAPIModule(context: contextWithoutRegion, delegate: nil, diskStorage: nil) { result in
+ switch result.0 {
+ case .failure(let error):
+ XCTAssertEqual(error as! MomentsError, MomentsError.missingRegion, "Expected MomentsError for missing region")
+ case .success:
+ XCTFail("Initialization should fail without region")
+ }
+ }
+ }
+
+ func testSuccessfulModuleInitialization() {
+ testTealiumConfig.momentsAPIRegion = .germany
+ let context = TealiumContext(config: testTealiumConfig, dataLayer: mockDataLayer)
+ let _ = TealiumMomentsAPIModule(context: context, delegate: nil, diskStorage: nil) { result in
+ switch result.0 {
+ case .failure:
+ XCTFail("Exepected success")
+ case .success:
+ XCTAssertTrue(true, "Initialization succeeded")
+ }
+ }
+ }
+
+ func testVisitorIDIsUpdated() {
+ let tealiumInitialized = expectation(description: "Tealium is initialized")
+ testTealiumConfig.momentsAPIRegion = .germany
+ testTealiumConfig.collectors = [Collectors.AppData]
+ tealium = Tealium(config: testTealiumConfig) { _ in
+ tealiumInitialized.fulfill()
+ }
+ waitOnTealiumSerialQueue {
+ wait(for: [tealiumInitialized], timeout: 1.0)
+ }
+
+ let idProvider = tealium!.appDataModule?.visitorIdProvider
+ let initialVisitorId = "123456"
+ idProvider!.publishVisitorId(initialVisitorId, andUpdateStorage: false)
+ let context = tealium.context!
+ let moduleInitializedExpectation = expectation(description: "module initialized")
+ let module = TealiumMomentsAPIModule(context: context, delegate: nil, diskStorage: nil) { _ in
+ moduleInitializedExpectation.fulfill()
+ }
+
+ waitOnTealiumSerialQueue {
+ wait(for: [moduleInitializedExpectation], timeout: 1.0)
+ }
+ XCTAssertEqual(module.momentsAPI?.visitorId!, initialVisitorId)
+ let newVisitorId = "newvisitor"
+ idProvider!.publishVisitorId(newVisitorId, andUpdateStorage: false)
+ let visitorIdExpectation = expectation(description: "visitorid")
+
+ TealiumQueues.backgroundSerialQueue.async {
+ XCTAssertEqual(newVisitorId, module.momentsAPI!.visitorId!)
+ visitorIdExpectation.fulfill()
+ }
+ waitOnTealiumSerialQueue {
+ wait(for: [visitorIdExpectation], timeout: 1.0)
+ }
+ }
+
+
+}
diff --git a/support/tests/test_tealium_moments_api/MomentsAPITests.swift b/support/tests/test_tealium_moments_api/MomentsAPITests.swift
new file mode 100644
index 00000000..6906b797
--- /dev/null
+++ b/support/tests/test_tealium_moments_api/MomentsAPITests.swift
@@ -0,0 +1,215 @@
+//
+// MomentsAPITests.swift
+// tealium-swift
+//
+// Copyright © 2024 Tealium, Inc. All rights reserved.
+//
+
+import Foundation
+@testable import TealiumCore
+@testable import TealiumMomentsAPI
+import XCTest
+
+class MomentsAPITests: XCTestCase {
+
+ static let customReferrer = "https://tealium.com/"
+ static let account = "testAccount"
+ static let profile = "testProfile"
+ static let environment = "dev"
+ static let standardReferrer = "https://tags.tiqcdn.com/utag/\(account)/\(profile)/\(environment)/mobile.html"
+ let mockURLSession = MockURLSession()
+
+ func testFetchEngineResponseSuccess() {
+ let api = TealiumMomentsAPI(region: .us_east, account: MomentsAPITests.account, profile: MomentsAPITests.profile, environment: MomentsAPITests.environment, session: mockURLSession)
+
+ let jsonData = """
+ {"audiences":["VIP", "Women's Apparel", "Lifetime visit count"],
+ "badges":["13", "26", "52"],
+ "properties":{"54":"other","58":"other","60":"mobile application","5123":"set","5240":"Visitor: String Attribute","5688":"1970-01-01"},
+ "metrics":{"15":5,"21":5,"22":43,"25":2.7933666666666666},
+ "flags":{"27":true,"5152":true,"5242":false},
+ "dates":{"23":1718202502203,"24":1718357687966,"5244":1718360309656,"5690":0}}
+ """.data(using: .utf8)!
+
+ mockURLSession.result = .success(withData: jsonData, statusCode: 200)
+
+ let expectation = XCTestExpectation(description: "Fetch engine response succeeds")
+
+ api.visitorId = "12345"
+ api.fetchEngineResponse(engineID: "engine123") { result in
+ switch result {
+ case .success(let response):
+ XCTAssertEqual(response.audiences!.count, 3)
+ XCTAssertEqual(response.dates!.count, 4)
+ XCTAssertEqual(response.badges!.count, 3)
+ XCTAssertEqual(response.strings!.count, 6)
+ XCTAssertEqual(response.booleans!.count, 3)
+ XCTAssertEqual(response.numbers!.count, 4)
+ XCTAssertEqual(response.numbers!["25"]!, 2.7933666666666666)
+ XCTAssertEqual(response.booleans!["5242"]!, false)
+
+ expectation.fulfill()
+ case .failure:
+ XCTFail("Expected successful engine response, got failure")
+ }
+ }
+
+ wait(for: [expectation], timeout: 1.0)
+ }
+
+ func testFetchEngineResponsePartialData() {
+ let api = TealiumMomentsAPI(region: .us_east, account: MomentsAPITests.account, profile: MomentsAPITests.profile, environment: MomentsAPITests.environment, session: mockURLSession)
+
+ let jsonData = """
+ {"audiences":["VIP", "Women's Apparel", "Lifetime visit count"],
+ "badges":["13", "26", "52"],
+ "flags":{"27":true,"5152":true,"5242":false},
+ "properties": {"1234":null}}
+ """.data(using: .utf8)!
+
+ mockURLSession.result = .success(withData: jsonData, statusCode: 200)
+
+ let expectation = XCTestExpectation(description: "Fetch engine response succeeds")
+
+ api.visitorId = "12345"
+ api.fetchEngineResponse(engineID: "engine123") { result in
+ switch result {
+ case .success(let response):
+ XCTAssertEqual(response.audiences!.count, 3)
+ XCTAssertNil(response.dates)
+ XCTAssertEqual(response.badges!.count, 3)
+ XCTAssertNil(response.strings)
+ XCTAssertEqual(response.booleans!.count, 3)
+ XCTAssertNil(response.numbers)
+ XCTAssertEqual(response.booleans!["5242"]!, false)
+
+ expectation.fulfill()
+ case .failure:
+ XCTFail("Expected successful engine response, got failure")
+ }
+ }
+
+ wait(for: [expectation], timeout: 1.0)
+ }
+
+
+ func testFetchEngineResponseForbidden() {
+ let api = TealiumMomentsAPI(region: .us_east, account: MomentsAPITests.account, profile: MomentsAPITests.profile, environment: MomentsAPITests.environment, session: mockURLSession)
+
+ mockURLSession.result = .success(withData: nil, statusCode: 403)
+
+ let expectation = XCTestExpectation(description: "Fetch engine response fails")
+
+ api.visitorId = "12345"
+ api.fetchEngineResponse(engineID: "engine123") { result in
+ switch result {
+ case .success:
+ XCTFail("Expected error, got success.")
+ case .failure(let error):
+ XCTAssertEqual((error as! MomentsAPIHTTPError), MomentsAPIHTTPError.forbidden, "Unexpected error type returned.")
+ expectation.fulfill()
+ }
+ }
+
+ wait(for: [expectation], timeout: 1.0)
+ }
+
+ func testFetchEngineResponseBadRequest() {
+ let api = TealiumMomentsAPI(region: .us_east, account: MomentsAPITests.account, profile: MomentsAPITests.profile, environment: MomentsAPITests.environment, session: mockURLSession)
+
+ mockURLSession.result = .success(withData: nil, statusCode: 400)
+
+ let expectation = XCTestExpectation(description: "Fetch engine response fails")
+
+ api.visitorId = "12345"
+ api.fetchEngineResponse(engineID: "engine123") { result in
+ switch result {
+ case .success:
+ XCTFail("Expected error, got success.")
+ case .failure(let error):
+ XCTAssertEqual((error as! MomentsAPIHTTPError), MomentsAPIHTTPError.badRequest, "Unexpected error type returned.")
+ expectation.fulfill()
+ }
+ }
+
+ wait(for: [expectation], timeout: 1.0)
+ }
+
+ func testFetchEngineResponseCustomReferrer() {
+ let api = TealiumMomentsAPI(region: .us_east, account: MomentsAPITests.account, profile: MomentsAPITests.profile, environment: MomentsAPITests.environment, referrer: MomentsAPITests.customReferrer, session: mockURLSession)
+
+ mockURLSession.result = .success(withData: nil, statusCode: 200)
+
+ let requestSent = expectation(description: "Request sent and custom referrer is correctly set")
+ mockURLSession.onRequestSent.subscribeOnce { request in
+ XCTAssertEqual(request.value(forHTTPHeaderField: "Referer"), MomentsAPITests.customReferrer)
+ requestSent.fulfill()
+ }
+
+ let expectation = XCTestExpectation(description: "Fetch engine response completes")
+
+ api.visitorId = "12345"
+ api.fetchEngineResponse(engineID: "engine123") { result in
+ expectation.fulfill()
+ }
+
+ wait(for: [expectation, requestSent], timeout: 1.0)
+ }
+
+ func testFetchEngineResponseNotFound() {
+ let api = TealiumMomentsAPI(region: .us_east, account: MomentsAPITests.account, profile: MomentsAPITests.profile, environment: MomentsAPITests.environment, session: mockURLSession)
+
+ mockURLSession.result = .success(withData: nil, statusCode: 404)
+
+ let expectation = XCTestExpectation(description: "Fetch engine response fails")
+
+ api.visitorId = "12345"
+ api.fetchEngineResponse(engineID: "engine123") { result in
+ switch result {
+ case .success:
+ XCTFail("Expected error, got success.")
+ case .failure(let error):
+ XCTAssertEqual((error as! MomentsAPIHTTPError), MomentsAPIHTTPError.notFound, "Unexpected error type returned.")
+ expectation.fulfill()
+ }
+ }
+
+ wait(for: [expectation], timeout: 1.0)
+ }
+
+ func testFetchEngineResponseFailureMissingVisitorID() {
+ let api = TealiumMomentsAPI(region: .us_east, account: MomentsAPITests.account, profile: MomentsAPITests.profile, environment: MomentsAPITests.environment, session: mockURLSession)
+
+ let expectation = XCTestExpectation(description: "Fetch engine response fails due to missing visitor ID")
+
+ api.fetchEngineResponse(engineID: "engine123") { result in
+ if case .failure(let error as MomentsError) = result, case .missingVisitorID = error {
+ expectation.fulfill()
+ } else {
+ XCTFail("Expected failure with missing visitor ID, got other error")
+ }
+ }
+
+ wait(for: [expectation], timeout: 1.0)
+ }
+
+ func testFetchEngineResponseNetworkError() {
+ let api = TealiumMomentsAPI(region: .us_east, account: MomentsAPITests.account, profile: MomentsAPITests.profile, environment: MomentsAPITests.environment, session: mockURLSession)
+
+ mockURLSession.result = .failure(URLError(URLError.Code.notConnectedToInternet))
+
+ let expectation = XCTestExpectation(description: "Fetch engine response fails due to network error")
+
+ api.visitorId = "12345"
+ api.fetchEngineResponse(engineID: "engine123") { result in
+ if case .failure(let error as URLError) = result, error.code == .notConnectedToInternet {
+ expectation.fulfill()
+ } else {
+ XCTFail("Expected network error, got other error")
+ }
+ }
+
+ wait(for: [expectation], timeout: 1.0)
+ }
+}
+
diff --git a/tealium-swift.podspec b/tealium-swift.podspec
index 8f73716f..08ca9938 100644
--- a/tealium-swift.podspec
+++ b/tealium-swift.podspec
@@ -150,6 +150,11 @@ Pod::Spec.new do |s|
media.dependency "tealium-swift/Core"
end
+ s.subspec "MomentsAPI" do |momentsapi|
+ momentsapi.source_files = "tealium/collectors/momentsapi/*"
+ momentsapi.dependency "tealium-swift/Core"
+ end
+
s.subspec "RemoteCommands" do |remotecommands|
remotecommands.source_files = "tealium/dispatchers/remotecommands/*"
remotecommands.dependency "tealium-swift/Core"
diff --git a/tealium/collectors/momentsapi/MomentsAPI.swift b/tealium/collectors/momentsapi/MomentsAPI.swift
new file mode 100644
index 00000000..93dd1731
--- /dev/null
+++ b/tealium/collectors/momentsapi/MomentsAPI.swift
@@ -0,0 +1,97 @@
+//
+// MomentsAPI.swift
+// tealium-swift
+//
+// Copyright © 2024 Tealium, Inc. All rights reserved.
+//
+
+import Foundation
+#if momentsapi
+import TealiumCore
+#endif
+
+protocol MomentsAPI: AnyObject {
+ func fetchEngineResponse(engineID: String, completion: @escaping (Result) -> Void)
+ var visitorId: String? { get set }
+}
+
+class TealiumMomentsAPI: MomentsAPI {
+ private let session: URLSessionProtocol
+ private let region: MomentsAPIRegion
+ private let account: String
+ private let profile: String
+ private let referrer: String
+ var visitorId: String?
+
+ init(region: MomentsAPIRegion,
+ account: String,
+ profile: String,
+ environment: String,
+ referrer: String? = nil,
+ session: URLSessionProtocol = URLSession(configuration: .ephemeral)) {
+ self.region = region
+ self.account = account
+ self.profile = profile
+ self.referrer = referrer ?? "https://tags.tiqcdn.com/utag/\(account)/\(profile)/\(environment)/mobile.html"
+ self.session = session
+ }
+
+ func fetchEngineResponse(engineID: String, completion: @escaping (Result) -> Void) {
+ guard let visitorId = self.visitorId else {
+ completion(.failure(MomentsError.missingVisitorID))
+ return
+ }
+ performRequestForEngineResponse(engineID: engineID, visitorId: visitorId, completion: completion)
+ }
+}
+
+// MARK: - Private Methods
+private extension TealiumMomentsAPI {
+ func performRequestForEngineResponse(engineID: String, visitorId: String, completion: @escaping (Result) -> Void) {
+ guard let url = constructURL(forEngineID: engineID, visitorID: visitorId) else {
+ completion(.failure(URLError(.badURL)))
+ return
+ }
+
+ var request = URLRequest(url: url)
+ request.httpMethod = "GET"
+ request.setValue(referrer, forHTTPHeaderField: "Referer")
+
+ session.tealiumDataTask(with: request) { data, response, error in
+ self.handleResponse(data: data, response: response, error: error, completion: completion)
+ }.resume()
+ }
+
+ func constructURL(forEngineID engineID: String, visitorID: String) -> URL? {
+ var engineUrl: String {
+ """
+ https://personalization-api.\(region.rawValue).prod.tealiumapis.com/personalization/accounts/\(account)/profiles/\(profile)/engines/\(engineID)/visitors/\(visitorID)?ignoreTapid=true
+ """
+ }
+ return URL(string: engineUrl)
+ }
+
+ func handleResponse(data: Data?, response: URLResponse?, error: Error?, completion: @escaping (Result) -> Void) {
+ if let error = error {
+ completion(.failure(error))
+ return
+ }
+
+ if let httpResponse = response as? HTTPURLResponse, let customError = MomentsAPIHTTPError(rawValue: httpResponse.statusCode) {
+ completion(.failure(customError))
+ return
+ }
+
+ guard let data = data else {
+ completion(.failure(URLError(.cannotDecodeRawData)))
+ return
+ }
+
+ do {
+ let moments = try JSONDecoder().decode(EngineResponse.self, from: data)
+ completion(.success(moments))
+ } catch {
+ completion(.failure(error))
+ }
+ }
+}
diff --git a/tealium/collectors/momentsapi/MomentsAPIEngineResponse.swift b/tealium/collectors/momentsapi/MomentsAPIEngineResponse.swift
new file mode 100644
index 00000000..3e9b3d60
--- /dev/null
+++ b/tealium/collectors/momentsapi/MomentsAPIEngineResponse.swift
@@ -0,0 +1,82 @@
+//
+// MomentsAPIEngineResponse.swift
+// tealium-swift
+//
+// Copyright © 2024 Tealium, Inc. All rights reserved.
+//
+
+import Foundation
+
+public struct EngineResponse: Codable {
+ /// The complete list of audiences the visitor is currently assigned to. Could be the audience name, or just the ID, depending on the options specified in the UI.
+ public var audiences: [String]?
+ /// The complete list of badges assigned to the visitor. Could be the badge name, or just the ID, depending on the options specified in the UI.
+ public var badges: [String]?
+ /// All audiencestream `Boolean` attributes currently assigned to the visitor
+ public var booleans: [String: Bool]?
+ /// All audiencestream `Date` attributes currently assigned to the visitor, which are millisecond-precise Unix timestamps
+ public var dates: [String: Int64]?
+ /// All audiencestream `Number` attributes currently assigned to the visitor
+ public var numbers: [String: Double]?
+ /// All audiencestream `String` attributes currently assigned to the visitor
+ public var strings: [String: String]?
+
+ enum CodingKeys: String, CodingKey {
+ case audiences,
+ badges,
+ booleans = "flags",
+ dates,
+ numbers = "metrics",
+ strings = "properties"
+ }
+
+ public init(audiences: [String]? = nil,
+ badges: [String]? = nil,
+ booleans: [String: Bool]? = nil,
+ dates: [String: Int64]? = nil,
+ numbers: [String: Double]? = nil,
+ strings: [String: String]? = nil) {
+ self.audiences = audiences
+ self.badges = badges
+ self.booleans = booleans
+ self.dates = dates
+ self.numbers = numbers
+ self.strings = strings
+ }
+
+ public init(from decoder: Decoder) throws {
+ let container = try decoder.container(keyedBy: CodingKeys.self)
+ self.audiences = try container.decodeIfPresent([String].self, forKey: .audiences)
+ self.badges = try container.decodeIfPresent([String].self, forKey: .badges)
+ self.booleans = try decodeDictionarySkippingNullValues(container: container, key: .booleans)
+ self.dates = try decodeDictionarySkippingNullValues(container: container, key: .dates)
+ self.numbers = try decodeDictionarySkippingNullValues(container: container, key: .numbers)
+ self.strings = try decodeDictionarySkippingNullValues(container: container, key: .strings)
+ }
+
+ private func decodeDictionarySkippingNullValues(container: KeyedDecodingContainer, key: CodingKeys) throws -> [String: T]? {
+ guard let nestedContainer = try? container.nestedContainer(keyedBy: JSONCodingKeys.self, forKey: key) else {
+ return nil
+ }
+ var result = [String: T]()
+ for codingKey in nestedContainer.allKeys {
+ if let value = try nestedContainer.decodeIfPresent(T.self, forKey: codingKey) {
+ result[codingKey.stringValue] = value
+ }
+ }
+ return result.isEmpty ? nil : result
+ }
+}
+
+private struct JSONCodingKeys: CodingKey {
+ var stringValue: String
+ init?(stringValue: String) {
+ self.stringValue = stringValue
+ }
+
+ var intValue: Int?
+
+ init?(intValue: Int) {
+ return nil
+ }
+}
diff --git a/tealium/collectors/momentsapi/MomentsAPIError.swift b/tealium/collectors/momentsapi/MomentsAPIError.swift
new file mode 100644
index 00000000..cc3166a1
--- /dev/null
+++ b/tealium/collectors/momentsapi/MomentsAPIError.swift
@@ -0,0 +1,34 @@
+//
+// MomentsAPIError.swift
+// tealium-swift
+//
+// Copyright © 2024 Tealium, Inc. All rights reserved.
+//
+
+import Foundation
+
+enum MomentsError: Error, LocalizedError {
+ case missingRegion
+ case missingVisitorID
+ case moduleNotFound
+ public var errorDescription: String? {
+ switch self {
+ case .missingRegion:
+ return "Missing Region."
+ case .missingVisitorID:
+ return "Missing Visitor ID."
+ case .moduleNotFound:
+ return "The Moments API module wasn't found."
+ }
+ }
+ var recoverySuggestion: String? {
+ switch self {
+ case .missingRegion:
+ return "Set momentsAPIRegion property on TealiumConfig."
+ case .missingVisitorID:
+ return "Tealium Anonymous Visitor ID could not be determined. This is likely to be a temporary error, and should resolve itself."
+ case .moduleNotFound:
+ return "Pass Collectors.MomentsAPI in the TealiumConfig collectors object at initialization."
+ }
+ }
+}
diff --git a/tealium/collectors/momentsapi/MomentsAPIExtensions.swift b/tealium/collectors/momentsapi/MomentsAPIExtensions.swift
new file mode 100644
index 00000000..bd018b5b
--- /dev/null
+++ b/tealium/collectors/momentsapi/MomentsAPIExtensions.swift
@@ -0,0 +1,109 @@
+//
+// MomentsAPIExtensions.swift
+// tealium-swift
+//
+// Copyright © 2024 Tealium, Inc. All rights reserved.
+//
+
+import Foundation
+#if momentsapi
+import TealiumCore
+#endif
+
+extension TealiumConfigKey {
+ static let momentsAPIRegion = "moments_api_region"
+ static let momentsAPIReferrer = "moments_api_referrer"
+}
+
+public enum MomentsAPIRegion {
+ // swiftlint:disable identifier_name
+ case germany
+ case us_east
+ case sydney
+ case oregon
+ case tokyo
+ case hong_kong
+ case custom(String)
+
+ var rawValue: String {
+ switch self {
+ case .germany:
+ return "eu-central-1"
+ case .us_east:
+ return "us-east-1"
+ case .sydney:
+ return "ap-southeast-2"
+ case .oregon:
+ return "us-west-2"
+ case .tokyo:
+ return "ap-northeast-1"
+ case .hong_kong:
+ return "ap-east-1"
+ case .custom(let regionString):
+ return regionString
+ }
+ }
+ // swiftlint:enable identifier_name
+}
+
+public extension TealiumConfig {
+
+ /// Sets the region for calls to the Moments API endpoint
+ var momentsAPIRegion: MomentsAPIRegion? {
+ get {
+ options[TealiumConfigKey.momentsAPIRegion] as? MomentsAPIRegion
+ }
+
+ set {
+ options[TealiumConfigKey.momentsAPIRegion] = newValue
+ }
+ }
+
+ /// Sets the region for calls to the Moments API endpoint
+ var momentsAPIReferrer: String? {
+ get {
+ options[TealiumConfigKey.momentsAPIReferrer] as? String
+ }
+
+ set {
+ options[TealiumConfigKey.momentsAPIReferrer] = newValue
+ }
+ }
+}
+
+public extension Tealium {
+
+ class MomentsAPIWrapper {
+ private weak var tealium: Tealium?
+
+ private var module: TealiumMomentsAPIModule? {
+ (tealium?.zz_internal_modulesManager?.modules.first {
+ $0 is TealiumMomentsAPIModule
+ }) as? TealiumMomentsAPIModule
+ }
+
+ /// Fetches a response from a configured Moments API Engine
+ /// - Parameters:
+ /// - completion: `Result` Optional completion block to be called when a response has been received from the Moments API
+ /// - result: `Result` Result type to receive a valid Moments API Engine Response or an error
+ public func fetchEngineResponse(engineID: String, completion: @escaping (Result) -> Void) {
+ TealiumQueues.backgroundSerialQueue.async(qos: .userInitiated) {
+ guard let module = self.module else {
+ completion(.failure(MomentsError.moduleNotFound))
+ return
+ }
+ module.momentsAPI?.fetchEngineResponse(engineID: engineID, completion: completion)
+ }
+ }
+
+ init(tealium: Tealium) {
+ self.tealium = tealium
+ }
+ }
+
+ /// Provides API methods to interact with the Moments module
+ var momentsAPI: MomentsAPIWrapper? {
+ return MomentsAPIWrapper(tealium: self)
+ }
+
+}
diff --git a/tealium/collectors/momentsapi/MomentsAPIHTTPError.swift b/tealium/collectors/momentsapi/MomentsAPIHTTPError.swift
new file mode 100644
index 00000000..bec28646
--- /dev/null
+++ b/tealium/collectors/momentsapi/MomentsAPIHTTPError.swift
@@ -0,0 +1,77 @@
+import Foundation
+
+enum MomentsAPIHTTPError: RawRepresentable, Error, LocalizedError, Equatable {
+ typealias RawValue = Int
+
+ case badRequest
+ case forbidden
+ case notFound
+ case unsuccessful(_ statusCode: Int)
+
+ init?(rawValue: Int) {
+ switch rawValue {
+ case 200..<300:
+ return nil
+ case 400:
+ self = .badRequest
+ case 403:
+ self = .forbidden
+ case 404:
+ self = .notFound
+ default:
+ self = .unsuccessful(rawValue)
+ }
+ }
+
+ var rawValue: Int {
+ switch self {
+ case .badRequest:
+ return 400
+ case .forbidden:
+ return 403
+ case .notFound:
+ return 404
+ case .unsuccessful(let code):
+ return code
+ }
+ }
+
+ var errorDescription: String? {
+ switch self {
+ case .badRequest:
+ return "Bad request. Please check the request parameters."
+ case .forbidden:
+ return "The Moments API engine is not enabled. Please check your configuration."
+ case .notFound:
+ return "Not Found. The Tealium visitor ID does not have moments stored in the database."
+ case .unsuccessful(let statusCode):
+ return "An error occurred with status code \(statusCode)."
+ }
+ }
+
+ var recoverySuggestion: String? {
+ switch self {
+ case .badRequest:
+ return "Verify the request parameters and try again."
+ case .forbidden:
+ return "Ensure that the Moments API engine is properly configured and enabled."
+ case .notFound:
+ return "Check the Tealium visitor ID."
+ case .unsuccessful:
+ return "Please consult the documentation or contact support for further assistance."
+ }
+ }
+
+ static func == (lhs: MomentsAPIHTTPError, rhs: MomentsAPIHTTPError) -> Bool {
+ switch (lhs, rhs) {
+ case (.badRequest, .badRequest),
+ (.forbidden, .forbidden),
+ (.notFound, .notFound):
+ return true
+ case let (.unsuccessful(lhsCode), .unsuccessful(rhsCode)):
+ return lhsCode == rhsCode
+ default:
+ return false
+ }
+ }
+}
diff --git a/tealium/collectors/momentsapi/MomentsAPIModule.swift b/tealium/collectors/momentsapi/MomentsAPIModule.swift
new file mode 100644
index 00000000..e459a6c5
--- /dev/null
+++ b/tealium/collectors/momentsapi/MomentsAPIModule.swift
@@ -0,0 +1,55 @@
+//
+// MomentsAPIModule.swift
+// tealium-swift
+//
+// Copyright © 2024 Tealium, Inc. All rights reserved.
+//
+
+import Foundation
+#if momentsapi
+import TealiumCore
+#endif
+
+public class TealiumMomentsAPIModule: Collector {
+ public let id: String = ModuleNames.momentsapi
+ public var config: TealiumConfig
+ public var data: [String: Any]?
+ let momentsAPI: MomentsAPI?
+ private var bag = TealiumDisposeBag()
+
+ /// Initializes the module
+ ///
+ /// - Parameter context: `TealiumContext` instance
+ /// - Parameter delegate: `ModuleDelegate?` instance
+ /// - Parameter diskStorage: `TealiumDiskStorageProtocol?` instance
+ /// - Parameter completion: `ModuleCompletion` block to be called when init is finished
+ required public init(context: TealiumContext,
+ delegate: ModuleDelegate?,
+ diskStorage: TealiumDiskStorageProtocol?,
+ completion: ModuleCompletion) {
+ self.config = context.config
+ guard let momentsAPIRegion = config.momentsAPIRegion else {
+ self.momentsAPI = nil
+ completion((.failure(MomentsError.missingRegion), nil))
+ return
+ }
+ self.momentsAPI = TealiumMomentsAPI(region: momentsAPIRegion,
+ account: config.account,
+ profile: config.profile,
+ environment: config.environment,
+ referrer: config.momentsAPIReferrer)
+ TealiumQueues.backgroundSerialQueue.async {
+ context.onVisitorId?.subscribe { [weak self] visitorId in
+ guard let self = self else {
+ return
+ }
+ self.momentsAPI?.visitorId = visitorId
+ }.toDisposeBag(self.bag)
+ }
+ completion((.success(true), nil))
+ }
+}
+
+public extension Collectors {
+ static let MomentsAPI = TealiumMomentsAPIModule.self
+}
diff --git a/tealium/core/ModulesManager.swift b/tealium/core/ModulesManager.swift
index 4b23917d..f83a5c71 100644
--- a/tealium/core/ModulesManager.swift
+++ b/tealium/core/ModulesManager.swift
@@ -18,6 +18,8 @@ enum ModulesManagerLogMessages {
static let noDispatchersEnabled = "No dispatchers are enabled. Please check remote publish settings."
static let noConnectionDispatchersDisabled = "Internet connection not available. Dispatchers could not be enabled. Will retry when connection available."
static let connectionLost = "Internet connection lost. Events will be queued until connection restored."
+ static let collectorInitializedSuccessfully = "Collector initialized successfully."
+ static let collectorFailedToInitialize = "Collector failed to initialize."
}
public class ModulesManager {
@@ -271,7 +273,33 @@ extension ModulesManager {
return
}
- let collector = collector.init(context: context, delegate: self, diskStorage: nil) { _, _ in }
+ let collector = collector.init(context: context, delegate: self, diskStorage: nil) { result, _ in
+ switch result {
+ case .success:
+ let logRequest = TealiumLogRequest(title: ModulesManagerLogMessages.system,
+ message: "\(ModulesManagerLogMessages.collectorInitializedSuccessfully)",
+ info: nil,
+ logLevel: .info,
+ category: .`init`)
+ self.logger?.log(logRequest)
+ case .failure(let error):
+ if let error = error as? LocalizedError {
+ var message = "\(ModulesManagerLogMessages.collectorFailedToInitialize) with error: \((error).localizedDescription)"
+
+ if let recoverySuggestion = error.recoverySuggestion {
+ message += "\nRecovery suggestion: \(recoverySuggestion)"
+ }
+
+ let logRequest = TealiumLogRequest(title: ModulesManagerLogMessages.system,
+ message: message,
+ info: nil,
+ logLevel: .info,
+ category: .`init`)
+ self.logger?.log(logRequest)
+ }
+ }
+
+ }
addCollector(collector)
}
diff --git a/tealium/core/TealiumConstants.swift b/tealium/core/TealiumConstants.swift
index b259f155..78a60056 100644
--- a/tealium/core/TealiumConstants.swift
+++ b/tealium/core/TealiumConstants.swift
@@ -14,7 +14,7 @@ public enum Dispatchers {}
public enum TealiumValue {
public static let libraryName = "swift"
- public static let libraryVersion = "2.13.0"
+ public static let libraryVersion = "2.14.0"
// This is the current limit for performance reasons. May be increased in future
public static let maxEventBatchSize = 10
public static let defaultMinimumDiskSpace: Int32 = 20_000_000
@@ -45,6 +45,7 @@ public enum ModuleNames {
public static let lifecycle = "Lifecycle"
public static let inapppurchase = "InAppPurchase"
public static let location = "Location"
+ public static let momentsapi = "MomentsAPI"
public static let remotecommands = "RemoteCommands"
public static let tagmanagement = "TagManagement"
public static let visitorservice = "VisitorService"
diff --git a/tealium/core/dispatchmanager/DispatchManager.swift b/tealium/core/dispatchmanager/DispatchManager.swift
index 1f305835..2fb3f39a 100644
--- a/tealium/core/dispatchmanager/DispatchManager.swift
+++ b/tealium/core/dispatchmanager/DispatchManager.swift
@@ -231,7 +231,6 @@ class DispatchManager: DispatchManagerProtocol {
case .success:
self.logModuleResponse(for: moduleId, request: request, info: data, success: true, error: nil)
}
-
}
}
}
diff --git a/tealium/core/publishsettings/TealiumPublishSettingsRetriever.swift b/tealium/core/publishsettings/TealiumPublishSettingsRetriever.swift
index 13e696d5..a4be6c50 100644
--- a/tealium/core/publishsettings/TealiumPublishSettingsRetriever.swift
+++ b/tealium/core/publishsettings/TealiumPublishSettingsRetriever.swift
@@ -59,8 +59,8 @@ class TealiumPublishSettingsRetriever: TealiumPublishSettingsRetrieverProtocol,
}
static func getPublishSettings(from data: Data, etag: String?) -> RemotePublishSettings? {
- guard let dataString = String(data: data, encoding: .utf8),
- let startScript = dataString.range(of: "var mps = ") else {
+ let dataString = String(decoding: data, as: UTF8.self)
+ guard let startScript = dataString.range(of: "var mps = ") else {
return nil
}
diff --git a/tealium/core/utils/network/TealiumNetworkUtils.swift b/tealium/core/utils/network/TealiumNetworkUtils.swift
index 9979c955..801641f0 100644
--- a/tealium/core/utils/network/TealiumNetworkUtils.swift
+++ b/tealium/core/utils/network/TealiumNetworkUtils.swift
@@ -15,7 +15,7 @@ public extension Dictionary where Key == String, Value == Any {
encoder.outputFormatting = writingOptions
let encodable = self.encodable
let jsonData = try encoder.encode(encodable)
- return String(data: jsonData, encoding: .utf8)
+ return String(decoding: jsonData, as: UTF8.self)
}
}
diff --git a/tealium/dispatchers/remotecommands/RemoteCommand.swift b/tealium/dispatchers/remotecommands/RemoteCommand.swift
index 42a8f51e..a3b48f0c 100644
--- a/tealium/dispatchers/remotecommands/RemoteCommand.swift
+++ b/tealium/dispatchers/remotecommands/RemoteCommand.swift
@@ -84,11 +84,7 @@ open class RemoteCommand: RemoteCommandProtocol {
}
var responseStr: String
if let responseData = response.data {
- if let encodedResponse = String(data: responseData, encoding: .utf8) {
- responseStr = encodedResponse
- } else {
- responseStr = "(null)"
- }
+ responseStr = String(decoding: responseData, as: UTF8.self)
} else {
// keep previous behavior from obj-c library
responseStr = "(null)"