-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Expand file tree
/
Copy pathAppDelegate.swift
More file actions
104 lines (88 loc) · 3.18 KB
/
Copy pathAppDelegate.swift
File metadata and controls
104 lines (88 loc) · 3.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import Expo
import React
import ReactAppDependencyProvider
import Firebase
import Bugsnag
import WatchConnectivity
import PushKit
@UIApplicationMain
public class AppDelegate: ExpoAppDelegate {
var window: UIWindow?
var reactNativeDelegate: ReactNativeDelegate?
var reactNativeFactory: RCTReactNativeFactory?
var watchConnection: WatchConnection?
public override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
) -> Bool {
// IMPORTANT: Initialize MMKV encryption FIRST, before any other initialization
// This reads existing encryption key or generates a new one for fresh installs
// Must run before Firebase, Bugsnag, and React Native start
MMKVKeyManager.initialize()
FirebaseApp.configure()
Bugsnag.start()
ReplyNotification.configure()
if !VoipRegion.isChina() {
VoipService.voipRegistration()
RNCallKeep.setup([
"appName": "Rocket.Chat",
"supportsVideo": false,
"maximumCallGroups": 1,
"maximumCallsPerCallGroup": 1,
"includesCallsInRecents": true
])
}
let delegate = ReactNativeDelegate()
let factory = RCTReactNativeFactory(delegate: delegate)
delegate.dependencyProvider = RCTAppDependencyProvider()
reactNativeDelegate = delegate
reactNativeFactory = factory
bindReactNativeFactory(factory)
#if os(iOS) || os(tvOS)
window = UIWindow(frame: UIScreen.main.bounds)
factory.startReactNative(
withModuleName: "RocketChatRN",
in: window,
launchOptions: launchOptions)
#endif
let result = super.application(application, didFinishLaunchingWithOptions: launchOptions)
// Initialize boot splash
if let rootViewController = window?.rootViewController {
RNBootSplash.initWithStoryboard("LaunchScreen", rootView: rootViewController.view)
}
// Initialize SSL Pinning
SSLPinning().migrate()
// Initialize Watch Connection
watchConnection = WatchConnection(session: WCSession.default)
return result
}
// Linking API
public override func application(
_ app: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey: Any] = [:]
) -> Bool {
return super.application(app, open: url, options: options) || RCTLinkingManager.application(app, open: url, options: options)
}
// Universal Links
public override func application(
_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
) -> Bool {
let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)
return super.application(application, continue: userActivity, restorationHandler: restorationHandler) || result
}
}
class ReactNativeDelegate: RCTDefaultReactNativeFactoryDelegate {
override func sourceURL(for bridge: RCTBridge) -> URL? {
self.bundleURL()
}
override func bundleURL() -> URL? {
#if DEBUG
RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index")
#else
Bundle.main.url(forResource: "main", withExtension: "jsbundle")
#endif
}
}