study record

[iOS] iOS Framework 본문

iOS/iOS 정리

[iOS] iOS Framework

asong 2022. 7. 22. 23:38

Framework란?

Framework

  • 공유된 recources (dynamic shared library, nib files, image files, localized strings, header files, and reference documentation)를 single package로 캡슐화하는 계층형 디렉토리입니다.
  • *헤더파일, localizable파일, 이미지, 문서와 같은 추가 리소스까지 이 모든 것을 하나의 Bundle로 묶어놓은 것
    • Bundle: 서브 디렉토리 내부의 파일 디렉토리

Library

  • 자주 사용되는 로직을 재사용하기 편리하도록 잘 정리한 일련의 코드들의 집합을 의미한다.
  • 프로그램이 연결할 수 있는 패키징된 Object 파일들의 모음
  • 공통점 : 프로그램을 쉽게 만들 수 있게 하는 공통된 목적이 있음
  • 차이점 :
    • framework가 컴파일된 library binary와 관련 header를 패키징할 수 있다.
      • Framework은 리소스를 패키징된 형태로 함께 제공할 수 있지만, 라이브러리는 소스코드만 포함할 수 있다.
      • Framework은 라이브러리보다 효율적으로 리소스를 관리할 수 있게 해준다.
      • 즉, Framework가 몸집이 크고 Library가 몸집이 작으며, Framework안에 Library가 속할 수 있음
    • Framework은 여러 버전을 동일한 Bundle에 포함하여 하위 버전 호환성을 지원할 수 있다.

 

iOS Framework 종류

Static Framework(정적 프레임워크)

  • = Source File + Static Library + Static Linker
  • Static Linker를 통해 Static Library 코드가 Execute file(= appliccation file) 내로 들어가 Heap 메모리에 상주
  • 앱 실행파일에 직접 복사되어 있으므로 런타임상 속도 빠름
  • 참조가 아닌 복사이므로 안정적
  • dynamic에 비해 메모리 더 소모
  • Framwork 안에 이미지 파일과 같은 리소스 파일이 있어도 사용불가
  • Static Library가 복사되므로, Static Framework를 여러 Framework에서 사용하면 코드 중복이 발생

 

Dynamic Framework (동적 프레임워크)

  • = Source File + Dynamic Library References + Dynamic Library + Static Linker
  • 파일이 아닌 주소를 execute file (= application file)에 저장하고, Static Linker를 통해서 Stack으로 필요한 라이브러리들을 불러와서 사용하는 형태
  • 주소 정보들은 Heap에 상주
  • Framework내에 이미지나 뷰같은 리소스 파일, Bundle을 Embed할 수 있음
  • 컴파일 속도 상승
  • 메모리 상 필요할 때 load시키므로 lazy함

 

Static Framework와 Dynamic Framework 장단점

  • Static Framework - 필요한 파일들을 Heap에 복사해와서 사용하는 것이므로,
    • 장) 런타임 속도가 빠름
    • 단) 메모리가 많이 사용
    • 단) 컴파일 속도가 오래 걸림
  • Dynamic Framework는 주소값을 Heap에 저장해놓고 사용하는 것이므로
    • 장) 컴파일 속도가 적게 걸림
    • 장) 메모리를 효율적으로 사용
    • 단) 런타임 속도가 느림
  • Framework 생성시 Build Settings > Linking > Mach-O Type을 통해 선택이 가능하다.
    • 프레임워크 생성 시 디폴트는 dynamic으로 만들어짐

 

Framework의 형태

.a 형식파일 - Static Library

  • 컴파일될 때 사용할 코드들을 Static Linker에 의해 Execute file에 복사하여 사용
  • Execute file의 몸집이 커지고 프로그램 시작 시간이 긴 단점이 존재

.dylib 형식 파일 - Dynamic Library

  • Static Linker는 라이브러리의 reference만 저장하고 Execute file에 패키징되어 있지 않은 것
  • static에 비해 작은 Executable file이 만들어지지만, dynamic library를 로드하는 시간이 있어서 launch time이 오래 걸리게 된다.

.framework

  • 라이브러리에 헤더파일, 현지화파일, 이미지, 문서와 같은 추가 리소스 모든 것을 하나의 번들로 묶을 수 있는 것
    • 코드 및 기타 재사용 가능한 자원을 전달하여 코드가 작동하도록 하는 패키지

.xcframework

  • Muliple Architectures and Platforms를 위해 나온 개념
  • AppKit과 UIKit, Simulator용을 한번에 지원 가능
    • 여러 프레임워크를 다시 한번 감싸는 형태
  • 시뮬레이터 빌드를 포함하여 여러 플랫폼 (iOS, macOS, tvOS, watchOS)에서 사용할 수 있도록 Xcode에서 만든 배포 가능한 바이너리 패키지
  • XCFramework는 Static Framework이거나 Dynamic Framework 둘 다 가능
  • 원래 Static Framework는 Bundle화만 할 수 있었지만, XCFramework에서는 header와 함께 Bundling이 가능

 

자주 사용되는 형태

Static Framework, .xcframework

이유

→ 여러 플랫폼에서 사용할 수 있도록 프레임워크를 구성할 수 있다.

→ 런타임 속도가 빠르다.

→ 참조가 아닌 복사이므로 안정적

→ LaunchTime을 줄이기 위해 Dynamic Framework보다 Static Framework의 사용

     -> Dynamic Framework는 런타임에 시작할 때 다 로드한다. 사용할 때 로드하는 방식이 아니라. 그래서 static 보다 더 오래 걸리는 것이다.

'iOS > iOS 정리' 카테고리의 다른 글

[iOS] Xcode 프로젝트 개념 (xcodeproj, xcworkspace의 차이)  (3) 2024.10.13
[iOS] iOS 레이아웃 사이클  (0) 2022.04.06
[iOS] invalidateIntrinsicContentSize()  (0) 2022.04.05
[iOS] UIView의 Layer란?  (0) 2022.04.01
[iOS] UIResponder  (0) 2022.03.30