[Framework] Static / Dynamic / 실전, 응용

2024. 2. 19. 08:17🍏/Swift

진행중인 프로젝트에 Share Extension을 도입함으로써 해당 extension에도 snapkit을 적용하게 되었는데,

이를 정적라이브러리인  snapkit static library를 사용하지 않고, SnapKit-Dynamic library 으로 변경하는 과정을 정리하였습니다.

 

 


 

Framework 에는 어떤 프레임 워크가 있는지, 지난 포스트에서 알아 보았습니다. 이제 내가 사용하는 라이브러리들이 어떤 라이브러리 인지 확인하고 동적라이브러리로 변경하는 방법을 공유합니다.

 

[Swift] Dynamic Libraries or Static Libraries / 동적 라이브러리, 정적라이브러리

라이브러리란? 라이브러리는 재사용 가능한 코드의 집합입니다. 이 코드들은 특정 작업을 수행하는 함수, 클래스, 서비스, 또는 프레임워크로 구성되어 있습니다. 개발자들은 이러한 라이브러

chanhhh.tistory.com

간단하게 설명하는 Static Framework와 Dynamic Framework

더보기

Static Framework

빌드 과정: Static Framework는 컴파일 시간에 애플리케이션 파일에 직접 통합됩니다. 소스 파일과 Static Framework들은 Static Linker를 통해 애플리케이션 파일에 포함되어, 실행 파일 내에 직접 코드가 삽입됩니다.

장점:

  • 성능: Static Framework는 참조 없이 직접 코드가 포함되므로, 실행 시간에 동적 로딩 과정이 필요 없어 속도가 빠릅니다.

단점:

  • 앱 크기: 여러 모듈에서 Static Framework를 사용할 경우, 각 모듈에 별도로 포함되어 앱의 크기가 증가할 수 있습니다.
  • 업데이트: Static Framework에 변경 사항이 생길 경우, 앱을 재컴파일해야 합니다. 이는 업데이트 과정을 복잡하게 만들 수 있습니다.

Dynamic Framework

빌드 과정: Dynamic Framework는 컴파일 시점에 애플리케이션 파일에 참조만 포함됩니다. 실제 라이브러리는 디스크에 존재하며, 애플리케이션이 실행될 때 메모리에 로드됩니다.

장점:

  • 메모리 관리와 의존성: Dynamic Framework는 여러 앱이나 모듈에서 공유될 수 있으므로, 메모리 사용과 의존성 관리에 효율적입니다. Package 작성시 Dependency에 구애받지 않고 여러 모듈에서 Dependency 하여도 무관
  • 업데이트 용이: Framework를 업데이트할 때, 애플리케이션을 재컴파일하지 않고도 새로운 기능이나 수정 사항을 적용할 수 있습니다.

단점:

  • 실행 속도: 실행 시 동적 로딩이 필요하기 때문에, Static Framework에 비해 상대적으로 로딩 시간이 길어질 수 있습니다.

 

 

현재 사용하고 있는 스냅킷이 Static임을 알 수 있는 방법

executable file에 nm 명령어를 사용해서 함수가 들어있는지 확인하여 찾아 봅니다. 

static library

share extension의 executable file 그리고 기존 target의 executable file 둘다 snapkit의 함수들이 복사된것을 확인할 수 있습니다.

아래 사진에는 Snapkit의 함수들이 사라진 것을 확인할 수 있습니다.

dynamic framework

Snapkit.frameworkr가 생긴 것을 확인할 수 있는데, 해당하는 framework의 executable file을 file 명령어를 사용해서 확인하면

SnapKit: Mach-O 64-bit dynamically linked shared library arm64

위와 같이 동적 라이브러리임을 알 수 있습니다.

 

용량

static library 사용시 용량 

static libraries 용량

dynamic library 사용시 용량

dynamic library 사용시 용량

SnapKit dynamic library 용량

SnapKit 용량

복사되는 SnapKit의 용량만큼 절약 가능합니다.

 


적용방법

 

현재 Tuist를 이용해서 SPM을 관리하고 있었으므로 tuist Dependencies 를 변경합니다.

tuist edit을 통하여 snapkit을 Dynamic Library로 사용 가능하게 변경하였습니다.

tuist dynamic framework 관리

적용 후

tuist clean
tuist fetch
tuist generate

위와 같은 tuist 명령어들을 사용해서 최신화 시켜줍니다.

 

Tuist 혹은 Project 파일로 종속성관리를 하지 않는다면 간단하게 Package Dependencies 추가할때 Dynamic으로 설정하면 됩니다.