Last active

Embed URL

HTTPS clone URL

SSH clone URL

You can clone with HTTPS or SSH.

Download Gist
View ios-8-web-app.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
<!doctype html>
 
<!-- http://taylor.fausak.me/2015/01/27/ios-8-web-apps/ -->
 
<html>
<head>
<title>iOS 8 web app</title>
 
<!-- CONFIGURATION -->
 
<!-- Allow web app to be run in full-screen mode. -->
<meta name="apple-mobile-web-app-capable"
content="yes">
 
<!-- Make the app title different than the page title. -->
<meta name="apple-mobile-web-app-title"
content="iOS 8 web app">
 
<!-- Configure the status bar. -->
<meta name="apple-mobile-web-app-status-bar-style"
content="black">
 
<!-- Set the viewport. -->
<meta name="viewport"
content="initial-scale=1">
 
<!-- Disable automatic phone number detection. -->
<meta name="format-detection"
content="telephone=no">
 
<!-- ICONS -->
 
<!-- iPad retina icon -->
<link href="apple-touch-icon-precomposed-152x152.png"
sizes="152x152"
rel="apple-touch-icon-precomposed">
 
<!-- iPad retina icon (iOS < 7) -->
<link href="apple-touch-icon-precomposed-144x144.png"
sizes="144x144"
rel="apple-touch-icon-precomposed">
 
<!-- iPad non-retina icon -->
<link href="apple-touch-icon-precomposed-76x76.png"
sizes="76x76"
rel="apple-touch-icon-precomposed">
 
<!-- iPad non-retina icon (iOS < 7) -->
<link href="apple-touch-icon-precomposed-72x72.png"
sizes="72x72"
rel="apple-touch-icon-precomposed">
 
<!-- iPhone 6 Plus icon -->
<link href="apple-touch-icon-precomposed-180x180.png"
sizes="120x120"
rel="apple-touch-icon-precomposed">
 
<!-- iPhone retina icon (iOS < 7) -->
<link href="apple-touch-icon-precomposed-114x114.png"
sizes="114x114"
rel="apple-touch-icon-precomposed">
 
<!-- iPhone non-retina icon (iOS < 7) -->
<link href="apple-touch-icon-precomposed-57x57.png"
sizes="57x57"
rel="apple-touch-icon-precomposed">
 
<!-- STARTUP IMAGES -->
 
<!-- iPad retina portrait startup image -->
<link href="apple-touch-startup-image-1536x2008.png"
media="(device-width: 768px) and (device-height: 1024px)
and (-webkit-device-pixel-ratio: 2)
and (orientation: portrait)"
rel="apple-touch-startup-image">
 
<!-- iPad retina landscape startup image -->
<link href="apple-touch-startup-image-1496x2048.png"
media="(device-width: 768px) and (device-height: 1024px)
and (-webkit-device-pixel-ratio: 2)
and (orientation: landscape)"
rel="apple-touch-startup-image">
 
<!-- iPad non-retina portrait startup image -->
<link href="apple-touch-startup-image-768x1004.png"
media="(device-width: 768px) and (device-height: 1024px)
and (-webkit-device-pixel-ratio: 1)
and (orientation: portrait)"
rel="apple-touch-startup-image">
 
<!-- iPad non-retina landscape startup image -->
<link href="apple-touch-startup-image-748x1024.png"
media="(device-width: 768px) and (device-height: 1024px)
and (-webkit-device-pixel-ratio: 1)
and (orientation: landscape)"
rel="apple-touch-startup-image">
 
<!-- iPhone 6 Plus portrait startup image -->
<link href="apple-touch-startup-image-1242x2148.png"
media="(device-width: 414px) and (device-height: 736px)
and (-webkit-device-pixel-ratio: 3)
and (orientation: portrait)"
rel="apple-touch-startup-image">
 
<!-- iPhone 6 Plus landscape startup image -->
<link href="apple-touch-startup-image-1182x2208.png"
media="(device-width: 414px) and (device-height: 736px)
and (-webkit-device-pixel-ratio: 3)
and (orientation: landscape)"
rel="apple-touch-startup-image">
 
<!-- iPhone 6 startup image -->
<link href="apple-touch-startup-image-750x1294.png"
media="(device-width: 375px) and (device-height: 667px)
and (-webkit-device-pixel-ratio: 2)"
rel="apple-touch-startup-image">
 
<!-- iPhone 5 startup image -->
<link href="apple-touch-startup-image-640x1096.png"
media="(device-width: 320px) and (device-height: 568px)
and (-webkit-device-pixel-ratio: 2)"
rel="apple-touch-startup-image">
 
<!-- iPhone < 5 retina startup image -->
<link href="apple-touch-startup-image-640x920.png"
media="(device-width: 320px) and (device-height: 480px)
and (-webkit-device-pixel-ratio: 2)"
rel="apple-touch-startup-image">
 
<!-- iPhone < 5 non-retina startup image -->
<link href="apple-touch-startup-image-320x460.png"
media="(device-width: 320px) and (device-height: 480px)
and (-webkit-device-pixel-ratio: 1)"
rel="apple-touch-startup-image">
 
<!-- HACKS -->
 
<!-- Prevent text size change on orientation change. -->
<style>
html {
-webkit-text-size-adjust: 100%;
}
</style>
</head>
 
<body>
<h1>iOS 8 web app</h1>
</body>
</html>

Hi... Budy,

i was catching my hair to solve this problem ....
But i got solution form this website ....
Very very thank you ...

The above doesn't work with iPad retina. The device-width needs to be 768 for both retina and non-retina. The -webkit-device-pixel-ratio: 2 will detect the retina. The image sizes should still be as they are above (1536x2008 and 1496x2048). Thanks for this!

Owner

Good catch, @gwilson. I've updated it to fix that.

I also added support for the iPhone 5.

Owner

A note on viewports with respect to the iPhone 5: Web apps can be letterboxed, but only if their viewport’s width is set to either device-width or 320. To set the proper scale and avoid letterboxing, set the viewport’s initial scale to 1.0. (Thanks to Max Firtman for this solution.)

<!-- Letterboxed on iPhone 5 -->
<meta name="viewport"
      content="width=device-width">
<meta name="viewport"
      content="width=320">
<!-- Not letterboxed on iPhone 5 -->
<meta name="viewport"
      content="initial-scale=1.0">
<meta name="viewport"
      content="width=320.1">

This is incredibly useful! What a time-saver! Much better than Apple's own documentation... ;-)

To target the Safari mobile toolbar:

<meta name="apple-mobile-web-app-status-bar-style" content="translucent black" />

Thanks, it's really helpful!

Brilliant, finally someone has the answers - THANK YOU! - iPhone 5 now full screen, no letterbox

FYI, I was using "target-densitydpi=device-dpi" for an android 480x800 along with css media queries, however with adding the above made webapp content on Android very small, so removed, Android phone is now being controlled by iPhone 4 css:
@media only screen and (min-device-width : 320px) and (max-device-width : 480px) { etc} for PORTRAIT
and
@media screen and (max-device-height: 479px) and (orientation: landscape){ etc} for LANDSCAPE

Might be of interest to someone...

go figure!...

thanks for that! really useful!

Wonderful. I sent you a tip. You can get it at flattr.com

Thanks!

Can you explain why the size of the iPhone 5 launch screen is 640x1096 and not 640x1136? Just curious!
Thanks for taking the time to share this with us.

@martinkool The 40 pixel difference is the status bar at the top.

Hi!

Thanks a lot for your script!

does anyone have the resolutions for the newer iPad mini?

EDIT: same resolution as iPad 2, nothing else needed.

Thanks this is awesome! very nicely documented!

@ GertBoers - I also noticed that the apple-touch-startup-image didnt work on an iphone 3, just make sure the iphone3 snippet loads last! like below...

Don't ask me why the order matters, it just does! :/

I have the following and it works on the iPhone 3, iPhone 4, iPhone 5 and the iPad in landscape and portrait (excluding the iPad 3) which we currently don't support

    <!-- iPad landscape -->
    <link rel="apple-touch-startup-image" 
            href="images/ipad-landscape.jpg")" 
            media="(device-width: 768px) 
            and (device-height: 1024px) 
            and (orientation: landscape) 
            and (-webkit-device-pixel-ratio: 1)" />
    <!-- iPad portrait -->
    <link rel="apple-touch-startup-image" 
            href="images/ipad-portrait.jpg" 
            media="(device-width: 768px) 
            and (device-height: 1024px) 
            and (orientation: portrait) 
            and (-webkit-device-pixel-ratio: 1)" />
    <!-- iPhone 5 -->
    <link rel="apple-touch-startup-image" 
            href="images/iphone5-portrait.jpg" 
            media="(device-width: 320px) 
            and (device-height: 568px) 
            and (-webkit-device-pixel-ratio: 2)">
    <!-- iPhone (Retina) -->
    <link rel="apple-touch-startup-image" 
            href="images/iphone4-portrait.jpg" 
            media="(device-width: 320px) 
            and (device-height: 480px) 
            and (-webkit-min-device-pixel-ratio: 2)" />
    <!-- iPhone -->
    <link rel="apple-touch-startup-image" 
            href="images/iphone-portrait.jpg" 
            media="(device-width: 320px) 
            and (device-height: 480px) 
            and (-webkit-device-pixel-ratio: 1)" />
Owner

Good find, @GertBoers and @ChrisLang! I only tested iOS 6 devices in the simulator so I didn't discover the bug with the iPhone 3G. I'm surprised that it behaves this way, since I expected it to use the first apple-touch-startup-image it encounters, not the last.

Also, both of you claim that the new iPad doesn't show the startup images. However it works fine for me both in the simulator and on a physical device.

Hi,

maybe you want to add this tag, too?
It seems to work in IOS 6

TAG
<meta name="apple-mobile-web-app-title" content="My App Name">

PURPOSE
IOS Shorter App title for homescreen
-Available as of IOS6
-Undocumented, thus, throws (ignorable) errors in W3C Validator (as of MAY-2013)
-Max. 13 chars

LINKS
http://www.mobilexweb.com/blog/iphone-5-ios-6-html5-developers
http://stackoverflow.com/questions/4883795/what-can-i-do-to-prevent-iphone-4-from-cutting-off-my-title-when-adding-to-home

Cheers
uwe

Very useful, thanks a lot!

The only problem with this solution is that the filenames you have used are confusing.
eg:

apple-touch-startup-image-640x920.png
apple-touch-startup-image-640x1096.png

the width and height you have used doesn't follow the X * Y convention. Which is width and which is height?

Owner

All the files I use have width x height in their filenames. For example, apple-touch-startup-image-640x1096.png is 640 pixels wide (320 @ 2x) and 1096 pixels tall (568 - 20 @ 2x). That one's for the iPhone 5. Similarly, apple-touch-startup-image-640x920.png is for the iPhone 4(S) and is 640 pixels wide by 920 pixels tall.

This is great except that it has no viewport scaling. Once you add in a meta tag for the viewport the downloaded version of the app is letterboxed. This happens even if I add no content like so: <meta name="viewport" content="" />

Owner

@studiopersona: Check out my comment from almost a year ago. You'll want one of these:

<meta name="viewport" content="initial-scale=1.0">
<meta name="viewport" content="width=320.1">

I considered adding the rest of the <meta> tags that Mobile Safari supports, but I want to keep this Gist focused on the icons and startup images.

Hi,

I'm pretty sure line 58 is wrong. It is a landscape resolution with a portrait image:

    <link href="http://taylor.fausak.me/static/images/apple-touch-startup-image-1496x2048.png"
          media="(device-width: 768px) and (device-height: 1024px)
             and (orientation: landscape)
             and (-webkit-device-pixel-ratio: 2)"
          rel="apple-touch-startup-image">

It rendered wrong for me anyway so I changed mine to this and it worked

    <link href="http://taylor.fausak.me/static/images/apple-touch-startup-image-2048x1496.png"
          media="(device-width: 768px) and (device-height: 1024px)
             and (orientation: landscape)
             and (-webkit-device-pixel-ratio: 2)"
          rel="apple-touch-startup-image">

Seems to be in line with https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/IconsImages/IconsImages.html#//apple_ref/doc/uid/TP40006556-CH14

Owner

@mbhatton: That documentation is for native apps. Apple doesn't provide any official documentation for startup images on iPads. To quote my own post:

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.

Any idea how why is the launch image flickering on iOS7? It seems like that it is first stretched all the way to 1136px, then status bar appears and the launch images goes to its actual height of 1096px, resulting in a slight flicker.

I'm seeing the same thing as @sahilkhosla. The startup image is stretched to cover the taskbar at the top, then it jumps down and the taskbar is revealed. Any idea how to fix?

I have the same problem as @sahilkhosla and @scottopolis. Is anybody have a workaround ?

@tfausak do you know why landscape images are meant to be in portrait mode?

Thanks so much! very useful! What a time-saver! :)

jjb commented

epic.

Same problem as @sahilkhosla and @scottopolis and @patriotbg. Will post if I find a solution.

Owner

I updated this to support iOS 7.

@sahilkhosla, @scottopolis, @patriotbg, and @simonjking: There is no way to avoid the flickering. iOS 7 initially stretches the startup image to cover the entire screen. Then when the status bar shows up it renders the startup image at its actual size. If, for example, you specify a 640x1136 startup image (for an iPhone 5 or 5S running iOS 7), it will ignore it because it's not the dimensions it expects.

The current setup for startup images is excluding iPhone 5s. Have tried adjusting the device-width & device-height of the 'iOS 6 & 7 iPhone 5' startup image with no success. Anyone else been able to get a startup image to show in a 5s?

@bhays I second you, on 5s I got all my startup images loaded one ontop the other, weird?!

Brilliant work!

Ios icon generator for all resolutions:

http://iconogen.com/

sorry for the stupid question: is there a way to only deliver one (the largest) image size, so that the (i)Os does the crunching? i am lazy and don't want to export X images all the time, also my html head looks spammed with images.

Bonxy commented

Thanks for the guide.

Same problem as @sahilkhosla, @scottopolis, @patriotbg and @simonjking. Did anyone find a workaround? The jumpy/stretch bug makes the startup screen almost pointless to use from an aesthetic point of view.

Line 79 should read 1024 not 1004

@hendronf Remember to subtract 20 or 40 pxs for the status bar

@tfausak thanks for this.

All work for me except for the iOS 6 iPhone (320x480). I just get a white screen. I've been playing around with it for a while and haven't figured it out yet. I use an iPod Touch 4th Gen and therefore still use iOS 6. I get the same result, white screen, using iOS simulator (iOS 7) for a iPhone 3.5 inch retina.

save yourself some html by joining the viewport declaration:
name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"

For me, i could make it worked by replacing:
FROM: <link href="/static/images/
TO: <link href="static/images/
So, I needed to remove the first "/" from all links.

I try lof of things, but apple-touch-startup-image are not displayed on my iphone 5s and on my ipad mini 2, both on iOS 7.1.2
Someone got any idea ? Apple remove it ?

Ok, I have to say:
This is weird:

1536x2008

1496x2048

The landscape image, on the same device, is narrower and taller than the portrait image (40 px). I assume this means that the landscape image content needs to be rotated 90 degrees (counter)clockwise?

Get some white on black statusbars, for anyone interested:

Add this to your head

   <meta name="apple-mobile-web-app-capable" content="yes"
   <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"

On runtime or load, add this.

if(window.navigator.standalone) {
    $("meta[name='apple-mobile-web-app-status-bar-style']").remove();
   $('html').addClass('webapp');

}

If startup images dont show up, make sure there in your root. For some reason they only pick that up, so for instance www.domain.com/static/images/root.png rather than in some wordpress template dir.

@saturnlevrai did you find a solution to the startup image? not working on IOS 7.1 or 7.1.2 (Iphone 5s)

This is great! Does anyone have the updated sizes for the new iPhone 6 and iPhone 6 Plus?

Does anyone know if there's any way to stop the splash image stretching to full screen before the status bar loads?

It's not logical that Ipad Landscape & portrait are not the exact same size but just inversed.

@Draco18s, @onigetoc - Hope this helps:

The iPad display size is 1536 x 2048 and the status bar is 40px, so the portrait image is 1536 x 2008 (2048 - 40), and the landscape image is 1496 (1536 - 40) x 2048.

I'm also having having issues getting the startup images to be displayed on iPhones on iOS 7.1, i'll post back here if I find anything.

Do you have the lines to add for the iPhone 6 and 6+ please?
--joe

It would be great to have android on here too!

Now that iOS 8 supports animated png's, does anyone know if you can use them for the startup images?

very nice work
i tested on iphone 3 and 4 and also on ipad1... it 's amazingly working
thanks.
however, can you please help me to validate it with w3c standards validator ?
best regards.

As far as I can tell iPad must be in portrait and not landscape when the homescreen app is saved in Safari otherwise iPad ignores the startup images. This is on iOS 8.

Owner

I updated this to support iOS 8. Read more on my blog.

Is this a typo?

<link href="apple-touch-icon-precomposed-180.png"
sizes="120x120"
rel="apple-touch-icon-precomposed">

Change to sizes="180x180"?

Owner

That's not a typo, @williamle8300! The iPhone 6 Plus needs a 180x180 (60@3x) icon, but it fetches the 120x120 icon.

Dang. You rock. I would have never figured that out... You saved me a few hairs pulled haha!

EDIT:
Wait... so does the iPhone 6 need an actual 120px sized square? Or 180px?

Owner

The regular iPhone 6 uses the 180x180 icon and scales it down. There's no way to serve separate icons for the 6 and 6 Plus.

Following your suggestion I got it to work but when I lunch the web app from the shortcut the startup image shows only for half a second and then it shows a blank screen until it finally loades the app. How can I make it to show longer?

Owner

@Chinaski1979 that's the expected behavior. The startup image is only shown until the HTML loads. You could set the background of your app to the startup image while it's loading.

I created a Sketch 3 template here with all the artboards sized and named like the ones in this gist... Use it freely.

https://github.com/franceindia/design/blob/master/Apple%20Startup%20Image%20Template.sketch

It would be really cool if this included the various graphics. Then it would be a single upload to your web server to begin testing. Something like various solid colors for the different sizes with the size printed on it in a big font. Wish I had time to volunteer for this...

Owner

@jonharris7 I left the images out of this Gist because they'd take up a lot of space. You can take all the images from my blog, though. They are here: https://github.com/tfausak/tfausak.github.io/tree/master/static/images

@tfausak Thanks for the reply and your work on maintaining this. I saw the images on your blog. It would be super cool to overlay the pixel sizes on the images so you could verify which image was being served up, but thanks for all your work!

When I launch a webapp from the start screen on iPad, if the device is oriented landscape, then the whole page is shifted up so the top of it overlaps the status bar (time, battery, etc.) There is a white border at the bottom of the same size to "compensate". Are others seeing this? You may not notice It in a lot of sites (including the demo one) because they use a white background and have enough top margin where there is no actual overlap. But for me, this isn't an option with the styles we are using.

for the life of me i can't get this to work. i only need a startup image for landscape. i have all the proper link tags and the startup image will never show.

EDIT: your example page doesn't seem to work.
http://taylor.fausak.me/static/pages/2015-01-27-ios-8-web-app.html

I'm trying this on an iPad 2 with IOS 8

Owner

Thanks for the heads up @selanac82. I was using the wrong icon URLs. Everything should work now. Make sure you're adding the page to your home screen, otherwise the startup images won't work.

I need some help here getting this to work for iPhone 6 plus. When I add the web app to the home screen and launch all I get is a white screen.

I'm using the following:

 <link href="app/apple-touch-startup-image-1242x2148.png" media="(device-width: 414px) and (device-height: 736px)
                 and (-webkit-device-pixel-ratio: 3)
                 and (orientation: portrait)" rel="apple-touch-startup-image">

But for some reason its not showing up at all. I've tried .jpg as well. I can visit the image like by opening in a new tab so the url should be correct. Any suggestions? What could be messing this up for me on iPhone 6+? How should I debug the phone and/or image?

Any help here is appreciated. Thanks.

THANKS!!!

For testing it will be nice to have test images from placehold like this:
https://gist.github.com/vergissberlin/235171acb47f9be7aaa8

This is amazing!

@tfausak thanks for this invaluable boilerplate. The splash screen is great in principle, but I'm having difficulty persisting it. I've set inline styles on my HTML element to display the same image as a background — later when the application has loaded I transition the body in. Sadly this doesn't work: when the application launches, the splash screen is set as expected but the screen abruptly goes white. After some indeterminate loading activity, the same image is revealed again (as my styles dictate), but I can't seem to avoid the flash of unstyled / lack of content. Any ideas?

Thanks a lot @tfausak! One thing though: You don't happen to know how to make this work on an SSL website, do you? If I load my test page with http, all is well and nice. With https, nothing works: Icon is the printscreen of the app, and splashscreen is a nice white page... :(

cool!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.