🤣 소셜 로그인 관련 메모리 누수

임클·2025년 7월 2일

🤣 소셜 로그인 관련 메모리 누수

  • 문제 상황
    • OAuth를 관리하는 ASWebAuthenticationSession 인스턴스가 내부 _referenceToSelf 프로퍼티로 자기 자신을 강하게 참조하는 현상 발생


  • 원인
    • 카카오톡으로 로그인을 할경우 카카오톡 로그인 -> (여기서 메모리 누수 발생) 카카오톡 자체 필수/선택 동의항목 제출 페이지가 등장하게 되는데 두번째 화면에서 두 세션(SFAuthenticationSession, ASWebAuthenticationSession)에 메모리 누수가 발생
  • 해결
    		var kakaoAuthSession: ASWebAuthenticationSession?
    		...
    		/// 카카오 로그인
        func logInKakao() async throws -> Supabase.Session? {
            let redirectURL = Bundle.main.redirectURL
            do {
                let session = try await client.auth.signInWithOAuth(
                    provider: Provider.kakao,
                    redirectTo: redirectURL
                ) { [weak self] session in
                    guard let self else { return }
                    self.kakaoAuthSession = session
                    session.presentationContextProvider = self
                    session.prefersEphemeralWebBrowserSession = true
                }
                kakaoAuthSession = nil
                return session
            } catch {
                kakaoAuthSession?.cancel()
                kakaoAuthSession = nil
                NSLog("error: \(error.localizedDescription)")
                throw AuthError.logInFailed(.kakao, error)
            }
        }
    • 카카오톡 로그인을 위한 ASWebAuthenticationSession로 개별 관리
    • kakaoAuthSession = session : 나중에 취소하거나 상태를 추적하기 위해 인스턴스 프로퍼티에 저장
    • presentationContextProvider : 로그인 화면(웹뷰)을 어느 뷰 컨트롤러 위에 띄울지 결정하는 델리게이트


0개의 댓글