Preparing an App for Production: Assets, Icons & Launch Screens
iOS Development — Production & Publishing
Chapter 1 · Preparing an App for Production: Assets, Icons & Launch Screens
Architecture & Data's own capstone left TaskFlow feature-complete but genuinely unpolished — no real icon, no configured launch screen, no real distinct identity of its own. This course starts by turning it into something that looks, and is configured, like a real app ready to ship.
The Asset Catalog: Assets.xcassets
Every real Xcode project ships with one central asset catalog — a structured real container for icons, images, and colors, managed visually inside Xcode rather than as loose files.
A real, dedicated icon set — the app's own real identity on the Home Screen and throughout the system.
Real images, optionally with distinct 1x/2x/3x variants for different real screen densities.
Named real colors — Color("AccentColor") — that can define genuinely different values for light and dark mode.
A Real, Genuinely Simplified App Icon Requirement
Older Xcode versions once required a full real set of icon images at many specific sizes. The current,
real requirement is dramatically simpler: a single 1024×1024 image in the
AppIcon set — Xcode itself generates every other real size the system actually needs (Home
Screen, Settings, Spotlight, notifications) automatically from that one source image.
Real Color Sets for Light & Dark Mode
A real Color Set named BrandAccent, defined once in the asset catalog with a distinct value
for the "Any Appearance" and "Dark" variants, means Color("BrandAccent") automatically
resolves to the correct real color depending on the system's own current appearance — no manual
@Environment(\.colorScheme) branching needed anywhere in the app's own real view code for
something this simple.
The Launch Screen: A Real, Storyboard-Free Approach
A launch screen is shown real, briefly, the instant an app starts, before its actual first real view renders — giving the system something immediate to display rather than a blank window. The current, real, recommended approach needs no separate storyboard file at all:
UILaunchScreen dictionary in Info.plist — even an empty one,
<dict></dict> — is enough to satisfy the system's own requirement for something to
show at launch. It's deliberately not meant to be a real, animated splash screen or a place for genuine
app logic — it exists purely as a brief, real visual bridge before the actual app's own first screen is
ready.
Display Name & Bundle Identifier
| Setting | Real Role |
|---|---|
CFBundleDisplayName | The real, user-visible name shown under the Home Screen icon — can genuinely differ from the Xcode project's own internal name. |
| Bundle Identifier | A real, reverse-DNS-style unique string (e.g. com.osztromok.taskflow) identifying the app to the system and to App Store Connect — genuinely difficult to change once real users have installed it. |
Hands-On Exercises
Add a real 1024×1024 image to TaskFlow's own AppIcon set in Xcode, and explain, in your own words, why that source image must have no transparency, connecting your answer to how the system displays it at smaller real sizes.
Define a real Color Set named BrandAccent with a distinct value for light and dark appearance, then use it via Color("BrandAccent") in TaskFlow's own TaskListView navigation title styling.
Explain, in your own words, why a real bundle identifier like com.osztromok.taskflow is genuinely riskier to change later than most other project settings, once real users have already installed the app.
Chapter 1 Quick Reference
Assets.xcassets— the real, central home for app icons, images, and colors- A single, real, opaque 1024×1024 source image is all
AppIconneeds — Xcode generates every other real size automatically - Real Color Sets let one named color resolve differently for light vs. dark mode, with zero manual branching in view code
- The real, current launch-screen approach is a storyboard-free
UILaunchScreendictionary inInfo.plist CFBundleDisplayName(user-visible name) and the bundle identifier (a real, unique, reverse-DNS string) are foundational settings this entire course builds on