// // AppDelegate.swift // Reader // // Created by Shadowfacts on 10/29/21. // import UIKit import WebKit import OSLog @main class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { swizzleWKWebView() return true } // MARK: UISceneSession Lifecycle func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { // Called when a new scene session is being created. // Use this method to select a configuration to create the new scene with. return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) } func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { // Called when the user discards a scene session. // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. // Use this method to release any resources that were specific to the discarded scenes, as they will not return. } private func swizzleWKWebView() { let selector = Selector(("_updateScrollViewBackground")) var originalIMP: IMP? let imp = imp_implementationWithBlock({ (self: WKWebView) in if let originalIMP = originalIMP { let original = unsafeBitCast(originalIMP, to: (@convention(c) (WKWebView, Selector) -> Void).self) original(self, selector) } else { os_log(.error, "Missing originalIMP for -[WKWebView _updateScrollViewBackground], did WebKit change?") } self.scrollView.indicatorStyle = .default } as (@convention(block) (WKWebView) -> Void)) originalIMP = class_replaceMethod(WKWebView.self, selector, imp, "v@:") } }