// // IntroView.swift // AcaMate // // Created by Sean Kim on 12/1/24. // import SwiftUI import Combine struct IntroView: View { @State var cancellables: Set = [] @Binding var naviState : NaviState var body: some View { VStack(spacing: 0) { Spacer() .frame(height: 100) Image("Team_Icon") .resizable() .frame(width: 200, height: 200) .background(.white) .border(.black) .padding() Spacer() HStack(spacing: 4) { Image("Team_Icon") .resizable() .frame(width: 24, height: 24) Text("STEIN") .font(.nps(font: .bold, size: 16)) .foregroundStyle(Color(.Text.detail)) } .padding(.bottom,12) Text("Copyright © Team.Stein") .font(.nps(font: .regular, size: 14)) .foregroundStyle(Color(.Text.detail)) .padding(.bottom,50) } .fullView(.Normal.normal) .onAppear { printLog("IntroView_onAppear") loadVersion() .sink { completion in switch completion { case .failure(let error): printLog(error) case .finished: break } } receiveValue: { version in switch compareVersion(version.force_ver, currentVersion()){ case .bigger: printLog("강제 업데이트") default: switch compareVersion(version.final_ver, currentVersion()) { case .bigger: if version.choice_update_yn { printLog("선택 업데이트") } else { printLog("정상 동작") naviState.set(act: .RESET, path: .Login) } default: printLog("선택 업데이트 넘어감") naviState.set(act: .MOVE, path: .Login) } } } .store(in: &cancellables) } } private func loadVersion() -> Future { return Future { promise in loadAPIData(url: "\(API_URL)", path: "/api/v1/in/app/version", parameters: ["type":"I"], decodingType: APIResponse.self) .sink { completion in switch completion { case .failure(let error): printLog("\(error)") promise(.failure(error)) case .finished: break } } receiveValue: { data in guard let apiData = data as? APIResponse else {return} printLog("\(apiData.data.toStringDict())") promise(.success(apiData.data)) } .store(in: &cancellables) } } private func currentVersion() -> String { guard let currentVer = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String else { return "" } return currentVer } private func versionChange(ver: String) -> [Int] { return ver.components(separatedBy: ["."]).map {Int($0) ?? 0} } } //#Preview { // IntroView(path: $NavigationPath()) //}