Skip to content
Titanium SDK

Icons & launch screens

Written for Titanium SDK 13.4.0 and later

The two platforms do not share an icon, despite DefaultIcon.png sitting at the project root looking like they might. iOS generates its whole icon set from that file. Android never reads it.

iOS Android
Source DefaultIcon.png at the project root platform/android/res/mipmap-*/
Generated by Titanium Yes, every size No, you supply the set
Named in tiapp.xml No android:icon="@mipmap/ic_launcher"

ti create writes both, so a new project has a working icon on each platform before you touch anything.

iOS

Put a square PNG at DefaultIcon.png in the project root and Titanium resizes it into the app icon set at build time. 1024x1024 is the size to supply, because that is what the App Store listing needs and every other size is reduced from it.

Alpha is flattened for the icon, so a transparent background becomes white. Design on an opaque background rather than being surprised.

To differ from Android, add DefaultIcon-ios.png. It takes precedence over the shared file.

Dark and tinted appearances

iOS 18 asks for three appearances. Add them beside the default one and Titanium picks them up:

File Appearance
DefaultIcon.png Light, and the fallback for the others
DefaultIcon-Dark.png Dark mode
DefaultIcon-Tinted.png Tinted mode

Newer Xcode toolchains also accept an Icon Composer document at DefaultIcon-ios.icon, which carries every size and appearance itself. When one is present Titanium renders from it and skips generating an icon set.

Launch screens

Titanium builds a launch screen storyboard by default, controlled in tiapp.xml:

<ios>
  <enable-launch-screen-storyboard>true</enable-launch-screen-storyboard>
</ios>

With it on, the launch image is generated by centring your icon on a plain background, which is why a new project launches to its own icon without you supplying anything. Turn it off and iOS falls back to the fixed-size Default-*.png images in Resources/iphone/, which is the pre-storyboard approach and means one file per device size.

Leave the storyboard on unless you have a reason. Apple has required one for new App Store submissions since 2020.

Android

Android uses adaptive icons: a foreground layer, a background layer, and a monochrome layer for themed icons, composited by the launcher into whatever shape the device uses. ti create writes all three at every density:

platform/android/res/
  mipmap-anydpi-v26/ic_launcher.xml     which layers to composite
  mipmap-mdpi/      ic_launcher_foreground.png  48px
  mipmap-hdpi/      ...                         72px
  mipmap-xhdpi/     ...                         96px
  mipmap-xxhdpi/    ...                        144px
  mipmap-xxxhdpi/   ...                        192px

Replace the PNGs at every density. The launcher crops the outer edge of an adaptive icon to whatever shape it wants, so keep anything that must stay visible inside the middle two-thirds.

In an Alloy project these live under app/platform/android/res/, because alloy new moved platform/ there. See project structure.

Splash screen

Android's splash is a theme, not an image set. It is generated from the same launcher icon, so replacing the icon replaces what shows on launch.

Changing the name under the icon

That is <name> in tiapp.xml, not an icon setting. Both platforms read it from there.

Next

Platform conventions covers the places iOS and Android expect different things of an app.

Edit this page on GitHubLast updated Nov 9, 2026