Flutter iOS 앱 개발할 때 알아야 할 `pubspec.yaml`과 `CocoaPods`의 관계
Flutter로 앱을 개발하다 보면 pubspec.yaml
만 잘 관리하면 다 되는 것처럼 느껴지지만,
iOS 앱을 빌드하려는 순간부터 갑자기 pod install
, Podfile
, Firebase iOS SDK
같은 생소한 용어들이 등장하기 시작합니다.
특히 Firebase 같은 네이티브 기능이 포함된 패키지를 사용할 때는 이런 구조를 제대로 이해하고 있지 않으면,
빌드 오류에 막히고 무엇이 문제인지 알 수 없게 되는 경우가 많습니다.
이 글에서는 Flutter iOS 앱 개발에서 Flutter 패키지 (pubspec.yaml
)와 CocoaPods (Podfile
)가 어떻게 연결되어 있는지,
그리고 왜 서로 영향을 주고받는지 이론적으로 명확하게 정리해보려고 합니다.
1️⃣ pubspec.yaml
은 무엇을 정의하는가?
pubspec.yaml
은 Flutter 프로젝트에서 사용하는 Dart 패키지를 정의하는 설정 파일입니다.
예시:
dependencies:
firebase_auth: ^4.0.0
firebase_crashlytics: ^3.4.9
이렇게 하면 Dart 코드에서 firebase_auth
, firebase_crashlytics
API를 사용할 수 있습니다.
하지만 중요한 건 이 Flutter 패키지들이 내부적으로 iOS에서 실제로 동작하려면, 네이티브 코드가 필요하다는 점입니다.
2️⃣ Flutter 패키지는 .podspec
을 통해 iOS 네이티브 라이브러리와 연결된다
Flutter에서 사용하는 패키지 중 일부는 iOS에서 Swift 또는 Objective-C로 구현된 기능을 호출해야 하는 경우가 있습니다.
예: firebase_auth
는 Dart 코드만으로는 작동하지 않으며, 실제로는 FirebaseAuth.framework
를 불러옵니다.
이때 사용하는 것이 .podspec
파일입니다.
firebase_auth
패키지 내부에ios/firebase_auth.podspec
존재- CocoaPods에게 "이 Flutter 패키지는 iOS SDK의 어떤 네이티브 코드에 의존한다"고 알려줌
3️⃣ .symlinks/plugins/
폴더의 역할
flutter pub get
을 실행하면.pub-cache
에 있는 패키지들이 ios/.symlinks/plugins/
폴더에 심볼릭 링크로 연결됩니다.
이 경로는 CocoaPods가 .podspec
파일을 탐지하는 데 사용됩니다.
4️⃣ pod install
은 실제 iOS 네이티브 라이브러리를 설치한다
flutter pub get
은 Dart 의존성을 설치하지만,pod install
은 Podfile을 기반으로 iOS 네이티브 SDK(Firebase 등)를 설치합니다.
예: firebase_crashlytics
→ Firebase/Crashlytics
설치됨
이걸 실행하지 않으면 iOS 빌드 중 헤더를 못 찾거나 라이브러리가 누락되어 오류 발생
5️⃣ iOS 빌드 흐름 요약
[ pubspec.yaml ]
↓ flutter pub get
[ .pub-cache 내 Dart 패키지 ] (내부에 .podspec 존재)
↓ .symlinks/plugins 로 연결
[ pod install ]
↓ .podspec 기준으로 iOS SDK 설치 (Firebase 등)
[ ios/Pods ] 실제 iOS 라이브러리 저장소
즉, Flutter 패키지 하나를 추가하면, 그 패키지가 필요로 하는 iOS SDK가 .podspec
을 통해 CocoaPods에 의해 설치됩니다.
6️⃣ Android와는 뭐가 다를까?
플랫폼 | 네이티브 연동 방식 |
---|---|
Android | build.gradle , .aar |
iOS | Podfile , .podspec , CocoaPods |
Android는 .aar
만 포함되면 빌드 가능하지만,
iOS는 CocoaPods를 통해 네이티브 프레임워크를 직접 설치해야 합니다.
7️⃣ 왜 Flutter iOS에서 pod 오류가 자주 발생하는가?
.podspec
이 가리키는 SDK 버전이 현재 Xcode 또는 다른 Pod들과 호환되지 않음use_frameworks!
,modular_headers!
설정이 충돌 발생- Firebase SDK처럼 내부적으로 C++까지 포함된 경우, 빌드 규칙이 매우 민감함
즉, Flutter 코드가 문제가 아니고,
내부에서 사용하는 iOS 네이티브 라이브러리와 컴파일러의 충돌이 원인일 때가 많습니다.
✅ 정리
구성요소 | 역할 |
---|---|
pubspec.yaml |
Flutter에서 사용하는 Dart 패키지를 정의 |
.podspec |
해당 Dart 패키지가 iOS에서 어떤 SDK를 요구하는지 명시 |
pod install |
.podspec 기준으로 실제 iOS SDK 설치 |
.symlinks/plugins |
CocoaPods가 .podspec을 읽을 수 있도록 연결해주는 브리지 |
ios/Pods |
최종적으로 설치된 iOS 네이티브 라이브러리 |
Flutter로 iOS 앱을 개발하면서 iOS 빌드가 터지는 원인이 Flutter 자체가 아닌 CocoaPods이나 .podspec
때문이라는 걸 모르고
며칠을 고생한 적이 한두 번이 아니었습니다.
이 구조를 이해하고 나면, 왜 pod install
이 필요한지, 왜 firebase_crashlytics
가 버전에 따라 빌드 오류를 내는지 모두 명확해집니다.
지금 이 글을 읽고 계신다면, CocoaPods와 Flutter 패키지 사이의 관계를
"아! 이렇게 되는 거구나!" 하고 잡으셨기를 바랍니다.