695 lines
20 KiB
Markdown
695 lines
20 KiB
Markdown
# Branding Implementation Guide
|
||
|
||
A step-by-step guide to implementing the CasinoKit branding system (app icon and launch screen) in your casino game app.
|
||
|
||
## Table of Contents
|
||
|
||
1. [Overview](#overview)
|
||
2. [Prerequisites](#prerequisites)
|
||
3. [Step 1: Copy Branding Files](#step-1-copy-branding-files)
|
||
4. [Step 2: Create BrandingConfig.swift](#step-2-create-brandingconfigswift)
|
||
5. [Step 3: Add Launch Screen to App Entry Point](#step-3-add-launch-screen-to-app-entry-point)
|
||
6. [Step 4: Add Branding Tools to Settings (Optional)](#step-4-add-branding-tools-to-settings-optional)
|
||
7. [Step 5: Generate Your App Icon](#step-5-generate-your-app-icon)
|
||
8. [Step 6: Add Icon to Xcode Assets](#step-6-add-icon-to-xcode-assets)
|
||
9. [Complete Example](#complete-example)
|
||
10. [Troubleshooting](#troubleshooting)
|
||
|
||
---
|
||
|
||
## Overview
|
||
|
||
The CasinoKit branding system provides:
|
||
|
||
- **AppIconView**: A customizable icon design with gradient backgrounds, SF Symbols, and text
|
||
- **LaunchScreenView**: An animated launch screen that matches your icon
|
||
- **AppLaunchView**: A wrapper that seamlessly transitions from launch to app
|
||
- **IconGeneratorView**: A development tool to generate and export icon images
|
||
- **BrandingPreviewView**: A preview tool to see icons and launch screens side-by-side
|
||
|
||
**Key Files in CasinoKit:**
|
||
- `AppIconView.swift` - Icon design view
|
||
- `LaunchScreenView.swift` - Launch screen design view
|
||
- `AppLaunchView.swift` - Launch wrapper with animation
|
||
- `IconGeneratorView.swift` - Icon export tool
|
||
- `IconRenderer.swift` - Rendering utilities
|
||
- `BrandingPreviewView.swift` - Preview tool
|
||
|
||
---
|
||
|
||
## Prerequisites
|
||
|
||
### If Using CasinoKit Package
|
||
|
||
Your app must have `CasinoKit` as a dependency. No additional files needed—everything is available through `import CasinoKit`.
|
||
|
||
### If You Copied the Branding Folder
|
||
|
||
If you manually copied the branding views from CasinoKit into your app, ensure you have:
|
||
|
||
1. All 6 files from `CasinoKit/Sources/CasinoKit/Views/Branding/`:
|
||
- `AppIconView.swift`
|
||
- `LaunchScreenView.swift`
|
||
- `AppLaunchView.swift`
|
||
- `IconGeneratorView.swift`
|
||
- `IconRenderer.swift`
|
||
- `BrandingPreviewView.swift`
|
||
|
||
2. Dependencies these files require:
|
||
- `DiamondPatternView.swift` (used by `AppIconView`)
|
||
- `DebugSection.swift` (if using debug tools)
|
||
|
||
---
|
||
|
||
## Step 1: Copy Branding Files
|
||
|
||
**Skip this step if using CasinoKit as a package dependency.**
|
||
|
||
If copying manually, create a `Theme/` folder in your app target and copy all branding files:
|
||
|
||
```
|
||
YourApp/
|
||
YourApp/
|
||
Theme/
|
||
AppIconView.swift
|
||
LaunchScreenView.swift
|
||
AppLaunchView.swift
|
||
IconGeneratorView.swift
|
||
IconRenderer.swift
|
||
BrandingPreviewView.swift
|
||
BrandingConfig.swift ← You'll create this in Step 2
|
||
```
|
||
|
||
**Important:** Ensure you also have `DiamondPatternView.swift` if `AppIconView` references it, or copy that pattern code inline.
|
||
|
||
---
|
||
|
||
## Step 2: Create BrandingConfig.swift
|
||
|
||
Create a new Swift file in your app's `Theme/` folder called `BrandingConfig.swift`. This file defines your game's branding.
|
||
|
||
### Template
|
||
|
||
```swift
|
||
//
|
||
// BrandingConfig.swift
|
||
// YourGame
|
||
//
|
||
// App-specific branding configurations for icons and launch screens.
|
||
//
|
||
|
||
import SwiftUI
|
||
import CasinoKit // Remove this line if not using CasinoKit package
|
||
|
||
// MARK: - App Icon Configuration
|
||
|
||
extension AppIconConfig {
|
||
/// YourGame app icon configuration.
|
||
static let yourGame = AppIconConfig(
|
||
title: "YOUR GAME", // App name (uppercase looks best)
|
||
subtitle: "21", // Optional: number or short text below icon
|
||
iconSymbol: "suit.club.fill", // SF Symbol for the main icon
|
||
primaryColor: Color(red: 0.1, green: 0.2, blue: 0.35), // Top gradient color
|
||
secondaryColor: Color(red: 0.05, green: 0.12, blue: 0.25), // Bottom gradient color
|
||
accentColor: .yellow // Color for icon and text
|
||
)
|
||
}
|
||
|
||
// MARK: - Launch Screen Configuration
|
||
|
||
extension LaunchScreenConfig {
|
||
/// YourGame launch screen configuration.
|
||
static let yourGame = LaunchScreenConfig(
|
||
title: "YOUR GAME", // App name (uppercase looks best)
|
||
subtitle: "21", // Optional: appears below icon symbols
|
||
tagline: "Beat the Dealer", // Optional: tagline at bottom
|
||
iconSymbols: [ // 1-3 SF Symbols for the launch logo
|
||
"suit.club.fill",
|
||
"suit.diamond.fill"
|
||
],
|
||
primaryColor: Color(red: 0.1, green: 0.2, blue: 0.35), // Top gradient color
|
||
secondaryColor: Color(red: 0.05, green: 0.12, blue: 0.25), // Bottom gradient color
|
||
accentColor: .yellow // Color for text and accents
|
||
)
|
||
}
|
||
```
|
||
|
||
### Customization Tips
|
||
|
||
**Title:**
|
||
- Use uppercase for a casino aesthetic
|
||
- Keep it concise (6-9 characters max)
|
||
- The view automatically scales longer titles
|
||
|
||
**Subtitle:**
|
||
- Optional, best for short numbers or text ("21", "DELUXE", etc.)
|
||
- Appears larger and more prominent than the title
|
||
|
||
**Icon Symbol:**
|
||
- Use SF Symbols names (e.g., `"suit.spade.fill"`, `"diamond.fill"`)
|
||
- Browse available symbols in Xcode: Editor → Insert SF Symbol
|
||
- Card suits work great: `suit.spade.fill`, `suit.heart.fill`, `suit.diamond.fill`, `suit.club.fill`
|
||
|
||
**Colors:**
|
||
- Use `Color(red:green:blue:)` with values 0.0-1.0
|
||
- Primary color = top of gradient
|
||
- Secondary color = bottom of gradient (usually darker)
|
||
- Accent color = icon symbol and text highlights
|
||
|
||
**Launch Screen Icon Symbols:**
|
||
- Use 1-3 symbols for visual variety
|
||
- Hearts and diamonds automatically render red
|
||
- Spades and clubs render white
|
||
|
||
### Real Examples
|
||
|
||
**Blackjack:**
|
||
```swift
|
||
extension AppIconConfig {
|
||
static let blackjack = AppIconConfig(
|
||
title: "BLACKJACK",
|
||
subtitle: "21",
|
||
iconSymbol: "suit.club.fill",
|
||
primaryColor: Color(red: 0.05, green: 0.35, blue: 0.15), // Green felt
|
||
secondaryColor: Color(red: 0.03, green: 0.2, blue: 0.1),
|
||
accentColor: .yellow
|
||
)
|
||
}
|
||
|
||
extension LaunchScreenConfig {
|
||
static let blackjack = LaunchScreenConfig(
|
||
title: "BLACKJACK",
|
||
subtitle: "21",
|
||
tagline: "Beat the Dealer",
|
||
iconSymbols: ["suit.club.fill", "suit.diamond.fill"],
|
||
primaryColor: Color(red: 0.05, green: 0.35, blue: 0.15),
|
||
secondaryColor: Color(red: 0.03, green: 0.2, blue: 0.1),
|
||
accentColor: .yellow
|
||
)
|
||
}
|
||
```
|
||
|
||
**Baccarat:**
|
||
```swift
|
||
extension AppIconConfig {
|
||
static let baccarat = AppIconConfig(
|
||
title: "BACCARAT",
|
||
iconSymbol: "suit.spade.fill",
|
||
primaryColor: Color(red: 0.1, green: 0.2, blue: 0.35), // Blue elegant
|
||
secondaryColor: Color(red: 0.05, green: 0.12, blue: 0.25)
|
||
)
|
||
}
|
||
|
||
extension LaunchScreenConfig {
|
||
static let baccarat = LaunchScreenConfig(
|
||
title: "BACCARAT",
|
||
tagline: "The Classic Casino Card Game",
|
||
iconSymbols: ["suit.spade.fill", "suit.heart.fill"]
|
||
)
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## Step 3: Add Launch Screen to App Entry Point
|
||
|
||
Update your `@main` App struct to wrap your content with `AppLaunchView`.
|
||
|
||
### Before
|
||
|
||
```swift
|
||
@main
|
||
struct YourGameApp: App {
|
||
var body: some Scene {
|
||
WindowGroup {
|
||
ContentView()
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
### After
|
||
|
||
```swift
|
||
import SwiftUI
|
||
import CasinoKit // If using the package
|
||
|
||
@main
|
||
struct YourGameApp: App {
|
||
var body: some Scene {
|
||
WindowGroup {
|
||
AppLaunchView(config: .yourGame) {
|
||
ContentView()
|
||
}
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
**What this does:**
|
||
- Shows an animated launch screen for ~2 seconds
|
||
- Fades smoothly into your main content
|
||
- Creates a polished, professional app opening experience
|
||
|
||
**Note:** Replace `.yourGame` with the static property name you defined in `BrandingConfig.swift` (e.g., `.blackjack`, `.poker`, `.roulette`).
|
||
|
||
---
|
||
|
||
## Step 4: Add Branding Tools to Settings (Optional)
|
||
|
||
Add debug tools to your settings view so you can easily generate and preview icons during development.
|
||
|
||
### If Using CasinoKit Package
|
||
|
||
Add this to your settings view inside a `#if DEBUG` block:
|
||
|
||
```swift
|
||
#if DEBUG
|
||
SheetSection(title: "DEBUG", icon: "ant.fill") {
|
||
BrandingDebugRows(
|
||
iconConfig: .yourGame,
|
||
launchConfig: .yourGame,
|
||
appName: "YourGame"
|
||
)
|
||
}
|
||
#endif
|
||
```
|
||
|
||
### Full Example in Settings
|
||
|
||
```swift
|
||
import SwiftUI
|
||
import CasinoKit
|
||
|
||
struct SettingsView: View {
|
||
@Environment(\.dismiss) private var dismiss
|
||
|
||
var body: some View {
|
||
SheetContainerView(
|
||
title: "Settings",
|
||
content: {
|
||
// ... your normal settings sections ...
|
||
|
||
// DEBUG section at the bottom
|
||
#if DEBUG
|
||
SheetSection(title: "DEBUG", icon: "ant.fill") {
|
||
BrandingDebugRows(
|
||
iconConfig: .yourGame,
|
||
launchConfig: .yourGame,
|
||
appName: "YourGame"
|
||
)
|
||
}
|
||
#endif
|
||
},
|
||
onCancel: nil,
|
||
onDone: {
|
||
dismiss()
|
||
}
|
||
)
|
||
}
|
||
}
|
||
```
|
||
|
||
**What this adds:**
|
||
- **Icon Generator** button: Generates and saves a 1024px PNG to the Files app
|
||
- **Branding Preview** button: Shows a live preview of your icon and launch screen
|
||
|
||
**Important:** This only appears in DEBUG builds and will automatically be excluded from App Store releases.
|
||
|
||
---
|
||
|
||
## Step 5: Generate Your App Icon
|
||
|
||
Now it's time to create your actual app icon image.
|
||
|
||
### Method 1: Using IconGeneratorView (Recommended)
|
||
|
||
1. **Build and run your app** (simulator or device)
|
||
2. **Open Settings** in your app
|
||
3. **Scroll to the DEBUG section** (only visible in DEBUG builds)
|
||
4. **Tap "Icon Generator"**
|
||
5. **Tap "Generate & Save Icon"**
|
||
6. **Wait for confirmation**: "✅ Icon saved to Documents folder!"
|
||
|
||
The icon is now saved as `AppIcon.png` (1024×1024) in your app's Documents folder.
|
||
|
||
### Method 2: Using Xcode Previews
|
||
|
||
1. Open `BrandingConfig.swift` in Xcode
|
||
2. Add a preview at the bottom:
|
||
|
||
```swift
|
||
#Preview("App Icon") {
|
||
AppIconView(config: .yourGame, size: 512)
|
||
.clipShape(.rect(cornerRadius: 512 * 0.22))
|
||
.padding()
|
||
.background(Color.gray)
|
||
}
|
||
```
|
||
|
||
3. Open the Canvas (Editor → Canvas)
|
||
4. Take a screenshot of the preview
|
||
5. Crop and scale to 1024×1024 in an image editor
|
||
|
||
### Method 3: Programmatic Export
|
||
|
||
Create a temporary view or function:
|
||
|
||
```swift
|
||
@MainActor
|
||
func exportIcon() {
|
||
let config = AppIconConfig.yourGame
|
||
let view = AppIconView(config: config, size: 1024)
|
||
let renderer = ImageRenderer(content: view)
|
||
renderer.scale = 1.0
|
||
|
||
if let image = renderer.uiImage,
|
||
let data = image.pngData() {
|
||
let url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
|
||
.appending(path: "AppIcon.png")
|
||
try? data.write(to: url)
|
||
print("Icon saved to: \(url.path)")
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## Step 6: Add Icon to Xcode Assets
|
||
|
||
### Retrieve the Icon from Device/Simulator
|
||
|
||
**On Simulator:**
|
||
1. Open **Finder**
|
||
2. Go to: `~/Library/Developer/CoreSimulator/Devices/`
|
||
3. Find your simulator device folder
|
||
4. Navigate to: `data/Containers/Data/Application/[YourApp]/Documents/`
|
||
5. Copy `AppIcon.png` to your Mac desktop
|
||
|
||
**On Physical Device:**
|
||
1. Open the **Files** app on your device
|
||
2. Navigate to: **On My iPhone** → **YourGame**
|
||
3. Find `AppIcon.png`
|
||
4. **AirDrop** or **share** it to your Mac
|
||
|
||
**Alternative (Xcode):**
|
||
1. In Xcode, go to **Window** → **Devices and Simulators**
|
||
2. Select your device/simulator
|
||
3. Find your app in the Installed Apps list
|
||
4. Click the **⚙️ gear** icon → **Download Container**
|
||
5. Right-click the downloaded `.xcappdata` file → **Show Package Contents**
|
||
6. Navigate to `AppData/Documents/` and copy `AppIcon.png`
|
||
|
||
### Add to Xcode Assets
|
||
|
||
1. **Open your Xcode project**
|
||
2. **Navigate to** `Assets.xcassets` in the Project Navigator
|
||
3. **Click on AppIcon** (the app icon asset)
|
||
4. **Drag `AppIcon.png`** from Finder into the **1024×1024** slot (labeled "iOS App Store")
|
||
5. **Xcode automatically generates** all required sizes from this single image
|
||
|
||
**Important:** Modern iOS projects only need the 1024×1024 image. Xcode generates all other sizes automatically.
|
||
|
||
### Verify the Icon
|
||
|
||
1. **Build and run** your app
|
||
2. **Press the Home button** (or swipe up)
|
||
3. Check that your new icon appears on the home screen
|
||
4. If it doesn't update immediately, **delete the app** and reinstall
|
||
|
||
---
|
||
|
||
## Complete Example
|
||
|
||
Here's a full example for a Poker game:
|
||
|
||
### File: `Poker/Theme/BrandingConfig.swift`
|
||
|
||
```swift
|
||
//
|
||
// BrandingConfig.swift
|
||
// Poker
|
||
//
|
||
|
||
import SwiftUI
|
||
import CasinoKit
|
||
|
||
extension AppIconConfig {
|
||
static let poker = AppIconConfig(
|
||
title: "POKER",
|
||
iconSymbol: "suit.diamond.fill",
|
||
primaryColor: Color(red: 0.2, green: 0.05, blue: 0.1),
|
||
secondaryColor: Color(red: 0.1, green: 0.02, blue: 0.05),
|
||
accentColor: Color(red: 1.0, green: 0.85, blue: 0.3) // Gold
|
||
)
|
||
}
|
||
|
||
extension LaunchScreenConfig {
|
||
static let poker = LaunchScreenConfig(
|
||
title: "POKER",
|
||
tagline: "All In",
|
||
iconSymbols: ["suit.diamond.fill", "suit.heart.fill", "suit.club.fill"],
|
||
primaryColor: Color(red: 0.2, green: 0.05, blue: 0.1),
|
||
secondaryColor: Color(red: 0.1, green: 0.02, blue: 0.05),
|
||
accentColor: Color(red: 1.0, green: 0.85, blue: 0.3)
|
||
)
|
||
}
|
||
```
|
||
|
||
### File: `Poker/PokerApp.swift`
|
||
|
||
```swift
|
||
import SwiftUI
|
||
import CasinoKit
|
||
|
||
@main
|
||
struct PokerApp: App {
|
||
var body: some Scene {
|
||
WindowGroup {
|
||
AppLaunchView(config: .poker) {
|
||
ContentView()
|
||
}
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
### File: `Poker/Views/SettingsView.swift`
|
||
|
||
```swift
|
||
import SwiftUI
|
||
import CasinoKit
|
||
|
||
struct SettingsView: View {
|
||
@Environment(\.dismiss) private var dismiss
|
||
|
||
var body: some View {
|
||
SheetContainerView(
|
||
title: "Settings",
|
||
content: {
|
||
// Game settings sections...
|
||
|
||
SheetSection(title: "SOUND", icon: "speaker.wave.2.fill") {
|
||
// Sound settings...
|
||
}
|
||
|
||
#if DEBUG
|
||
SheetSection(title: "DEBUG", icon: "ant.fill") {
|
||
BrandingDebugRows(
|
||
iconConfig: .poker,
|
||
launchConfig: .poker,
|
||
appName: "Poker"
|
||
)
|
||
}
|
||
#endif
|
||
},
|
||
onDone: {
|
||
dismiss()
|
||
}
|
||
)
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## Troubleshooting
|
||
|
||
### Issue: Can't find `AppIconView` or other branding types
|
||
|
||
**Solution:**
|
||
- If using CasinoKit package: Ensure `import CasinoKit` is at the top of your file
|
||
- If copying manually: Ensure all 6 branding files are in your app target
|
||
- Check that files are added to your target's "Compile Sources" in Build Phases
|
||
|
||
### Issue: Launch screen doesn't appear
|
||
|
||
**Solution:**
|
||
- Verify `AppLaunchView` wraps your content in the App struct
|
||
- Check that you're using the correct config name (e.g., `.poker` not `.example`)
|
||
- Ensure the config extension is defined in `BrandingConfig.swift`
|
||
|
||
### Issue: Icon looks cut off at the edges
|
||
|
||
**Explanation:** iOS applies a superellipse mask to all app icons. The branding system accounts for this, but if you see clipping:
|
||
|
||
**Solution:**
|
||
- Don't add rounded corners yourself—iOS does this automatically
|
||
- Ensure decorative borders are inset from edges
|
||
- The system is designed to work with iOS's mask; trust the 22% corner radius preview
|
||
|
||
### Issue: "Icon saved" message appears but can't find the file
|
||
|
||
**Solution:**
|
||
- Open the **Files** app on your device/simulator
|
||
- Navigate to: **Browse** → **On My iPhone/iPad** → **[Your App Name]**
|
||
- If folder doesn't exist, try granting Files access in Settings
|
||
|
||
**Alternative:** Use Xcode's Devices and Simulators window to download the app container (see Step 6).
|
||
|
||
### Issue: Icon doesn't update after adding to Assets
|
||
|
||
**Solution:**
|
||
1. **Clean build folder**: Product → Clean Build Folder (Cmd+Shift+K)
|
||
2. **Delete app** from device/simulator
|
||
3. **Rebuild and reinstall**
|
||
4. If still not working, check that the 1024×1024 slot is filled in Assets.xcassets
|
||
|
||
### Issue: `BrandingDebugRows` not showing in settings
|
||
|
||
**Solution:**
|
||
- Ensure you're running a DEBUG build (not Release)
|
||
- Wrap the section in `#if DEBUG ... #endif`
|
||
- Verify `import CasinoKit` if using the package
|
||
- Check that your settings view is inside a `NavigationStack` (required for navigation rows)
|
||
|
||
### Issue: Colors don't match between icon and launch screen
|
||
|
||
**Solution:**
|
||
- Ensure both configs use identical color values
|
||
- Copy-paste color definitions to avoid typos
|
||
- Consider extracting colors to a shared constant:
|
||
|
||
```swift
|
||
extension Color {
|
||
static let pokerPrimary = Color(red: 0.2, green: 0.05, blue: 0.1)
|
||
static let pokerSecondary = Color(red: 0.1, green: 0.02, blue: 0.05)
|
||
}
|
||
|
||
extension AppIconConfig {
|
||
static let poker = AppIconConfig(
|
||
title: "POKER",
|
||
iconSymbol: "suit.diamond.fill",
|
||
primaryColor: .pokerPrimary,
|
||
secondaryColor: .pokerSecondary
|
||
)
|
||
}
|
||
```
|
||
|
||
### Issue: Title text is too small or too large
|
||
|
||
**Solution:** The system automatically scales titles based on length:
|
||
- **6 characters or less**: Full size (100%)
|
||
- **7 characters**: 95% scale
|
||
- **8 characters**: 85% scale
|
||
- **9 characters**: 75% scale
|
||
- **10+ characters**: 65% scale
|
||
|
||
If your title is very long, consider:
|
||
- Using an abbreviation in the icon
|
||
- Using subtitle for additional text
|
||
- Manually adjusting the `titleSize` calculation in `AppIconView.swift`
|
||
|
||
---
|
||
|
||
## Additional Resources
|
||
|
||
### Color Palette Ideas
|
||
|
||
**Classic Casino:**
|
||
```swift
|
||
primaryColor: Color(red: 0.1, green: 0.2, blue: 0.35) // Deep blue
|
||
secondaryColor: Color(red: 0.05, green: 0.12, blue: 0.25)
|
||
accentColor: .yellow
|
||
```
|
||
|
||
**Luxury Gold:**
|
||
```swift
|
||
primaryColor: Color(red: 0.2, green: 0.15, blue: 0.05) // Deep gold
|
||
secondaryColor: Color(red: 0.1, green: 0.08, blue: 0.02)
|
||
accentColor: Color(red: 1.0, green: 0.85, blue: 0.3) // Bright gold
|
||
```
|
||
|
||
**Green Felt:**
|
||
```swift
|
||
primaryColor: Color(red: 0.05, green: 0.35, blue: 0.15) // Casino green
|
||
secondaryColor: Color(red: 0.03, green: 0.2, blue: 0.1)
|
||
accentColor: .yellow
|
||
```
|
||
|
||
**Elegant Red:**
|
||
```swift
|
||
primaryColor: Color(red: 0.3, green: 0.05, blue: 0.1) // Deep red
|
||
secondaryColor: Color(red: 0.15, green: 0.02, blue: 0.05)
|
||
accentColor: Color(red: 1.0, green: 0.85, blue: 0.3)
|
||
```
|
||
|
||
### SF Symbol Recommendations
|
||
|
||
**Card Suits:**
|
||
- `suit.spade.fill` - Classic, elegant
|
||
- `suit.heart.fill` - Warm, friendly
|
||
- `suit.diamond.fill` - Luxurious
|
||
- `suit.club.fill` - Traditional
|
||
|
||
**Other Casino Icons:**
|
||
- `diamond.fill` - Luxury, wealth
|
||
- `star.fill` - Premium, winning
|
||
- `crown.fill` - VIP, royalty
|
||
- `dollarsign.circle.fill` - Money, stakes
|
||
|
||
### Launch Screen Animation Timing
|
||
|
||
The default timing is:
|
||
- **Logo fade-in**: 0.6 seconds
|
||
- **Tagline fade-in**: 0.6 seconds (delayed by 0.3s)
|
||
- **Total display**: 2.0 seconds
|
||
- **Fade-out**: 0.5 seconds
|
||
|
||
To customize, modify `AppLaunchView.swift`:
|
||
|
||
```swift
|
||
.task {
|
||
try? await Task.sleep(for: .seconds(3.0)) // Change display duration
|
||
withAnimation(.easeOut(duration: 1.0)) { // Change fade-out duration
|
||
showLaunchScreen = false
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## Summary Checklist
|
||
|
||
- [ ] Copy branding files from CasinoKit or ensure package dependency is set up
|
||
- [ ] Create `BrandingConfig.swift` with your game's configurations
|
||
- [ ] Add `AppLaunchView` wrapper to your App entry point
|
||
- [ ] (Optional) Add `BrandingDebugRows` to your settings view
|
||
- [ ] Build and run app in DEBUG mode
|
||
- [ ] Generate icon using Icon Generator tool
|
||
- [ ] Retrieve icon PNG from device/simulator
|
||
- [ ] Add 1024×1024 PNG to Assets.xcassets AppIcon slot
|
||
- [ ] Clean build and reinstall to verify icon appears
|
||
- [ ] Test launch screen animation on device
|
||
|
||
---
|
||
|
||
**Need Help?**
|
||
|
||
- Check the `BrandingPreviewView` to see your icon and launch screen side-by-side
|
||
- Use Xcode previews to iterate on colors and layout quickly
|
||
- Test on multiple device sizes to ensure text scales properly
|
||
- Remember: DEBUG tools are automatically excluded from Release builds
|
||
|
||
**Happy Branding! 🎰✨**
|