App Crash Report에서 Concurrency 오류 발생

KakaoLogin시 간혈적으로 App Crash가 발생을 확인

 

다양한 ThirdPartyLogin을 위해 async/await을 사용하고 있었기때문에 withCheckedThrowingContinuation로 감싼 형태였고
특정 기기나 OS, 혹은 특정 유저마다 발생하는게 아니였고 같은 조건이여도 정상적으로 동작하는 경우가 있었고

CheckedContinuation.resume(returning:)
CheckedContinuation.resume(throwing:)

 

 

둘 모두에서 Crash가 발생하여 SDK에서 발생하는 문제임이라 생각하여 개발자 포럼에 확인 요청
- iOS SDK에서 Concurrency 사용시 app crash

 

iOS SDK에서 Concurrency 사용시 app crash

KakaoOpenSDK - 2.24.0 App ID - 573044 문의 시, 사용하시는 SDK 버전 정보와 디벨로퍼스 앱ID를 알려주세요. 앱에서 Concurrency 사용을 위해서 UserApi.shared.loginWithKakaoTalk 를 withCheckedThrowingContinuation로 감싸서

devtalk.kakao.com

 

@MainActor
    func loginWithKakao() async throws -> OAuthToken {
        try await UserApi.isKakaoTalkLoginAvailable() ? loginWithKakaoTalk() : loginWithKakaoAccount()
    }

    @MainActor
    func loginWithKakaoTalk() async throws -> OAuthToken {
        try await withCheckedThrowingContinuation { continuation in
            UserApi.shared.loginWithKakaoTalk { oAuthToken, error in
                if let error {
                    continuation.resume(throwing: error)
                } else if let oAuthToken {
                    continuation.resume(returning: oAuthToken)
                } else {
                    continuation.resume(throwing: KakaoLoginError.emptyData)
                }
            }
        }
    }

    @MainActor
    func loginWithKakaoAccount() async throws -> OAuthToken {
        try await withCheckedThrowingContinuation { continuation in
            UserApi.shared.loginWithKakaoAccount { oAuthToken, error in
                if let error {
                    continuation.resume(throwing: error)
                } else if let oAuthToken {
                    continuation.resume(returning: oAuthToken)
                } else {
                    continuation.resume(throwing: KakaoLoginError.emptyData)
                }
            }
        }
    }

 

 

카카오 측에서 오류 확인, 수정 후 배포

 

 

수정 된 SDK로 버전 업을 하였는데 같은 크래시 발생 .... 그 전 보단 확실히 줄었지만 내쪽 코드가 문제인것 같은데 혹시나 해서 재 문의

 

SDK 담당자분과 소통하면서 원인을 찾아가던 중 하기와 같은 답변을 받자마자 원인 파악이 가능했다.

 

라이브러리나 SDK는 문제가 없을거라는 안일한 생각이 문제였던것 .....

보자마자 nslock을 사용하여 단일 실행을 보장하였고 그 뒤엔 관련 크래시가 발생하지 않았다 ...ㅎㅎㅎㅎ

 

'iOS > Trouble Shooting' 카테고리의 다른 글

[iOS] gaurd let _ = try? await evaluateJavaScript 오류  (1) 2025.05.11

+ Recent posts