SPM과 RxSwift 그리고 TestUnitBundle을 사용하면서 생기는 에러 사항들 모음집입니다.
1.MainApp에 RxTest 프레임워크를 포함시켰을때
SPM으로 RxSwift를 다운받고 메인 번들을 실행시키면 아마 다음과 같은 에러들을 만나실 겁니다.
Undefined symbol: _$s6XCTest14XCTAssertEqual___4file4lineyxyKXK_xyKXKSSyXKs12StaticStringVSutSQRzlF
Undefined symbol: _$s6XCTest7XCTFail_4file4lineySS_s12StaticStringVSutF
Undefined symbol: __swift_FORCE_LOAD_$_XCTestSwiftSupport
요 에러는 단순히 보시는 바와 같이 메인 앱에서 XCTest프레임워크가 발견되지 않아서 그렇습니다.
RxTest가 XCTest에 의존하고 있다는 것을 알 수 있는 부분인 것 같습니다.
여기서 XCTest 프레임워크가 없어? 하고 다음과 같이 메인 번들에 XCTest 프레임 워크를 추가하고 cmd + r을 하면 오류가 납니다.
여기서 보면 @rPath/XCTest에서 프레임워크를 못 찾겠다고 나옵니다.
그럼 과연 rPath라는 게 뭘까요?
rPath란 Runpath Search Path의 줄임말입니다.
그럼 또 Runpath Search Path가 뭐냐 라고 한다면 아주 간단하게 말해서 외부 프레임워크를 링킹하기 위한
위치라고 생각하시면 편합니다.
그러면 일단 궁금하니까 해당 위치로 가봅시다.
rPath의 경로는 xcode build setting에서 Runpath search path를 검색하면 나옵니다.
여기서 @excutable_path/Frameworks라고 나오네요.
저는 시뮬레이터로 돌렸으니 왠지 아이폰 시뮬레이터가 있는 포지션에 저 프레임워크들이 깔려 있을 것 같습니다.
사실 그냥 에러코드만 봐도 위치는 알 수 있습니다...
참고로 왜 저렇게 다양한 경로에서 찾냐고 하면은 애플 공식문서에 다음과 같이 기술되어있습니다.
1. 라이브러리 이름이 파일 이름일 경우
- $LD_LIBRARY_PATH
- $DYLD_LIBRARY_PATH
- The process’s working directory
- $DYLD_FALLBACK_LIBRARY_PATH
순으로 해당 라이브러리를 찾는다고 하고, 여기서 LD는 링커를 의미하고 DYLD는 다이나믹 링커라고 하네요.
따라서 LD는 BuidTime에서의 링킹을 의미하고 DYLD는 런타임에서의 링킹을 의미하는 것 입니다,
2.라이브러리에 디렉토리 이름이 들어가 있을 경우
- $DYLD_LIBRARY_PATH using the filename
- The given pathname
- $DYLD_FALLBACK_LIBRARY_PATH using the filename
이런 순서로 찾는 다고 합니다.
아무튼! 저 경로에 가서 보면 다음과 같은 프레임워크들이 있는 걸 볼 수 있습니다.
보시는 바와 같이 Rx에 관한거 전부 있는데 XCtest의 프레임 워크만 없네요. 왜지? 분명히 추가했는데...
이것에 대한 이유를 찾아볼려고 했는데 그냥 MainApp에는 추가하지 마세요~~ 이런 것 밖에 없네요.
결과적으로는 MainApp에 XCTest 프레임 워크를 추가해서 하는 방법은 통하지 않는다는 것을 알았습니다.
추가가안되면 뭐다?. 네 그냥 빼버리면 됩니다. 아주 간단해요.
다음과 같이 RxTest, RxBlocking을 아예 빼버리시면 해결됩니다.
사실 해결 방법은 굉장히 간단했는데요.
rPath를 공부하며 @excutable_path, @loader_path, LD, DYLD등 까지 여러가지 문서를 보게됬고,
왜 그동안 OtherLinkingFlag?였나 거기이에 -all-load, -objc 어쩌고 저쩌고 쓰는지도 대략적으로 알게 되어서 좋았습니다.
'iOS' 카테고리의 다른 글
Rx와 XCTest를 이용할시 생기는 에러사항들 3 (0) | 2023.03.27 |
---|---|
Rx와 XCTest를 이용할시 생기는 에러사항들 2 [missing Required module "RxCocoaRuntime"] (0) | 2023.03.27 |
JENKINS(4) github webhook (2) (0) | 2023.03.11 |
JENKINS (3) - github Webhook[ngrok] (1) (1) | 2023.03.11 |
JENKINS(2) - 환경변수 설정 (0) | 2023.03.11 |