             return false
         }
 
-        // we use unsafeBitCast to prevent direct references to tracking frameworks, which cause issues for
-        // kids apps when going through app review, even if they don't actually use them at all.
-        typealias ClosureType = @convention(c) (AnyObject, Selector) -> FakeTrackingManagerAuthorizationStatus
-        let authStatusMethodImplementation = trackingManagerProxy.method(for: authStatusSelector)
-        let authStatusMethod: ClosureType = unsafeBitCast(authStatusMethodImplementation, to: ClosureType.self)
-        let authStatus = authStatusMethod(trackingManagerProxy, authStatusSelector)
+        let authStatus = callAuthStatusSelector(authStatusSelector, trackingManagerProxy: trackingManagerProxy)
 
         switch authStatus {
         case .restricted, .denied:

        }
    }

}

        return true
    }

    var authorizationStatus: FakeTrackingManagerAuthorizationStatus {
        // should match OS availability here: https://rev.cat/app-tracking-transparency
        guard #available(iOS 14.0.0, tvOS 14.0.0, macOS 11.0.0, *) else {
            return .notDetermined
        }
        return self.fetchAuthorizationStatus
    }

}

private extension AttributionFetcher {

    @available(iOS 14.0.0, tvOS 14.0.0, *)
    private var isAuthorizedToPostSearchAdsInATTRequiredOS: Bool {
        let needsTrackingAuthorization = self.needsTrackingAuthorization

        guard let trackingManagerProxy = self.trackingProxy else {
            return !needsTrackingAuthorization
        }

