Firebase 모듈 의존성 이슈 해결하기

Shawn·2024년 11월 28일
0

Firebase 관련 모듈들의 의존성 문제를 해결하면서 겪은 이슈와 해결 과정을 정리해보려고 한다.

문제 상황

현재 프로젝트는 다음과 같은 구조로 되어있다:

let project = Project(
   name: "AppCraft",
   packages: [
       .remote(
           url: "https://github.com/pointfreeco/swift-composable-architecture",
           requirement: .upToNextMajor(from: "1.8.0")
       ),
       .remote(
           url: "https://github.com/firebase/firebase-ios-sdk",
           requirement: .branch("main")
       )
   ],
   targets: [...]
)
이 구조에서:

CoreDatabaseFirebaseFirestore를 참조
CoreAuthCoreDatabaseFirebaseAuth를 참조
각 모듈이 staticFramework로 설정되어 있어서 중복 구현 에러 발생

Copyobjc[41982]: Class ... is implemented in both ... and ... One of the two will be used. Which one is undefined.
해결 과정

모든 모듈을 staticFramework에서 framework로 변경

swiftCopyTarget(
    name: "CoreDatabase",
    platform: .iOS,
    product: .framework,  // .staticFramework에서 변경
    ...
)

CoreAuthCoreDatabase 모듈 통합


Firebase 관련 의존성을 한 곳에서 관리하기 위해 CoreAuth 로직을 CoreDatabase로 이동
의존성 순환 문제 해결
코드 중복 제거

남은 과정

Preview 동작 이슈는 아직 해결해야 할 문제로 남아있음

배운 점

framework와 staticFramework의 차이점


framework

동적 링크 방식
런타임에 로드됨
여러 타겟이 하나의 프레임워크를 공유
메모리 효율적
앱 크기 감소


staticFramework

정적 링크 방식
빌드 시점에 바이너리에 포함
각 타겟마다 복사본 생성
메모리/용량 증가
iOS 버전 호환성 좋음




Firebase같은 외부 의존성은 한 모듈에서 관리하는 것이 좋다


의존성 충돌 방지
코드 중복 최소화
유지보수 용이

이렇게 모듈 구조를 개선하니 빌드는 성공적으로 됐다. Preview 이슈는 다음 글에서 다뤄보도록 하겠다.
profile
iOS 개발, Flutter 개발, Swift, Dart, 42 Seoul 3기

0개의 댓글