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 명령어를 사용해서 함수가 들어있는지 확인하여 찾아 봅니다.
share extension의 executable file 그리고 기존 target의 executable file 둘다 snapkit의 함수들이 복사된것을 확인할 수 있습니다.
아래 사진에는 Snapkit의 함수들이 사라진 것을 확인할 수 있습니다.
Snapkit.frameworkr가 생긴 것을 확인할 수 있는데, 해당하는 framework의 executable file을 file 명령어를 사용해서 확인하면
SnapKit: Mach-O 64-bit dynamically linked shared library arm64
위와 같이 동적 라이브러리임을 알 수 있습니다.
용량
static library 사용시 용량
dynamic library 사용시 용량
SnapKit dynamic library 용량
복사되는 SnapKit의 용량만큼 절약 가능합니다.
적용방법
현재 Tuist를 이용해서 SPM을 관리하고 있었으므로 tuist Dependencies 를 변경합니다.
tuist edit을 통하여 snapkit을 Dynamic Library로 사용 가능하게 변경하였습니다.
적용 후
tuist clean
tuist fetch
tuist generate
위와 같은 tuist 명령어들을 사용해서 최신화 시켜줍니다.
Tuist 혹은 Project 파일로 종속성관리를 하지 않는다면 간단하게 Package Dependencies 추가할때 Dynamic으로 설정하면 됩니다.
'🍏 > Swift' 카테고리의 다른 글
[Firebase] iOS UIKit에서의 Google OAuth 로그인 연동 방법 해결 과정 (0) | 2024.03.03 |
---|---|
[Extension] ShareExtension에서 Containing App을 여는 방법 (0) | 2024.02.20 |
[Swift] Dynamic Libraries or Static Libraries / 동적 라이브러리, 정적라이브러리 (2) | 2024.02.08 |
[SPM] Swift Package Manager / 내 Library 만들기 (0) | 2024.02.01 |
[Swift] Libraries, Frameworks, Swift Packages (0) | 2024.02.01 |