iOS web app icons & startup images
Apple makes it a piece of cake to develop web apps for iOS. Unfortunately, they haven’t updated their web app documentation since October of last year. That wouldn’t be a big deal, but they wrote it before the release of the new iPad. They need to update it to explain how to configure web apps on the new iPad and retina iPhones.
Until they do, I hope this post can help you configure your web app on iOS devices. I tested using the iOS simulator running iOS 5.0 on an iPhone, iPad, and retina iPhone. I also tested on a physical iPod touch and iPad, both with retina displays running iOS 5.1. All the techniques described here should work with any iOS device running at least iOS 3.0.
Icons
Although Apple’s documentation pretty much covers all the bases,
they don’t explicitly say how to supply an icon for a retina iPad.
They do, however, show you how to add icons for iPads and retina
iPhones. All you have to do is set the sizes
attribute to 72x72
for iPads and 114x114
for retina iPhones. Since retina iPads have
twice the resolution of regular iPads, it makes sense that their
icons are 144x144
, twice that of the regular iPad.
<!-- iPad (Retina) -->
<link rel="apple-touch-icon"
sizes="144x144"
href="apple-touch-icon-144x144.png">
The official icon sizes are listed in Apple’s icon creation
guidelines. If you want to support all iOS devices, you need
the following sizes: 57x57
, 72x72
, 114x114
, and 144x144
.
Startup Images
The documentation for startup images only covers portrait-oriented iPhones. There’s no mention of retina iPhones, iPads, or landscape images.
iPhones
iPhones only support portrait orientation. This is because web apps cannot start in landscape. The home screen is always oriented the same way, so web apps always start the same way. Once they finish loading, they rotate to whatever orientation the device is in.
That means iPhone startup images must be in the portrait orientation.
The resolution Apple recommends, 320x460
, is the correct one.
Note that it’s 20 pixels shorter than the iPhone’s resolution of
320x480
. The status bar is always visible while a web app is
loading, and it’s exactly 20 pixels tall.
Startup images for retina iPhones should be twice the resolution,
640x920
. Unfortunately, linking to a retina startup image isn’t
as easy as the icon. The sizes
attribute doesn’t work for startup
images. Looking for a workaround to this lead me to a Gist about iOS web
app configuration. It reminded me that startup images are just <link>
elements that can be targeted using media queries.
All iPhones report their resolution as 320x480
. This means a media
query of (device-width: 320px)
will match all iPhones. Retina
iPhones report their pixel ratio as 2
, so a
(-webkit-device-pixel-ratio: 2)
will match retina iPhones.
<!-- iPhone -->
<link rel="apple-touch-startup-image"
media="(device-width: 320px)"
href="apple-touch-startup-image-320x460.png">
<!-- iPhone (Retina) -->
<link rel="apple-touch-startup-image"
media="(device-width: 320px)
and (-webkit-device-pixel-ratio: 2)"
href="apple-touch-startup-image-640x920.png">
iPads
Unlike iPhones, iPads can start web apps in any orientation.
Fortunately, the orientation
media query makes specifying startup
images easy as pie. The technique is the same as the one described
for iPhones, except iPads report their resolution as 768x1024
.
<!-- iPad (portrait) -->
<link rel="apple-touch-startup-image"
media="(device-width: 768px)
and (orientation: portrait)"
href="apple-touch-startup-image-768x1004.png">
<!-- iPad (landscape) -->
<link rel="apple-touch-startup-image"
media="(device-width: 768px)
and (orientation: landscape)"
href="apple-touch-startup-image-748x1024.png">
<!-- iPad (Retina, portrait) -->
<link rel="apple-touch-startup-image"
media="(device-width: 768px)
and (orientation: portrait)
and (-webkit-device-pixel-ratio: 2)"
href="apple-touch-startup-image-1536x2008.png">
<!-- iPad (Retina, landscape) -->
<link rel="apple-touch-startup-image"
media="(device-width: 768px)
and (orientation: landscape)
and (-webkit-device-pixel-ratio: 2)"
href="apple-touch-startup-image-1496x2048.png">
Note that landscape images are not actually defined as such — they’re taller than they are wide. When you’re creating your assets, make them as landscape images. Then, when you’re ready to publish, rotate them 90° clockwise.
Complete Example
I’ve created a minimal web app that includes all icons and startup images for iOS devices. It’s also available a Gist. Please let me know if you notice any problems or want to suggest an improvement.
Other Platforms
Although I don’t have any devices to test it on, apparently the icons work on Android. As far as I understand it, startup images are not supported. Unfortunately the Android documentation doesn’t mention anything about icons or startup images for web apps.
Icons and startup images are completely unsupported on Windows Phone
- However, it is possible to create mobile web app tiles on Windows Phone 7 using completely unrelated techniques.