Library vs Framework 정리
모듈화의 개념을 이해하기 전 기초 지식으로 정리.
Library란?
- 개발자가 만들 클래스들의 집합으로 다른 프로그램에서 사용할 수 있도록 제공
Framework란?
- 소프트웨어를 개발하는데 있어서 개발 시간을 줄이고, 코드의 재사용성을 증가시키기 위해 묶음이나 뼈대(틀)을 라이브러리 형태로 제공되는 것.
- 제어의 역전 개념이 적용된 대표적 기술
Library와 framework의 차이
- 라이브러리와 프레임워크의 차이는 제어 흐름의 주도성이 누구 / 어디에게 있는가가 포인트
- 즉, 애플리케이션의 흐름(Flow)를 누가 갖고 있느냐의 차이
프레임워크는 스스로 제어 흐름의 주도성을 갖는 반면, 라이브러리는 개발자가 가짐.
StaticLibrary / Dynamic Libarary / Megable Library
해당 부분을 이해하기 위해선 운영체제 지식이 선행되어야 함.
컴파일이란?
원시 코드를 컴퓨터가 이해할 수 있는 언어로 번역해주는 과정
- 전처리기(preprocessor): 소스코드의 주석제거, define을 치환하는 기능
- 컴파일러(compiler): 어셈블리 파일로 변환(어셈블리어는 CPU 명령어 조합으로 CPU에 의존적)
- 어셈블러(assembler): object 코드 파일로 변환. object 파일은 0과 1로 이루어진 바이너리 코드(아직 주소 정보가 확정되지 않음)
- 링커(linker): object 파일을 묶어 실행 코드 파일로 변환. 운영체제가 로딩할 수 있도록 주소 정보를 할당한 파일을 만들어 냄.(링커는 운영체제에 의존적)
이 과정을 모두 거치면 실행파일 생성.
링커는 링킹 과정을 거치는데, 이 과정에서 라이브러리가 앱에 링킹되는 방식에 따라 Static 또는 Dynamic으로 구분
Static Library
- 빌드 타임에 앱의 소스코드와 필요한 라이브러리들을 실행파일에 병합
- static library는 실행파일의 크기에 영향을 주어 앱 사이즈가 커질 수도 있음
Dynamic Library
- 앱 빌드 시 라이브러리의 reference(참조)를 실행파일에 포함.
- 런타임에 필요한 라이브러리를 로딩하여, 동적 라이브러리를 로딩시간에 영향을 줄 수 있음.
Mergable Library
- 동적 라이브러리를 사용할 경우 디버그 모드에서는 동적 라이브러리 처럼 동작
- 동적 라이브러리를 릴리즈 모드에서는 정적 라이브러리 처럼 동작
- 디버그 빌드에서 빌드 시간을 단축하면서도 릴리즈 빌드에서는 정적 링크를 사용하는 것과 유사한 앱 실행 시간을 얻기 위함.
해당 부분은 별도의 포스팅으로 정리할 예정.
Do Not Embed / Embed & Sign / Embed Without Signing
Xcode 프로젝트 설정에서 Do Not Embed, Embed & Sign, Embed Without Signing 옵션은 앱에서 사용하는 프레임워크의 포함 방식을 설정하는 데 사용.
Do Not Embed
- 이 옵션은 프레임워크를 앱 번들에 포함하지 않는다는 뜻. 즉, 앱이 실행될 때 프레임워크를 찾아서 로드하지 않으며, 이 설정은 일반적으로 시스템 프레임워크나 이미 시스템에 설치된 프레임워크에 대해 사용.
- 정적 라이브러리의 경우 이미 실행 파일에 필요한 라이브러리 코드가 존재하기 때문에, Frameworks 폴더에 라이브러리가 있을 필요가 없음. 번들을 라이브러리가 가질 경우에는 예외
Embed & Sign
- 이 옵션은 프레임워크를 앱 번들에 포함, 앱 서명 과정에서 해당 프레임워크도 함께 서명된다는 뜻
- 앱이 실행될 때 이 프레임워크는 포함된 상태로 로드되며, 이 옵션은 사용자 정의 프레임워크나 외부 프레임워크를 포함할 때 주로 사용되며, iOS 앱 배포 시 필수적인 설정
- 동적 라이브러리의 경우 Frameworks 경로에 코드를 포함시켜서 임베드 하지 않으면 크래시 발생
Embed Without Signing
- 이 옵션은 프레임워크를 앱 번들에 포함하되, 서명 과정에서 제외된다는 의미이며, 개발 과정에서는 이 옵션이 유용할 수 있지만, 배포를 위해서는 대부분의 경우 서명이 필요하므로 주의해서 사용.
- 주로 macOS 앱에서 서명이 필요 없는 경우에 사용.
이 옵션들은 앱의 빌드 및 실행 방식에 큰 영향을 미치므로, 사용하는 프레임워크와 앱 배포 전략에 따라 적절히 선택해야 함
xcframwork
여러 아키텍처를 동시에 지원할 수 있는 프레임워크 패키지. 빌드 옵션에 따라 정적 혹은 동적으로 만들 수 있음.
(참고)
https://sharonprogress.tistory.com/169
프레임워크(Framework)와 라이브러리(Library)의 차이점
1. 프레임워크(Framework)란? 개발자가 소프트웨어를 개발함에 있어 코드를 구현하는 개발 시간을 줄이고, 코드의 재사용성을 증가 시키기 위해 일련의 클래스 묶음이나 뼈대, 틀을 라이브러리 형
sharonprogress.tistory.com
https://charles098.tistory.com/102
[ 운영체제 ] 컴파일(Compile)과 링킹(Linking), 런타임(Runtime), 로딩(Loading)
이 글에서는 주소 바인딩(Address Binding)을 이해하기 위해 꼭 알아야 하는 용어들을 설명한다. 원래 주소 바인딩을 바로 다루려고 했으나 정리하다가 용어가 헷갈려서 공부할겸 정리한다. 컴파일,
charles098.tistory.com
https://medium.com/@jc3wrld999/gcc-compiler-manual-a309c8f9d8f6
GCC Compiler Manual
컴파일 과정
medium.com
https://developer.apple.com/documentation/xcode/configuring-your-project-to-use-mergeable-libraries
Configuring your project to use mergeable libraries | Apple Developer Documentation
Use mergeable dynamic libraries to get app launch times similar to static linking in release builds, without losing dynamically linked build times in debug builds.
developer.apple.com
배포 가능한 FrameWork 만들기 (XCFramework)
XCFrameWork 란 무엇인가 https://help.apple.com/xcode/mac/11.4/#/dev6f6ac218b 공식문서에 따르면 XCFrameWork 란 “An XCFramework is a distributable binary package created by Xcode that contains variants of a framework or library so that it can
neogurhub.tistory.com
'apple > iOS, UIKit, Documentation' 카테고리의 다른 글
[Swift] NSCache (swift-corelibs-foundation) (9) | 2024.10.11 |
---|---|
UICollectionView Sticky Header (0) | 2024.09.04 |
Swift @TaskLocal (3) | 2024.08.28 |
Swift KeyPath 정리 (0) | 2024.08.28 |
iOS Translation Framework (0) | 2024.08.28 |