Skip to content

Commit

Permalink
chore: OS conditions for removed and deprecated APIs (#522)
Browse files Browse the repository at this point in the history
  • Loading branch information
Ahmed-CIO committed Feb 14, 2024
1 parent 55df69c commit ba3932a
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 10 deletions.
13 changes: 11 additions & 2 deletions Sources/Common/Util/DeviceInfo.swift
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import Foundation

#if canImport(UIKit)
import UIKit
#endif
Expand Down Expand Up @@ -77,9 +78,17 @@ public class CIODeviceInfo: DeviceInfo {
public var deviceLocale: String {
if let osSetLanguage = Locale.preferredLanguages.first {
let locale = Locale(identifier: osSetLanguage)
let getLangCodeAndRegion: () -> (String?, String?) = {
if #available(iOS 16, *), #available(visionOS 1.0, *) {
return (locale.language.languageCode?.identifier, locale.region?.identifier)
} else {
return (locale.languageCode, locale.regionCode)
}
}

let (languageCode, regionCode) = getLangCodeAndRegion()

if let languageCode = locale.languageCode,
let regionCode = locale.regionCode {
if let languageCode, let regionCode {
return "\(languageCode)-\(regionCode)"
}
}
Expand Down
32 changes: 24 additions & 8 deletions Sources/Tracking/CustomerIOImplementation+ScreenViews.swift
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import CioInternalCommon
import Foundation

#if canImport(UIKit)
import UIKit

Expand All @@ -21,18 +22,24 @@ extension CustomerIO {
}

private func swizzle(forClass: AnyClass, original: Selector, new: Selector) {
guard let originalMethod = class_getInstanceMethod(forClass, original) else { return }
guard let swizzledMethod = class_getInstanceMethod(forClass, new) else { return }
guard let originalMethod = class_getInstanceMethod(forClass, original) else {
return
}
guard let swizzledMethod = class_getInstanceMethod(forClass, new) else {
return
}
method_exchangeImplementations(originalMethod, swizzledMethod)
}

func performScreenTracking(onViewController viewController: UIViewController) {
guard let diGraph = diGraph else {
guard let diGraph else {
return // SDK not initialized yet. Therefore, we ignore event.
}

guard let name = viewController.getNameForAutomaticScreenViewTracking() else {
diGraph.logger.info("Automatic screenview tracking event ignored for \(viewController). Could not determine name to use for screen.")
diGraph.logger.info(
"Automatic screenview tracking event ignored for \(viewController). Could not determine name to use for screen."
)
return
}

Expand All @@ -54,7 +61,9 @@ extension CustomerIO {

guard shouldTrackEvent else {
let isUsingSdkDefaultFilter = customerOverridenFilter == nil
diGraph.logger.debug("automatic screenview ignored for, \(name):\(viewController.bundleIdOfView ?? ""). It was filtered out. Is using sdk default filter: \(isUsingSdkDefaultFilter)")
diGraph.logger.debug(
"automatic screenview ignored for, \(name):\(viewController.bundleIdOfView ?? ""). It was filtered out. Is using sdk default filter: \(isUsingSdkDefaultFilter)"
)
return // event has been filtered out. Ignore it.
}

Expand Down Expand Up @@ -87,7 +96,9 @@ extension UIViewController {
if rootViewController == nil {
rootViewController = getActiveRootViewController()
}
guard let viewController = getVisibleViewController(fromRootViewController: rootViewController) else {
guard
let viewController = getVisibleViewController(fromRootViewController: rootViewController)
else {
return
}

Expand Down Expand Up @@ -116,10 +127,13 @@ extension UIViewController {
/**
Finds the top most view controller in the navigation controller/ tab bar controller stack or if it is presented
*/
private func getVisibleViewController(fromRootViewController rootViewController: UIViewController?)
private func getVisibleViewController(
fromRootViewController rootViewController: UIViewController?
)
-> UIViewController? {
if let navigationController = rootViewController as? UINavigationController {
return getVisibleViewController(fromRootViewController: navigationController.visibleViewController)
return getVisibleViewController(
fromRootViewController: navigationController.visibleViewController)
}
if let tabController = rootViewController as? UITabBarController {
if let selected = tabController.selectedViewController {
Expand Down Expand Up @@ -151,7 +165,9 @@ extension UIViewController {
}
}
} else { // keyWindow is deprecated in iOS 13.0*
#if os(iOS)
return UIApplication.shared.keyWindow?.rootViewController
#endif
}

return nil
Expand Down

0 comments on commit ba3932a

Please sign in to comment.