일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- url 추적
- ViewBuilder
- convert base64
- SwiftUI
- base64 변환
- Side Menu
- oberve url
- Swift Package Manager
- 스크롤 탭
- Android
- UIPresentationController
- transformation.map
- notifychanged
- List
- 상단 탭바
- DataBinding
- swift #swift keychain #keychain 사용법
- DevelopmentRegion
- UIViewControllerTransitioningDelegate
- scrolling tab
- 개발자 면접
- development language
- 기존 앱
- ios
- swift
- Tuist
- pod install
- detect url
- url 관찰
- GeometryReader
- Today
- Total
버그 잡이
iOS Static Library가 Dynamic Library보다 앱 용량이 작을 수 있다. 본문
Static Library에 대한 통념
Static Library는 Dynamic Library보다 앱 용량을 많이 차지한다는 것이 일반적인 생각입니다.
왜냐하면 iOS기준 Static Library는 Library 파일을 복사해서 앱 excutable 파일에 포함시키기고
반면 Dynamic Library는 라이브러리에 대한 참조만 앱의 excutable 파일에 포함시키기 때문입니다.
Dynamic -> Static으로 바꾼 결과
= Launch time 개선, App Size 감소(?)
개발중인 iOS 앱의 서드파티 라이브러리 포함 방식을 바꿀 기회가 생겼습니다.
기존은 Cocoapods을 사용중이고 Dynamic 방식이었습니다.
그런데 앱 런치 타임이 느려진 이슈가 있어서 이를 해결하는 과정에서 Dynamic으로 관리하던 Cocoapods라이브러리를 Static 방식으로 변경해보았습니다.
이 방식은 앱 최초 로드시 발생하는 dylib 로드 시간을 줄일 수 있지만 앱 용량이 증가할 수 있는 문제가 있다고 알고 있었습니다.
변경 결과 Dynamic에서 Static 방식으로 바꾼 결과 앱 Launch time은 시간은 약 20% 정도 줄어들었고,
App Size는 오히려 15%정도 줄어들었습니다.
"App Size는 오히려 15%정도 줄어들었습니다."
도대체 왜 줄어든 것일까요?
Static 방식에서 App Size가 줄어든 이유
1. 라이브러리도 앱 용량에 포함됩니다.
- 아카이브 된 앱 파일의 패키지 정보를 보면 Framework폴더 안에 라이브러리 파일들이 포함됩니다.
- Dynamic 방식이라도 앱 용량에 영향을 주는 것은 어쩔 수 없죠
2. 앱의 Excutable 파일 외부에 있는 것은 최적화의 효과를 볼 수 없습니다.
- Dynamic 방식은 위에서 언급한 Framework 폴더 안에 있는 파일들은 최적화 효과를 볼 수 없습니다.
- 반면 Static 방식은 Excutable file 안에 포함되기 때문에 위 최적화 옵션의 혜택을 받을 수 있습니다.
물론 이러한 결과는 앱의 구조와 특성에 따라 달라질 수 있는 부분이라고 합니다.
그리고 Dynamic방식과 Static방식은 각각의 장단점이 있기 때문에 필요에 따라 방식을 선택할 필요가 있습니다.
* 참고
'IOS' 카테고리의 다른 글
Tuist 삽질기 (1) - tuist란 무엇이고 어떻게 쓰는건가? (0) | 2023.04.30 |
---|---|
iOS/swift - Side Menu를 만드는 2가지 방법 (0) | 2022.12.28 |
WKWebview 메모리 릭 이슈 해결 (0) | 2022.08.07 |
WKWebview Crash - OBSERVER_WAS_OVERRELEASED_OR_SMASHED (0) | 2022.08.05 |
iOS - App Launch Time 줄이기 #pre-main time #static library (0) | 2022.07.02 |