I am updating an old app, and I would like the app to run letterbox, NOT full screen on iPhone X. That is, I want the entire app to stay within the Safe Areas and see black bars on the top and bottom. Unfortunately the app uses a Launch Storyboard, which triggers the app to run full screen. The old solution was to use a launch image instead of a launch storyboard, but as of iOS 13 Apple has deprecated launch images. What can I do? The client definitely wants a logo to appear on launch.
What you are asking to do is now illegal. Your app must use a launch storyboard and occupy the entire screen or it will be rejected at the App Store.
The client definitely wants a logo to appear on launch.
Hmmm, it sounds as if you and/or the client don't understand what a launch screen is. A launch screen is merely the outline of the actual app interface, to provide something to fill the nasty pause between the time the user taps the app icon and the time the app's interface is up and running. If the client wants a logo on launch, that would be a view (possibly belonging to a view controller) shown as part of the running app when it starts up.
When I first started to create my app, I thought that using launch screens would be a good idea, so I added the LaunchScreen.storyboard file and created a view controller meant to be the launch screen.
Now, however, I would like to remove this launch screen now. I have tried to delete the view controller and the file itself, which does not work, as the launch screen view controller still appears somehow. I have tried this answer, but nothing changed. I tried another answer(can't remember the link) which told me to delete a key-value pair in the project info. After doing that, the launch screen is gone, but a black screen replaces it, and the app is not full screen anymore on iPhone 8. There are black bars on the top and bottom of the screen.
My question is: how can I remove the launch screen completely without any side effects?
Xcode 9, Swift 4
Using a Launch Screen
It’s best to use an Xcode storyboard for your launch screen, but you can provide a set of static images if necessary.
Including static images will increase the size of your binary because you must include all resolutions (see below) otherwise you will see "black screen & the app is not full screen".
Starting April 2018, all new iOS apps submitted to the App Store must be built with the iOS 11 SDK. All new apps for iPhone, including universal apps, must support the Super Retina display of iPhone X.
https://developer.apple.com/ios/submit/
So, you would be best off replacing the launch screen with a really simple view of your application (with no data).
Take at the Human Interface Guidelines for more information: https://developer.apple.com/ios/human-interface-guidelines/icons-and-images/launch-screen/
To quote:
Design a launch screen that’s nearly identical to the first screen of your app.
Avoid including text on your launch screen.
Downplay launch
Don’t advertise.
You can do this by using the menu bar:
File >
New >
File
Once you have created your new LaunchScreen.storyboard you need to ensure it's the one assigned to the application. You can do this either through the project file explorer or through the application plist.
Using Static Images
If you are really committed to avoid using a storyboard then you can migrate to using launch images inside an asset catalog by pressing the button above the launch screen storyboard.
By migrating to launch screen images you will be required to provide all variants of screen sizes otherwise you will not support devices such as the iPhone X.
You might be required to delete the LaunchScreen.storyboard and delete the references in the project explorer / plist.
Final notes
You may be required to delete Derived Data to remove any cached version of the launch screen storyboard.
So when you want to get to an app, you have to click on the app's icon. When I do that, the icon itself stretches out to fill up the entire screen. Every icon suggestion I've read has opined that I make the icons 120X120 or some other version of a square image. I've done that, but so long as it's a square image if the app tries to make it fit into a rectangle it is going to stretch.
On top of that icon is the splash image with is rectangular and looks just fine, but I don't know how to tell it to not use the square icon behind it. Thoughts?
In case anyone comes across this for the 6+/7+ only, you need to have launch images for both portrait and landscape.
On opening the app, are you simply wanting to use the image used for your app icon to appear full screen for the splash/loading screen while it is being launched?
If this is the case, the app icon itself is not the image that will stretch, rather, you need to make a separate launch image of how you expect full screen size image to look. The app icon will display according the the image you have saved as the icon (correct HIG sizes/filenames) and then when it's loading, the app will automatically switch to display your launch image.
Please read this Apple information on Human Interface Guidelines (HIG) as it tells you what images will be needed and what to do.
I hope this helps answer you question.
Cheers, Jim.
I was going through iOS Human Interface Guidelines.
It was mentioned as
Display a launch image that closely resembles the first screen of the application. This practice decrease the perceived launch time of your application.
Avoid displaying an About Window or a splash screen. In general, try to avoid providing any type of startup experience that prevents people from using your application immediately.
What is the difference between a launch image and a splash screen?
Launch image is the image that appears when you launch your app, the images you put in the xcode (iphone, iphone retina, ipad landscape, ipad landscape retina, ipad portrait and ipad portrait retina)
Apple recomends using a screenshot of your app main window, so it appears that your app launch faster (I use a screenshot without buttons)
Splass screen is, for example, the screens the games use, where you can see the company logo and some other info, some of them even use 2 or 3 splass screens. You have to include them programmatically
Wow, old question with no accepted or highly-upvoted answer, bubbling to the front page thanks to an edit. Guess I may as well try my hand at clearing things up?
Launch Image (or Launch Screen)
This is displayed by the OS itself, and appears only while the OS is loading your app (that is, before your process is running and any of your own code gets a chance to execute.
Because your app has no running code to handle display of the launch image, the way you provide one is part of your Xcode project's build-time configuration: Either you provide a LaunchScreen.storyboard, or a set of static launch images — one for each device screen size you support.
Apple's Human Interface Guidelines recommend that your launch image be a rough facsimile of the initial UI of your app. There are a couple of reasons for that:
The launch screen is displayed only briefly before your app takes over and can display its own UI, so having the launch image look like the actual UI makes the user feel more like they're jumping right into your app instead of having to wait for something else.
The launch screen is displayed only briefly, so if you display something that doesn't look like your initial UI, the user may see it flash and go away before they can get a decent look at it.
(Because your launch screen should look like actual UI, and because there are many screen sizes to support, the storyboard approach is preferred — you can use Auto Layout to ensure that your fake UI adapts to different screen sizes just like your real UI would. Xcode then generates the necessary images at build time.)
Splash Screen or About Window
This is what you see in many apps that don't follow Apple's guidance, and it comes in two forms (used separately or together):
Using the Launch Screen system to display content that doesn't look like the app's initial UI — instead, for example, it might be a logo or some other branding element, or might include static text like copyright notices, credits, or version information.
After the app has launched (and thus has control of the screen to display whatever it wants), continuing to display logos or branding or other passive content instead of a usable UI.
The second case is recommended against, but sometimes unavoidable — game engines, in particular, tend to take awhile to start up, so it might be okay to have a "loading" screen. (If so, your launch image should look like your loading screen, so that the user doesn't feel like they're separately waiting for your app to launch and then load.)
The worst offenders are apps that don't really have any extra "loading" work to do, but use a splash screen as their launch image, and then programmatically continue to display that image for an arbitrary amount of time so that the user gets more chance to see it. (And has to wait for it to get out of the way, or manually dismiss it, before actually using the app.)
Launch Image is displayed when the app loads.
Splash screen means, that you display a view with about information as your startscreen. Your User should use your app immediately.
The launch image is designed to make the perceived launch time of you app feel faster by showing something resembling the interface that will be loaded as quickly as possible. Displaying a logo does nothing but draw attention to how quickly your app loads and adds nothing to the user’s experience.
If your bundle have default.png then apps takes as a launch image and it remains on screen for 3 seconds
In iOS splash screen means when you provide any image named Default.png in the bundle and before executing the mainWindow it is just loading that image in the iPhone screen. So, Default.png image is considered as the Splash Screen in iPhone.
While you load the mainWindow in the iPhone application, you can assign any image that can be viewed in the screen in the specific size as given that is called the launch image.
So, launch image that is one which we provide run time when application launches and starting the main-window. And here launch image can be dynamically changed based on program written while Default.png / splash screen will be fixed for the application.
Please let me know if you still have any question?
Launch Image may take a little short time. It shows when app loading starts into iphone volatile memory. it shows for very short.
Splash screen means, that you display an Image until your necessary information loading not complete. Like, U can see any loading image before start any heavy game. When all data loading complete then this screen removed and game statrs.
It may shows for little long. !
Launch Image is displayed when the app loads. It is designed to make your app feel faster by showing something resembling the interface that will be loaded as quickly as possible.
Splash screen means, that you display a view with about information as your start screen. Your User should use your app immediately.
I have set the launch image for my app to look like the initial screen. My app is a multi-screen/multi-view application that mostly takes place in a UINavigationController. But every screen can look very different, so there isn't really much commonality for a general launch image.
I have noticed that if I am in a screen in the app, then go out of the app (pressing the home button), then go back in, it shows the launch image, then it loads up the screen the user was last using. I think this is the expected behavior.
That being said, according to Apple, the launch image is required. So it seems that I have a few options:
Set an all black launch image
Cache an image of the last screen and somehow set that as a dynamic launch image
Specify to only use a launch image on the first screen
Don't specify launch image?
Right now I am leaning towards option 1 and just having an all-black launch image, but I would appreciate if anyone has any tips/suggestions/advice. Thanks.