개발 slecs

clientID 누락으로 Google 로그인 터지던 iOS 크래시 수정

목차

Google Sign-In 로그인 플로우에서 iOS 사용자들이 겪던 크래시를 추적하고 수정했다. 겉으로는 "GIDSignIn signInWithOptions 예외"로 보였지만, 진짜 원인은 Apple 개발자 콘솔에 등록한 clientID를 앱 설정에서 누락한 것이었다.

문제의 발견

운영하는 비기독 모바일 앱 중 iOS에서만 Google 로그인 버튼을 누르면 크래시가 발생한다는 신고를 받았다. 안드로이드는 멀쩡했다. 처음엔 Firebase 설정 문제라고 생각했는데, 콘솔 로그를 보니 GIDSignIn signInWithOptions 호출 지점에서 예외가 던져지고 있었다.

여기서 주의할 점은 "GIDSignIn 라이브러리 자체의 버그"라고 성급하게 결론 지으면 안 된다는 거다. Google Sign-In 라이브러리는 꽤 성숙한 라이브러리고, iOS 크래시는 대부분 앱 쪽의 미설정이거나 버전 불일치다. 로그를 다시 읽어보니 명확한 신호가 있었다: clientID 또는 redirect URL 설정이 누락되었다는 경고 메시지.

수정한 변경사항

파일 역할 변경 내용
Info.plist iOS 앱 메타데이터·권한·설정 Google Sign-In clientID 및 URL Scheme 등록
login_screen.dart 로그인 UI 화면 GIDSignIn signInWithOptions 호출 방식 수정·예외 처리 강화
pubspec.yaml Flutter 의존성 명세 google_sign_in 패키지 버전 명시·정확화

Info.plist 설정의 중요성: iOS에서 Google Sign-In을 동작시키려면 Apple 개발자 포털에서 발급받은 clientID와 URL Scheme이 Info.plist에 등록되어 있어야 한다. 이게 없으면 GIDSignIn 인스턴스가 제대로 초기화되지 않는다. 우리는 Firebase 콘솔에만 설정했는데, iOS 앱 번들 자체의 Info.plist를 누락했던 거다.

// 수정 전: 예외 처리 없이 단순 호출
await GIDSignIn.instance.signInWithOptions(...)

// 수정 후: clientID 확인 및 예외 처리
try {
  final result = await GIDSignIn.instance.signInWithOptions(
    scopes: [...],
    // clientID 가 Info.plist 에서 제대로 읽혀야 함
  );
} catch (e) {
  // clientID 미설정 또는 redirect URL 오류 등 명확히 로깅
  debugPrint('Google Sign-In failed: $e');
  // 사용자에게 친화적 에러 메시지 표시
}

비슷한 이슈들과 일반 패턴

이 종류의 크래시는 대부분 플랫폼별 설정 비대칭에서 비롯된다:

  • Android는 잘됐는데 iOS만 안 됨: Android는 google-services.json에서 clientID를 읽지만, iOS는 Info.plist와 별도의 Google Sign-In 설정을 모두 요구한다.
  • Firebase 콘솔 설정과 앱 설정의 분리: 클라우드 콘솔에서는 보안상 complete한 설정을 해도, 각 플랫폼의 앱 번들이 그걸 읽을 권한이나 메타데이터가 없으면 무쓸모다.
  • 구글 SDK가 주는 경고 메시지를 놓치기 쉬움: "clientID not configured"는 흔한 경고인데, 초기 개발 단계에서 테스트 계정 실패로 치부하면 이렇게 배포까지 갈 수 있다.

더 일반적으로, OAuth2 / SSO 로그인 이슈를 추적할 땐:
1. 플랫폼(iOS/Android/Web)별로 각각의 credential 설정이 있는지 확인
2. 로그 메시지를 시간순으로 재구성 — 에러 발생 시점 10초 전부터의 관련 로그를 모두 뽑기
3. 라이브러리 버전과 공식 가이드의 최신 버전 비교 — 예를 들어 google_sign_in 패키지가 새 버전에서 플러그인 방식으로 변했다면 기존 코드는 작동하지 않음

팀 관점에서의 배운 점

iOS 개발 경험이 안드로이드만큼 풍부하지 않은 팀에서는 이런 "플랫폼별 설정"의 차이를 놓치기 쉽다. 코드리뷰 때 단순히 로직만 검토하고, 각 플랫폼의 manifest/plist/config 파일 변경사항까지 눈여겨보지 않으면 이런 버그가 배포까지 간다.

그래서 우리는 이 이후로:
- 플랫폼별 설정 변경 PR은 체크리스트 강제: "iOS 설정 추가했나?", "안드로이드와 차이점 문서화했나?"
- google_sign_in 같은 크로스플랫폼 라이브러리 업데이트할 땐 공식 마이그레이션 가이드를 링크 — 한두 메이저 버전만 올려도 플랫폼별 설정이 바뀌는 경우가 많다.
- 로그 덤프를 주기적으로 리뷰 — "사용자 리포트만 기다린다"는 식보다, 테스트 빌드에서 플랫폼별 로그를 모아두고 주말에 훑어보기

이 이슈는 개별 개발자의 실수라기보다, 팀 구조에서 iOS 카버리지가 약했던 신호다. 이후로 iOS 전담 리뷰어를 정해서 관련 PR엔 항상 한 번씩 들어오게 했다.


🛒 이 글과 어울리는 추천 상품

*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

댓글 0

첫 댓글 달아줘.