버그 잡이

iOS Static Library가 Dynamic Library보다 앱 용량이 작을 수 있다. 본문

IOS

iOS Static Library가 Dynamic Library보다 앱 용량이 작을 수 있다.

버그잡이 2022. 8. 9. 19:54

 

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방식은 각각의 장단점이 있기 때문에 필요에 따라 방식을 선택할 필요가 있습니다.

 

 

 

* 참고

https://medium.com/@agung1991putra/cocoapods-static-framework-vs-dynamic-framework-pod-revisited-is-it-true-that-static-linkage-2cccb4827082



반응형
Comments