From 2c607553ac0e227c3e8db4310b7d2f1c169e2c33 Mon Sep 17 00:00:00 2001 From: NinjaCheetah <58050615+NinjaCheetah@users.noreply.github.com> Date: Wed, 17 Sep 2025 22:38:09 -0400 Subject: [PATCH] Added donation view It seems reasonable to ask for some money here or there, since my Apple Developer Program membership was quite expensive just for this app --- RIT Dining.xcodeproj/project.pbxproj | 14 ++- RIT Dining/AboutView.swift | 29 ----- .../kofiLogo.imageset/Contents.json | 12 ++ .../kofiLogo.imageset/kofiLogo.png | Bin 0 -> 21904 bytes .../paypalLogo.imageset/Contents.json | 12 ++ .../paypalLogo.imageset/paypalLogo.png | Bin 0 -> 15502 bytes RIT Dining/ContentView.swift | 20 +++- RIT Dining/{ => Data}/FetchData.swift | 0 RIT Dining/{ => Data}/Types.swift | 0 RIT Dining/SharedComponents.swift | 7 ++ RIT Dining/Views/AboutView.swift | 46 ++++++++ RIT Dining/{ => Views}/DetailView.swift | 0 RIT Dining/Views/DonationView.swift | 109 ++++++++++++++++++ RIT Dining/{ => Views}/VisitingChefs.swift | 0 14 files changed, 216 insertions(+), 33 deletions(-) delete mode 100644 RIT Dining/AboutView.swift create mode 100644 RIT Dining/Assets.xcassets/kofiLogo.imageset/Contents.json create mode 100644 RIT Dining/Assets.xcassets/kofiLogo.imageset/kofiLogo.png create mode 100644 RIT Dining/Assets.xcassets/paypalLogo.imageset/Contents.json create mode 100644 RIT Dining/Assets.xcassets/paypalLogo.imageset/paypalLogo.png rename RIT Dining/{ => Data}/FetchData.swift (100%) rename RIT Dining/{ => Data}/Types.swift (100%) create mode 100644 RIT Dining/Views/AboutView.swift rename RIT Dining/{ => Views}/DetailView.swift (100%) create mode 100644 RIT Dining/Views/DonationView.swift rename RIT Dining/{ => Views}/VisitingChefs.swift (100%) diff --git a/RIT Dining.xcodeproj/project.pbxproj b/RIT Dining.xcodeproj/project.pbxproj index 2d9fd7a..70336ab 100644 --- a/RIT Dining.xcodeproj/project.pbxproj +++ b/RIT Dining.xcodeproj/project.pbxproj @@ -78,7 +78,7 @@ attributes = { BuildIndependentTargetsInParallel = 1; LastSwiftUpdateCheck = 1640; - LastUpgradeCheck = 1640; + LastUpgradeCheck = 2600; TargetAttributes = { 376AE05A2E6495EB00AB698B = { CreatedOnToolsVersion = 16.4; @@ -186,6 +186,7 @@ MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; + STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; @@ -243,6 +244,7 @@ MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = iphoneos; + STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_COMPILATION_MODE = wholemodule; VALIDATE_PRODUCT = YES; }; @@ -255,10 +257,13 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 6; + CURRENT_PROJECT_VERSION = 8; DEVELOPMENT_TEAM = 5GF7GKNTK4; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = "RIT Dining"; + INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES; @@ -286,10 +291,13 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 6; + CURRENT_PROJECT_VERSION = 8; DEVELOPMENT_TEAM = 5GF7GKNTK4; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = "RIT Dining"; + INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES; diff --git a/RIT Dining/AboutView.swift b/RIT Dining/AboutView.swift deleted file mode 100644 index 3750ffd..0000000 --- a/RIT Dining/AboutView.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// AboutView.swift -// RIT Dining -// -// Created by Campbell on 9/12/25. -// - -import SwiftUI - -struct AboutView: View { - var body: some View { - VStack { - Image("Icon") - .resizable() - .frame(width: 128, height: 128) - .clipShape(RoundedRectangle(cornerRadius: 20)) - Text("RIT Dining App") - .font(.title) - Text("because the RIT dining website is slow!") - } - .padding() - .navigationTitle("About") - .navigationBarTitleDisplayMode(.inline) - } -} - -#Preview { - AboutView() -} diff --git a/RIT Dining/Assets.xcassets/kofiLogo.imageset/Contents.json b/RIT Dining/Assets.xcassets/kofiLogo.imageset/Contents.json new file mode 100644 index 0000000..4c7e18a --- /dev/null +++ b/RIT Dining/Assets.xcassets/kofiLogo.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "kofiLogo.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/RIT Dining/Assets.xcassets/kofiLogo.imageset/kofiLogo.png b/RIT Dining/Assets.xcassets/kofiLogo.imageset/kofiLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..4f93bdbaa08627c684269eb751dc05b6007d84f3 GIT binary patch literal 21904 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%0Dk_YTlX45+)Z>7reUU*xHB5QlSP6bA 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 R7M4tftWP_bGyd?s{vWpcq>KOn literal 0 HcmV?d00001 diff --git a/RIT Dining/Assets.xcassets/paypalLogo.imageset/Contents.json b/RIT Dining/Assets.xcassets/paypalLogo.imageset/Contents.json new file mode 100644 index 0000000..e83eb80 --- /dev/null +++ b/RIT Dining/Assets.xcassets/paypalLogo.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "paypalLogo.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/RIT Dining/Assets.xcassets/paypalLogo.imageset/paypalLogo.png b/RIT Dining/Assets.xcassets/paypalLogo.imageset/paypalLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..df9941120713e060bed0597d291b760d4e485bd7 GIT binary patch literal 15502 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 String { formatter.dateFormat = "yyyy-MM-dd" return formatter.string(from: date) } + + +// Custom view extension that just applies modifiers in a block to the object it's applied to. Mostly useful for splitting up conditional +// modifiers that should only be applied for certain OS versions. +extension View { + func apply(@ViewBuilder _ block: (Self) -> V) -> V { block(self) } +} diff --git a/RIT Dining/Views/AboutView.swift b/RIT Dining/Views/AboutView.swift new file mode 100644 index 0000000..85080e5 --- /dev/null +++ b/RIT Dining/Views/AboutView.swift @@ -0,0 +1,46 @@ +// +// AboutView.swift +// RIT Dining +// +// Created by Campbell on 9/12/25. +// + +import SwiftUI + +struct AboutView: View { + @Environment(\.openURL) private var openURL + let appVersionString: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String + let buildNumber: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String + + var body: some View { + VStack { + Image("Icon") + .resizable() + .frame(width: 128, height: 128) + .clipShape(RoundedRectangle(cornerRadius: 20)) + Text("RIT Dining App") + .font(.title) + Text("because the RIT dining website is slow!") + Text("Version \(appVersionString) (\(buildNumber))") + .foregroundStyle(.secondary) + Spacer() + Button(action: { + openURL(URL(string: "https://github.com/NinjaCheetah/RIT-Dining")!) + }) { + Label("GitHub Repository", systemImage: "globe") + } + Button(action: { + openURL(URL(string: "https://tigercenter.rit.edu/")!) + }) { + Label("TigerCenter API", systemImage: "globe") + } + } + .padding() + .navigationTitle("About") + .navigationBarTitleDisplayMode(.inline) + } +} + +#Preview { + AboutView() +} diff --git a/RIT Dining/DetailView.swift b/RIT Dining/Views/DetailView.swift similarity index 100% rename from RIT Dining/DetailView.swift rename to RIT Dining/Views/DetailView.swift diff --git a/RIT Dining/Views/DonationView.swift b/RIT Dining/Views/DonationView.swift new file mode 100644 index 0000000..ae6498d --- /dev/null +++ b/RIT Dining/Views/DonationView.swift @@ -0,0 +1,109 @@ +// +// DonationView.swift +// RIT Dining +// +// Created by Campbell on 9/17/25. +// + +import SwiftUI + +struct DonationView: View { + @Environment(\.dismiss) var dismiss + @Environment(\.openURL) private var openURL + @State private var symbolDrawn: Bool = true + + var body: some View { + NavigationView { + VStack(alignment: .center, spacing: 12) { + HStack { + if #available(iOS 26.0, *) { + Image(systemName: "heart.fill") + .foregroundStyle(.red) + .symbolEffect(.drawOn, isActive: symbolDrawn) + .onAppear { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.75) { + symbolDrawn = false + } + } + } else { + Image(systemName: "heart.fill") + .foregroundStyle(.red) + } + Text("Donate") + .fontWeight(.bold) + } + .font(.title) + Text("The RIT Dining app is free and open source software!") + .fontWeight(.bold) + .multilineTextAlignment(.center) + Text("However, the Apple Developer Program is expensive, and I paid $106.19 pretty much just to distribute this app and nothing else. If you can, I'd appreciate it if you wouldn't mind tossing a coin or two my way to help and make that expense a little less painful.") + .multilineTextAlignment(.center) + Text("No pressure though.") + .foregroundStyle(.secondary) + Button(action: { + openURL(URL(string: "https://ko-fi.com/ninjacheetah")!) + }) { + HStack(alignment: .center) { + Image("kofiLogo") + .resizable() + .frame(width: 50, height: 50) + .clipShape(RoundedRectangle(cornerRadius: 10)) + VStack(alignment: .leading) { + Text("Tip Me on Ko-fi") + .fontWeight(.bold) + Text("Chip in as much or as little as you'd like!") + .foregroundStyle(.secondary) + .multilineTextAlignment(.leading) + } + Spacer() + Image(systemName: "chevron.forward") + } + .padding(.all, 6) + .background ( + RoundedRectangle(cornerRadius: 8) + .fill(Color.secondary.opacity(0.1)) + ) + } + .buttonStyle(.plain) + Button(action: { + openURL(URL(string: "paypal.me/NinjaCheetahX")!) + }) { + HStack(alignment: .center) { + Image("paypalLogo") + .resizable() + .frame(width: 50, height: 50) + .clipShape(RoundedRectangle(cornerRadius: 10)) + VStack(alignment: .leading) { + Text("Send Me Money Directly") + .fontWeight(.bold) + Text("I have nothing specific to say here!") + .foregroundStyle(.secondary) + .multilineTextAlignment(.leading) + } + Spacer() + Image(systemName: "chevron.forward") + } + .padding(.all, 6) + .background ( + RoundedRectangle(cornerRadius: 8) + .fill(Color.secondary.opacity(0.1)) + ) + } + .buttonStyle(.plain) + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + .toolbar { + Button(action: { + dismiss() + }) { + Image(systemName: "xmark") + } + } + } + .padding(.horizontal, 10) + } +} + +#Preview { + DonationView() +} diff --git a/RIT Dining/VisitingChefs.swift b/RIT Dining/Views/VisitingChefs.swift similarity index 100% rename from RIT Dining/VisitingChefs.swift rename to RIT Dining/Views/VisitingChefs.swift