iOS 앱 크기 줄이기
예전에 개발했던 앱 사이즈가 너무 커서 앱 용량을 줄이기 위해서 분석.
애플 문서를 먼저 정리하고, 후에 실제 앱에 적용한 순서로로 작성.
목차
- Reducing your app’s size (iOS 앱 크기 줄이기)
- Reducing your app’s size - Overview
- Create the app size report
- This process creates a folder with your app’s artifacts
- App Thining Size Report 생성 자동화하기
- Doing basic optimization to reduce your app’s size (앱 사이즈 최적화하기)
- Doing basic optimization to reduce your app’s size - Overview
- 내 앱에서 문제 분석하기
- Doing advanced optimization to further reduce your app’s size (앱 용량 최적화 고급 기술)
- 에셋 파일 최적화
- 앱 업데이트 크기 줄이기
- App Thinning 및 On Demand Resource 사용
- 내 앱에 적용한 확인 및 결과 비교 (앱스토어)
Reducing your app’s size - Overview
사용자가 모바일 네트워크 커버리지가 좋은 지역에 있더라도 다운로드 속도가 다를 수 있으며, 데이터 요금제 때문에 사용 가능한 고속 데이터 양이 제한될 수 있음.
- 앱 다운로드에 시간이 오래 걸리지 않거나 사용자에게 추가 비용이 발생하지 않도록 App Store는 모바일 연결을 통해 설치할 수 있는 앱의 크기를 제한.
- 앱의 크기가 제한을 초과하면 사용자는 Wi-Fi 네트워크에 연결하여 설치해야 함.
- 앱의 가능한 설치 기반을 극대화하고 설치 시간을 최소화하려면 앱 크기를 크기 제한보다 훨씬 낮게 유지할 것.
이러한 문제 외에도 기기의 저장 공간이 제한되어 있을 수 있으므로 앱의 크기를 더욱 주의 깊게 고려하는 것이 중요.
앱 최적화를 시작하기 전에 먼저 다운로드 및 설치 크기를 측정해야 하지만, 디버깅을 위해 생성하거나 Xcode 내에서 App Store에 업로드하는 바이너리는 앱 크기를 측정하는 데 적합하지 않음.
- APP 파일(앱 번들) (The APP file (the app bundle))
- 앱을 보관할 때 생성하는 XCARCHIVE 번들 (The XCARCHIVE bundle that you create when your archive your app)
- App Store Connect에 업로드하는 IPA 파일 (The IPA file that you upload to App Store Connect)
이러한 바이너리들에는 사용자가 App Store에서 다운로드하는 번들에 포함되지 않은 리소스와 파일이 포함되어 있음.
- 예를들어, 충돌 보고를 위한 DSYM 파일
개발 중에 앱의 정확한 다운로드 및 설치 크기를 얻는 유일한 방법은 Mac에서 앱 크기 보고서를 만드는 것
- 만약, App Store 또는 TestFlight 앱을 통해 제공되는 경우 App Store Connect가 가장 정확한 크기 정보를 제공
- 앱이 각 디바이스에 대해 사이즈를 모바일 인터넷 연결을 통한 다운로드 제한을 초과하면 경고함.
TestFlight로 테스트하기 위해 배포된 앱에는 App Store 빌드에 없는 추가 데이터가 포함되어 있으므로 TestFlight 빌드가 더 큼.
- 여기에 추가된 데이터는 App Store에서 사용할 수 있도록 만들 때 앱에는 포함되지 않음.
그러나 업로드한 바이너리와 비교했을 때 App Store에 승인된 후 앱의 최종 크기는 약간 더 커질 수 있음.
- 크기가 증가하는 이유는 App Store가 앱 바이너리에 추가 처리를 수행하여 앱 불법 복제를 방지하기 위해 DRM을 추가한 다음 바이너리를 다시 압축할 때 발생할 수 있음.
Create the app size report
App Store Connect가 앱 크기에 대한 가장 정확한 측정값을 제공하는 반면, Xcode를 활용하면 앱 크기 보고서를 생성할 수 있음.
앱의 다운로드 및 설치 크기에 대한 근접 추정치를 제공제공
1. Archive your app in Xcode
- Xcode > Product > Archive를 눌러서 수행
2. Export your archived app as an Ad Hoc, Development, or Enterprise build.
- 보관된 앱을 Ad Hoc, 개발 또는 Enterprise 빌드로 내보내기
- Xcode 16.2에서 아카이빙 할 때 Enterprise, Debugging, Custom을 선택.
- 해당 포스팅은 커스텀을 선택하여 진행
3. In the sheet for setting the development distribution options, choose “All compatible device variants” for app thinning.
- Xcode 16.2에서는 Enterprise, Debugging, Custom을 선택해서 ipa 파일이 추출되도록 수행
4. Sign your app and export it to your Mac.
- ipa 파일 서명해서 내보내기.
This process creates a folder with your app’s artifacts
추출한 파일에서 App Thinning Size Report.txt 파일을 열어서 보면 각 디바이스에 대한 용량 등이 나타남.
- 해당 파일 제일 끝에는 해당 사이즈에 대한 정보가 나타남.
App Thining Size Report 생성 자동화하기
xcodebuild -exportArchive -archivePath iOSApp.xcarchive -exportPath Release/MyApp -exportOptionsPlist OptionsPlist.plist
Doing basic optimization to reduce your app’s size - Overview
앱 크기를 측정한 후에는 몇 가지 기본 최적화를 수행해 더 작게 만들 수 있음.
Check your target’s build settings for release builds
릴리즈(Release) 설정의 앱 사이즈 최적화에 대한 기본 설정은 `Fastest, Smallest [-Os]`로 설정되어 있음.
- 이는 컴파일된 바이너리를 매우 작게 만들어줌.
Identify and remove unused assets
앱의 내부 IPA 파일을 살펴보면서 불필요한 에셋이나 파일이 있는지 확인.
1. Open Finder and navigate to the IPA file that you want to inspect.
- Finder를 열어서 ipa 파일을 확인
2. Change the extension of the IPA file to ZIP. (An IPA file is just a ZIP archive that has a particular structure when unzipped.)
- IPA 확장자를 ZIP으로 변경 (IPA 파일은 압축을 풀면 특정 구조가 존재하는 ZIP일 뿐)
3. Unzip the file to show the app bundle inside the Payloads directory. You can either open the ZIP file in Finder, or run unzip -lv /path/to/your/app.zip in the Terminal app.
- 압축 풀기 (터미널로 써도 되고 터미널 GUI 통해서 처리 가능)
4. Right-click the app bundle, and choose Show Package Contents.
- 앱 번들의 오른쪽 마우스 클릭해서 `패키지 내용 보기` 클릭.
내 앱에서 문제 분석하기
이제 내 앱에서 패키지 내용을 열어서 개선해보고자 함.
- 앱에 리소스는 폰트 말고는 없는데 앱 용량이 너무 커서 의문이었음.
앱 파일에 위젯이 들어있는게 이상해서 Xcode를 열어서 확인.
- Frameworks, Libraries and Embeded Content에 플러그인에 나타난 appex가 존재하여 제거
앱 크기를 줄이기 위해 최적화 고급 기술 리서치
용량을 줄이기 위해서 몇가지 방법을 리서치 후 적용
- Asset Catalog로 옮길 수 있는게 있는지 확인
- On Demand Resource를 적용할 수 있는 부분 있는지 확인
- 기존 이미지 파일 더 최적화 할 수 있는지 확인 (Optimize your app’s asset files)
에셋 파일 최적화
이미지와 비디오 파일은 앱 크기에 영향을 미치므로 더 효율적인 이미지와 비디오 파일 사용 권장
- 이미지에는 HEIF 형식을 사용하고, 비디오에는 HEVC 형식을 사용하는 것을 고려
- PNG 파일을 사용하는 경우에는 32비트 대신 8비트를 사용하는 것을 고려
- 이 경우 이미지 크기를 1/4로 줄일 수 있음
- 이미지 압축
- 32비트 이미지의 경우 포토샵을 사용할 경우 `Save for Web`을 사용하면 JPEG 및 PNG 이미지 크기를 크게 줄일 수 있음.
- 오디오 파일 압축
- 오디오 파일을 최적화하려면 일반적으로 AAC 또는 MP3 코덱을 사용하여 압축하는 것이 좋음
- 비트레이트를 줄여보는 것도 효과적인데, 대부분의 경우에서 44.1kHz의 샘플레이트가 반드시 필요하지 않으며, 낮은 비트레이트로 압축하더라도 품질 저하를 느끼기 어려운 경우가 많음.
앱 업데이트 크기 줄이기
앱 업데이트가 있을 경우에는 항상 앱 전체를 다운로드 하는 것 대신 App Store는 업데이트 패키지를 만듦.
- 앱 이전 버전 하나 이상을 새 버전과 비교하여 최적화 된 패키지를 만듦.
- 패키지에는 앱 버전간 변경된 콘텐츠만 포함되며, 변경되지 않은 콘텐츠는 제외
패키지 생성시 비교되는 애플리케이션 번들에 있는 모든 것을 살펴봄
- 실행파일, storyboard, nib, 로컬라이징 및 이미지, Asset 등
- 따라서 불필요하게 파일을 수정하지 말고, 새 버전에서 예상하지 못한 diff가 있는지 점검
- 파일 생성 및 수정 날짜는 신뢰할 수 없어서, 파일의 실제 내용 등으로 업데이트 여부 결정하나 파일의 날짜 값을 기반으로 하는 경우에는 예외.
App Thinning 및 On Demand Resource 사용
App Thinning은 Apple에서 제공하는 기술로, 앱을 각 사용자의 디바이스에 최적화된 형태로 제공하여 앱 크기를 줄이고 디바이스 저장 공간을 절약하는 방법
- iPhone 14 Pro 사용자: 앱은 @3x 이미지 리소스만 포함
- iPad 사용자: 앱은 @2x 이미지 리소스와 iPad에 특화된 레이아웃만 포함
앱에 포함된 리소스(이미지, 비디오, 데이터 등)를 필요한 시점에만 다운로드하도록 설계
- 앱의 핵심 파일만 설치 후, 특정 기능을 실행할 때 필요한 리소스만 추가로 다운로드
- 게임에서 새로운 레벨에 진입할 때 해당 레벨의 리소스를 다운로드
- 예제는 참고 제일 아래 유튜브 파일 첨부
내 앱에 적용한 확인 및 결과 비교 (앱스토어)
위의 방법들을 리서치하고 적용한 후의 결과
앱 스토어에 반영된 결과 확인
- Mac에서 추출했던 결과와도 일치!
(참고)
https://developer.apple.com/documentation/xcode/reducing-your-app-s-size
https://developer.apple.com/documentation/xcode/doing-basic-optimization-to-reduce-your-app-s-size
https://developer.apple.com/documentation/uikit/adding-a-custom-font-to-your-app
https://www.youtube.com/watch?v=yh8XjiGvBHc
유튜브 참고 파일
'project > 개발 업무' 카테고리의 다른 글
iOS 캐싱 로직 구현 전 디스크 분석 (0) | 2024.12.09 |
---|---|
iOS 빌드 메시지 분석해서 빌드 시간 개선하기 (0) | 2024.12.03 |
iOS Combine을 활용해 로그인 상태 관리 기능 구현 (0) | 2024.11.27 |
iOS 멀티캐스트 딜리게이트 패턴 활용한 로그인 상태 관리 구현 (0) | 2024.11.27 |
UICollectionView Crashes on iOS 18 with Xcode 16: Troubleshooting Guide (0) | 2024.11.22 |