packages/cafeteria/platforms/ios/cordova/lib/prepare.js
function getLaunchStoryboardContentsJSON(splashScreens, launchStoryboardImagesDir) {

    var platformLaunchStoryboardImages = mapLaunchStoryboardContents(splashScreens, launchStoryboardImagesDir);
    var contentsJSON = {
        images: [],
        info: {
            author: 'Xcode',
            version: 1
        }
    };
    contentsJSON.images = platformLaunchStoryboardImages.map(function(item) {
        var newItem = {
            idiom: item.idiom,
            scale: item.scale
        };

        // Xcode doesn't want any size class property if the class is "any"
        // If our size class is "com", Xcode wants "compact". 
        if (item.width !== CDV_ANY_SIZE_CLASS) {
            newItem['width-class'] = IMAGESET_COMPACT_SIZE_CLASS;
        }
        if (item.height !== CDV_ANY_SIZE_CLASS) {
            newItem['height-class'] = IMAGESET_COMPACT_SIZE_CLASS;
        }

        // Xcode doesn't want a filename property if there's no image for these traits       
        if (item.filename) {
            newItem.filename = item.filename;
        }
        return newItem;
    });
    return contentsJSON;
}
function getLaunchStoryboardContentsJSON(splashScreens, launchStoryboardImagesDir) {

    var platformLaunchStoryboardImages = mapLaunchStoryboardContents(splashScreens, launchStoryboardImagesDir);
    var contentsJSON = {
        images: [],
        info: {
            author: 'Xcode',
            version: 1
        }
    };
    contentsJSON.images = platformLaunchStoryboardImages.map(function(item) {
        var newItem = {
            idiom: item.idiom,
            scale: item.scale
        };

        // Xcode doesn't want any size class property if the class is "any"
        // If our size class is "com", Xcode wants "compact". 
        if (item.width !== CDV_ANY_SIZE_CLASS) {
            newItem['width-class'] = IMAGESET_COMPACT_SIZE_CLASS;
        }
        if (item.height !== CDV_ANY_SIZE_CLASS) {
            newItem['height-class'] = IMAGESET_COMPACT_SIZE_CLASS;
        }

        // Xcode doesn't want a filename property if there's no image for these traits       
        if (item.filename) {
            newItem.filename = item.filename;
        }
        return newItem;
    });
    return contentsJSON;
}
function getLaunchStoryboardContentsJSON ( splashScreens , launchStoryboardImagesDir ) { var platformLaunchStoryboardImages = mapLaunchStoryboardContents ( splashScreens , launchStoryboardImagesDir ) ; var contentsJSON = { images : [ ] , info : { author : 'Xcode' , version : 1 } } ; contentsJSON . images = platformLaunchStoryboardImages . map ( function ( item ) { var newItem = { idiom : item . idiom , scale : item . scale } ; // Xcode doesn't want any size class property if the class is "any" // If our size class is "com", Xcode wants "compact".  if ( item . width !== CDV_ANY_SIZE_CLASS ) { newItem [ 'width-class' ] = IMAGESET_COMPACT_SIZE_CLASS ; } if ( item . height !== CDV_ANY_SIZE_CLASS ) { newItem [ 'height-class' ] = IMAGESET_COMPACT_SIZE_CLASS ; } // Xcode doesn't want a filename property if there's no image for these traits        if ( item . filename ) { newItem . filename = item . filename ; } return newItem ; } ) ; return contentsJSON ; }
Builds the object that represents the contents.json file for the LaunchStoryboard image set.

The resulting return looks like this:

{
images: [
{
idiom: 'universal|ipad|iphone',
scale: '1x|2x|3x',
width-class: undefined|'compact',
height-class: undefined|'compact'
}, ...
],
info: {
author: 'Xcode',
version: 1
}
}

A bit of minor logic is used to map from the array of images returned from mapLaunchStoryboardContents
to the format requried by Xcode.

@param  {Array<Object>} splashScreens         splash screens as defined in config.xml for this platform
@param  {string} launchStoryboardImagesDir    project-root/Images.xcassets/LaunchStoryboard.imageset/
@return {Object}
Builds the object that represents the contents . json file for the LaunchStoryboard image set .