Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>

This commit is contained in:
Matt Bruce 2026-01-04 14:38:15 -06:00
parent f574b91ebb
commit 1999f7c137
8 changed files with 2297 additions and 2118 deletions

View File

@ -428,6 +428,7 @@
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
"INFOPLIST_KEY_UILaunchScreen_BackgroundColor" = LaunchBackground;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
LD_RUNPATH_SEARCH_PATHS = (
@ -464,6 +465,7 @@
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
"INFOPLIST_KEY_UILaunchScreen_BackgroundColor" = LaunchBackground;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
LD_RUNPATH_SEARCH_PATHS = (

View File

@ -16,7 +16,9 @@ struct SelfieCamApp: App {
var body: some Scene {
WindowGroup {
AppLaunchView(config: .selfieCam) {
ContentView()
}
}
}
}

View File

@ -141,6 +141,14 @@ struct SettingsView: View {
acknowledgmentsSection
// MARK: - Debug Section
#if DEBUG
SettingsSectionHeader(title: "Debug", systemImage: "ant.fill")
brandingDebugSection
#endif
Spacer(minLength: Design.Spacing.xxxLarge)
}
.padding(.horizontal, Design.Spacing.large)
@ -752,6 +760,70 @@ struct SettingsView: View {
.padding(.top, Design.Spacing.large)
.padding(.bottom, Design.Spacing.xSmall)
}
// MARK: - Branding Debug Section
#if DEBUG
private var brandingDebugSection: some View {
VStack(spacing: Design.Spacing.small) {
// Icon Generator
NavigationLink {
IconGeneratorView(config: .selfieCam, appName: "SelfieCam")
} label: {
HStack {
VStack(alignment: .leading, spacing: Design.Spacing.xxSmall) {
Text("Icon Generator")
.font(.system(size: Design.BaseFontSize.body, weight: .medium))
.foregroundStyle(.white)
Text("Generate and save app icon to Files")
.font(.system(size: Design.BaseFontSize.caption))
.foregroundStyle(.white.opacity(Design.Opacity.medium))
}
Spacer()
Image(systemName: "chevron.right")
.font(.system(size: Design.BaseFontSize.caption))
.foregroundStyle(.white.opacity(Design.Opacity.medium))
}
.padding(Design.Spacing.medium)
.background(Color.Surface.primary, in: RoundedRectangle(cornerRadius: Design.CornerRadius.medium))
}
.buttonStyle(.plain)
// Branding Preview
NavigationLink {
BrandingPreviewView(
iconConfig: .selfieCam,
launchConfig: .selfieCam,
appName: "SelfieCam"
)
} label: {
HStack {
VStack(alignment: .leading, spacing: Design.Spacing.xxSmall) {
Text("Branding Preview")
.font(.system(size: Design.BaseFontSize.body, weight: .medium))
.foregroundStyle(.white)
Text("Preview app icon and launch screen")
.font(.system(size: Design.BaseFontSize.caption))
.foregroundStyle(.white.opacity(Design.Opacity.medium))
}
Spacer()
Image(systemName: "chevron.right")
.font(.system(size: Design.BaseFontSize.caption))
.foregroundStyle(.white.opacity(Design.Opacity.medium))
}
.padding(Design.Spacing.medium)
.background(Color.Surface.primary, in: RoundedRectangle(cornerRadius: Design.CornerRadius.medium))
}
.buttonStyle(.plain)
}
}
#endif
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

View File

@ -1,6 +1,7 @@
{
"images" : [
{
"filename" : "AppIcon.png",
"idiom" : "universal",
"platform" : "ios",
"size" : "1024x1024"

View File

@ -0,0 +1,20 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0.450",
"green" : "0.250",
"red" : "0.850"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,66 @@
//
// BrandingConfig.swift
// SelfieCam
//
// App-specific branding configurations for icons and launch screens.
//
import SwiftUI
import Bedrock
// MARK: - App Branding Colors
extension Color {
/// SelfieCam branding colors for icon and launch screen.
enum Branding {
/// Primary gradient color - rich magenta/rose for a vibrant, modern selfie aesthetic.
static let primary = Color(red: 0.85, green: 0.25, blue: 0.45)
/// Secondary gradient color - deeper magenta/purple for depth.
static let secondary = Color(red: 0.45, green: 0.12, blue: 0.35)
/// Accent color - soft white/cream for clean, bright text and icons.
static let accent = Color.white
}
}
// MARK: - App Icon Configuration
extension AppIconConfig {
/// SelfieCam app icon configuration.
/// A vibrant, modern icon perfect for a selfie camera app.
static let selfieCam = AppIconConfig(
title: "SELFIE",
subtitle: "CAM",
iconSymbol: "camera.fill",
primaryColor: Color.Branding.primary,
secondaryColor: Color.Branding.secondary,
accentColor: Color.Branding.accent
)
}
// MARK: - Launch Screen Configuration
extension LaunchScreenConfig {
/// SelfieCam launch screen configuration.
/// Animated launch screen with camera-focused visuals and radial glow.
static let selfieCam = LaunchScreenConfig(
title: "SELFIE CAM",
tagline: "Look Your Best",
iconSymbols: ["camera.fill", "sparkles"],
cornerSymbol: "sparkle",
decorativeSymbol: "circle.fill",
patternStyle: .radial,
layoutStyle: .iconAboveTitle,
primaryColor: Color.Branding.primary,
secondaryColor: Color.Branding.secondary,
accentColor: Color.Branding.accent,
titleColor: .white,
iconSize: 52,
titleSize: 38,
subtitleSize: 72,
iconSpacing: 12,
animationDuration: 0.6,
showLoadingIndicator: false
)
}