Skip to content

라이브러리 정의

XCFramework 와 Fat Framework(Universal) 의 차이#

Fat(Universal) Framework#

여러 아키텍쳐들의 형태로 빌드된 라이브러리들을 하나로 통합한 형태의 프레임워크가 Fat(Universal) Framework 이며 특징은 명령어로 특정 아키텍쳐를 삭제할 수 도 있고 원하는 아키텍쳐들을 합칠 수 도 있다. 만약 Fat Framework 를 사용하려면 아래와 같이 앱스토어 업로드시에는 시뮬레이터 아키텍쳐들을 제거해야 한다.

  • Fat(Universal) Framework 는 다양한 아키텍쳐를 포함할 수 있다.
  • 앱스토어에 업로드시 시뮬레이터용 아키텍쳐가 포함되지 않아야 한다.(strip 과정이라고 부름)

XCFramework#

실리콘 기반의 m1이 출시되면서 arm64 아키텍쳐가 iOS와 서로 겹치기 때문에 하나의 fat 파일로 만들지 못하는 문제를 해결하기 위해 멀티 아키텍쳐와 멀티플랫폼을 지원하도록 나온 새로운 프레임워크 개념.

  • XCFramework 는 멀티 아키텍쳐나 플랫폼을 하나로 묶어서 배포할 수 있다.
  • Xcode11 부터 생긴 새로운 배포방식.
    Fat(Universal)              appstore upload
|-------------------|       |-------------------|
|   i386            |       |                   |
|   x86_64          |       |                   |
|   armv7           |   ->  |   armv7           |
|   armv7s          |       |   armv7s          |
|   arm64           |       |   arm64           |
|-------------------|       |-------------------|

                    .xcframework
|---------------------------------------------------------------|
|   ios-arm64   ios-x86_64-simulator    ios-x86_64-maccatalyst  |
|   |-------|       |--------|              |--------|          |
|   | arm64 |       | x86_64 |              | x86_64 |          |
|   |-------|       |--------|              |--------|          |
|---------------------------------------------------------------|
포함된 아키텍쳐 확인하는 터미널 명령어
$ lipo -info libFileName.a

// Fat(Universal) Library 만들기
$ lipo -create -output libFileName.a libFileName-i386.a libFileName-x86_64.a libFileName-armv7.a libFileName-arm64.a

// 특정 아키텍쳐 삭제 (i386 아키텍쳐만 걸러내기)
$ lipo -remove i386 -output libFileNameOutput.a libFileName.a

Library#

Static Library#

  • 파일확장자 .a 이며 리눅스에서 쓰이는 포맷이고 안드로이드에서도 사용가능한 확장자

  • 앱의 컴파일 시점에 링크됨

  • 이미지와 같은 리소스 파일들을 포함할 수 없기 때문에 Bundle 파일을 포함하여 배포 필요

Dynamic Library#

  • 파일확장자 .dylib 이며 리눅스나 안드로이드에서는 .so 가 동일한 동적타입의 라이브러리이다.(c# dll)

  • 앱의 런타임 시점에 링크되어 실행됨

Framework#

Static Framework#

전체소스를 제공하지 않고 SDK 형태로 배포하는 경우

Dynamic Framework#

리소스를 포함할 수 있고 소스 제공

장단점 Static Framework Dynamic Framework
장점 실행속도 빠르다 메모리 효율이 뛰어나며 최종 앱빌드시 컴파일 속도가 단축
단점 비교적 메모리 사용이 높고 최종 앱빌드시 컴파일 속도가 더 오래걸림 런타임시 실행되므로 런타임 속도에 영향을 줌

Mach-O Type#

  • Executable - 앱 프로젝트 생성시 기본 설정.(실행가능한 바이너리)
  • Dynamic Library - 동적 라이브러리.(프레임워크 프로젝트 생성시 기본 설정)
  • Bundle - 리소스
  • Static Library - 정적 라이브러리
  • Relocatable Object File - Object Code로 구성된 파일.(사용해보지 않아서 잘 모르겠다)

Xcode내에서 프레임워크 사용시 설정 옵션#

복사해서 runtime 에 연결할 것인지 참조하여 build time 에 연결할 것인지 선택하는 옵션.

  • Static Library - Do Not Embed 선택 (복사, build time)
  • Dynamic Library - Embed & Sign, Embed Without Signing (참조, runtime)

Xcode 아키텍쳐 정의#

아키텍쳐 설명 기기 모델
armv7 arm cpu 아이폰4s 이전 기기
armv7s arm cpu 아이폰5, 아이폰5c
i386 intel 32bit cpu (simulator)
x86_64 intel 64bit cpu (simulator) 2005년부터 2021년 사이에 출하된 Intel 기반의 Mac
arm64 arm 64bit cpu 아이폰5s 이후 기기 또는 2020년 말 이후에 출하된 Apple Silicon 기반의 Mac

m1이전의 인텔맥들은 모두 cpu 아키텍쳐가 인텔이기때문에 시뮬레이터 아키텍쳐는 인텔 cpu였다. x86_64 경우엔 amd아키텍쳐 기반이며 인텔아키텍쳐와 호환된다.

iOS디바이스들은 arm 아키텍쳐 기반으로 제작된 cpu를 사용하기 때문에 arm이라고 보면 된다.

인텔맥과 m1의 아키텍쳐#

애플 실리콘#

arm 기반으로 제작된 m시리즈로써 애플 자체 프로세서.

아이폰과 맥이 동일한 아키텍쳐를 사용하고 있으므로 맥과 아이폰에서 모두 실행가능한 상황이 도래했다.

Comments