Skip to main content

Framework, Library

  • 일반적으로 프레임워크와 라이브러리의 차이는 주체의 의해 사용되는 것인지 틀에 맞추어 제어권을 부여할 것인지에 따 달라진다.
  • Library의 경우 사용자가 필요에 따라 선언하고 사용한다.
  • Framework의 경우 프레임워크가 제공하는 틀에 따라 구현해 놓으면 프레임워크가 작동하면서 구현한 내용을 실행 시킨다.

iOS에서 Framework의 종류

  • static framework: Do not embed(복사)
  • dynamic framwork: Embed(참조)
  • 차이점은 컴파일된 코드를 참조하는 방식
  • 프레임워크 생성 시 디폴트는 dynamic으로 만들어진다.

static framework

  • 앱의 실행 파일 안에 복사.
  • 앱 실행파일에 직접 복사되어 있으므로 런타임상 속도가 빠르다.
  • 참조가 아닌 복사방식이므로 안정적이다.
  • dynamic 방식에 비해 메모리를 더 많이 차지한다.
  • Framework안에 이미지 파일과 같은 리소스 파일이 있어도 사용이 불가하다.

Dynamic Framework

  • 런타임상에서 Mach-O 파일과 참조관계이다.
  • Framework내에 이미지나 뷰같은 리소스 파일, Bundle을 Embed할 수 있다.
  • 빌드속도가 빠르다.
  • 메모리 상 필요할 때 load시킨다(lazy).
  • 디버그시 필요한 dSYM파일을 프레임워크 개발자가 따로 제공해야한다.
  • static에 비하여 런타임에서 속도가 저하된다.

사용 방법에 따라 선택적 사용이 필요

  • 코드상에 API만 제공해주는 경우 static framework 사용, 아니라면 dynamic framework 사용

Dynamic Library VS Static Library

  • 두 라이브러리의 가장 중요한 차이점은 실행 파일에 연결되는 방식에 있다.

  • Dynamic 라이브러리의 경우 말 그대로 동적으로 실행파일에 연결되어 있다.

  • 이 경우 라이브러리는 실행파일의 부분으로 포함되지 않는다.

  • 즉, 앱이 실행될 때 필요한 라이브러리들을 로드하는 방식이다.

  • 앱에 Dynamic 라이브러리를 많이 포함하는 것은 좋은 방법이 아니다.

  • static 라이브러리의 경우 빌드타임에서 static linker를 사용하여 실행파일에 모든 프레임워크를 머지하게 된다.

  • 결국 실행파일이 더욱 커지게 된다, 만약 사용하지 않는 파일이 있어도 모두 포함되어 실행파일로 만들어진다.(비효율)

  • dynamic Library 경우 embed and sign으로 링크 연결을 해주어야 한다.

Custom Framework 생성

  • Project -> Framework로 프로젝트 생성
  • 필요한 소스코드 작성
    • 소스코드 작성 시 외부에서 import 하여 사용해야 할 함수와 클래스의 경우 open으로 생성해야만 접근이 가능하다.
  • Build Setting -> All, Levels, Linking 옵션으로 검색하면 Mach-O Type을 선택할 수 있다.
  • Dynamic, static를 선택하여 프레임워크를 빌드한다.
  • Product -> Show Build Folder in Finder 선택하여 product 안에 생성된 framework를 확인한다.

Custom Framework 실행

  • 실행 앱 프로젝트 생성
  • 생성한 프레임워크 드래그 앤 드롭으로 copy 옵션으로 앱에 추가
  • Targets -> Frameworks, Libraries, and Embeded Content 에서 embed 여부 선택
  • Dynamic일 경우 Embed and sign 하지 않을 시 앱 실행시 에러 발생

참조