Skip to content

Commit 9be3af4

Browse files
authored
Merge pull request #194 from YAPP-Github/BOOK-293-fix/#192
fix: 문장 공유 카드 이미지 접근 권한 버그 외 버그 2건 수정
2 parents c086497 + 0cd7fc5 commit 9be3af4

5 files changed

Lines changed: 69 additions & 13 deletions

File tree

src/Projects/BKPresentation/Sources/Common/Component/ToastMessageView.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ final class ToastMessageView: UIView {
3737
private func setupLayout() {
3838
messageLabel.snp.makeConstraints {
3939
$0.centerX.equalToSuperview()
40-
$0.horizontalEdges.greaterThanOrEqualToSuperview().inset(16)
40+
$0.horizontalEdges.equalToSuperview().inset(16)
4141
$0.verticalEdges.equalToSuperview().inset(12)
4242
}
4343
}
@@ -58,7 +58,7 @@ final class ToastMessageView: UIView {
5858
toastView.snp.makeConstraints {
5959
$0.centerX.equalToSuperview()
6060
$0.bottom.equalTo(keyWindow.safeAreaLayoutGuide.snp.bottom).inset(88)
61-
$0.width.equalTo(keyWindow.safeAreaLayoutGuide.snp.width).inset(72)
61+
$0.width.equalTo(keyWindow.safeAreaLayoutGuide.snp.width).inset(36)
6262
}
6363

6464
toastView.alpha = 0.0

src/Projects/BKPresentation/Sources/MainFlow/BookDetail/View/SentenceCardViewController.swift

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,16 @@ final class SentenceCardViewController: BaseViewController<SentenceCardView> {
8282
}
8383
.store(in: &cancellables)
8484

85+
viewModel.statePublisher
86+
.map(\.requestAccess)
87+
.removeDuplicates()
88+
.filter { $0 == true }
89+
.receive(on: DispatchQueue.main)
90+
.sink { [weak self] _ in
91+
self?.presentSettingsAlert()
92+
}
93+
.store(in: &cancellables)
94+
8595
viewModel.statePublisher
8696
.map { $0.isLoading }
8797
.removeDuplicates()
@@ -95,7 +105,6 @@ final class SentenceCardViewController: BaseViewController<SentenceCardView> {
95105
}
96106
.store(in: &cancellables)
97107
}
98-
99108
}
100109

101110
extension SentenceCardViewController {
@@ -118,4 +127,27 @@ extension SentenceCardViewController {
118127

119128
self.present(activityViewController, animated: true, completion: completion)
120129
}
130+
131+
private func presentSettingsAlert() {
132+
let dialog = BKDialog(
133+
title: "접근 권한 필요",
134+
subtitle: "설정에서 사진 추가 권한을 허용해주세요.",
135+
config: .init(
136+
leftButtonTitle: "취소",
137+
leftButtonAction: { [weak self] in
138+
self?.viewModel.send(.settingsAlertDismissed)
139+
},
140+
rightButtonTitle: "설정으로 이동",
141+
rightButtonAction: { [weak self] in
142+
self?.viewModel.send(.settingsAlertDismissed)
143+
if let url = URL(string: UIApplication.openSettingsURLString) {
144+
UIApplication.shared.open(url)
145+
}
146+
}
147+
)
148+
)
149+
150+
let dialogViewController = BKDialogViewController(dialog: dialog)
151+
present(dialogViewController, animated: true)
152+
}
121153
}

src/Projects/BKPresentation/Sources/MainFlow/BookDetail/ViewModel/SentenceCardViewModel.swift

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,15 @@ import Foundation
77
import Photos
88
import UIKit
99

10+
enum PhotoAccessError: Error {
11+
case denied
12+
}
13+
1014
final class SentenceCardViewModel: BaseViewModel {
1115
struct State {
1216
var data: BookDetailItem?
1317
var alertInfo: String?
18+
var requestAccess: Bool = false
1419
var isLoading: Bool = false
1520
}
1621

@@ -19,6 +24,7 @@ final class SentenceCardViewModel: BaseViewModel {
1924
case didTapSaveButton(image: UIImage)
2025
case saveImageResult(Result<Void, Error>)
2126
case alertDismissed
27+
case settingsAlertDismissed
2228
case prepareToSaveImage
2329
}
2430

@@ -60,11 +66,16 @@ final class SentenceCardViewModel: BaseViewModel {
6066
case .success:
6167
newState.alertInfo = "이미지를 저장했습니다!"
6268
case .failure(let error):
63-
// TODO : error는 로그로 찍어서 수집하기
64-
newState.alertInfo = "[저장 실패] 잠시 후 다시 시도해주세요."
69+
if error is PhotoAccessError {
70+
newState.requestAccess = true
71+
} else {
72+
newState.alertInfo = "[저장 실패] 잠시 후 다시 시도해주세요."
73+
}
6574
}
6675
case .alertDismissed:
6776
newState.alertInfo = nil
77+
case .settingsAlertDismissed:
78+
newState.requestAccess = false
6879
case .prepareToSaveImage:
6980
newState.isLoading = true
7081
}
@@ -108,12 +119,14 @@ final class SentenceCardViewModel: BaseViewModel {
108119
if status == .notDetermined {
109120
status = await PHPhotoLibrary.requestAuthorization(for: .addOnly)
110121
}
111-
guard status == .authorized || status == .limited else {
112-
throw NSError(
113-
domain: "PhotoLibrary",
114-
code: 2,
115-
userInfo: [NSLocalizedDescriptionKey: "포토 라이브러리 접근 권한이 필요합니다."]
116-
)
122+
123+
switch status {
124+
case .authorized, .limited:
125+
return
126+
case .denied, .restricted:
127+
throw PhotoAccessError.denied
128+
default:
129+
throw PhotoAccessError.denied
117130
}
118131
}
119132
}

src/Projects/BKPresentation/Sources/MainFlow/Setting/View/SettingView.swift

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,19 @@ final class SettingView: BaseView {
5252
_ isUpdateAvailable: Bool
5353
) {
5454
self.appVersion = appVersion
55-
self.recentVersion = recentVersion
5655
self.isUpdateAvailable = isUpdateAvailable
56+
57+
if let currentVersion = Version(appVersion),
58+
let lastestVersion = Version(recentVersion) {
59+
if lastestVersion < currentVersion {
60+
self.recentVersion = appVersion
61+
} else {
62+
self.recentVersion = recentVersion
63+
}
64+
} else {
65+
self.recentVersion = recentVersion
66+
}
67+
5768
collectionView.reloadData()
5869
}
5970
}

src/SupportingFiles/Booket/Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<key>CFBundlePackageType</key>
2222
<string>APPL</string>
2323
<key>CFBundleShortVersionString</key>
24-
<string>1.1.0</string>
24+
<string>1.1.1</string>
2525
<key>CFBundleURLTypes</key>
2626
<array>
2727
<dict>

0 commit comments

Comments
 (0)