< iOS 의존성 관련 업데이트 오류 >
[!] cocoapods could not find compatible versions for pod "firebase/analytics":
in snapshot (podfile.lock): firebase/analytics (= 10.20.0)
in podfile: firebase_analytics (from `.symlinks/plugins/firebase_analytics/ios`) was resolved to 10.8.0, which depends on firebase/analytics (= 10.18.0)
위 오류 메시지는 cocoapods 가 podfile 과 podfile.lock 사이에서 호환되지 않는 버전의 의존성을 발견했음을 의미한다.
즉, podfile.lock 은 10.20.0을 사용하고 있지만 podfile 의 요구사항과 플러그인 의존성은 10.18.0 을 필요로 한다.
이런 상황은 버전 충돌을 일으키고 cocoapods 는 이 충돌을 해결할 수 없어서 오류를 발생시킨다.
위 문제를 해결하기 위해선
podfile.lock 파일을 삭제하고 pod install 을 다시 실행하여 의존성을 새롭게 해결할 수 있다.
혹은 의존성 명시적 지정을 해줄 수도 있다.
플러터의 iOS 의존성 관리 방법에 대해 알아보자
플러터의 iOS 의존관리는 어떻게 이루어지는걸까?
- 자동화된 의존성 연결: Flutter 프로젝트에서 pubspec.yaml 파일에 Dart 패키지를 추가하고 flutter pub get 명령을 실행하면 플러터는 필요한 모든 패캐지를 자동으로 가져옵니다. 만약 이 패키지들 중 일부가 iOS 네이티브 코드를 필요로 하는 경우, 플러터는 iOS 프로젝트의 Podfile 에 자동으로 의존성을 추가합니다.
- 버전 명시 생략: 플러터에서는 대부분의 경우 Podfile 에 구체적인 버전을 명시하지 않습니다. 이는 플러터의 패키지가 pubspec.yaml 에서 관리되며 해당 패키작 요구하는 iOS 네이티브 라이브러리의 호환 가능한 최신 버전을 자동으로 결정하기 때문입니다.
그래서 다시 pubspec.yaml 과 pubspec.lock 파일을 살펴보았다.
pubspec.yaml 파일의 바뀐 점은 잘 모르겠지만? pubspec.lock 파일을 보니 해당 패키지(firebase_analytics)가 10.8.5 에서 10.8.0 으로 바뀐 점을 확인하였다.
버전 업그레이드하면서 무언가 pubspec.lock 에 변경점이 일어났고 이에 Podfile 변경점이 연쇄적으로 일어나면서
내가 이전에 설치했던 pod 버전이었던 10.20.0 이 있었는데(podfile.lock) Podfile 과 버전 불일치가 되면서 위와 같은 오류가 발생했던 것 같다.
Pod repo update 명령에 대해 알아보자
/Users/{me}/.cocoapods/repos 에 있는 모든 podspec 파일을 업데이트 한다.
podspec 파일?은 뭘까?
spec.source = { :git => 'https://github.com/Alamofire...', :tag => 'v3.1.1'
podspec 에는 pod 의 주소 등 중요한 정보들이 담겨 있다.
위처럼 .cocoapods/repos 에는 모든 pod 에 대해 가능한 버전들의 podspec 파일들이 모여 있다.
pod repo update 를 실행하게 되면 최신 podspec 파일들로 업데이트되게 되는 것이다.
그리고 실제로 프로젝트에서는 사용할 버전을 Podfile 설정에 달려 있다고 볼 수 있다.
undefined symbol 오류가 발생하는 경우
1. 라이브러리 또는 프레임워크의 불완전한 설치
pod install 또는 pod update 가 제대로 완료되지 않았거나, 중요한 파일이 손상되거나 누락되었을 때, 필요한 심볼들이 제대로 링크되지 않아 이러한 오류가 발생할 수 있다.
이는 Pods 디렉토리의 삭제 및 재설치 과정 중에 라이브러리가 제대로 살치되자 않았을 때 더 자주 발생한다.
2. 호환되지 않는 라이브러리 버전
podfile.lock 을 삭제한 후 pod install 을 수행할 때 podfile 에 명시된 요구사항에 따라 다른 버전의 라이브러리가 설치될 수 있다.
만약 새로 설치된 라이브러리 버전이 기존 프로젝트 코드 또는 다른 팟들과 호환되지 않으면, 필요한 심볼을 찾을 수 없어 undefined symol 오류가 발생할 수 있다.
3. 부적절한 빌드 설정
Xcode 프로젝트의 빌드 설정이 잘못 구성되어 있거나, 특정 라이브러리를 링크하는 과정에서 문제가 발생한 경우에도 이 오류가 발생할 수 있습니다.
예를 들어, 컴파일러에게 라이브러리 파일의 위치를 제대로 알려주지 않았거나, 라이브러리가 요구하는 다른 라이브러리를 링크하지 않았을 때 발생할 수 있습니다.
주로 1번이 원인이지만 가끔은 2번을 보기도 했다.
2번이 발생했을 땐 Podfile.lock 에서 해당 라이브러리 버전을 예전 것(= 잘 작동되었던 버전)으로 직접 수정해주었다.
'🐦 Flutter' 카테고리의 다른 글
Flutter Unity 통합하기 (0) | 2024.12.01 |
---|---|
[Flutter] iOS 웹뷰 흰 화면 뜨는 현상 (2) | 2024.10.21 |
[Flutter] Sliver TabBarView hide 이슈 (0) | 2024.03.31 |
Flutter NavigationController 에서 iOS 로 이동(push)해보기 (2) | 2024.01.13 |
Debounce, Throttle (2) | 2023.12.09 |