Programming/Mac & iOS

[iOS] ipa와 번들에 대하여

MB Kyle KWON 2017. 2. 4. 09:02

앱사이즈에 대하여

앱사이즈에 대해 말하기에 앞서, 각 용어에 대해 먼저 정의하겠습니다.

 앱스토어 등록을 위한 파일 포맷

  •  App bundle : 앱 바이너리, 리소스 파일 등 일체를 포함한 bundle 파일입니다. 지원하는 모든 디바이스에 대한 데이터를 포함하고 있습니다.
  • .dysm : iTunes Connect와 기타 크래시 리포트 라이브러리에서 사용하는 Dynamic Symbol입니다. 이 파일을 통하여 각 메모리 주소에 코드 매핑이 가능합니다.
  • 앱스토어 등록용 .ipa : 스토어 등록을 위한 압축 파일입니다. 위에서 말씀드린 app bundle과 .dysm, On-Demmand Resource용 assets 패키지를 모두 포함하는 .ipa 파일입니다.



- App Thinning (iOS9 이상 지원) : Slicing, Bit code, On-Demmend Resource 등 (이하 항목은 App Thinning의 적용 여부에 따라 분류됩니다.)

- Slicing : 각 architecture용 바이너리와 기기에 맞는 리소스만 묶어 설치하는 기술입니다.

- Bit Code : Bit Code를 포함하여 스토어에 올리면 애플이 중간형태의 바이너리로 최적화 작업을 진행합니다. 

- On-Demmand Resources : 초기 실행에 필요 없는 파일을 제거하는 기술입니다. 제거된 파일은 키워드로 분류하여, 추후 앱이 실행되는 동안 스토어를 통해 백그라운드에서 다운로드 합니다.

 

앱 설치를 위한 파일 포맷

  • Universal .ipa : 기기에 다운로드 받는 .ipa 파일입니다. 스토어에서 사용하고 기기에는 필요없는 .dysm과 On-Demmand Resource용 assets 패키지가 제거된 .ipa입니다. Bit code로 recompile한 파일입니다. iOS8 이하에서 설치되며, 기종에 상관없이 모든 iOS 기기를 위한 데이터를 포함합니다.
  • Thinned .ipa : 기기에 다운로드 받는 .ipa 파일입니다. 스토어에서 사용하고 기기에는 필요없는 .dysm과 On-Demmand Resource용 assets 패키지가 제거된 .ipa입니다. Bit code로 recompile한 파일입니다. iOS9 이상에서 설치되며, 앱이 설치될 기기에 특화된 데이터만을 포함합니다.


  • Universal app bundle : Universal .ipa에서 압축 해제한 후, 최종적으로 기기에 설치되는 app bundle 입니다.
  • Thinned app bundle : Thinned .ipa에서 압축 해제한 후, 최종적으로 기기에 설치되는 app bundle 입니다.



앱 사이즈 줄이는 방법

Code

  • 긴 문자열, 테이블, 기타 리소스 파일들은 code가 아닌 외부 파일로 저장합니다. 외부 파일은 바이너리로 쓰이는 code보다 더 효율적인 압축 알고리즘을 지원합니다.
  • Optimization Level을 Fastest, Smallest [-Os]로 설정합니다.
  • PNG Compression을 사용합니다.
  • 앱 실행에 있어 필수인 파일들만 Documents 디렉토리에 저장합니다. 이외의 파일은 Caches 혹은 tmp 디렉토리에 저장하여 backup 프로세스를 우회합니다.

Assets

  • .ipa 파일을 검사해서 앱 실행을 위해 사용하지 않는 파일 (readme, 헤더 파일, 기타 등)들이 App bundle에 포함 되어있는지 검사합니다.
  • Asset Catalogs를 사용합니다. 이는 App Slicing 정책에 기반하여, 각 기기에 필요한 리소스 파일들만 정확히 분류하여 설치합니다.
  • 32-bit PNG 파일보단 8-bit PNG 파일을 사용합니다. 크게 4배까지 사이즈를 줄일 수 있습니다.
  • 32-bit 이미지에 한해, 포토샵의 Save For Web 옵션을 사용합니다. 이를 사용하면 이미지 외의 메타데이터(만든 앱, 만든 날짜, 작성자 등) 들을 삭제하여 PNG, JPG 등의 사이즈를 줄일 수 있습니다
  • AAC나 MP3 포맷을 이용하여 오디오 파일의 사이즈를 줄입니다.

Architecture

  •  On-Demmand Resources를 사용합니다. 자주 사용하지 않는 리소스들은 묶어 On-Demmand Resources를 통해 전달 받도록 구현합니다.
  • Background Downloads를 사용합니다.



출처 : https://developer.apple.com/library/content/qa/qa1795/_index.html