objc[57278]: Class _TtC9Alamofire21CompositeEventMonitor is implemented in both /Users//Debug-iphonesimulator/Alamofire.framework/Alamofire (0x10786daa0) and /Users//Debug-iphonesimulator/Service.framework/Service (0x10582d0f0). One of the two will be used. Which one is undefined.
Tuist를 사용해 앱을 빌드했을 때 다음과 같은 에러들이 출력되었다.
빌드가 되지 않는 것은 아니지만 저런 에러가 콘솔창을 다 뒤덮을 정도로 많이 발생해서 해결을 해야겠다고 생각했다.
우선 다음과 같은 오류가 발생하는 이유는 여러 라이브러리 또는 프레임워크에서 같은 클래스를 구현해서 발생한다.
나 같은 경우는 대부분의 내용이 Alamofire, Then이 Service와 DesignSystem 모듈에서 겹친다는 내용이 대부분이었다.
(챗지피티 한테 오류 한 100줄 가져가서 어디서 나는 것 같냐고 물어봄)
Tuist graph명령어로 프로젝트 의존성을 확인해보면 Service와 DesignSystem 모듈이 ThirdParty 모듈에 의존하는 형식이다.
ThirdParty모듈에는 Alamofire Then 이외에도 Snapkit, Swinject와 같은 프레임워크들도 존재했지만 오류는 Alamofire와 Then에서 발생했다.
그 이유는 Alamofire, Then을 Static Framework로 선언했기 때문이었다.
(Static과 Dynamic의 차이는 다른 곳에서 잘 설명해주기 때문에 해당 글들을 참고하면 되겠다)
그래서 tuist eidt후에 dependencies의 코드를 다음과 같이 변경해 Static -> Dynamic으로 변경해주었더니 에러가 사라졌다.
코드는 다음과 같다.
import ProjectDescription
import ProjectDescriptionHelpers
let dependencies = Dependencies(
carthage: nil,
swiftPackageManager: SwiftPackageManagerDependencies(
[
.alamofire,
.snapKit,
.then,
.swinject
],
// MARK:- .framework으로 설정하면 dynamic framework로 설정
productTypes: [
"Alamofire": .framework,
"Then": .framework
]
),
platforms: [.iOS]
)
public extension Package {
static let alamofire: Package = .remote(url: "https://github.com/Alamofire/Alamofire",
requirement: .upToNextMajor(from: "5.8.1"))
static let snapKit: Package = .remote(url: "https://github.com/SnapKit/SnapKit.git",
requirement: .upToNextMajor(from: "5.0.1"))
static let then: Package = .remote(url: "https://github.com/devxoul/Then",
requirement: .upToNextMajor(from: "2.7.0"))
static let swinject: Package = .remote(url: "https://github.com/Swinject/Swinject",
requirement: .upToNextMajor(from: "2.8.3"))
}
'Tuist' 카테고리의 다른 글
[Tuist] - Tuist를 활용한 모듈화 (0) | 2023.08.24 |
---|---|
Tuist 사용법 및 에러 모음 (0) | 2023.08.24 |