<aside>
💡 세줄요약
- 스태틱 라이브러리 : 라이브러리가 전부 실행파일에 들어갔기 때문에 빌드산출물 폴더나 앱 번들에 올라가지 않는다
- 다이내믹 라이브러리 : 앱 실행시 로드되는 방식이므로 빌드산출물 폴더와 앱 번들 폴더에 라이브러리 실행파일을 만든다
- 임베드 : 다이내믹 라이브러리와 관련된 용어로 임베드를 하지 않으면 빌드 산출물 폴더에만 올라가며 앱 번들에 포함 시키려면 임베드를 해줘야 한다 → 물론 다이내믹 라이브러리라서 빌드는 되는데 앱 실행할 때 문제가 생긴다!
</aside>
빌드 산출물 폴더구조
- Xcode 에서 Products 폴더에 있는 아이콘 → Show in Finder 하면 열리는 폴더가 ⇒ 빌드 산출물 폴더
- 스위프트 모듈 폴더 : 스위프트 컴파일러가 해당 모듈의 인터페이스를 이해하고, 다른 모듈과 상호작용 할 수 있도록 돕는다
- Products 폴더에 있는 아이콘(파일) → 앱 번들
- 앱 번들 → 패키지 내용 보기 → exec 라고 적힌 파일 ⇒ 실행 파일
실험실
실기기 ∙ 스태틱 라이브러리만 사용 빌드 ∙ RealmSwift(Dynamic) - Do Not Embed
- 결과 - 빌드는 됨, 앱 실행은 안됨(크래시)
- Dynamic Library 를 임베드를 안해줬지만, 이는 앱 실행시 로드되니까 빌드는 문제없고 실행과정에서 크래시가 나는 것으로 추측
- 빌드 산출물 폴더 살펴보기
- Debug-iphoneOS → PackageFrameworks
- RealmSwift 만 있음(폴더 안에는 실행 파일) → DynamicLibrary 는 라이브러리 실행 파일을 빌드 산출물 폴더에 만드는 구나 추측
- ODindi 번들 → PackageFrameworks 가 없다!!!
- Embed 는 빌드산출물 폴더에서 번들에 집어 넣는 것을 말하는 듯 보인다…
- 실행파일 용량 → 12.1 MB
실기기 ∙ 스태틱 라이브러리만 ∙ RealmSwift(Dynamic) - Embed & Sign
- 결과 - 빌드, 앱 실행 모두 정상
- 빌드 산출물 폴더
- ODindi 번들 → Frameworks 폴더가 생겼다
- Debug-iphoneOS → PackageFrameworks 내의 RealmSwift 폴더의 내용이 그대로 복사되어 있다 + _CodeSignature 폴더도 함께 있는데 이것이 위의 Sign 에 의해 생긴 거 겠지!
실기기 ∙ 다이내믹 라이브러리만 사용 빌드 - 모두 임베드
- 결과 - 빌드, 앱 실행 모두 정상
- 빌드 산출물 폴더
- Debug-iphoneOS → PackageFrameworks
- RxBlocking-Dynamic, SnapKit-Dynamic 이 생겼다 → 다이내믹 라이브러리는 산출물 폴더에 라이브러리 실행파일을 만드는 게 확실해짐!
- 그리고 Debug-iphoneOS 폴더내에 RxSwift 스위프트 모듈이 사라짐…! → 이건 원인 파악이 어렵다…
- ODindi 번들
- Debug-iphoneOS → PackageFrameworks 얘와 똑같은 파일 복제
- 실행파일 용량 → 8.3 MB
- 실행파일에 라이브러리 코드가 포함이 안되니 용량이 줄어든 것도 확인!!