
Compress iOS @1x/@2x/@3x icons, Android density buckets, and App/Play Store screenshots in batch. A practical Zipic workflow for mobile app developers.
Mobile apps ship a density matrix that web tools weren’t built for. iOS wants @1x / @2x / @3x for every raster icon; Android wants up to five density buckets. Add an AppIcon set, App Store screenshots at three display sizes, and a Play Store feature graphic, and a single release can carry hundreds of megabytes of source assets before anything compiles.
Generic web compressors don’t fit. Asset Catalog and res/drawable-* pin every file by name; rename one and the build breaks. Xcode’s actool does a lossless re-encode — it never trims bytes the way a real compressor would. And fastlane snapshot captures simulator-native pixels with no resize or compression of its own.
This guide walks through how to use Zipic — a native macOS image compressor with a URL Scheme, AppIntents, and folder monitoring — to plug those gaps without touching filenames or the res/ tree.
A web project usually ships one canonical image plus a srcset. A mobile project ships the canonical asset and the entire density matrix, every file pinned to a strict naming contract:
Icon.png, Icon@2x.png, Icon@3x.png inside AppIcon.appiconset, with Contents.json naming every slot.mipmap-mdpi/, mipmap-hdpi/, mipmap-xhdpi/, mipmap-xxhdpi/, mipmap-xxxhdpi/.Three specifics that catch teams out:
.png, .jpg, .heic, .heif, .avci, and .pdf — but not WebP. Vector assets ship as PDF with “Preserve Vector Data” on. (ImageSetType reference)actool is not a lossy compressor. It re-encodes PNGs into a private premultiplied BGRA container; the bytes you ship come from the bytes you imported. (Asset Catalog Format Overview)You need a tool that compresses in place, preserves filenames, runs over a folder of densities at once, and skips formats it shouldn’t touch.
Apple’s Human Interface Guidelines lay out the matrix:
| Slot | Points | @2x | @3x | Notes |
|---|---|---|---|---|
| iPhone app | 60 pt | 120×120 px | 180×180 px | Required |
| Spotlight | 40 pt | 80×80 px | 120×120 px | Search results |
| Settings | 29 pt | 58×58 px | 87×87 px | Settings list |
| App Store marketing | — | — | 1024×1024 px | sRGB, opaque, no alpha, no rounded corners |
Two HIG rules people miss:
For Liquid Glass icons across iPhone/iPad/Mac/Watch, Icon Composer (WWDC25 Session 361) outputs a single layered .icon document plus a flattened 1024 PNG for App Store Connect. Compress that flattened export with Zipic and the layered design stays untouched.
A safe Zipic preset for AppIcon assets:
| Setting | Value | Why |
|---|---|---|
| Format | original (PNG) |
Asset Catalog won’t take WebP |
| Quality | 2–3 | Visually lossless on iconography |
| Save location | original |
Overwrite in place; Contents.json references stay valid |
| Resize | off | Never change icon dimensions |
Drop the AppIcon.appiconset folder onto Zipic and every PNG inside gets compressed with the active preset, filenames intact:
For a build phase, the URL Scheme one-liner:
open "zipic://compress?url=$SRCROOT/AppIcon.appiconset&format=original&level=3&location=original"
location=original is what keeps Contents.json happy — every filename and relative path stays byte-identical.
Android replaces “@2x / @3x” with five density buckets keyed off dpi (screen density reference):
| Bucket | DPI | Scale vs. mdpi |
|---|---|---|
mdpi |
160 | 1.0× (baseline) |
hdpi |
240 | 1.5× |
xhdpi |
320 | 2.0× |
xxhdpi |
480 | 3.0× |
xxxhdpi |
640 | 4.0× |
In integer pixel ratios — counting ldpi (0.75×) through xxxhdpi (4.0×) — that’s 3 : 4 : 6 : 8 : 12 : 16. A useful sanity check when scaling Figma exports up from a “1×” baseline.
Adaptive icons add another layer of structure (Create app icons, AdaptiveIconDrawable):
For runtime drawables (not adaptive icon layers), two format choices matter:
Source: Reduce image sizes.
Batch PNG-to-WebP across all five density folders at once:
open "zipic://compress?url=$PROJECT_DIR/app/src/main/res&format=webp&level=3&location=original"
Zipic walks the directory, compresses every PNG/JPEG, and writes WebP siblings (or replaces the originals if your build points at the new files). Vector .xml drawables are left alone.
The format picker for one-off tweaks:
App Store (Screenshot Specifications, as of 2026-05):
| Display | Portrait pixels |
|---|---|
| 6.9-inch | 1320×2868 |
| 6.5-inch | 1284×2778 |
| 6.3-inch | 1179×2556 |
App Store Connect accepts .jpeg, .jpg, or .png, 1–10 screenshots per listing.
Google Play (Graphic asset rules):
| Asset | Spec |
|---|---|
| App icon | 512×512 32-bit PNG with alpha, ≤ 1024 KB |
| Feature graphic | 1024×500 24-bit PNG/JPEG, no alpha |
| Screenshots | 24-bit PNG/JPEG; shortest side ≥ 320 px; longest side ≤ 3840 px; longest side ≤ 2× shortest side |
| Screenshot count | 2–8 per device type |
| TV banner | 1280×720 |
The reason this needs a dedicated compression pass: fastlane snapshot captures at simulator-native resolution and fastlane deliver uploads by filename match — neither tool resizes or compresses. A 1320×2868 PNG straight from the simulator is often 4–6 MB.
Zipic resizes and compresses in one URL Scheme call:
# 6.9-inch App Store screenshots → resized JPEG
open "zipic://compress?url=$HOME/fastlane/screenshots/en-US&format=jpeg&level=3&width=1320&height=2868&location=custom&directory=$HOME/store-uploads/ios-69"
# Play Store screenshots → 24-bit PNG inside the 320–3840 px envelope
open "zipic://compress?url=$HOME/fastlane/metadata/android/en-US/images/phoneScreenshots&format=png&level=3&width=1080&height=1920&location=custom&directory=$HOME/store-uploads/play"
Resize flow on a folder of screenshots — pick a target width, drop the folder, output is upload-ready:
URL Scheme calls are great inside a build phase or fastlane lane. The lowest-friction integration is no integration at all — point Zipic Pro’s folder monitoring at the directories your tools already write to:
~/Design/figma-exports/ — auto-WebP every PNG/JPEG export~/fastlane/screenshots/ — resize + compress before deliver runs$DERIVED_DATA/.../*.png — Xcode-built simulator screenshots$PROJECT_DIR/app/src/main/res/drawable-xxxhdpi/ — Android Studio drawable exportsEach monitored folder uses its own preset, so lossless PNG for AppIcon assets, level-3 WebP for Android drawables, and resized JPEG for App Store screenshots all run concurrently on different folders.
Settings live in Zipic → Settings → Workflow. Enable silent mode and URL Scheme calls fire from your build script without ever stealing focus from Xcode or Android Studio:
For a deeper walkthrough, see macOS Automation: Auto-Compress with Folder Monitoring and the Monitoring Directory documentation.
Compression is one lever. Both platforms already do meaningful asset thinning, and a good strategy stacks with them.
iOS — App Thinning (WWDC15 Session 404, On-Demand Resources):
iOS binary limits (Maximum Build File Sizes):
__TEXT segment ≤ 80 MB.Android — App Bundle limits (Maximum app size):
| Asset | Limit |
|---|---|
| AAB base module | ≤ 200 MB |
| Each feature module | ≤ 200 MB |
| Total install-time download | ≤ 4 GB |
| On-demand + fast-follow asset packs (combined) | ≤ 4 GB |
| Legacy APK upload | ≤ 100 MB |
A few “do nots” Zipic users sometimes ask about:
.car files. Asset Catalogs are compiled by actool; touching the .car breaks runtime asset lookup.One design note: for toolbars, tab bars, and navigation chrome, Apple’s HIG (Icons) recommends SF Symbols over custom PNG/PDF assets. SF Symbols inherit Dynamic Type, weight, and Dark Mode for free — fewer files in the binary, better accessibility. Save custom assets for places where branding or semantics genuinely require them.
For format choice — when WebP wins, when HEIC is right, when to keep PNG — see How to Choose the Right Image Format for Your Project.
How the pieces fit on a small mobile team shipping iOS and Android from one repo:
~/Design/exports/{ios,android}/. Monitored folders convert iOS exports to PNG Q3 and Android exports to WebP Q3.AppIcon.appiconset. A pre-archive run-script phase calls zipic://compress?url=$SRCROOT/AppIcon.appiconset&format=original&level=3&location=original so every committed icon is already compressed.app/src/main/res after assembleRelease — WebP everywhere except 9-patches and vector drawables.~/fastlane/screenshots/. Snapshot captures land, get resized and compressed in seconds, and deliver picks them up untouched.Nobody hand-tunes a slider. Presets enforce the standard, monitored folders enforce it automatically, and the URL Scheme is the build-time safety net.
Full documentation: Workflow Integration | Monitoring Directory | Image Compression Basic
Ready to plug compression into your iOS and Android build pipeline? Download Zipic — free for 25 images per day. Every download includes a full 7-day Pro trial. Zipic Pro unlocks URL Scheme advanced parameters, AppIntents, folder monitoring, and unlimited batch processing — one-time purchase, no subscription.

Batch compress images on Mac safely: sample first, protect originals, then scale with folders, Raycast, monitoring, or Shortcuts.

Compress images on Mac with drag-and-drop, Finder, presets, and batch automation — protect originals, check quality at 100%, then scale the workflow.

Learn how to compress a PDF without losing quality by diagnosing oversized images, export settings, and layout problems before choosing a compression level.

See how Zipic uses pngoptim for Mac PNG compression: stable presets, APNG handling, ICNS workflow, and predictable batch results for teams.