0

I'm facing the iOS app size issue that the app size over 50 MB cannot be downloaded over 3G/4G connection. My iOS app is heavy because of large amount of images (.png). I have already tried some solutions but it's not enough.

  1. Separate between iPhone and iPad.
  2. Use Compressing PNGs Technique but this just reduce my app size little.
  3. Use zip archiving like SSZipArchive.

I saw an app with download size less than 50 MB but after downloading and installing the usage size is more than 100 MB. How this can be done?

I think they may download some resources later in some way but I do not know how. Any one please give me some suggestions. Thank you.

EDIT: The texture package sprite-sheet of format such .pvr.ccz also be used. This can be handle the same way as .png.

Community
  • 1
  • 1
Protocole
  • 1,733
  • 11
  • 28
  • 42

2 Answers2

2

If your app is heavy on PNGs, you could apply something similar to #2, but with better results. I have used the ImageOptim + ImageAlpha combo with great results.

Here is a interesting case study about this method.

Jan S.
  • 10,328
  • 3
  • 31
  • 36
  • Am I right that `ImageAlpha` is not supported in Mac OS X 10.8? – Protocole Nov 16 '12 at 07:18
  • There seems to be some issues on 10.8, like dragging images directly is not working, but you can still use File -> Open. There is also an alpha version available which you could try. Alternatively you could use pngquant (which ImageAlpha uses): https://github.com/pornel/improved-pngquant . No need to compile it yourself, just use the one provided within ImageAlpha.app – Jan S. Nov 16 '12 at 20:12
  • @Protocole ImageAlpha was just updated with OS X 10.8 support – Jan S. Nov 27 '12 at 21:41
1

Yes most apps do this. Since you are talking about .png they already go through 2-stage compression. So I dont think further compressing or zip is going to help you.

Lets say you have several heavy images which bloat up your app size. So you remove those heavy images from app packaging and when the user downloads the app for the first time, at that time fetch those images as static files using usual http. You could either do this in a separate setup step (showing progress bar et al.) or you could download these images at runtime based on what the user does in your app.

Once you fetch them you can keep these images locally in your app documents folder or any other folder & serve them up locally from next time onwards (see SDWebCache). or you could keep it simple at make it pure http calls (no locally storing) but this might impact your users experience.

Srikar Appalaraju
  • 71,928
  • 54
  • 216
  • 264
  • 1
    You should clarify that the app downloads the images the first time it is run, not when the user downloads the app. – rmaddy Nov 16 '12 at 04:24
  • Can this solution also work with texture package sprite-sheet format such as `.pvr.ccz`? or other file format? – Protocole Nov 16 '12 at 06:48