플러터 프로젝트의 CI를 구현하기 위해 커맨드를 통해 ios 빌드를 시도하던 중, 아래와 같은 이슈를 계속 마주쳤습니다.
pubspec.yml에는 package_info_plus
에 대한 의존성은 작성되어 있었으나 package_info
에 대한 의존성은 정의되어 있지 않았습니다. 참고로 package_info
는 몇년 전 deprecated 되었으며, 이후 package_info_plus
로 대체되었습니다.
해당 오류를 그대로 검색하면 플러터 깃허브나 스택 오버플로우, 블로그에 올라온 비슷한 이슈들을 확인할 수 있습니다. 저는 여러 글들을 참고하여 빌드 캐시를 지우거나 CocoaPods를 다시 설치하던가 하는 다양한 방법들을 모두 시도해봤으나, 문제는 해결되지 않았습니다. 혹시 package_info_plus
가 참조하고 있는 다른 외부 패키지에서 package_info
를 참조하고 있는것이 아닌가 했지만, 그것 또한 아니였습니다.
오랜 시간 해결 방법을 강구하던 중에, 아래 블로그 글을 읽고 문제 해결의 단서를 얻을 수 있었습니다.
꼬마상어의 생각 - framework not found ... 에러
사실 저는 iOS 네이티브 개발을 해본 적이 없어서 XCode에 익숙하지 않습니다. 이번에 Other Linker Flags 라는 메뉴가 있는 것도 처음 알았는데요, 이것에 대해 잠깐 알아보는 시간을 가졌습니다.
Xcode - Other Linker Flags
- XCode 프로젝트에서 써드파티 라이브러리를 사용할 때 링커에게 추가적인 옵션을 제공하는 것으로, 빌드 시 Linker Flags에 필요한 프레임워크들을 설정하여 링커에게 해당 프레임워크를 프로젝트에 포함하라고 지시하는 것
Runner → Build Settings → Linking - General
이 메뉴를 보니 framework 항목으로 package_info
가 명시되어 있었습니다. 이 부분을 지우고 빌드를 하니, ../ios/Runner.xcodeproj/project.pbxproj
파일도 같이 변경되며 빌드 이슈가 사라졌습니다. 파일 내용을 자세히 보니 아래 항목에 Other Linker Flags에 설정해놓은 프레임워크들이 나열되어 있었습니다.
OTHER_LDFLAGS = (
플러터 프로젝트는 iOS를 빌드할 때 Runner를 사용하는데요, Runner에는 ios 프로젝트를 빌드하기 위한 다양한 파일들이 포함되어 있습니다. 이 중 project.pbxproj
는 프로젝트 전체의 설정을 포함하는 파일이며, 그중 OTHER_LDFLAGS
는 링커 관련 플래그 설정을 포함합니다.
찾아보니 저의 경우 Other Linker Flags에서 더이상 참조하지 않는 프레임워크를 삭제하지 않고 그대로 둔 것이 문제였고, 이를 지우니 더이상 문제가 발생하지 않았습니다. 저의 경우는 원인이 이러했지만, 찾아보니 Xcode Framework not found의 원인은 생각보다 다양한 것 같았습니다. iOS 빌드에 무지하여 원인을 찾느라 힘들었지만 그래도 해결해서 다행이고 :) 덕분에 몰랐던 사실도 알게 되었었습니다. 저의 해결책이 빌드 이슈를 겪고 있는 누군가에게 도움이 되기를 바라며 글을 마칩니다.