[iOS]App Thinning

App Thinning - 앱 시닝

정의 ▾

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

 

구성 ▾

슬라이싱(Slicing) ▾

Slicing

  • 다양한 기기와 운영체제 버전에 대하여 여러 가지 app bundle의 변형(variants)을 생성하고 전달하는 과정입니다.
    • 변형(variants)은 실행가능한 아키텍처, 리소스만 포함합니다.
  • 앱의 전체 버전을 계속 개발하고 앱스토어 커넥트(App Store Connect)에 업로드하게 되면 앱스토어는 앱이 지원하는 기기 및 운영체제 버전에 따라 다양한 변형(variants)을 생성하고 제공합니다.
  • 사용자가 앱 스토어를 통해 앱을 설치하게 되면 사용자의 기기 및 기기의 운영체제 버전에 맞춰 변형(variatns)이 다운로드가 됩니다.
  • Xcode는 개발 중에 슬라이싱(slicing)을 시뮬레이션하므로 앱의 변형(variants)을 만들고 테스트할 수 있습니다.
    • 기기 및 시뮬레이터에서 앱을 빌드하고 실행할 때 Xcode는 앱을 슬라이스 합니다.
    • 아카이브를 생성할 때, Xcode는 앱의 전체 버전을 포함하지만 아카이브에서 변형(variants)을 내보낼 수 있습니다.
iOS, tvOS 9.0 이상에서만 슬라이스 된 앱을 지원합니다.
그 이하 버전은 앱스토어에서 universal variatns를 제공합니다.

* univarsal variants는 Mobile Device Management(MDM), Apple School Manager, Apple Business Manager를 통해 대량 구매 한 앱 혹은 iTunes 12.6 이하의 버전을 사용하여 다운로드 한 앱을 통해서도 제공이 된다고 합니다.

비트코드(Bit Code) ▾

  • 비트코드는 컴파일된 프로그램의 중간표현(Intermediate Representation)입니다.
  • 비트코드가 포함된 앱스토어 커넥트에 업로드한 앱은 앱스토어에서 컴파일 및 연결됩니다.
비트코드를 포함하면 앱의 새 버전을 앱스토어에 제출할 필요 없이 향후 앱 바이너리를 다시 최적화할 수 있습니다.
  • 사례를 보겠습니다.
    • 과거 새로운 아이폰이 64비트 칩셋으로 바꾼 적이 있는데 이때 비트코드(bitcode)가 적용되어있지 않는 시저이라 앱 개발자들은 코드를 수정하고 앱을 다시 컴파일하여 제출했다고 합니다.
    • 비트코드(bitcode)가 적용이 되었더라면 새로운 아키텍처로 컴파일할 수 있도록 알아서 최적화를 했을 수 있었을 것 같습니다.
    • 참고: https://zeddios.tistory.com/655
  • iOS 앱의 경우 비트코드가 default이면서도 optional이라고 합니다. 
    • watchOS, tvOS의 앱들은 비트코드가 필요합니다.
    • 비트코드를 제공하려면 앱 번들의 모든 앱과 프레임워크에 전부 비트코드가 포함되어야 합니다.

주문형 리소스(On-Demand Resource) ▾

On-Demand Resource

  • 주문형 리소스(On-Demand Resource)는 이미지나 사운드 같은 리소스를 키워드로 태그 할 수 있고, 태그별로 그룹을 요청할 수 있습니다.
    • 주문형 리소스(ODR)은 앱스토어에 IPA와 별도로 저장이 됩니다.
  • 앱스토어는 Apple 서버의 리소스를 호스팅 하고, 다운로드를 관리하며, 주문형 리소스를 분할시켜 앱의 변형을 더욱 최적화한다고 합니다.
  • 쉽게 말해 필요할 때 다운로드를 하는 것을 의미합니다.
    • 게임으로 예를 들어보면, 현재 레벨에 필요한 데이터들을 다운로드하고, 상위 레벨의 데이터는 현재 필요하지 않으므로, 사용자의 레벨이 필요할 때 데이터를 다운로드하는 것입니다.

 

이점 ▾

  • 더 작은 앱 크기
    • 사용자가 다운로드한 앱 번들의 크기가 작아지면 다운로드 속도가 빨라지고 기기에 더 많은 저장 공간이 생깁니다.
  • 앱 리소스의 지연 로딩
    • 앱에는 특정 상태에서만 사용되는 리소스가 있습니다. 앱이 적절한 상태에 들어갈 가능성이 있을 때 리소스가 요청됩니다. 예를 들어, 여러 레벨이 있는 게임에서 사용자는 현재 및 다음 레벨과 관련된 리소스만 필요합니다.
  • 거의 사용하지 않는 리소스의 원격 저장
    • 앱에 자주 사용되지 않는 리소스가 있습니다. 리소스는 필요할 때 요청됩니다. 예를 들어 앱 튜토리얼은 일반적으로 앱을 처음 연 후 한 번 표시되며 다시는 사용되지 않을 수 있습니다. 앱은 처음 시작할 때 튜토리얼을 요청한 다음 필요할 때나 새로운 기능이 추가될 때만 튜토리얼을 요청합니다.
  • 인앱 구매 리소스의 원격 저장
    • 앱은 추가 리소스가 포함된 인앱 구매를 제공합니다. 구매한 모듈에 대한 리소스는 앱이 시작된 후 앱에서 요청합니다. 예를 들어, 사용자는 키보드 앱에서 SuperGeeky 이모티콘 팩을 구매합니다. 앱은 실행이 완료된 후 팩을 요청합니다.

 

참고: https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/On_Demand_Resources_Guide/index.html

 

On-Demand Resources Guide: On-Demand Resources Essentials

On-Demand Resources Guide

developer.apple.com

 

'iOS_Swift.zip' 카테고리의 다른 글

[iOS]Protocol  (0) 2022.02.20
[iOS]NotificationCenter  (0) 2022.02.18
[iOS]lazy 키워드  (0) 2022.02.16
[iOS]Frame과 Bounds의 차이  (0) 2022.02.14
[iOS]Escaping Closure(@escaping)  (0) 2022.02.12