안녕하세요. 후르륵짭짭입니다.
이번에는 Framework를 만드는 중에 Build 에러가 발생해서 해당 건에 대해 작성해보려고 합니다.
( 저의 추측성 글 입니다. )
** 발생 원인 **
Moya Framework를 포함하여 Framework를 발행 후, 다른 프로젝트에서 해당 Framework를 주입후 사용하려 하니 Build 에러가 발생
Framework Project를 Main Project에 주입시켜 Build하면 해당 오류가 발생하지 않음
해당 원인에 대해 생각해보니,
Project에서 빌드하면 한번에 Framework와 Main Project 내부에 있는 코드들을 한번에 Build하게 됨
반면 Framework를 다른 프로젝트에서 Build 후 주입하는 방식은 다른 프로젝트에서 Linking 실패할 수 있다는 생각을 함
Moya의 TargetType Protocol을 다른 인스턴스에 준수 시키고 Build 후 다른 프로젝트에 주입하여 실행시키면 Error 발생
해당 에러 로그를 보니, Task와 ValidationType 모두 Enum을 반환하도록 되어 있음
동일한 내용을 Custom Protocol을 만들어서 Build 후 다른 프로젝트에 주입하여 실행시키면 동일하게 Error 발생
task를 Moya.Task가 아닌 알라모파이어의 AFError enum 타입을 반환하니 동일하게 발생
반면 Struct와 Class의 반환은 오류가 발생하지 않음.
Protocol을 준수하지 않은 그냥 인스턴스에서 Enum을 반환하는 방식은 Build 에러를 만들지 않음.
따라서 Custom Framework에서 3rd Party 라이브러리에 Enum을 Compute Property로 반환하게 하는 Protocol을 준수하고 있는 인스턴스가 있다면 다른 외부 Project에서 Build 에러가 발생함.
** 해결 방법 **
- 배포 형식의 Framework가 아니라면 Main Project에 Framework project를 넣어서
Build할 때 함께 Build가 되도록 해야함.
- 배포된 Framework를 사용하는 Project에서 동일한 3rd Party 라이브러리의 Protocol을 준수한 형태를 메소드에
주입시켜주도록 해야함.
- 3rd Party 라이브러리를 Static Framework로 생성한 후 Custom Framework에 넣어주는 방식을 사용해야함 ㅠ ㅠ
2023.01.29 - [Xcode/IOS] - IOS) Umbrella Framework 생성 및 배포(feat : CoCoaPods)
** 참고 사이트 **
https://medium.com/@kitasuke/optimizing-launch-time-of-modularized-ios-app-67f6e1080cb3
https://minsone.github.io/programming/swift-annotation-_exported
https://jusung.github.io/Xcode12-Build-Error/
댓글