Launch screens supporting iOS6 and iOS7 - forced to splash screen

When it comes to the launch screen I can't find a unifying way to mimic the look of the application on both iOS6 and iOS7 (supporting both). Are we forced to make a regular splash screen of a logo or similar if we have a toolbar menu or do you guys have any great ideas how to solve it?


Solution 1:

Short answer

In iOS 7, an app can use a different launch image depending on which version of iOS it’s running in. To provide different launch images, add the UILaunchImages key to the Info.plist file and use a dictionary to describe each launch image.

Background

It uses the following keys:

UILaunchImageName - A string containing the name of the PNG image file. The image file must reside at the top level of the app bundle. The name you specify for this key should not include a filename extension, nor should it include modifiers such as @2x, -568h, ~iphone, or ~ipad.

On disk, your image filenames may still include the @2x, -568h, ~iphone, or ~ipad modifiers as appropriate, although they are not required. The system automatically accounts for such modifiers when choosing which file to load.

UILaunchImageMinimumOSVersion - for iOS7 this should be a string “7.0”.

UILaunchImageOrientation – String containing one of: Portrait, PortraitUpsideDown, Landscape, LandscapeLeft, LandscapeRight.

UILaunchImageSizeString specifying width and height, ex: “{320, 480}”. You must specify the width and height with respect to the device in a portrait orientation. In other words, portrait and landscape images targeting the same device would have the same width and height.

If this key is present, iOS 7 uses it exclusively to obtain launch images.

BUT: I found that sticking to the naming convention also for iOS7 helped a lot!

This key is supported in iOS 7.0 and later.

OK – so now what?

Because I already had launch images for iOS6 and with all their specific naming conventions. I chose to make a copy of all of them and prefix the name with ”iOS7-” so as to limit my own confusion about all the different sizes and names. Making a prefix should prove to come in handy as then most of the images would immediately be loaded correctly.

The filenames: I had these for iOS6 already, I also list the file sizes for those in need:

So I made a copy of all of these filenames for iOS7 (same sizes) prefixing them with "iOS7-":

In XCode

Now to create your entry in PLIST. Go to your-name-of-application.plist. In a blank area, right-click and choose ”Add Row”. Make sure it becomes a top item and not a sub-item of some other information in the .plist.

Write: UILaunchImages

Right-click on this UILaunchImages and select value type ”Array”.

Use the illustration below as a guide to the text and for how it will look when it is all finished:

enter image description here

If you open up this array so the little indicator triangle to the left points down, it is empty the first time, but if you choose ”add row” while it is open it will create a sub-line. Do that now:

Right-click on the UILaunchImages and select ”Add row”. Right-click on this new line (item 0) and select value type ”Dict”

Continue opening this items with the triangle indicator and right-click and ”Add row”

This item you will name UILaunchImageMinimumOSVersion and set value type to “string” and the string to “7.0”

Now the following are all strings and should be at the same level as the UILaunchImageMinimumOSVersion item. In the same dict (dictionary). Create these by just choosing “Add row” for each:

UILaunchImageName – base-name-of-iOS7-launch-image. In my case this was ”iOS7-Default”

UILaunchImageOrientation - example: Portrait

UILaunchImageSize - the size of the elementary base iOS7-Default.png: "{320, 480}". The program will find all the files with permutations of the base name. Remember to select the base name of the file without ipad/iphone/portrait/landscape or .png specifications.

Note:

Xcode had already made the following items in the .plist for me after first adding iOS6 images in all available slots :-)

UILaunchImageFile~ipad … = ”Default” – so this was OK

UILaunchImages~ipad … Had two items that needed to be updated to iOS7 versions, because they where now incorrectly holding the iOS6 version. Those I had named Default1024x768 and Default768x1024 and now I just prefixed ”iOS7-” to each of the names and I was done.

Example of how it may look for those wanting to edit plist directly:

<key>UILaunchImages</key>
  <array>
    <dict>
      <key>UILaunchImageMinimumOSVersion</key>
      <string>7.0</string>
      <key>UILaunchImageName</key>
      <string>iOS7-Default </string>
      <key>UILaunchImageOrientation</key>
      <string>Portrait</string>
      <key>UILaunchImageSize</key>
      <string>{320, 480}</string>
    </dict>
  </array>

[edit by jd: fixed spelling of "UILaunchImages"]

Solution 2:

Highlight the project in the project browser, select "General", scroll down to "App Icons", click on "Use Asset Catalog", and select "Migrate". Your existing icons and splash screens will be automagically migrated into an asset catalog. You can then select the catalog to add further images.

To add new images you simply drag from Finder and drop into the squares for each image type.

(Caution: The catalog editor inexplicably uses a non-scrollable wide format, and you can be missing stuff off the right side if your screen isn't wide enough.)

Solution 3:

You can also use the new image catalogue feature in Xcode 5 to manage multiple versions of launch images.