본문 바로가기
iOS/설명

[iOS] Framework vs Library

by Sky Titan 2022. 8. 1.
728x90

 

 

Library, Framework 그리고 XCFramework

Library, Framework, XCFramework 각각의 차이점에 대해 알아보자.

showcove.medium.com

 

 

Introduction to Framework Programming Guide

Introduction to Framework Programming Guide OS X makes extensive use of frameworks to distribute shared code and resources, such as the interfaces to the system itself. You can create frameworks of your own to provide shared code and resources to one or mo

developer.apple.com

Library의 소프트웨어적 의미

  • 일반적으로 Code, Data를 다른 곳에서 재사용하기 위해서 묶어놓은 패키지를 의미한다.
  • Code, Data 뿐만이 아니라 image, document, sound file 등의 리소스들도 라이브러리에 포함할 수 있다.

 

Xcode의 Framework

  • Apple에서 만든 Library Package 방식
    • Framework 또한 Library 중의 하나

 

Dynamic Library vs Static Library

  • Xcode에서 Framework 생성 시 Dynamic 혹은 Static한 라이브러리 둘 중 하나로 생성을 할 수 있다.

1. Project 생성에 들어가서 Framework 선택
2. Build Settings에서 Mach-O Type을 검색하면 Dynamic 혹은 Static 둘 중에 한 종류로 선택 가능

 

1. Static Library

  • framework 빌드 시, 해당 framework를 import하는 사용부에 framework 코드가 복사되어 일부분으로 사용되는 방식이다.
  • 장점:
    • run time 속도가 빠르다.
  • 단점:
    • build time은 느리다.
    • 여러 곳에서 static library를 import하는 경우에는 그만큼 코드가 복사가 되어 application의 file size가 증가할 수 있다.

 

2. Dynamic Library

  • import하는 사용부와 함께 빌드되지 않고, 따로 framework file이 빌드되고 해당 파일의 참조만 가져와서 사용하는 방식이다.
  • 장점:
    • 여러 곳에서 동일한 dynamic library의 참조를 가져와 run time에 load시키기 때문에 하나의 dynamic library만을 가지고 application의 file size의 증가 없이 사용이 가능하다.
    • build time이 static library에 비해 상대적으로 빠르다.
  • 단점:
    • 동적으로 load하는 방식이라 static library에 비해서 run time 속도가 느리다.
  • run time이 느리다 하더라도 크게 체감되는 수준이 아니기에 일반적으로 framework 생성 시 Dynamic library형태로 사용하는 경우가 많다.

 

Embed vs Do not Embed

  • framework를 project에 포함시킬 때, framework의 파일구조를 최종 application 결과물에 포함시킬지 말지에 대해서 선택할 수 있다.

 

1. Embed

  • 최종 application 결과물을 packaging할 때, framework의 폴더구조를 그대로 복사한 형태로 application을 생성한다.
  • Dynamic Library의 경우에는 무조건 Embed해야지 크래시가 발생하지 않는다.
    • Dynamic Library는 동적으로 runtime loading하는 형태이기 때문에 코드가 미리 복사되어 있는 상태가 아니다.

Project를 Archieve한 후 생성된 application 패키지로 들어가보면 다음과 같이 Embed된 framework파일이 보인다.

 

2. Do not embed

  • framework 폴더를 application 결과물에 포함하지 않는다.
  • Static Library의 경우엔 Do not embed하여도 상관없다.
    • build할 때 이미 코드가 복사되었기 때문
  • 하지만 Static Library도, framework에 포함된 image등의 resource를 사용하려면 Embed시켜야한다.
    • 이 경우엔 코드 복사본이 하나 더 생긴다.
      • build time에 import된 곳에 하나
      • application 패키지내에 framework 형태로 또 하나 존재
    • 때문에 code와 Data뿐만이 아니라, resource도 사용해야하는 경우엔 보통 Dynamic Library 형태로 생성한다.

 

728x90

'iOS > 설명' 카테고리의 다른 글

[iOS] UIScrollView contentInsetAdjustmentBehavior  (0) 2022.08.02
[iOS] IPA 파일  (0) 2022.08.02
[iOS] IBOutlet Collections  (0) 2022.08.01
[iOS] setContentOffset의 animation 시간 조절하기  (0) 2022.07.25
[iOS] UIView LifeCycle 생명주기  (0) 2022.07.18

댓글