Monitoring App Size Across Versions
App size directly impacts install conversion. Google published data: every 6 MB above certain thresholds reduces conversion by 1%. App Store warns users on downloads >200 MB over mobile. Without monitoring, size grows silently: a developer adds an SDK, a designer uploads raw PNG instead of WebP, someone commits test resources—and the app is 15 MB heavier without anyone noticing.
What and Where to Monitor
iOS: App Store Connect → TestFlight → App Size shows size for each version by device type (Universal, specific iPhone chips). App Thinning creates different builds for different devices—monitor each variant. Key metric: Compressed (downloaded) size and Uncompressed (installed) size.
Android: Google Play Console → Android Vitals → App size. Shows APK size and AAB (Android App Bundle) download size by device. AAB automatically strips resources for specific devices, so actual install size differs from APK size.
Automatic CI/CD Monitoring
Manual App Store Connect checking is unreliable. Need automatic CI pipeline checks with thresholds and blocking.
For iOS, after xcarchive build, extract size:
# Generate IPA with App Thinning
xcodebuild -exportArchive \
-archivePath Build/App.xcarchive \
-exportPath Build/Export \
-exportOptionsPlist ExportOptions.plist
# Get size from SizeReport.txt which Xcode generates on export
cat Build/Export/App.ipa | wc -c
More accurate: xcrun simctl addmedia with analysis, or use appstoreconnect-swift-sdk for real App Store size via API.
For Android, from AAB:
# bundletool for real download size
java -jar bundletool.jar get-size total \
--bundle=app-release.aab \
--dimensions=ABI,SCREEN_DENSITY \
--device-spec=device-spec.json
bundletool is Google's official tool, simulating what Play Store does when distributing APK from AAB.
Thresholds and Alerts
In CI script: if size grew more than N MB vs previous version (or main branch), build is warning or fails. Reasonable thresholds:
- Warning: +3 MB per version
- Error/block: +8 MB per version
Thresholds depend on app type: for messenger +3 MB is much, for game with new level it's normal.
Version Dashboard
Save size metrics to database (or simple JSON in repo) per release. Record structure: {version, build_number, date, ios_compressed_mb, ios_installed_mb, android_aab_mb, breakdown_by_category}.
Breakdown by category:
- Resources (textures, sounds, video) — typically 60–70% of size
- Frameworks/Libraries — SDKs and static libraries
- Executable — compiled code
On iOS, linkmap file shows contribution of each library and file to binary size. In Android Studio—Analyze APK (Build → Analyze APK) with byte-level breakdown.
Tracking trend across versions lets you quickly identify which release ballooned size and find the culprit commit.
Timeline: one-two workdays for basic setup, CI integration, and dashboard creation.







