-
Notifications
You must be signed in to change notification settings - Fork 20
Closed
Description
앱 시닝이란?
- 애플리케이션이 디바이스에 설치될 때, 앱 스토어와 운영체제가 디바이스의 특성에 맞게 설치되도록 하는 설치 최적화 기술을 의미.
- 최소한의 디스크 사용과 빠른 다운로드를 제공
- 앱 시닝은
슬라이싱(slicing),비트코드(bitcode), 그리고주문형 리소스(on-demand resource)가 있음.
앱 슬라이싱
- 앱이 지원하는 여러 디바이스에 대해 각각 조각 애플리케이션 번들을 생성하고, 해당 디바이스에 가장 적합한 조각을 전달하는 기술
- 개발자가 App store connect에 업로드하면, 앱 스토어에서 디바이스 특성에 따라 다양한 버전의 조각들을 생성
- 그리고 사용자가 그 조각 중에서 가장 알맞은 조각(app variant)을 다운로드 받는 것
- 앱스토어가 알아서 해줌
비트코드 ⭐️
- 기계언어로 번역되기 이전 단계의 중간표현(Intermediate Representation)을 말함.
- 현재 iOS에서는 옵션이나 기본 설정으로 되어 있으며, 개발자가 프로젝트 옵션에서 선택
- 비트코드를 사용하여 업로드를 하면 애플이 애플리케이션을 재컴파일하여 앱 바이너리(app binary)를 생성
- 대체 왜 중간 표현이 필요할까?
- 중간 언어의 지침이 주어지면, 다양한 방식으로 다시 컴파일❗️❗️ 하는데 사용할 수 있다.
- 2013년 iPhone5가 64비트 칩셋으로 바꿈.
- 이때는 비트코드가 없을 때라서 iPhone5때문에 개발자가 이미 제출한 앱을 코드를 수정하고 앱을 다시 컴파일하여 제출을 했어야 한다.
- 만약 이때 비트코드가 있었더라면 출시한 앱개발자들은 아무것도 안해도 됐었음.
- 그리고 앱이 32비트 64비트 환경 arm6/arm7/arm7s/arm64에 대해 바이너리를 생성하여 하나의 파일로 뭉쳤다면.
fat binary가 된다.- 비트코드가 있었더라면 앱스토어가 알아서 비트코드를 받아가지고 환경별 바이너리를 생성해준다.
- 즉, 다운시 내 환경에 맞는 바이너리만 받을 수 있다.
주문형 리소스
- 쉽게 말해서, 필요할 때 다운로드 받는다는 것
- 예를 든다면 사용자가 게임을 할 때. 현재 레벨보다 상위레벨은 필요하지 않으므로 갖고 있을 필요가 없음.
- 사용자의 레벨이 필요할 때 다운로드 받는 것
- 또한 인앱 구매를 예로 들 수 있다.
- 사용자의 선택에 따라 다운로드를 받는 것
LLVM
- intermediate 또는 machine(기계) 코드로 내 코드를 컴파일 하는데 사용되는 라이브러리
- LLVM에는 프론트엔드와 백엔드가 있다.
- 프론트엔드 : 프로그래밍 언어를 사용하는 부분
- 백엔드: 컴퓨터 코드로 컴파일하는 부분
dSYM이란?
- debug symbol file
- 컴파일러가 소스코드를 기계어로 변환할때 생성되고 역할은 기계어를 다시 소스코드 라인으로 매핑하는 정보를 가진 파일
Crash Report dYSM
- bitcode를 사용하다보니 dYSM을 업데이트 해주어야 하는 경우가 있음
- 애플은 비트코드를 "다시" 컴파일하여 사용자에게 새로운 바이너리를 제공
- 이 때, Xcode에서 로컬로 생성된 dSYM파일과 실제 사용자가 얻는 바이너리와 일치하지 않기 때문에 재대로 crash를 표시할 수 없게 된다.
- 따라서, 수동으로 다운받아서 업뎃해주어야함.