Notice
Recent Posts
Recent Comments
Link
관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] App Thinning, ODR, App Slicing, bitcode 개념 본문

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/

 

Comments