바쁘신 분들을 위해 결론부터 말하자면 Tuist에서 끌어오는 Swift Package Manager 의 Dependencies가 빌드되는 경로 "CONFIGURATION_BULID_DIR"의 "CONFIGURATION" 경로가 잘못되어서 생기는 문제다. 따라서 Package.swift 내부의 PackageSetting에서 baseSetting에 configurations 파라미터에 현재 빌드 세팅에 맞춰 이름을 지정해주면 해당 문제는 해결된다.
이걸 찾는 과정은 엄청 고단했는데, 일단 tuist 이슈에 비슷한 내용이 하나도 없었고 SPM의 오류에 대해 검색해봐도 비슷한 자료가 없었기에 더욱 힘들었다. 처음으로 시도해본것이 xcode 내부에서 직접 manage schemes을 통해 라이브러리를 빌드 후 모듈을 실행시키면 정상적으로 빌드가 되고, 라이브러리를 빌드 시킨 후 캐시가 되면 그 다음부터는 해당 라이브러리는 문제없이 동작한다는 것이다. 여기서 힌트를 얻었다.
실제로 눈에 보이는 문제는 없었다.
tuist install이나 tuist generate 과정에서 생기는 오류 로그는 없었고 generate에 --verbose 옵션을 줘도 별다른 이상 로그는 없었다. 위 사진처럼 정상적으로 라이브러리가 모듈에 링크되어 있는 것 처럼 보이고, SPM에서도 라이브러리는 정상적으로 가져오고 있었다.
위의 사진을 보면 정상적으로 SwiftyBeaver라는 라이브러리가 빌드 되지만, 해당 라이브러리를 의존하는 Logger라는 모듈에서는 No such module 'SwiftyBeaver'라는 오류가 나온다.
따라서 SPM 에서 불러오는 라이브러리와 tuist에서 만들어 내는 target의 경로에 문제가 있다고 판단이 됐다. (실제로 바로 판단이 되진 않았고 오랜 시간이 걸렸다.)
결과적으로 빌드 생성되는 DerivedData 내부의 임시파일에 가보니 라이브러리의 빌드와 모듈의 빌드가 각각 따로 파일을 생성하고 있었다.
내가 만든 모듈은 내가 지정한 "debug"라는 CONFIGURATION 이름을 가지고 정상적으로 생성되는 반면에 spm의 라이브러리는 "Release"라는 CONFIGURATION 이름을 가지고 생성되었다. (아마 기본 이름이 Release인듯?) 따라서 CONFIGURATION_BULID_DIR 경로에 문제가 있다고 판단이 되었고 해당 이름을 변경해주었더니 문제가 해결되었다.
스프린트가 끝나가서 앱을 릴리즈할 시기는 다가오는데 5월 1일부터 Apple의 Privacy Manifest 정책에 맞춰 라이브러리들을 업데이트를 해야하니 여러가지 상황과 맞물려 Tuist 버젼을 업데이트 해야하는 상황이 되어서 급하게 일을 해결하려하니 (주말에는 일하기 싫었다. 결국 하고 있지만.) 더욱 문제가 안풀리는 느낌을 받았다. 좀 더 침착하게 문제를 바라보았으면 더욱 빨리 해결할 수 있었을거 같은데 기능 이슈는 계속 나오고 빨리 문제를 해결하려하니 더 미궁으로 빠지는 느낌을 받았다. 나 처럼 고생하시는 분들이 없길 바란다.
'iOS > 학습' 카테고리의 다른 글
WWDC 2024) 힙 메모리 분석하기 (0) | 2024.06.25 |
---|---|
Error) Tuist Package Dependency "No files found at: ../PrivacyInfo.xcprivacy" 해결하기 (0) | 2024.05.14 |
[iOS] 푸시, 다이나믹 링크 등으로 실행될 때 디버깅하기 (0) | 2023.08.28 |
Error) failed to demangle superclass of ‘…’ from mangled name ‘…’ (3) | 2023.05.03 |
SwiftUI) iOS13 부터 지원하는 간단한 커스텀 Attribute Text 만들기 (0) | 2023.02.15 |