Brett Owers
← All Projects

AnimatedLaunchScreenKit

Production

April 20, 2025

A CocoaPod containing the Hot Potato Games branded launch screen — the infinite carousel of potato assets that plays while the app loads. Helpful for consistent branding across future mobile apps. Sometimes caused crashes. The infinite carousel, as always, is both the brand's signature and its most reliable source of bugs.

Purpose

Packaged the HPG animated launch screen into a reusable CocoaPod so any new mobile app can drop in the branded loading experience. The launch screen features the infinite carousel — the signature Potatuhs visual motif — animated with potato product imagery scrolling endlessly while the app initializes.

Stack

SwiftCocoaPodsiOSAnimationLaunch ScreenHot Potato Games

What I Learned

  • A branded launch screen that is consistent across all apps in a portfolio signals professionalism and brand cohesion. When a user opens any HPG app and sees the same carousel animation, it reinforces that these apps belong to the same family. The launch screen is the first thing users see. Making it memorable and consistent is the cheapest branding investment available.
  • The infinite carousel causing crashes in a launch screen is peak irony — the brand's signature visual element is also its most fragile. Launch screens have strict constraints: limited memory budget (the app is still initializing), no network access, and a tight time window before the OS kills the app for taking too long to launch. An infinite carousel with image assets pushing the memory limit during initialization is a recipe for exactly the crashes that occurred.
  • Launch screen crashes are the worst kind of crash because the user never even sees the app. They tap the icon, the screen flashes, and they are back on the home screen. No error message, no recovery option, no chance to make a first impression. A crash on the launch screen is a 100% bounce rate for affected users.
  • The fix for launch screen memory issues: use compressed assets (WebP or JPEG instead of PNG), limit the number of preloaded carousel items (render 3-5 visible items, not the full set), defer asset loading until the main app has initialized, and test on the lowest-spec supported device (not just your latest iPhone).

Key Insights

  • The infinite carousel being the source of crashes in a launch screen package is a poetic callback to the Flutter Carousel Slider entry — where the carousel concept first appeared as a fork I could not fix. Years later, the infinite carousel is the brand's signature, deployed as a CocoaPod, and still causing problems. Some technical challenges follow you forever. You do not fix them once. You manage them continuously.
  • Packaging branding into a reusable component (CocoaPod, SPM package, npm module) is the right abstraction level for brand consistency. Copying brand assets between projects leads to drift — colors change in one app but not another, the animation timing differs, the logo is the wrong version. A package is a single source of truth for the brand's visual identity at the code level.
#Swift#CocoaPods#iOS#launch-screen#animation#infinite-carousel#branding#Hot-Potato-Games#Potatuhs#crashes

This post was composed through a conversation between Brett Owers and Claude Code (Anthropic). The content reflects Brett's recollection of each project and the lessons drawn from it. Some details may be approximate or omitted — the purpose is to paint an honest picture of a software engineer's development over time, not to serve as a precise historical record.