AcaMate_iOS/AcaMate/1. View/1. Intro & Login/IntroView.swift

116 lines
3.8 KiB
Swift

//
// IntroView.swift
// AcaMate
//
// Created by Sean Kim on 12/1/24.
//
import SwiftUI
import Combine
struct IntroView: View {
@State var cancellables: Set<AnyCancellable> = []
var body: some View {
NavigationStack {
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("정상 동작")
}
default:
printLog("선택 업데이트 넘어감")
}
}
}
.store(in: &cancellables)
}
}
}
private func loadVersion() -> Future<VersionData, Error> {
return Future { promise in
loadAPIData(url: "\(API_URL)",
path: "/api/v1/in/app/version",
parameters: ["type":"I"],
decodingType: APIResponse<VersionData>.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<VersionData> 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()
}