Flutter 앱에 google_sign_in 패키지를 추가하고 flutter build ipa를 실행했더니 CocoaPods 단계에서 빌드가 실패했다.


에러 메시지

[!] CocoaPods could not find compatible versions for pod "GTMSessionFetcher/Core":
  In snapshot (Podfile.lock):
    GTMSessionFetcher/Core (< 5.0, = 4.5.0, >= 3.4)

  In Podfile:
    google_sign_in_ios was resolved to 0.0.1, which depends on
      GoogleSignIn (~> 8.0) was resolved to 8.0.0, which depends on
        GTMSessionFetcher/Core (~> 3.3)

핵심은 Podfile.lock에 고정된 GTMSessionFetcher 버전(4.5.0)과 google_sign_in이 요구하는 버전(~> 3.3)이 충돌한다는 것이다.


원인

기존 프로젝트에 Firebase 관련 Pod들이 이미 설치되어 있으면 Podfile.lockGTMSessionFetcher 버전이 고정된다. 새로 추가한 google_sign_in 패키지의 네이티브 의존성인 GoogleSignIn SDK는 GTMSessionFetcher/Core ~> 3.3을 요구하는데, lock 파일에 잡힌 버전과 호환되지 않으면 충돌이 발생한다.

CocoaPods는 Podfile.lock의 버전을 우선하기 때문에 pod install만으로는 해결되지 않는다.


해결

iOS 디렉토리에서 해당 Pod만 업데이트하면 된다.

cd ios && pod update GTMSessionFetcher

이렇게 하면 GTMSessionFetcher가 모든 의존성을 만족하는 버전으로 재해석된다. 전체 pod update를 하면 다른 Pod까지 불필요하게 올라갈 수 있으니 타겟을 지정하는 게 안전하다.

업데이트 후 다시 빌드하면 정상적으로 통과한다.

flutter build ipa --release

전체 과정 요약

Google Sign-In을 Flutter iOS에 추가하려면 아래 순서로 진행한다.

1. Google Cloud Console에서 OAuth iOS 클라이언트 생성

  • 애플리케이션 유형: iOS
  • 번들 ID: Xcode 프로젝트의 PRODUCT_BUNDLE_IDENTIFIER
  • 팀 ID: Apple Developer의 DEVELOPMENT_TEAM

생성하면 Client IDReversed Client ID가 포함된 plist 파일을 다운로드할 수 있다.

2. GoogleService-Info.plist에 CLIENT_ID 추가

Firebase 콘솔에서 다운로드한 GoogleService-Info.plist에는 OAuth CLIENT_ID가 기본 포함되지 않는 경우가 있다. 직접 추가해야 한다.

<key>CLIENT_ID</key>
<string>YOUR_CLIENT_ID.apps.googleusercontent.com</string>
<key>REVERSED_CLIENT_ID</key>
<string>com.googleusercontent.apps.YOUR_CLIENT_ID</string>

3. Info.plist에 URL Scheme 추가

Google Sign-In 콜백을 받기 위해 REVERSED_CLIENT_ID를 URL scheme으로 등록한다.

<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleTypeRole</key>
    <string>Editor</string>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>com.googleusercontent.apps.YOUR_CLIENT_ID</string>
    </array>
  </dict>
</array>

4. pubspec.yaml에 패키지 추가

dependencies:
  google_sign_in: ^6.2.2

5. pod update로 버전 충돌 해결

flutter pub get
cd ios && pod update GTMSessionFetcher

6. 빌드 및 배포

flutter build ipa --release

삽질 포인트

  • pod install만 하면 lock 파일 제약 때문에 해결되지 않는다. 반드시 pod update [패키지명]으로 타겟 업데이트가 필요하다.
  • pod update (전체)는 다른 Pod 버전까지 올릴 수 있어서 사이드이펙트 위험이 있다. 충돌 나는 Pod만 지정하는 게 좋다.
  • Google Cloud Console에서 OAuth 클라이언트를 만들 때 Firebase 프로젝트와 같은 프로젝트 번호인지 확인해야 한다. 다른 프로젝트에 만들면 토큰 검증에서 실패한다.
  • GoogleService-Info.plistCLIENT_IDInfo.plist의 URL Scheme은 쌍으로 설정해야 한다. 하나라도 빠지면 iOS에서 Google 로그인이 동작하지 않는다.