Workspace에서 Embed 전략 본문
배경 과 문제 정의
현재 진행중인 알쏭달쏭 프로젝트에서는 Tuist같은 모듈을 관리해주는 도구를 사용하지 않고, Xcode에서 지원해주는 Workspace를 사용하여 Projects 그룹화하여 관리한다.
Tuist를 사용하기에는 짧은 기간 내에 개발을 완벽하게 이해하고있는 상황이 아니였기 때문에 Workspace로 결정하여 개발을하게 되었다.
결합도를 줄이기 위해서 큰 기능에 따라 뷰와 데이터, 네트워크를 하는 모듈을 분리하여 작업을 진행하였는데
메인 앱에 통합시키는 과정에서 시뮬레이터에서는 빌드가 잘 되었지만, 앱을 배포했을 때 크래시가 발생하는 문제가 발생하였다.
해결 과정
문제는 dyld 이슈인 것으로 추정된다.
dyld란 Dynamic loader/linker 로 앱이 실행될 때 필요한 동적 라이브러리를 찾아 로드해주고 연결해주는 운영체제의 구성요소이다.
빌드 시점에 linker가 정적 연결을 담당한다면 런타임 연결은 dyld가 담당한다.
실행 파일에 기록된 "이 바이너리는 어떤 라이브러리에 의존한다"라는 정보를 읽고 해당 프레임워크들을 찾아 메모리에 적재시킨다.
현재 프로젝트의 모듈은 Entity, Network, Repository으로 구성되어있고, 뷰가포함되어있는 실행 Main App이 있다.
Main App을 제외한 모듈들은 Dynamic Framework로 생성을 했고 프레임워크안에서 다른 프레임워크를 Embed 하였다.
“Repository 내부의 Network”는 파일 경로가 Repository.framework/Frameworks/Network.framework 같은 중첩 경로가 되는데,
바로 크레시를 내는 것으로 추정이 된다.
Static 프레임워크나 라이브러리는 링크 시 실행파일에 합쳐진다. -> 프레임워크 파일을 못 찾음
요약
- 동적 프레임워크(.framework) 를 링크할 때
- 메인 앱에서 Embed & Sign
- 정적 라이브러리/프레임워크를 링크할 때
- 메인 앱에서 Do Not Embed
- App Extension인 경우
- 메인 앱에서 Do Not Embed
'iOS Technologies' 카테고리의 다른 글
| UINavigationBar에 Custom 뷰를 추가했더니 의도하지 않는 애니메이션이 나오는 문제 (0) | 2025.11.15 |
|---|---|
| iOS App SandBox (0) | 2025.11.08 |
| xcodebuild로 프로젝트 빌드 시간 측정하는 방법 (0) | 2025.10.17 |
| [Widget Extension #1] 최신 데이터 갱신 (3) | 2025.08.13 |
| App Extension #1 (4) | 2025.06.05 |