콴다 팀블로그의 RIBs 예제 설치 오류

박건희·2022년 10월 7일
0

Swift

목록 보기
10/10

iOS에서 RIBs 아키텍쳐 구현을 공부하고 싶어서 콴다 팀블로그의 RIBs에 ReactorKit 도입하기 예제를 사수님이 알려주셨다.
그래서 git clone을 하고 xcworkspace 파일을 찾아보니 없다!
Makefile을 통해서 여러 세팅들을 자동실행해야 한다고 알려주셨다.

하지만 여러 에러가 나와서 고치는 과정이 있었고, 안 적어두면 까먹을 것 같아서 글을 남겨본다.

모든 원인을 확실하게 분석하고 해결하진 못했단 걸 유의해주세요

문제 1: fatal: reference is not a tree

git clone한 프로젝트 디렉토리에 들어가서 Makefile에 정의된 setup을 실행 시키기 위해 터미널로 make setup을 실행하니 다음과 같은 에러가 나왔다.

Makefile에서 문제 찾기

일단 Makefile의 어느 단계에서 문제가 발생하는지 알아봤다.

setup:
	brew bundle
	bundle install
	make xcode_gen
	make pod_install

setup_ci:
	brew bundle --file=Brewfile_ci
	bundle install
	make xcode_gen
	make pod_install

#생략......

# https://github.com/grab/cocoapods-binary-cache/pull/86
pod_install:
	bundle exec pod binary prebuild "swift$$(make swift_version)-$$(make podfile_lock_checksum)" --no-fetch
	bundle exec pod binary fetch "swift$$(make swift_version)-$$(make podfile_lock_checksum)"
	bundle exec pod binary push "swift$$(make swift_version)-$$(make podfile_lock_checksum)"

pod_update:
	bundle exec pod update
	bundle exec pod binary prebuild --no-fetch --all || bundle exec pod binary prebuild --repo-update --no-fetch --all
	bundle exec pod binary push "swift-$$(make swift_version)-$$(make podfile_lock_checksum)"

swift_version:
	@echo `swift --version 2>/dev/null | sed -ne 's/^Apple Swift version \([^\b ]*\).*/\1/p'`

podfile_lock_checksum:
	@echo `sed -ne '/PODFILE CHECKSUM: /p' Podfile.lock | sed s'/$ PODFILE CHECKSUM: '//`

위에서 setup에 있는 단계 중 make pod_install을 통해서 실행된 pod_install의 prebuild 단계에서
현재 podfile에 있는 RIBs를 가져오다가 문제가 발생한 것을 알 수 있었다.


💡Important!
pod install 단계에서 일어나는fatal: reference is not a tree 에러는:

  • 특정 라이브러리에 대한 결함이 있는 cocoapod의 버젼인 경우
    (스택오버플로우에 특정 버젼의 cocoapod가 typhon이라는 pod를 import 할 때 예시가 있음)
  • 해당 remote git branch가 merge나 PR로 인해 달라져서 commit 내역이 꼬이는 경우
    가 있다고 한다. 이 중 두번째 이유였던 걸로 생각한다.

PodFile 찾아보기

Podfile을 찾아보니 아래와 같은 부분이 있었다.

pod 'RIBs', :git => 'https://github.com/ElonPark/RIBs.git', :branch => 'mockolo', :binary => true

Podfile.lock도 한번 찾아봤다.

에러에서 발견된 commit 번호와 동일한 걸 발견했다!! ElonPark/RIBs 원격 깃 레포지토리의 mockolo branch를 들어가봤다.
실제로 해당 브랜치의 commit history에서 저 commit 번호를 발견하지 못했다 (내 실수일수도)

그래서 최근 commit 번호 중 아무거나 긁어서 바꿔봤더니, RxSwift 버전과 dependency가 맞지 않는다는 에러가 나왔다.

현재 PodFile에 RxSwift가 6.5.0 버전이기 때문에, Mockolo 브랜치에서 'Bump RxSwift to 6.5.0' 이후에 commit된 것을 찾아서 commit 번호를 바꿔줬다.

아래와 같이 가장 최신 commit (94f744a로 시작하는 것)으로 바꿔줬다.

RIBs pod를 원격 브랜치에서 가져오는데 성공할 수 있었다!!

문제 2: cache file 오류

이내 터미널에서 binary cache에 pod들이 있는지 확인하기 시작했다.
없는 pod들은 전부 binary 형태로 설치했고 (내 경우엔 모든 pod), 다시 실행을 하려니 갑자기 에러 메시지가 떴다.

Podfile을 보니, binary cache에 pod들을 가져올 때 cocoapod에서 직접 가져오는 것이 아니라
ElonPark님의 git repository에서 가져오는 것을 알 수 있었다.

config_cocoapods_binary_cache(
  cache_repo: {
    'default' => {
      'remote' => 'git@github.com:ElonPark/RIBsReactorKit-CocoapodsBinaryCache.git',
      'local' => '~/.cocoapods-binary-cache/prebuilt-frameworks'
    }
  },
  prebuild_config: 'Debug',
  device_build_enabled: true
)

혹시 CocoaPod에서 직접 설치하는 것이 아니라 개인의 원격 브랜치에서 가져오는 것이라 호환이 안맞는 부분이 있지 않을까??

하는 맘에 Podfile의 cache 관련 코드와 모든 :binary => true 부분을 지웠다.

다시 한번 터미널에서 make setup을 돌리니, 모든 pod들을 직접 인스톨하기 시작했고 xcworkspace 파일이 생성 됐다!

생각할 거리

ElonPark님께서 cocoapods_binary_cache를 사용한 이유가 pod들의 버젼을 고정하기 위함 일수도 있다...
따라서 다음에 pod install을 잘못하면 dependency 충돌이 일어날 수도 있다

Reference

profile
CJ ENM iOS 주니어 개발자

0개의 댓글