CompositionRoot.swift 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. //
  2. // CompositionRoot.swift
  3. // JSJP_Student_sw
  4. //
  5. // Created by ningye on 2023/5/22.
  6. //
  7. import UIKit
  8. import CGFloatLiteral
  9. import Kingfisher
  10. import RxGesture
  11. import RxOptional
  12. import RxViewController
  13. import SnapKit
  14. import SwiftyColor
  15. import SwiftyImage
  16. import SwiftyUserDefaults
  17. import Then
  18. import URLNavigator
  19. import NSObject_Rx
  20. import ManualLayout
  21. import GDPerformanceView_Swift
  22. import Toaster
  23. import Dollar
  24. import WebKit
  25. import SwiftDate
  26. struct NYAppDependency {
  27. typealias OpenURLHandler = (_ url: URL, _ options: [UIApplication.OpenURLOptionsKey: Any]) -> Bool
  28. let window: UIWindow
  29. let configureSDKs: () -> Void
  30. let configureAppearance: () -> Void
  31. let configureUserAgent: () -> Void
  32. let congigurePerformance: () -> Void
  33. let openURL: OpenURLHandler
  34. }
  35. let navigator = Navigator()
  36. final class CompositionRoot {
  37. /// Builds a dependency graph and returns an entry view controller.
  38. static func resolve() -> NYAppDependency {
  39. let window = UIWindow(frame: UIScreen.main.bounds)
  40. window.backgroundColor = .white
  41. window.makeKeyAndVisible()
  42. URLNavigationMap.initialize(navigator: navigator)
  43. var presentMainScreen: (() -> Void)!
  44. presentMainScreen = {
  45. //首页
  46. let homeViewController = HomeViewController(nibName: "HomeViewController")
  47. let navigationController = MainNavigationController(rootViewController: homeViewController)
  48. navigationController.tabBarItem.titlePositionAdjustment = UIOffset(horizontal: 0, vertical: -3)
  49. window.rootViewController = navigationController
  50. }
  51. let splashViewController = SplashViewController(presentMainScreen: presentMainScreen)
  52. window.rootViewController = splashViewController
  53. return NYAppDependency(
  54. window: window,
  55. configureSDKs: self.configureSDKs,
  56. configureAppearance: self.configureAppearance,
  57. configureUserAgent: self.configureUserAgent,
  58. congigurePerformance: self.congigurePerformance,
  59. openURL: self.openURLFactory(navigator: navigator)
  60. )
  61. }
  62. static func configureSDKs() {
  63. //友盟 UM_APPKEY
  64. UMConfigure.setLogEnabled(true)
  65. UMConfigure.initWithAppkey(NYMacros.appMenKey, channel: "App Store")
  66. //bugly key
  67. Bugly.start(withAppId:NYMacros.appbuglyId)
  68. //微信注册
  69. NYWXApiManager.shared.registerApp()
  70. }
  71. static func configureAppearance() {
  72. //设置时区
  73. let _ = Region(calendar: Calendars.gregorian, zone: Zones.asiaShanghai, locale: Locales.chinese)
  74. //打开app次数
  75. LocalManager.userInfo.openTimes += 1
  76. //设置环境 --默认是线上环境
  77. Defaults.currentEnvironment = .res
  78. #if DEBUG || _DEBUG
  79. //设置环境
  80. Defaults.currentEnvironment = .dev
  81. #endif
  82. //ToastView
  83. ToastView.appearance().font = NYFont.SysFont.sys_15
  84. //配置全局GJRatioAutoLayout
  85. GJRatioAutoLayout.start(with: GJScreenSizeType.typeiPhone6)
  86. }
  87. static func configureUserAgent() {
  88. let webView = WKWebView(frame: .zero)
  89. webView.evaluateJavaScript("navigator.userAgent") { (oldAgent, error) in
  90. guard let oldAgent = oldAgent as? String else { return }
  91. let newAgent = "\(oldAgent) BiliApp/StudioApp/6560"
  92. let newAgentDic = ["UserAgent":newAgent]
  93. UserDefaults.standard.register(defaults: newAgentDic)
  94. if #available(iOS 9.0, *) {
  95. //局部更新,即可以在其他用到的webView页面重新修改userAgent
  96. webView.customUserAgent = newAgent
  97. }
  98. }
  99. webView.load(URLRequest(url: URL(string:"http//www.baidu.com")!))
  100. }
  101. static func congigurePerformance() {
  102. //#if DEBUG
  103. // PerformanceMonitor.sharedInstance.startMonitoring()
  104. // PerformanceMonitor.sharedInstance.appVersionHidden = true
  105. // PerformanceMonitor.sharedInstance.deviceVersionHidden = true
  106. //#endif
  107. }
  108. static func openURLFactory(navigator: NavigatorType) -> NYAppDependency.OpenURLHandler {
  109. return { url, options -> Bool in
  110. if navigator.open(url) {
  111. return true
  112. }
  113. if navigator.present(url, wrap: MainNavigationController.self) != nil {
  114. return true
  115. }
  116. return false
  117. }
  118. }
  119. }