본문 바로가기
Xcode/ERROR

ERROR) Custom Framework에서 3rd Party Lib의 Protocol을 사용할 때 주의 점 (ex: Undefined symbol: _$s9Alamofire7AFError )

by 후르륵짭짭 2023. 1. 29.
728x90
반응형

에러로 부터 도망가고 싶은 나의 심정

안녕하세요. 후르륵짭짭입니다.

이번에는 Framework를 만드는 중에 Build 에러가 발생해서 해당 건에 대해 작성해보려고 합니다.

( 저의 추측성 글 입니다. )

 

** 발생 원인 ** 

Moya Framework를 포함하여 Framework를 발행 후, 다른 프로젝트에서 해당 Framework를 주입후 사용하려 하니 Build 에러가 발생

Moya 대신 Alamofire로 현상을 표현

Framework Project를 Main Project에 주입시켜 Build하면 해당 오류가 발생하지 않음 

해당 원인에 대해 생각해보니,

Project에서 빌드하면 한번에 Framework와 Main Project 내부에 있는 코드들을 한번에 Build하게 됨

반면 Framework를 다른 프로젝트에서 Build 후 주입하는 방식은 다른 프로젝트에서 Linking 실패할 수 있다는 생각을 함

Moya TargetType

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://velog.io/@danna-lee/iOS-could-not-find-module-for-target-x8664-apple-ios-simulator-found-arm64-arm64-apple-ios-simulator-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0

 

[iOS] could not find module for target 'x86_64-apple-ios-simulator' found arm64 arm64-apple-ios-simulator 오류 해결

우해기) iOS 시뮬레이터 빌드 아키텍쳐 오류 해결하기

velog.io

 

https://medium.com/@kitasuke/optimizing-launch-time-of-modularized-ios-app-67f6e1080cb3

 

Optimizing launch time of modularized iOS app

Hi, I’m @kitasuke, iOS Engineer. I would like to share how I optimized app launch time by about 30% using Static Framework.

medium.com

 

https://minsone.github.io/programming/swift-annotation-_exported

 

[Swift 5.3] @_exported 속성 정리

주의 : 본 글은 비공식 속성을 다루므로 사용하는데 유의하시기 바랍니다. @_exported는 비공식 속성으로 _가 붙어있습니다. (비슷하게 현재 Async/Await 가 비공식으로 쓰기 위해선 import _Concurrency를

minsone.github.io

 

https://jusung.github.io/Xcode12-Build-Error/

 

[Xcode] Xcode12에서 시뮬레이터 빌드 오류 원인 및 해결방법

이번 포스트에서는 Xcode12에서 시뮬레이터에 빌드시 오류가 발생하는 원인과 해결방법에 대해 알아 보겠습니다. 포스트가 제법 깁니다. 😅

jusung.github.io

 

728x90
반응형

댓글