Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>
This commit is contained in:
parent
f574b91ebb
commit
1999f7c137
@ -428,6 +428,7 @@
|
|||||||
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
|
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
|
||||||
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
||||||
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
|
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
|
||||||
|
"INFOPLIST_KEY_UILaunchScreen_BackgroundColor" = LaunchBackground;
|
||||||
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
||||||
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
@ -464,6 +465,7 @@
|
|||||||
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
|
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
|
||||||
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
||||||
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
|
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
|
||||||
|
"INFOPLIST_KEY_UILaunchScreen_BackgroundColor" = LaunchBackground;
|
||||||
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
||||||
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
|||||||
@ -16,7 +16,9 @@ struct SelfieCamApp: App {
|
|||||||
|
|
||||||
var body: some Scene {
|
var body: some Scene {
|
||||||
WindowGroup {
|
WindowGroup {
|
||||||
ContentView()
|
AppLaunchView(config: .selfieCam) {
|
||||||
|
ContentView()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -141,6 +141,14 @@ struct SettingsView: View {
|
|||||||
|
|
||||||
acknowledgmentsSection
|
acknowledgmentsSection
|
||||||
|
|
||||||
|
// MARK: - Debug Section
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
SettingsSectionHeader(title: "Debug", systemImage: "ant.fill")
|
||||||
|
|
||||||
|
brandingDebugSection
|
||||||
|
#endif
|
||||||
|
|
||||||
Spacer(minLength: Design.Spacing.xxxLarge)
|
Spacer(minLength: Design.Spacing.xxxLarge)
|
||||||
}
|
}
|
||||||
.padding(.horizontal, Design.Spacing.large)
|
.padding(.horizontal, Design.Spacing.large)
|
||||||
@ -752,6 +760,70 @@ struct SettingsView: View {
|
|||||||
.padding(.top, Design.Spacing.large)
|
.padding(.top, Design.Spacing.large)
|
||||||
.padding(.bottom, Design.Spacing.xSmall)
|
.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 |
@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
"images" : [
|
"images" : [
|
||||||
{
|
{
|
||||||
|
"filename" : "AppIcon.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"platform" : "ios",
|
"platform" : "ios",
|
||||||
"size" : "1024x1024"
|
"size" : "1024x1024"
|
||||||
|
|||||||
@ -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
66
SelfieCam/Shared/BrandingConfig.swift
Normal file
66
SelfieCam/Shared/BrandingConfig.swift
Normal 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
|
||||||
|
)
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user