Carthage RxDataSources Swift Version Error

고재경·2022년 7월 10일
0

포스팅에 앞서 저의 현재 개발 환경은
Xcode : 13.4.1
Swift : 5.6.1

입니다!

RxDataSources

설치하고자 하는 버전

github "RxSwiftCommunity/RxDataSources" ~> 5.0

설치 결과

RxDataSources만 설치했을 뿐인데 RxSwift관련된 라이브러리가 모두 설치가 됩니다.

에러 내용

Carthage를 사용해 RxDataSources를 설치하여 사용하려고 했는데

Failed to build module 'RxDataSources'; 
this SDK is not supported by the compiler (the SDK is built with 'Apple Swift version 5.5 (swiftlang-1300.0.31.1 clang-1300.0.29.1)', 
while this compiler is 'Apple Swift version 5.6.1 (swiftlang-5.6.0.323.66 clang-1316.0.20.12)'). Please select a toolchain which matches the SDK.

위와 같은 에러가 발생하였습니다.

해결 과정

우선 에러 내용 그대로 접근을 했습니다.
RxDataSourcesSwift 5.5버전으로 만들어져 있는데 이 컴파일러의 Swift버전은 5.6.1이다.
그래서 저는 이곳을 통해 Swift버전에 따른 Xcode의 버전을 확인을 해보고 여기에서 Swift5.5를 사용하는 Xcode13을 설치하였습니다.

에러가 발생한 프로젝트를 설치한 Xcode13으로 열어보면 다음과 같은 많은 에러가 발생합니다.

No such module 'Differentiator'
Concurrency is only available in iOS 15.0.0 or newer

일단 'Differentiator'라는 모듈이 없다는 에러 내용과
동시성은 iOS 15.0.0 이상의 버전에서만 사용할 수 있다고 나와있습니다.

여기서 분명히 RxDataSources를 import 했는데 왜 Differentiator가 없다고 나오는지 궁금해졌습니다.

아래의 Concurrency Errorx84_64-apple-ios-simulator.swiftinterface 파일에서 아래와 같이 발생한 것을 확인하였습니다.

컴파일러 내부의 async에 대한 내용 때문에 RxDataSources의 Swift 버전 문제를 해결했더라도 해당 Xcode버전을 사용할 수 없다는 판단을 하였습니다.

혹시 SPM으로는 사용할 수 있을까? 라는 생각을 갖고 다시 Xcode13.4.1버전으로 돌아와 SPM으로 RxDataSources설치를 시도해 보았습니다.

그 결과 위의 오류에서 확인할 수 있었던 'Differentiator'와 사용하고자 하는 'RxDataSources' 두 개의 라이브러리를 확인하였습니다.

위에서 'Differentiator'가 없다는 오류를 봤었으니 두가지 모두 다 설치를 해주었고

오류 없이 성공적으로 RxDataSources가 import 된 것을 확인 하였습니다.

여기서 잠깐 위의 Carthage를 통해 RxDataSources를 설치 했을 때 생성되는 xcframework파일을 보면 Differentiator가 없는 것을 확인할 수있습니다.

이때 저는

'아! Differentiator 때문에 Carthage를 사용했을 때 에러가 발생한건가?'

라고 생각을 하였고 어떻게 Differentiator를 추가할 수 있을까 생각을 하다

github "RxSwiftCommunity/RxDataSources" ~> 4.0

RxDataSources의 버전을 4.x로 내려 설치를 하였습니다.

그 결과 Differentiator가 설치된 것을 확인할 수 있었고 대신 RxSwift와 그 외의 Rx라이브러리, RxDataSources의 버전도 낮게 설치되었습니다. RxSwift는 따로 Cartfile에 추가 후 설치할 수 있습니다.


이렇게 5개는 필수로 넣어주어야 에러가 발생하지 않습니다.

이렇게 xcframework까지 프로젝트에 넣어준뒤 RxDataSources를 import 해주면 에러 없이 정상적으로 빌드가 되는 것을 확인할 수 있습니다.

결론은 현재 Carthage로 RxDataSources를 사용하기 위해서는 RxDataSources 4.x의 버전을 설치하여 사용하시면 됩니다.

이렇게 해결 방법을 작성해보았으나 이게 왜 해결된건지는 저도 잘 모르겠습니다.
에러는 Swift의 버전에 관련된 내용이었는데 Differentiator하나 추가 해줬다고 에러가 해결이 되었는데 Swift의 버전과 Rx라이브러리들 사이에 어떤 관계가 있는건지..
정확한 문제가 뭔지 해결하지 못해 찝찝한 점이 있지만 RxDataSources를 import할 때 Swift Version 에러 발생시 RxDataSources를 성공적으로 import하여 사용하는 방법에 대하여 포스팅 해보았습니다.
감사합니다!😊

References

https://swiftversion.net
https://developer.apple.com/download/all/
https://github.com/RxSwiftCommunity/RxDataSources

0개의 댓글