@@ -23,9 +23,8 @@ struct WKImageDownloadHandler: WKDownloadExecutable {
23
23
24
24
guard let webVC else { return nil }
25
25
26
- guard await requestAuthorization ( )
27
- else {
28
- //TODO: 권한 요청
26
+ guard await requestAuthorization ( ) else {
27
+ await presentGoToSettingAlert ( from: webVC)
29
28
return nil
30
29
}
31
30
@@ -41,8 +40,8 @@ struct WKImageDownloadHandler: WKDownloadExecutable {
41
40
guard let fileURL = try ? saveToTemporaryDirectory ( pngData, suggestedFilename)
42
41
else { return nil }
43
42
44
- presentActivityVC ( fileURL, from: webVC)
45
-
43
+ await presentActivityVC ( fileURL, from: webVC)
44
+
46
45
return nil
47
46
}
48
47
@@ -60,29 +59,45 @@ struct WKImageDownloadHandler: WKDownloadExecutable {
60
59
return temporaryURL
61
60
}
62
61
62
+ @MainActor
63
63
private func presentActivityVC( _ fileURL: URL , from webVC: SOPTWebViewControllable ) {
64
- Task { @MainActor in
65
- let activityVC = UIActivityViewController (
66
- activityItems: [ fileURL] ,
67
- applicationActivities: nil
68
- )
69
-
70
- activityVC. completionWithItemsHandler = {
71
- activityType, completed, returnedItems, activityError in
72
- if activityType == . saveToCameraRoll {
73
- guard activityError == nil else {
74
- ToastUtils . showMDSToast ( type: . error, text: " 이미지 저장에 실패했습니다. " )
75
- return
76
- }
77
-
78
- if completed {
79
- ToastUtils . showMDSToast ( type: . success, text: " 이미지가 저장되었습니다. " )
80
- }
64
+
65
+ let activityVC = UIActivityViewController (
66
+ activityItems: [ fileURL] ,
67
+ applicationActivities: nil
68
+ )
69
+
70
+ activityVC. completionWithItemsHandler = {
71
+ activityType, completed, returnedItems, activityError in
72
+ if activityType == . saveToCameraRoll {
73
+ guard activityError == nil else {
74
+ ToastUtils . showMDSToast ( type: . error, text: " 이미지 저장에 실패했습니다. " )
75
+ return
76
+ }
77
+
78
+ if completed {
79
+ ToastUtils . showMDSToast ( type: . success, text: " 이미지가 저장되었습니다. " )
81
80
}
82
81
}
83
- // 공유 화면 표시
84
- webVC. vc. present ( activityVC, animated: true , completion: nil )
85
82
}
83
+ // 공유 화면 표시
84
+ webVC. vc. present ( activityVC, animated: true , completion: nil )
85
+
86
+ }
87
+
88
+ @MainActor
89
+ private func presentGoToSettingAlert( from webVC: SOPTWebViewControllable ) {
90
+ webVC. vc. makeAlert (
91
+ title: " 갤러리 접근 권한 설정 " ,
92
+ message: " 이미지를 저장하시려면 갤러리 접근 권한이 필요합니다. " ,
93
+ actions: . init( title: " 나중에 " , style: . destructive) ,
94
+ . init( title: " 설정 " , style: . default, handler: { _ in
95
+ guard let url = URL ( string: UIApplication . openSettingsURLString) ,
96
+ UIApplication . shared. canOpenURL ( url) else { return }
97
+
98
+ UIApplication . shared. open ( url, completionHandler: nil )
99
+ } )
100
+ )
86
101
}
87
102
}
88
103
0 commit comments