AboutView.swift (3601B)
1 import SwiftUI 2 3 struct AboutView: View { 4 private var appVersion: String { 5 Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "Unknown" 6 } 7 8 private var buildNumber: String { 9 Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "Unknown" 10 } 11 12 var body: some View { 13 List { 14 Section { 15 VStack(spacing: 8) { 16 Image("AboutIcon") 17 .resizable() 18 .scaledToFit() 19 .frame(width: 100, height: 100) 20 .clipShape(RoundedRectangle(cornerRadius: 22)) 21 22 Text("Crossmate") 23 .font(.title2) 24 .fontWeight(.bold) 25 26 Text("Version \(appVersion) (\(buildNumber))") 27 .font(.subheadline) 28 .foregroundStyle(.secondary) 29 .padding(.bottom, 20) 30 31 VStack(spacing: 4) { 32 Text("Programming") 33 .font(.caption) 34 .textCase(.uppercase) 35 .tracking(0.8) 36 .foregroundStyle(.secondary) 37 Text("Claude Code and OpenAI Codex") 38 .font(.subheadline) 39 .foregroundStyle(.primary) 40 } 41 .padding(.bottom, 8) 42 43 VStack(spacing: 4) { 44 Text("Testing") 45 .font(.caption) 46 .textCase(.uppercase) 47 .tracking(0.8) 48 .foregroundStyle(.secondary) 49 Text("Eugenia Samuel") 50 .font(.subheadline) 51 .foregroundStyle(.primary) 52 } 53 .padding(.bottom, 8) 54 55 VStack(spacing: 4) { 56 Text("Direction") 57 .font(.caption) 58 .textCase(.uppercase) 59 .tracking(0.8) 60 .foregroundStyle(.secondary) 61 Text("Michael Camilleri") 62 .font(.subheadline) 63 .foregroundStyle(.primary) 64 } 65 } 66 .frame(maxWidth: .infinity) 67 .padding(.bottom, 4) 68 .listRowBackground(Color.clear) 69 .listRowSeparator(.hidden) 70 } 71 72 Section { 73 Link(destination: URL(string: "https://apps.inqk.net/crossmate")!) { 74 Label("Website", systemImage: "globe") 75 } 76 Link(destination: URL(string: "https://code.inqk.net/crossmate")!) { 77 Label("Source Code", systemImage: "chevron.left.forwardslash.chevron.right") 78 } 79 } 80 81 Section { 82 Text("Thank you to my wife, daughter and sons for their love and inspiration.") 83 .font(.subheadline) 84 .foregroundStyle(.secondary) 85 .multilineTextAlignment(.center) 86 .frame(maxWidth: .infinity) 87 .listRowBackground(Color.clear) 88 .listRowSeparator(.hidden) 89 } 90 } 91 .contentMargins(.top, 0, for: .scrollContent) 92 .navigationTitle("About") 93 .navigationBarTitleDisplayMode(.inline) 94 } 95 }