From d6003b8b0576a7308e188a637b00f33d653314c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cihat=20G=C3=BCnd=C3=BCz?= Date: Sun, 2 Feb 2025 09:34:37 +0100 Subject: [PATCH 1/6] Avoid potential compilation errors in app extensions with build flag --- Images/TARGET_APP_EXTENSION.jpeg | Bin 0 -> 88620 bytes README.md | 29 +++++++++++----- Sources/TelemetryDeck/Signals/Signal.swift | 32 ++++++++++-------- .../TelemetryDeck/Signals/SignalManager.swift | 4 +-- 4 files changed, 41 insertions(+), 24 deletions(-) create mode 100644 Images/TARGET_APP_EXTENSION.jpeg diff --git a/Images/TARGET_APP_EXTENSION.jpeg b/Images/TARGET_APP_EXTENSION.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..b095842bc001a2142bde1f85efa04392ecb9ccf4 GIT binary patch literal 88620 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 z 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 0daf9d3..cb3446e 100644 --- a/README.md +++ b/README.md @@ -75,15 +75,7 @@ TelemetryDeck.signal("Database.updated", parameters: ["numberOfDatabaseEntries": TelemetryDeck will automatically send base parameters, such as: - TelemetryDeck.Accessibility.isBoldTextEnabled -- TelemetryDeck.Accessibility.isDarkerSystemColorsEnabled -- TelemetryDeck.Accessibility.isInvertColorsEnabled -- TelemetryDeck.Accessibility.isReduceMotionEnabled -- TelemetryDeck.Accessibility.isReduceTransparencyEnabled -- TelemetryDeck.Accessibility.isSwitchControlEnabled -- TelemetryDeck.Accessibility.isVoiceOverEnabled - TelemetryDeck.Accessibility.preferredContentSizeCategory -- TelemetryDeck.Accessibility.shouldDifferentiateWithoutColor - - TelemetryDeck.AppInfo.buildNumber - TelemetryDeck.AppInfo.version - TelemetryDeck.Device.architecture @@ -111,6 +103,27 @@ TelemetryDeck will automatically send base parameters, such as: See our [Grand Renaming article](https://telemetrydeck.com/docs/articles/grand-rename/?source=github) for a full list. +## App Extensions Support + +When using this SDK in an app extension target, add `TARGET_APP_EXTENSION` to your build settings to ensure extension-safe API usage: + +1. In Xcode, select your app extension target +2. Go to "Build Settings" +3. Find "Active Compilation Conditions" +4. Add `TARGET_APP_EXTENSION` to the Debug and Release configurations + +![App Extension Build Settings](Images/TARGET_APP_EXTENSION.jpeg) + +> [!TIP] +> You can can also just **copy** the following two lines, select the build setting and **paste** them in: +> ``` +> SWIFT_ACTIVE_COMPILATION_CONDITIONS[config=Debug] = TARGET_APP_EXTENSION DEBUG +> SWIFT_ACTIVE_COMPILATION_CONDITIONS[config=Release] = TARGET_APP_EXTENSION +> ``` + +> [!NOTE] +> Only add this compilation condition to **extension** targets, not to your main app target. + ## Sessions With each Signal, the client sends a hash of your user ID as well as a _session ID_. This gets automatically generated when the client is initialized, so if you do nothing, you'll get a new session each time your app is started from cold storage. diff --git a/Sources/TelemetryDeck/Signals/Signal.swift b/Sources/TelemetryDeck/Signals/Signal.swift index 5040da5..4e6864c 100644 --- a/Sources/TelemetryDeck/Signals/Signal.swift +++ b/Sources/TelemetryDeck/Signals/Signal.swift @@ -123,21 +123,25 @@ extension DefaultSignalPayload { var a11yParams: [String: String] = [:] #if os(iOS) || os(tvOS) - a11yParams["TelemetryDeck.Accessibility.isReduceMotionEnabled"] = "\(UIAccessibility.isReduceMotionEnabled)" - a11yParams["TelemetryDeck.Accessibility.isBoldTextEnabled"] = "\(UIAccessibility.isBoldTextEnabled)" - a11yParams["TelemetryDeck.Accessibility.isInvertColorsEnabled"] = "\(UIAccessibility.isInvertColorsEnabled)" - a11yParams["TelemetryDeck.Accessibility.isDarkerSystemColorsEnabled"] = "\(UIAccessibility.isDarkerSystemColorsEnabled)" - a11yParams["TelemetryDeck.Accessibility.isReduceTransparencyEnabled"] = "\(UIAccessibility.isReduceTransparencyEnabled)" - if #available(iOS 13.0, *) { - a11yParams["TelemetryDeck.Accessibility.shouldDifferentiateWithoutColor"] = "\(UIAccessibility.shouldDifferentiateWithoutColor)" - } - a11yParams["TelemetryDeck.Accessibility.preferredContentSizeCategory"] = UIApplication.shared.preferredContentSizeCategory.rawValue - .replacingOccurrences(of: "UICTContentSizeCategory", with: "") // replaces output "UICTContentSizeCategoryL" with "L" + a11yParams["TelemetryDeck.Accessibility.isReduceMotionEnabled"] = "\(UIAccessibility.isReduceMotionEnabled)" + a11yParams["TelemetryDeck.Accessibility.isBoldTextEnabled"] = "\(UIAccessibility.isBoldTextEnabled)" + a11yParams["TelemetryDeck.Accessibility.isInvertColorsEnabled"] = "\(UIAccessibility.isInvertColorsEnabled)" + a11yParams["TelemetryDeck.Accessibility.isDarkerSystemColorsEnabled"] = "\(UIAccessibility.isDarkerSystemColorsEnabled)" + a11yParams["TelemetryDeck.Accessibility.isReduceTransparencyEnabled"] = "\(UIAccessibility.isReduceTransparencyEnabled)" + if #available(iOS 13.0, *) { + a11yParams["TelemetryDeck.Accessibility.shouldDifferentiateWithoutColor"] = "\(UIAccessibility.shouldDifferentiateWithoutColor)" + } + + #if !TARGET_APP_EXTENSION + a11yParams["TelemetryDeck.Accessibility.preferredContentSizeCategory"] = UIApplication.shared.preferredContentSizeCategory.rawValue + .replacingOccurrences(of: "UICTContentSizeCategory", with: "") // replaces output "UICTContentSizeCategoryL" with "L" + #endif + #elseif os(macOS) - if let systemPrefs = UserDefaults.standard.persistentDomain(forName: "com.apple.universalaccess") { - a11yParams["TelemetryDeck.Accessibility.isReduceMotionEnabled"] = "\(systemPrefs["reduceMotion"] as? Bool ?? false)" - a11yParams["TelemetryDeck.Accessibility.isInvertColorsEnabled"] = "\(systemPrefs["InvertColors"] as? Bool ?? false)" - } + if let systemPrefs = UserDefaults.standard.persistentDomain(forName: "com.apple.universalaccess") { + a11yParams["TelemetryDeck.Accessibility.isReduceMotionEnabled"] = "\(systemPrefs["reduceMotion"] as? Bool ?? false)" + a11yParams["TelemetryDeck.Accessibility.isInvertColorsEnabled"] = "\(systemPrefs["InvertColors"] as? Bool ?? false)" + } #endif return a11yParams diff --git a/Sources/TelemetryDeck/Signals/SignalManager.swift b/Sources/TelemetryDeck/Signals/SignalManager.swift index 25a7cbb..dfb1e2d 100644 --- a/Sources/TelemetryDeck/Signals/SignalManager.swift +++ b/Sources/TelemetryDeck/Signals/SignalManager.swift @@ -154,7 +154,7 @@ private extension SignalManager { @objc func appWillTerminate() { configuration.logHandler?.log(.debug, message: #function) - #if os(watchOS) || os(macOS) + #if os(watchOS) || os(macOS) || TARGET_APP_EXTENSION self.signalCache.backupCache() #else // run backup in background task to avoid blocking main thread while ensuring app stays open during write @@ -192,7 +192,7 @@ private extension SignalManager { sendTimer?.invalidate() sendTimer = nil - #if os(watchOS) || os(macOS) + #if os(watchOS) || os(macOS) || TARGET_APP_EXTENSION self.signalCache.backupCache() #else // run backup in background task to avoid blocking main thread while ensuring app stays open during write From ce22e6907ec64d7a0c58c29a2bb02c7181fde6a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cihat=20G=C3=BCnd=C3=BCz?= Date: Fri, 31 Jan 2025 19:54:36 +0100 Subject: [PATCH 2/6] Round duration length to 3 fraction digits --- Sources/TelemetryDeck/TelemetryDeck.swift | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Sources/TelemetryDeck/TelemetryDeck.swift b/Sources/TelemetryDeck/TelemetryDeck.swift index 5ac3ca3..2a178f7 100644 --- a/Sources/TelemetryDeck/TelemetryDeck.swift +++ b/Sources/TelemetryDeck/TelemetryDeck.swift @@ -119,9 +119,10 @@ public enum TelemetryDeck { @MainActor @available(watchOS 7.0, *) public static func stopAndSendDurationSignal(_ signalName: String, parameters: [String: String] = [:]) { - guard let (duration, startParameters) = DurationSignalTracker.shared.stopTracking(signalName) else { return } + guard let (exactDuration, startParameters) = DurationSignalTracker.shared.stopTracking(signalName) else { return } + let roundedDuration = (exactDuration * 1_000).rounded(.down) * 1_000 // rounds down to 3 fraction digits - var durationParameters = ["TelemetryDeck.Signal.durationInSeconds": String(duration)] + var durationParameters = ["TelemetryDeck.Signal.durationInSeconds": String(roundedDuration)] durationParameters.merge(startParameters) { $1 } self.internalSignal(signalName, parameters: durationParameters.merging(parameters) { $1 }) From c5f679f0d0f22b52018562974b67589efd045429 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cihat=20G=C3=BCnd=C3=BCz?= Date: Sun, 2 Feb 2025 09:51:06 +0100 Subject: [PATCH 3/6] Minor docs improvements --- README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index cb3446e..f9d1eb4 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,8 @@ You can also send additional parameters with each signal: TelemetryDeck.signal("Database.updated", parameters: ["numberOfDatabaseEntries": "3831"]) ``` -TelemetryDeck will automatically send base parameters, such as: +
+TelemetryDeck will automatically send base parameters, expand to see common examples - TelemetryDeck.Accessibility.isBoldTextEnabled - TelemetryDeck.Accessibility.preferredContentSizeCategory @@ -101,16 +102,17 @@ TelemetryDeck will automatically send base parameters, such as: - TelemetryDeck.UserPreference.layoutDirection - TelemetryDeck.UserPreference.region -See our [Grand Renaming article](https://telemetrydeck.com/docs/articles/grand-rename/?source=github) for a full list. +See our [related documentation page](https://telemetrydeck.com/docs/api/default-parameters/?source=github.com) for a full list. +
## App Extensions Support When using this SDK in an app extension target, add `TARGET_APP_EXTENSION` to your build settings to ensure extension-safe API usage: 1. In Xcode, select your app extension target -2. Go to "Build Settings" -3. Find "Active Compilation Conditions" -4. Add `TARGET_APP_EXTENSION` to the Debug and Release configurations +1. Go to "Build Settings" +1. Find "Active Compilation Conditions" (make sure you have the "All" tab selected) +1. Add `TARGET_APP_EXTENSION` to the Debug and Release configurations ![App Extension Build Settings](Images/TARGET_APP_EXTENSION.jpeg) From 750151079a08019586cecdfd6b27a70e00fe9c65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cihat=20Gu=CC=88ndu=CC=88z?= Date: Wed, 5 Feb 2025 20:37:35 +0100 Subject: [PATCH 4/6] Revert changes for app extensions since they didn't help --- Images/TARGET_APP_EXTENSION.jpeg | Bin 88620 -> 0 bytes README.md | 21 ------------------ Sources/TelemetryDeck/Signals/Signal.swift | 6 ++--- .../TelemetryDeck/Signals/SignalManager.swift | 4 ++-- 4 files changed, 4 insertions(+), 27 deletions(-) delete mode 100644 Images/TARGET_APP_EXTENSION.jpeg diff --git a/Images/TARGET_APP_EXTENSION.jpeg b/Images/TARGET_APP_EXTENSION.jpeg deleted file mode 100644 index b095842bc001a2142bde1f85efa04392ecb9ccf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88620 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 z 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 diff --git a/README.md b/README.md index f9d1eb4..26477f7 100644 --- a/README.md +++ b/README.md @@ -105,27 +105,6 @@ TelemetryDeck.signal("Database.updated", parameters: ["numberOfDatabaseEntries": See our [related documentation page](https://telemetrydeck.com/docs/api/default-parameters/?source=github.com) for a full list. -## App Extensions Support - -When using this SDK in an app extension target, add `TARGET_APP_EXTENSION` to your build settings to ensure extension-safe API usage: - -1. In Xcode, select your app extension target -1. Go to "Build Settings" -1. Find "Active Compilation Conditions" (make sure you have the "All" tab selected) -1. Add `TARGET_APP_EXTENSION` to the Debug and Release configurations - -![App Extension Build Settings](Images/TARGET_APP_EXTENSION.jpeg) - -> [!TIP] -> You can can also just **copy** the following two lines, select the build setting and **paste** them in: -> ``` -> SWIFT_ACTIVE_COMPILATION_CONDITIONS[config=Debug] = TARGET_APP_EXTENSION DEBUG -> SWIFT_ACTIVE_COMPILATION_CONDITIONS[config=Release] = TARGET_APP_EXTENSION -> ``` - -> [!NOTE] -> Only add this compilation condition to **extension** targets, not to your main app target. - ## Sessions With each Signal, the client sends a hash of your user ID as well as a _session ID_. This gets automatically generated when the client is initialized, so if you do nothing, you'll get a new session each time your app is started from cold storage. diff --git a/Sources/TelemetryDeck/Signals/Signal.swift b/Sources/TelemetryDeck/Signals/Signal.swift index 4e6864c..4cc5e26 100644 --- a/Sources/TelemetryDeck/Signals/Signal.swift +++ b/Sources/TelemetryDeck/Signals/Signal.swift @@ -132,10 +132,8 @@ extension DefaultSignalPayload { a11yParams["TelemetryDeck.Accessibility.shouldDifferentiateWithoutColor"] = "\(UIAccessibility.shouldDifferentiateWithoutColor)" } - #if !TARGET_APP_EXTENSION - a11yParams["TelemetryDeck.Accessibility.preferredContentSizeCategory"] = UIApplication.shared.preferredContentSizeCategory.rawValue - .replacingOccurrences(of: "UICTContentSizeCategory", with: "") // replaces output "UICTContentSizeCategoryL" with "L" - #endif + a11yParams["TelemetryDeck.Accessibility.preferredContentSizeCategory"] = UIApplication.shared.preferredContentSizeCategory.rawValue + .replacingOccurrences(of: "UICTContentSizeCategory", with: "") // replaces output "UICTContentSizeCategoryL" with "L" #elseif os(macOS) if let systemPrefs = UserDefaults.standard.persistentDomain(forName: "com.apple.universalaccess") { diff --git a/Sources/TelemetryDeck/Signals/SignalManager.swift b/Sources/TelemetryDeck/Signals/SignalManager.swift index dfb1e2d..25a7cbb 100644 --- a/Sources/TelemetryDeck/Signals/SignalManager.swift +++ b/Sources/TelemetryDeck/Signals/SignalManager.swift @@ -154,7 +154,7 @@ private extension SignalManager { @objc func appWillTerminate() { configuration.logHandler?.log(.debug, message: #function) - #if os(watchOS) || os(macOS) || TARGET_APP_EXTENSION + #if os(watchOS) || os(macOS) self.signalCache.backupCache() #else // run backup in background task to avoid blocking main thread while ensuring app stays open during write @@ -192,7 +192,7 @@ private extension SignalManager { sendTimer?.invalidate() sendTimer = nil - #if os(watchOS) || os(macOS) || TARGET_APP_EXTENSION + #if os(watchOS) || os(macOS) self.signalCache.backupCache() #else // run backup in background task to avoid blocking main thread while ensuring app stays open during write From 3b9cf34f31c3f26d823e491d2e216ccf39dbcf1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cihat=20Gu=CC=88ndu=CC=88z?= Date: Wed, 5 Feb 2025 20:47:02 +0100 Subject: [PATCH 5/6] Check for app extension at runtime & avoid calling UIApplication.shared --- Sources/TelemetryDeck/Signals/Signal.swift | 14 +++++++-- .../TelemetryDeck/Signals/SignalManager.swift | 30 ++++++++++++------- 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/Sources/TelemetryDeck/Signals/Signal.swift b/Sources/TelemetryDeck/Signals/Signal.swift index 4cc5e26..b7dcca7 100644 --- a/Sources/TelemetryDeck/Signals/Signal.swift +++ b/Sources/TelemetryDeck/Signals/Signal.swift @@ -132,8 +132,11 @@ extension DefaultSignalPayload { a11yParams["TelemetryDeck.Accessibility.shouldDifferentiateWithoutColor"] = "\(UIAccessibility.shouldDifferentiateWithoutColor)" } - a11yParams["TelemetryDeck.Accessibility.preferredContentSizeCategory"] = UIApplication.shared.preferredContentSizeCategory.rawValue - .replacingOccurrences(of: "UICTContentSizeCategory", with: "") // replaces output "UICTContentSizeCategoryL" with "L" + // in app extensions `UIApplication.shared` is not available + if !Bundle.main.bundlePath.hasSuffix(".appex") { + a11yParams["TelemetryDeck.Accessibility.preferredContentSizeCategory"] = UIApplication.shared.preferredContentSizeCategory.rawValue + .replacingOccurrences(of: "UICTContentSizeCategory", with: "") // replaces output "UICTContentSizeCategoryL" with "L" + } #elseif os(macOS) if let systemPrefs = UserDefaults.standard.persistentDomain(forName: "com.apple.universalaccess") { @@ -404,7 +407,12 @@ extension DefaultSignalPayload { @MainActor static var layoutDirection: String { #if os(iOS) || os(tvOS) - return UIApplication.shared.userInterfaceLayoutDirection == .leftToRight ? "leftToRight" : "rightToLeft" + if Bundle.main.bundlePath.hasSuffix(".appex") { + // we're in an app extension, where `UIApplication.shared` is not available + return "N/A" + } else { + return UIApplication.shared.userInterfaceLayoutDirection == .leftToRight ? "leftToRight" : "rightToLeft" + } #elseif os(macOS) if let nsApp = NSApp { return nsApp.userInterfaceLayoutDirection == .leftToRight ? "leftToRight" : "rightToLeft" diff --git a/Sources/TelemetryDeck/Signals/SignalManager.swift b/Sources/TelemetryDeck/Signals/SignalManager.swift index 25a7cbb..ed82613 100644 --- a/Sources/TelemetryDeck/Signals/SignalManager.swift +++ b/Sources/TelemetryDeck/Signals/SignalManager.swift @@ -157,13 +157,18 @@ private extension SignalManager { #if os(watchOS) || os(macOS) self.signalCache.backupCache() #else - // run backup in background task to avoid blocking main thread while ensuring app stays open during write - let backgroundTaskID = UIApplication.shared.beginBackgroundTask() - DispatchQueue.global(qos: .background).async { + if Bundle.main.bundlePath.hasSuffix(".appex") { + // we're in an app extension, where `UIApplication.shared` is not available self.signalCache.backupCache() + } else { + // run backup in background task to avoid blocking main thread while ensuring app stays open during write + let backgroundTaskID = UIApplication.shared.beginBackgroundTask() + DispatchQueue.global(qos: .background).async { + self.signalCache.backupCache() - DispatchQueue.main.async { - UIApplication.shared.endBackgroundTask(backgroundTaskID) + DispatchQueue.main.async { + UIApplication.shared.endBackgroundTask(backgroundTaskID) + } } } #endif @@ -195,13 +200,18 @@ private extension SignalManager { #if os(watchOS) || os(macOS) self.signalCache.backupCache() #else - // run backup in background task to avoid blocking main thread while ensuring app stays open during write - let backgroundTaskID = UIApplication.shared.beginBackgroundTask() - DispatchQueue.global(qos: .background).async { + if Bundle.main.bundlePath.hasSuffix(".appex") { + // we're in an app extension, where `UIApplication.shared` is not available self.signalCache.backupCache() + } else { + // run backup in background task to avoid blocking main thread while ensuring app stays open during write + let backgroundTaskID = UIApplication.shared.beginBackgroundTask() + DispatchQueue.global(qos: .background).async { + self.signalCache.backupCache() - DispatchQueue.main.async { - UIApplication.shared.endBackgroundTask(backgroundTaskID) + DispatchQueue.main.async { + UIApplication.shared.endBackgroundTask(backgroundTaskID) + } } } #endif From 6138d5fb93c41c512da67f349ffaeb4dae8d521a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cihat=20Gu=CC=88ndu=CC=88z?= Date: Wed, 5 Feb 2025 20:57:01 +0100 Subject: [PATCH 6/6] Reduce number of lines to make linter happy --- Sources/TelemetryDeck/Signals/Signal.swift | 27 ++++++++-------------- 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/Sources/TelemetryDeck/Signals/Signal.swift b/Sources/TelemetryDeck/Signals/Signal.swift index b7dcca7..83f6684 100644 --- a/Sources/TelemetryDeck/Signals/Signal.swift +++ b/Sources/TelemetryDeck/Signals/Signal.swift @@ -378,22 +378,16 @@ extension DefaultSignalPayload { static var colorScheme: String { #if os(iOS) || os(tvOS) switch UIScreen.main.traitCollection.userInterfaceStyle { - case .dark: - return "Dark" - case .light: - return "Light" - default: - return "N/A" + case .dark: return "Dark" + case .light: return "Light" + default: return "N/A" } #elseif os(macOS) if #available(macOS 10.14, *) { switch NSAppearance.current.name { - case .aqua: - return "Light" - case .darkAqua: - return "Dark" - default: - return "N/A" + case .aqua: return "Light" + case .darkAqua: return "Dark" + default: return "N/A" } } else { return "Light" @@ -477,12 +471,9 @@ extension DefaultSignalPayload { static var orientation: String { #if os(iOS) switch UIDevice.current.orientation { - case .portrait, .portraitUpsideDown: - return "Portrait" - case .landscapeLeft, .landscapeRight: - return "Landscape" - default: - return "Unknown" + case .portrait, .portraitUpsideDown: return "Portrait" + case .landscapeLeft, .landscapeRight: return "Landscape" + default: return "Unknown" } #else return "Fixed"