forked from AcaMate/AcaMate_iOS
116 lines
3.8 KiB
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()
|
|
}
|