iOS 응용 (swift)
[iOS - swift] App Thinning, ODR, App Slicing, bitcode 개념
jake-kim
2021. 3. 1. 19:59
App Thinning, App Slicing
* Thin: 얇은, 가는
- App Thinnng: 각 디바이스 맞춤으로 필요한 내용만을 만들어서 앱 번들을 만들고 전달하는 과정
- 앱의 구성 요소
| 앱의 구조1 | 앱의 구조2 | 앱의 구조3 |
![]() |
![]() |
![]() |
- Excutable Code의 구성 요소
![]() |
![]() |
- Executable Code안의 Resources의 구성 요소 - assets
![]() |
![]() |
- Excutable Code안의 Resources의 구성 요소 - graphic
![]() |
![]() |
- Excutable Code안의 Reouseces의 구성 요소 - 기타

- 앱 구성 요소의 모든 것

- App Slicing을 통해 각 디바이스에서 필요한 내용만을 선택학여 앱 번들로 만들고 전달하는 과정
![]() |
![]() |
ODR
- ODR(On Demand Resoueces): 특정 리소스들이 필요할 때, 앱스토어에서 그 리소스에 대해서만 로드해주는 것 (IPA와 별도 저장)
_ 디바이스에서 필요할 때 앱스토어에서 가져오는 원리
| Xcode가 가지고 있는 resource | level4, 3, 2 정보는 앱스토어가 가지고 있는 resource |
![]() |
![]() |
- Xcode에서 ODR 활성화 설정 (디폴트 - 활성)

BitCode
- 아직 기계코드 상태는 아닌 중간단계의 코드 (intermediate code)
- intermediate code: 다양한 방식으로 다시 컴파일을 시도 -> Bit Code는 앱의 컴파일러를 추상화할 수 있는 대상
- intermediate code를 사용하는 이유: 중간단계이기 때문에 만약 64bit를 쓰다가 최신 arm64가 나온 경우, 최신 컴파일러로 자동으로 컴파일러가 되도록 할 수 있음
- intermediate code가 없을때 최신 아키텍처 버전이 나오면, 앱 개발자들은 다시 앱 코드 수정, 다시 컴파일 후 앱스토어에 제출해야 하는 번거로움 - BitCode는 AppSlicing, AppThinning에 기여: BitCode가 나오기 전까지는 해당 앱이 실행될 수 있는 32bit, 64bit, arm6,7 등의 모든 환경의 바이너리 파일들을 생성하여 하나로 합쳐서 앱이 뚱뚱해지는 경우 존재
- BitCode의 핵심은 LLVM(Low Level Virtual Machine) - 런타임 상황에서 프로그램의 작성 언어에 상관없이 최적화를 쉽게 구성할 수 있도록 하는 virtual machine
- LLVM은 2가지
1) 프론트 엔드 컴파일: 앱을 만들기 위해서 사용하는 컴파일
2) 백 엔드: 앱을 컴퓨터 코드로 컴파일 - 새로운 아키텍처 도입 시 BitCode활용: 애플은 LLVM을 통해 새로운 CPU에 대한 자원을 앱스토어의 '백엔드'에 추가 할 수 있으며 새로운 아키텍쳐로 컴파일 하는 방법을 BitCode에 표시
- BitCode사용과정: 앱 개발자가 모든 환경의 바이너리 파일이 아닌 BitCode코드를 애플에 제출 -> 애플 서버에서 BitCode를 다시 컴파일 하여 사용자들에게 새로운 바이너리 파일 제공
Xcode에서 BitCode 활성화 설정

* 참고
- ko.wikipedia.org/wiki/LLVM
- developer.apple.com/videos/play/wwdc2015/404
- www.bugsee.com/blog/ios-crash-symbolication-bitcode/












