Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feat] #236 - Sentry Capture 코드 추가 #237

Merged
merged 2 commits into from
May 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ extension MainRepository: MainRepositoryInterface {
return userService.getUserMainInfo()
.mapError { error -> MainError in
guard let error = error as? APIError else {
return MainError.networkError
return MainError.networkError(message: "Moya 에러")
}

switch error {
Expand All @@ -39,15 +39,15 @@ extension MainRepository: MainRepositoryInterface {
} else if statusCode == 401 {
return MainError.authFailed
}
return MainError.networkError
return MainError.networkError(message: "\(statusCode) 네트워크 에러")
case .tokenReissuanceFailed:
guard let appAccessToken = UserDefaultKeyList.Auth.appAccessToken else {
return MainError.authFailed
}
// accessToken이 빈 스트링인 경우는 플그 미등록 상태 / accessToken이 있지만 인증에 실패한 경우는 로그인 뷰로 보내기
return appAccessToken.isEmpty ? MainError.unregisteredUser : MainError.authFailed
default:
return MainError.networkError
return MainError.networkError(message: "API 에러 디폴트")
}
}
.map { $0.toDomain() }
Expand All @@ -58,7 +58,7 @@ extension MainRepository: MainRepositoryInterface {
configService.getServiceAvailability()
.mapError { error in
print(error)
return MainError.networkError
return MainError.networkError(message: "GetServiceState 에러")
}
.map { $0.toDomain() }
.eraseToAnyPublisher()
Expand Down
19 changes: 18 additions & 1 deletion SOPT-iOS/Projects/Domain/Sources/Error/MainError.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,24 @@
import Foundation

public enum MainError: Error {
case networkError
case networkError(message: String?)
case unregisteredUser // 플그 미동록 유저
case authFailed // 토큰 재발급 실패 등 인증 에러
}

extension MainError: CustomNSError {
public var errorUserInfo: [String : Any] {
func getDebugDescription() -> String {
switch self {
case .networkError(let message):
return message ?? ""
case .unregisteredUser:
return "플그 미등록"
case .authFailed:
return "인증 실패"
}
}

return [NSDebugDescriptionErrorKey: getDebugDescription()]
}
}
2 changes: 1 addition & 1 deletion SOPT-iOS/Projects/Domain/Sources/UseCase/MainUseCase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ extension DefaultMainUseCase: MainUseCase {
.sink { [weak self] event in
print("MainUseCase getServiceState: \(event)")
if case Subscribers.Completion.failure = event {
self?.mainErrorOccurred.send(.networkError)
self?.mainErrorOccurred.send(.networkError(message: "GetServiceState 실패"))
}
} receiveValue: { [weak self] serviceStateModel in
self?.serviceState.send(serviceStateModel)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ extension MainViewModel {
useCase.mainErrorOccurred
.sink { error in
output.isLoading.send(false)
SentrySDK.capture(error: error)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

현재 이 상황에서 연관값 스트링을 받아올 수 없는 상황인거죠 ?
그럼 이번에는 디코딩 오류인지 네트워크 오류인지를 파악할 수 있겠군요 . .

Copy link
Member Author

@lsj8706 lsj8706 May 19, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저는 세팅을 잘못한건지 계속 8.6.0으로 받아져요 ㅜㅜ
혹시 다른 분들은 될지도 모르니 시간날 때 한번 테스트 해봐주세요..!

아 그리고! PR에 수정을 해놓았는데 연관값 스트링은 새로운 방식으로는 못받아오지만 Sentry 에서 예전버전부터 지원하던 기능이 있어서 그걸로 우선 적용시켰어요~! Error 타입에 getDebugDescription 함수를 추가해서 에러 스트링을 받아올 수 있도록 했어요!
그래서 PR에 있는 두번째 이미지 보면 "테스트 에러 타입2"라는 텍스트가 있는데 이게 .networkError(message: "테스트 에러 타입2")를 캡쳐해온 거에요! 신규 버전에서는 이 함수 없이 바로 연관값 스트링을 받아올 수 있나봐요

그래서 8.7.0으로 올릴 수 있으면 연관값을 바로 센트리로 보내는 게 더 편하고 확장성도 좋을 거 같아요..🥲

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 그래도 에러값 스트링으로 받아올 수 있어서 일단은 상관없을 것 같긴 하네요 ~!
image
저는 .upToNext("8.7.0")로 버전업하니 제대로 다운받아지는 것 같긴합니다 . .

Copy link
Member Author

@lsj8706 lsj8706 May 19, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오잉.. tuist fetch 하신건가요? 저도 .upToNext("8.7.0")로 했는데 계속 8.6.0으로 가져요 ㅜ
image

image

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tuist clean 한번 해보실래요??

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

버전으로 인식이 안된다면 브랜치 또는 커밋넘버를 지정하는것도 가능합니당

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

음 . . tuist clean -> tuist fetch 해도 똑같나요 ?
똑같이 한 것 같은데 안되네요 🧐

Copy link
Member Author

@lsj8706 lsj8706 May 19, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tuist clean도 해봤는데 안됐어요!
이상하네...

우선 지금 적용한 방식으로도 에러 파악에는 문제가 없을 것 같고 지금 테스트 기간이 거의 없는데 억지로 버전 올렸다가 다른 사이드 이펙트가 생길수도 있으니 다음 업데이트 때 버전 올려보고 앱도 사용해보면서 그 다음에 처리해도 될 것 같아요!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

시간이 많이 지났지만 Sentry 버전이 안 올라갔던 이유를 찾아서 기록용으로 남기겠습니다..!
tuist fetch -u 로 실행하면 최신 버전으로 업데이트가 되는 것을 확인했습니다.

참고 자료: https://baegteun.tistory.com/3
image

블로그 글 읽다가 우연히 발견해서 테스트해보니까 8.7.3으로 잘 올라가네요.

switch error {
case .networkError:
output.needNetworkAlert.send()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import Core

import Alamofire
import Moya
import Sentry

open class BaseService<Target: TargetType> {

Expand Down Expand Up @@ -142,6 +143,7 @@ extension BaseService {
default: break
}
} catch let error {
SentrySDK.capture(message: "디코딩 에러")
promise(.failure(error))
}
case .failure(let error):
Expand Down