You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

146 lines
4.3 KiB

4 months ago
//
// MyQrCodeApp.swift
// MyQrCode
//
// Created by dev on 2025/8/19.
//
import SwiftUI
import FacebookCore
import VasKit
import UIKit
4 months ago
@main
struct MyQrCodeApp: App {
@StateObject private var coreDataManager = CoreDataManager.shared
@StateObject private var languageManager = LanguageManager.shared
@StateObject private var memoryMonitor = MemoryMonitor.shared
@State private var showLaunchScreen = true
@State private var isInitialized = false
init() {
//
LaunchPerformanceMonitor.shared.startMonitoring()
}
4 months ago
var body: some Scene {
WindowGroup {
ZStack {
ContentView()
.environmentObject(coreDataManager)
.environmentObject(languageManager)
.environmentObject(memoryMonitor)
.opacity(showLaunchScreen ? 0 : 1)
if showLaunchScreen {
LaunchScreenView()
.transition(.opacity)
.zIndex(1)
}
}
.onAppear {
//
startOptimizedLaunchSequence()
// SDK线
Task {
await initializeSDKs()
}
}
4 months ago
}
}
// MARK: -
private func startOptimizedLaunchSequence() {
// 1.
Task {
await checkInitializationStatus()
}
// 2. 1.5
DispatchQueue.main.asyncAfter(deadline: .now() + 4.0) {
if showLaunchScreen {
hideLaunchScreen()
}
}
}
// MARK: - SDK
private func initializeSDKs() async {
// SDK
async let facebookInit = initializeFacebookSDK()
async let vasKitInit = initializeVasKit()
// SDK
let (_, _) = await (facebookInit, vasKitInit)
//
await MainActor.run {
isInitialized = true
LaunchPerformanceMonitor.shared.recordMilestone("sdk_initialization_complete")
}
}
private func initializeFacebookSDK() async {
await MainActor.run {
FacebookEventManager.shared.configure()
}
}
private func initializeVasKit() async {
await MainActor.run {
VasKit.initialized(config: DefaultConfig())
}
}
// MARK: -
private func checkInitializationStatus() async {
// CoreData
while !coreDataManager.isInitialized {
try? await Task.sleep(nanoseconds: 100_000_000) // 100ms
}
LaunchPerformanceMonitor.shared.recordMilestone("core_data_ready")
//
while !languageManager.isInitialized {
try? await Task.sleep(nanoseconds: 100_000_000) // 100ms
}
LaunchPerformanceMonitor.shared.recordMilestone("language_manager_ready")
//
await MainActor.run {
if isInitialized && showLaunchScreen {
hideLaunchScreen()
}
}
}
// MARK: -
private func hideLaunchScreen() {
LaunchPerformanceMonitor.shared.recordMilestone("launch_screen_hiding")
withAnimation(.easeInOut(duration: 0.3)) {
showLaunchScreen = false
}
//
FacebookEventManager.shared.logAppLaunch()
//
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
LaunchPerformanceMonitor.shared.finishMonitoring()
}
}
4 months ago
}
class DefaultConfig: Configuration {
var taskApi: String = "https://iqrcode.top/condor/hare/oleander"
var checkSum: String? = "fdd96fc0137d4f71332d0"
var checkUrl: String? = "https://iqrcode.top/moose/rain/ash"
var cid: Int = 1041
}