@Tom Catchesides Thanks, Norm: I've already given my points to your case.
When you say that it's "not exactly 'simple'", do you mean "basically not practical unless you really mess around with the build process" or "practical if someone who's good with declares does the right stuff"?
Not simple in "you have to do a decent amount of mucking about and use Xcode"
Declares CANT do it as this is loaded by the OS before your app has really started
1) open Xcode and create a launch screen (I'm using Xcode 8)
in Xcode File > new File
in the template chooser at the top left choose iOS
(or write it by hand as an xml document - yuck - so we'll assume youre going to use the Xcode template)
2) layout whatever controls - note there are serious restrictions on what kinds of controls you can use
no web views etc
labels & images are probably all you really need / want
these are ones I've gleaned from other developers experiences
The app is not yet loaded so the view hierarchy does not exist and the system can not call any custom view controller setup code you may have in the app
The launch screen can only use basic UIKit views such as UIImageView and UILabel. You cannot use a UIWebView.
Localizing the launch file does not currently seem to have any effect. The base localization is always used so you will probably want to avoid text on the launch screen.
You cannot specify different launch files for iPad and iPhone. This may be a problem if you have significantly different interfaces for those devices as there is only so much you can do with auto layout and size classes.
4) note you cannot compile this storyboard in Xcode
5) compile this storyboard by hand using ibtool
xcrun ibtool —compile <path to output file> <inputfile from step 2>
This will generate a DIRECTORY with a few items in it
IF you name the output directory "LaunchScreen.storyboardc" it will make life a tad easier
6) in your BUILT iOS app replace the contents of “Base.lproj" with the one compiled in step 5
7) test like mad & this should replace the default launch screen
EDIT - revised step 5 (about naming the output directory) and also step 6
Removed step 7 as its no longer needed because of changes to step 5