DEV_Larva

Google 로그인 - GIDSignIn오류 본문

Xcode/Xcode 오류 모음집

Google 로그인 - GIDSignIn오류

NelchuPapa 2023. 1. 12. 01:58
반응형

새로운 프로젝트에서 구글 로그인이 필요할 것 같아 필요한 기본적인 UI작업과 로그인에 필요한 패키지를 설치하고 구글 공식 문서를 참고해서 작업 중에 있었다. 그런데 웃긴 건 다른 사람들은 오류가 난다는 부분에서는 난 오히려 전혀 문제가 없이 빌드가 되었다. 문제는 다른 사람들이 안 나던 부분에서는 나는 오류가 슬슬 나오기 시작했는데.. 오늘은 그 오류를 해결한 과정을 한번 정리해 보자.

 


1.  어디서 오류?

 

내가 오류가 났던 부분은 앱의 클라인언트 ID를 Google 로그인 메서드에 전달하고 Google 인증 토큰에서 Firebase 인증 자격을 만들어 주는 과정에서 발견되었다.  아래쪽 코드에서 정확히 어떤 부분이었는지 확인할 수 있다. 

 

guard let clientID = FirebaseApp.app()?.options.clientID else { return }
let config = GIDConfiguration(clientID: clientID)

//정확하게는 여기 이 부분!!!
GIDSignIn.sharedInstance.signIn(with: config, presenting: self) { [unowned self] user, error in

  if let error = error {
    // ...
    return
  }

 

이 부분에서 Type of expression is ambiguous without more context이라는 에러가 출력되었는데.. 무슨 말인지부터 모르겠어서 구글링 해보니 표현식 유형이 더 많은 콘텍스트 없이 모호하다고 한다. 그래서 또 stackoverflow를 찾아보면서 비슷한 오류가 있는지 찾아보기도 하고 유튜브에서 구글 로그인 방법에 대한 튜토리얼도 여러 개를 찾아보면서 어떤 점이 달랐는지 찾아보기도 했다. 그러다 찾은 점이 구글 공식 문서에 나와있는 저 문제의 코드를 수정하지 않으면 오류가 났던 것이다.

 

 


2.  수정 시작

 

영상을 참고해 문제의 코드 부분을 아래 코드와 같이 변경해 주었다. 기존 presenting 이후에 있던 코드에서 변경된 점을 확인할 수 있다. 

 

GIDSignIn.sharedInstance.signIn(with: config, presenting: getRootViewController())
{ user,error in

 

그리고 getRootViewController라는 새로운 Swift파일을 하나 새롭게 만들어 주었다. 

import Foundation

import SwiftUI

extension View {
    func getRootViewController() -> UIViewController {
        guard let screen = UIApplication.shared.connectedScenes.first as? UIWindowScene else {
            return .init()
        }

        guard let root = screen.windows.first?.rootViewController else {
            return .init()
        }
        

        return root
    }
}

 

그런데 놀랍게도 전혀 오류가 달라지지 않았다... 이때부터는 다시 원점으로 돌아가서 다시 크롤링해 보면서 공부해 봤지만 달라지는 게 없었다. 

 


3.  새로운 시도

 

이 방법 저 방법을 시도해 보다가 공식 문서에 올라와 있는 코드가 문제가 있다는 것은 말이 되질 않았기 때문에 내가 프로젝트를 시작하며 새롭게 추가하였던 구글 로그인 패키지들의 버전에 따라 결과가 달라질 수도 있다는 여러 stackoverflow의 답변들을 참고해서 가장 최신의 버전 패키지가 아닌 정확한 버전을 직접 골라 재설치를 해보았다. 정말 아무렇지 않게 해당 오류가 쓔웅하고 사라졌고, 빌드 및 실행 또한 너무 잘 잘되었다. 그리고 실질적인 로그인 구현이 되는지 확인해 보기 위해 Firebase Authentication을 확인해 보니 로그인이 잘되고 있다는 것을 확인할 수 있었다.

 

로그인 성공 기록!

 

 

기존의 패키지에서 재설치를 해보기 전에 최신 버전으로 모든 패키지를 업데이트해보기도 했는데 이는 전혀 효과가 없어 의심되는 패키지를 수동으로 다운그레이드한 결과된 것으로 생각이 든다. 나의 경우 GoogleSignIn의 버전을 기존 7.0.0에서 6.2.3으로 바꾸니 오류가 사라졌다.

다운 그레이드 설정

 


생각보다 로그인 기능에서 많은 시간을 뺏겼지만, 계속 조사하면서 패키지의 버전을 확인하고 직접 오류를 해결했다는 것에 다행으로 여기면서 오늘의 글은 여기서 끝!!👏👏👏

반응형