앱사이즈에 대하여
앱사이즈에 대해 말하기에 앞서, 각 용어에 대해 먼저 정의하겠습니다.
앱스토어 등록을 위한 파일 포맷
- 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
'Programming > Mac & iOS' 카테고리의 다른 글
[iOS] "%zd, %tu, %tx" 아키택처 관련 Data Format (0) | 2017.05.22 |
---|---|
[RxSwift] Obseravbles (0) | 2017.05.13 |
[iOS] Library & Framework in iOS (1) | 2017.01.31 |
[iOS] WKWebView (instead of UIWebView) (0) | 2017.01.19 |
[iOS] APNS JWT (JSON Web Token) (0) | 2016.12.19 |