iOS

Rx와 XCTest를 이용할시 생기는 에러사항들 3

스엠 2023. 3. 27. 22:49

SPM과 RxSwift 그리고 TestUnitBundle을 사용하면서 생기는 에러 사항들 모음집입니다.

저번 글에서 발생한 demangle ~~~ error를 해결하기 위한 글입니다.

1.  RxCocoaRuntime프레임 워크만을 추가한다. 

해당 프레임 워크는 https://github.com/ReactiveX/RxSwift/releases 요 링크로 들어가셔서 찾아보시면 있습니다.
6.0.0버전 릴리즈를 보시면 됩니다.

 

프레임 워크를 찾았으면 드래그 앤 드롭으로 세팅해줍니다.

그리고 cmd + u를 실행하면 똭!

이렇게 에러가 나오면서 실행이 안됩니다. 지금보니 RxCocoaRuntime이 RxSwift에 의존성을 가지고 있었네요.

그리고 RxSwift를 /PlugIns/{name}Tests.xctest/{name}Tests 이 경로에서 찾고 있습니다.
저 경로에 RxSwift를 넣어봤자 코드 중복이 될게 뻔하니 path를 MainApp쪽에 있는 RxSwift로 한번 돌려보려고 하는데
못하겠습니다;;;;; runPath,FrameWork searchPath 등등 전부 만져 보았는데 안되네요..

혹시나 방법 아시는 분들 부디 댓글좀 달아주셨으면 감사하겠습니다.

 

2. ThirdPartyManager 프레임워크 만들어서 관리하기

두 번째 방법은 3rd party manager 프레임 워크를 만들어서 관리 하는 것입니다.
우선 프레임워크부터 만들겠습니다.
다행히 프레임워크를 만드는 방법도 어렵지 않은 것 같습니다. 글보단 사진으로 빠르게 대체하겠습니다.

ThirdPartyManager에 RxTest와 RxBlocking을 추가하지 않은 이유는 MainApp에 추가하지 않는 것과 같은 이유입니다.
요렇게만 하면 ThirdPartyManager 프레임 워크 만드는 방법 끝입니다.

이렇게 MainApp과 TestTarget에 각각 ThirdPartyManager그리고 ThirdPartyManager + RxTest,RxBlocking을 추가해줍니다.

그리고 cleanbuild 한번 해주고 cmd+r, cmd + u를 하면 문제 없이 실행되는것을 볼 수 있습니다.

게다가 코드의 중복 경고도 보이지 않는 것을 볼 수 있습니다!


3. TestBundle의 FrameWork Search Path혹은 다른 Path를 강제로 Main쪽으로 연결

정확히 말하면 Path를 Main으로 연결하는 것은 아닌것 같습니다. 

이 경우는 TestTarget buildSetting -> TestHost를 보시면 다음과 같이 되어 있습니다.


원래는 $(BUILT_PRODUCTS_DIR)/RxTestTest.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/RxTestTest
$(BUNDLE_EXECUTABLE_FOLDER_PATH) 요 부분도 같이 나와야 하는거 같은데 //으로 나와 있는 것을 볼 수 있습니다.


그리고 비록 OutDated된 Apple 공식 document이지만 여기서도 /{name}.app/{name} 이렇게 구성 된것을 보실 수 있습니다.


따라서 오류?를 없애고자 $(BUILT_PRODUCTS_DIR)/RxTestTest.app/RxTestTest 로 바꾸면 정상 동작을 하시는 것을 확인하실 수 있습니다.

하지만 이 방법을 추천하지 않는것이 가끔가다 cmd + r 할때 런타임 오류가 납니다.

결론은 ThirdPartyManager 프레임워크를 만들어 관리를 하는것이 가장 좋다 입니다.

이어서 Tuist까지 곁들인 다면 Dev용,Product용,Demo용 각각의 프레임워크를 만들어서 유기적으로 사용할 수 있다는 

장점까지 있는 것 같습니다.