2026-05-13 17:38:35 +08:00
|
|
|
import UIKit
|
|
|
|
|
import React
|
|
|
|
|
import React_RCTAppDelegate
|
|
|
|
|
import ReactAppDependencyProvider
|
|
|
|
|
|
|
|
|
|
@main
|
|
|
|
|
class AppDelegate: UIResponder, UIApplicationDelegate {
|
|
|
|
|
var window: UIWindow?
|
|
|
|
|
|
|
|
|
|
var reactNativeDelegate: ReactNativeDelegate?
|
|
|
|
|
var reactNativeFactory: RCTReactNativeFactory?
|
|
|
|
|
|
|
|
|
|
func application(
|
|
|
|
|
_ application: UIApplication,
|
|
|
|
|
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
|
|
|
|
|
) -> Bool {
|
|
|
|
|
let delegate = ReactNativeDelegate()
|
|
|
|
|
let factory = RCTReactNativeFactory(delegate: delegate)
|
|
|
|
|
delegate.dependencyProvider = RCTAppDependencyProvider()
|
|
|
|
|
|
|
|
|
|
reactNativeDelegate = delegate
|
|
|
|
|
reactNativeFactory = factory
|
|
|
|
|
|
|
|
|
|
window = UIWindow(frame: UIScreen.main.bounds)
|
|
|
|
|
|
|
|
|
|
factory.startReactNative(
|
|
|
|
|
withModuleName: "ShenYanApp",
|
|
|
|
|
in: window,
|
|
|
|
|
launchOptions: launchOptions
|
|
|
|
|
)
|
|
|
|
|
|
2026-05-16 12:59:47 +08:00
|
|
|
// register for push notifications — bypasses broken Turbo Module impl
|
|
|
|
|
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { granted, _ in
|
|
|
|
|
if granted {
|
|
|
|
|
DispatchQueue.main.async { application.registerForRemoteNotifications() }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-13 17:38:35 +08:00
|
|
|
return true
|
|
|
|
|
}
|
2026-05-16 12:59:47 +08:00
|
|
|
|
|
|
|
|
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
|
|
|
|
|
RNCPushNotificationIOS.didRegisterForRemoteNotifications(withDeviceToken: deviceToken)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
|
|
|
|
|
RNCPushNotificationIOS.didFailToRegisterForRemoteNotificationsWithError(error)
|
|
|
|
|
}
|
2026-05-13 17:38:35 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
}
|