Thanks to visit codestin.com
Credit goes to github.com

Skip to content

App thining, BitCode, dSYM #91

@Youngminah

Description

@Youngminah

앱 시닝이란?

  • 애플리케이션이 디바이스에 설치될 때, 앱 스토어와 운영체제가 디바이스의 특성에 맞게 설치되도록 하는 설치 최적화 기술을 의미.
  • 최소한의 디스크 사용과 빠른 다운로드를 제공
  • 앱 시닝은 슬라이싱(slicing), 비트코드(bitcode), 그리고 주문형 리소스(on-demand resource)가 있음.

앱 슬라이싱

  • 앱이 지원하는 여러 디바이스에 대해 각각 조각 애플리케이션 번들을 생성하고, 해당 디바이스에 가장 적합한 조각을 전달하는 기술
  • 개발자가 App store connect에 업로드하면, 앱 스토어에서 디바이스 특성에 따라 다양한 버전의 조각들을 생성
  • 그리고 사용자가 그 조각 중에서 가장 알맞은 조각(app variant)을 다운로드 받는 것
  • 앱스토어가 알아서 해줌

image
image

비트코드 ⭐️

  • 기계언어로 번역되기 이전 단계의 중간표현(Intermediate Representation)을 말함.
  • 현재 iOS에서는 옵션이나 기본 설정으로 되어 있으며, 개발자가 프로젝트 옵션에서 선택
  • 비트코드를 사용하여 업로드를 하면 애플이 애플리케이션을 재컴파일하여 앱 바이너리(app binary)를 생성
  • 대체 왜 중간 표현이 필요할까?
    • 중간 언어의 지침이 주어지면, 다양한 방식으로 다시 컴파일❗️❗️ 하는데 사용할 수 있다.
    • 2013년 iPhone5가 64비트 칩셋으로 바꿈.
    • 이때는 비트코드가 없을 때라서 iPhone5때문에 개발자가 이미 제출한 앱을 코드를 수정하고 앱을 다시 컴파일하여 제출을 했어야 한다.
    • 만약 이때 비트코드가 있었더라면 출시한 앱개발자들은 아무것도 안해도 됐었음.
    • 그리고 앱이 32비트 64비트 환경 arm6/arm7/arm7s/arm64에 대해 바이너리를 생성하여 하나의 파일로 뭉쳤다면.
    • fat binary가 된다.
    • 비트코드가 있었더라면 앱스토어가 알아서 비트코드를 받아가지고 환경별 바이너리를 생성해준다.
    • 즉, 다운시 내 환경에 맞는 바이너리만 받을 수 있다.

주문형 리소스

  • 쉽게 말해서, 필요할 때 다운로드 받는다는 것
  • 예를 든다면 사용자가 게임을 할 때. 현재 레벨보다 상위레벨은 필요하지 않으므로 갖고 있을 필요가 없음.
  • 사용자의 레벨이 필요할 때 다운로드 받는 것
  • 또한 인앱 구매를 예로 들 수 있다.
  • 사용자의 선택에 따라 다운로드를 받는 것

image

LLVM

  • intermediate 또는 machine(기계) 코드로 내 코드를 컴파일 하는데 사용되는 라이브러리
  • LLVM에는 프론트엔드와 백엔드가 있다.
  • 프론트엔드 : 프로그래밍 언어를 사용하는 부분
  • 백엔드: 컴퓨터 코드로 컴파일하는 부분

dSYM이란?

  • debug symbol file
  • 컴파일러가 소스코드를 기계어로 변환할때 생성되고 역할은 기계어를 다시 소스코드 라인으로 매핑하는 정보를 가진 파일

image

Crash Report dYSM

  • bitcode를 사용하다보니 dYSM을 업데이트 해주어야 하는 경우가 있음
  • 애플은 비트코드를 "다시" 컴파일하여 사용자에게 새로운 바이너리를 제공
  • 이 때, Xcode에서 로컬로 생성된 dSYM파일과 실제 사용자가 얻는 바이너리와 일치하지 않기 때문에 재대로 crash를 표시할 수 없게 된다.
  • 따라서, 수동으로 다운받아서 업뎃해주어야함.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions