Launch screens supporting iOS6 and iOS7 - forced to splash screen

假如想象 提交于 2019-11-27 06:12:57
WWW

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:

  • Default.png (320x480)
  • Default@2x.png (640x960)
  • Default@2x~ipad.png (2048x1496)
  • Default~ipad.png (768x1004)
  • Default1024x768.png (1024x768)
  • Default1024x768@2x.png (2048x1536)
  • Default-568h@2x.png (640x1136)
  • Default768x1024.png (768x1024)
  • Default768x1024@2x.png (1536x2048)
  • Default-Landscape~ipad.png (1024x748)
  • Default-Portrait@2x~ipad.png (1536x2048)

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

  • iOS7-Default.png
  • iOS7-Default@2x.png
  • ...

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:

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"]

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.)

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

Now you can directly add the app icons and splash images in the images.xcassets, Click on + button to add the respective image set for iphone5 with iOS 5,6,7 ,iphone4, iPad. now no need to set the images name like default.png,default@2x.png

Be warned when using an images.xcassets repository it will not allow you to localize your splash screens.

I'm currently trying to get a French and English version of our app.

WWW> Will this 'plist' method work if you need to localize your splash screens?

I also had the same issue with an older app that I developed for iOS 7. It Archived and Uploaded fine with Xcode 6, but the "binary not optimized for iPhone5" error returned with Xcode 7. After trying a myriad of other solutions, I was only successful by removing all references to any Launch Image (since I was using a universal .xib) AND setting the deployment target from 7.0 to 8.0

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!