swiftuimigrator-project-setup
SwiftUI Migrator Project Setup
Overview
Use this skill at the start of a migration to prepare the app shell for SwiftUI without beginning screen conversion yet.
Core principle: establish a stable SwiftUI entry point first, then migrate startup work and screens on top of it.
When to Use
- The project does not yet have a SwiftUI
Appentry point - Tuist deployment targets still need SwiftUI-compatible updates
SplashScreen.swiftand the app shell are missingAppDelegatestill owns launch-time window setup- The launch screen and initial SwiftUI splash handoff are not yet aligned
Scope
- Update Tuist deployment targets for SwiftUI support
- Create
App.swift - Create an empty
SplashScreen.swift - Move app entry ownership away from
AppDelegate - Apply file-organization rules for migrated screens and reusable views
- Match the launch screen visually to avoid a startup jump
File Organization Rules
- Screens: Full-screen SwiftUI replacements for
UIViewControllerclasses belong inProjects/App/Sources/Screens/. - Views: Smaller reusable SwiftUI components belong in
Projects/App/Sources/Views/. - Naming: Do not use generic names like
ContentView.swift. Use descriptive names such asMainScreen.swiftandSplashScreen.swift.
Migration Tasks
1. Update Tuist for SwiftUI
- Locate all
Project.swiftfiles under theProjects/directory. - In each file, find the
deploymentTarget. - Update every module to at least
iOS 18.0. - Run
tuist generate --no-open.
2. Add the SwiftUI app shell
- Create
Projects/App/Sources/App.swiftwith aWindowGroupthat showsSplashScreen. - Create
Projects/App/Sources/Screens/SplashScreen.swift. - In
AppDelegate.swift, remove@UIApplicationMainor@mainand remove directself.windowownership. - Keep
AppDelegate.swiftitself. Do not delete it during setup.
3. Make the splash transition seamless
- Inspect the launch screen configuration in
Info.plistorLaunchScreen.storyboard. - Match the same background color and image in
SplashScreen.swift. - Keep image size and positioning aligned with the launch screen.
Shared References
- Samples:
../swiftuimigrator/guides/samples/step2-app-splash/ - Verification:
../swiftuimigrator/guides/verification-checklists.md - Troubleshooting:
../swiftuimigrator/guides/troubleshooting.md
Verification
- Run
tuist generate --no-open - Run
tuist build - Confirm there is no duplicate
@mainorUIApplicationMainconflict - Confirm the app launches through the SwiftUI shell
- Confirm there is no visible jump between the system launch screen and
SplashScreen
Exit Criteria
The project is ready for:
swiftuimigrator-data-migrationif startup logic still needs to move out of UIKitswiftuimigrator-screensif the app shell is already stable enough to start screen migration
More from 2sem/swiftui-migrator-skill
swiftuimigrator
Use when planning or coordinating an incremental UIKit-to-SwiftUI migration and you need to determine which migration stage or specialized subskill should run next.
1swiftuimigrator-admob
Use when the SwiftUI migration is already stable and the remaining work is Google AdMob integration, SwiftUIAdManager setup, ad-unit migration, or native ad UI migration.
1swiftuimigrator-cleanup
Use when the SwiftUI migration is already verified and the remaining work is deleting legacy UIKit files, removing old entry logic, and doing final cleanup safely.
1swiftuimigrator-screens
Use when converting UIKit ViewControllers into SwiftUI screens, migrating features incrementally, rewiring navigation, or bridging complex UIKit views with UIViewRepresentable.
1swiftuimigrator-data-migration
Use when SwiftUI app startup still needs initialization, migration, loading-state orchestration, AppInitializer work, or SplashScreen progress handling.
1