@@ -35,14 +35,82 @@ struct DMU_iOSApp: App {
3535 UINavigationBar . appearance ( ) . standardAppearance = appearanceNavigationBar
3636 }
3737
38+ @Environment ( \. scenePhase) private var scenePhase
39+
3840 @UIApplicationDelegateAdaptor ( AppDelegate . self) var appDelegate
3941
4042 var body : some Scene {
4143 WindowGroup {
4244 ContentView ( )
45+ . onAppear {
46+ checkAndUpdateIfNeeded ( )
47+ }
48+ . onChange ( of: scenePhase) { newPhase in
49+ if newPhase == . active {
50+ checkAndUpdateIfNeeded ( )
51+ }
52+ }
4353 . environmentObject ( UserSettings ( ) )
4454 }
4555 }
56+
57+ func checkAndUpdateIfNeeded( ) {
58+ AppStoreCheck ( ) . latestVersion { marketingVersion in
59+ DispatchQueue . main. async {
60+ guard let marketingVersion = marketingVersion else {
61+ print ( " 앱스토어 버전을 찾지 못했습니다. " )
62+ return
63+ }
64+
65+ // 현재 기기의 버전
66+ let currentProjectVersion = AppStoreCheck . appVersion ?? " "
67+
68+ // 앱스토어의 버전을 .을 기준으로 나눈 것
69+ let splitMarketingVersion = marketingVersion. split ( separator: " . " ) . compactMap { Int ( $0) }
70+
71+ // 현재 기기의 버전을 .을 기준으로 나눈 것
72+ let splitCurrentProjectVersion = currentProjectVersion. split ( separator: " . " ) . compactMap { Int ( $0) }
73+
74+ if splitCurrentProjectVersion. count == 3 && splitMarketingVersion. count == 3 {
75+ // 버전을 순차적으로 비교
76+ for (current, marketing) in zip ( splitCurrentProjectVersion, splitMarketingVersion) {
77+ if current < marketing {
78+ showUpdateAlert ( version: marketingVersion)
79+ return
80+ } else if current > marketing {
81+ print ( " 현재 최신 버전입니다. " )
82+ return
83+ }
84+ }
85+ print ( " 현재 최신 버전입니다. " )
86+ } else {
87+ print ( " 버전 형식이 올바르지 않습니다. " )
88+ }
89+ }
90+ }
91+ }
92+
93+ func showUpdateAlert( version: String ) {
94+ guard let windowScene = UIApplication . shared. connectedScenes. first as? UIWindowScene ,
95+ let window = windowScene. windows. first else {
96+ print ( " 윈도우 씬을 찾을 수 없습니다. " )
97+ return
98+ }
99+
100+ let alert = UIAlertController (
101+ title: " 업데이트 알림 " ,
102+ message: " 더 나은 서비스를 위해 DMforU가 수정되었어요. \n 업데이트할까요? " ,
103+ preferredStyle: . alert
104+ )
105+
106+ let updateAction = UIAlertAction ( title: " 업데이트 " , style: . default) { _ in
107+ // 업데이트 버튼을 누르면 해당 앱스토어로 이동한다.
108+ AppStoreCheck ( ) . openAppStore ( )
109+ }
110+
111+ alert. addAction ( updateAction)
112+ window. rootViewController? . present ( alert, animated: true , completion: nil )
113+ }
46114}
47115
48116//MARK: - Firebase Cloud Message
0 commit comments