Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- UICollectionView
- Human interface guide
- 리펙토링
- Protocol
- collectionview
- swiftUI
- Observable
- ios
- ribs
- RxCocoa
- 리팩토링
- tableView
- 리펙터링
- map
- SWIFT
- MVVM
- rxswift
- uitableview
- swift documentation
- 스위프트
- HIG
- 애니메이션
- combine
- uiscrollview
- UITextView
- 클린 코드
- clean architecture
- Refactoring
- Clean Code
- Xcode
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] Static Framework와 Dynamic Framework의 개념 (UIKit은 Static일까? Dynamic일까?, XCFramework 개념, Mach-O 개념, Embed & Sign 개념) 본문
iOS 응용 (swift)
[iOS - swift] Static Framework와 Dynamic Framework의 개념 (UIKit은 Static일까? Dynamic일까?, XCFramework 개념, Mach-O 개념, Embed & Sign 개념)
jake-kim 2023. 3. 14. 01:34Static Framework 개념
- 의미
- 앱의 실행 파일(excecutable)에 바이너리 파일이 포함되는 형식 (컴파일 타임에 로드되는 방식)
- 단점
- 앱의 사이즈 증가
- 모듈화 시 static 프레임워크를 의존하게되면 복사가 되므로 여러곳에서 의존할 경우 코드 중복 발생하여 의존성 관리에 더욱 주의해야하는 점이 존재
- 장점
- dynamic framework보다 빠른 속도
Dynamic Framework 개념
- 의미
- 앱의 실행 파일(excecutable)에 포함되지 않고, 런타임 시 링크되어 앱이 실행되거나 필요할때 프레임워크 코드가 메모리에 로드되는 방식
- 단점
- 앱의 바이너리 파일에 포함되어 있지 않고, 링크하여 사용하므로 static framework에 비해서 느린 속도
- 장점
- static framework에 비해서 앱의 사이즈가 커지지 않음
- 해당 프레임워크를 의존하면 코드 복사가 되지 않아서 코드 중복이 발생하지 않아 의존성 관리가 편한점이 존재
XCode에서의 Embed & Sign 개념
- Xcode에서 Frameworks, Libraries, and Embedded Content를 보면 Embed 옵션이 존재
- Embed 옵션: Embed라는 것은 앱의 번들 파일에 해당 프레임워크를 복사할 것인지를 의미
- Embed & Sign - dynamic framework인 경우 사용 (Framework를 앱 번들에 한번만 복사해놓고 코드 사이닝을 실행하여 런타임 시 해당 프레임워크가 필요하면 연결하여 사용)
- Do not Embed - static framework인 경우 사용 (Static Framework는 앱의 실행 파일 executable에 포함되므로 따로 번들을 참조하지 않아도 됨)
Xcode에서의 Static Framework, Dynamic Framework와 Mach-O 개념
- Mach-O: (Mach Object file format) - 애플 OS에서 동작하는 컴파일된 프로그램에 대한 파일 포맷을 의미
- 오브젝트 파일(.o)
- 동적 라이브러리(.dylib)
- 정적 라이브러리(.a)
- 번들(.bundle)
ex) Alamofire가 어떤 프레임워크인지 확인 방법 (dynamic vs static)
- Show in Finder 선택
- .framework 파일을 확인하러 finder로 이동
(추가 확인)
- 안에 계속 들어가면 Alamofire.exec (바이너리 파일이 존재)
- file명령어로 Alamofire를 확인했을때 dynamically linked 가 있다면 dynamic framework라고 확인
% file Alamofire
Alamofire: Mach-O 64-bit dynamically linked shared library arm64
XCFramework 개념
- Xcode 11부터 도입된 방식이고 dynamic이나 static framework를 포함하여 여러개를 포함하여 배포되는 방식
- XCFramework는 빌드 할때 옵션에 따라 dynamic으로 만들수도 있고 static으로 만들 수 있는 점이 존재
- 특정 .xcframework 형식의 프레임워크가 dynamic인지 static인지 알 수 있는 방법?
- 위 Alamofire.xcframework를 확인해본 방법처럼 Alamofire의 이진 파일을 file 명령어로 확인하여 dynamically linked가 있는지 확인하여 판단이 가능
UIKit은 Dynamic Framework일까? Static Framework일까?
- 바이너리 파일을 대상으로 file 명령어를 사용하면 dynamic인지 static인지 확인이 가능
- find명령어로 UIKit의 바이너리 파일이 어디있는지 확인 후 file 명령어로 확인
file /Users/jake/Library/Developer/Xcode/iOS\ DeviceSupport/13.5.1\ \(17F80\)/Symbols/System/Library/Frameworks/UIKit.framework/UIKit
(결과) - UIKit은 dynamic framework
/Users/jake/Library/Developer/Xcode/iOS DeviceSupport/13.5.1 (17F80)/Symbols/System/Library/Frameworks/UIKit.framework/UIKit: Mach-O 64-bit dynamically linked shared library arm64
* 참고
https://keumjae.tistory.com/142
https://www.runtastic.com/blog/en/frameworks-ios/
https://stackoverflow.com/questions/148747/what-is-the-difference-between-a-framework-and-a-library
'iOS 응용 (swift)' 카테고리의 다른 글
Comments