Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ DerivedData/
## Xcode user state
*.xcuserstate
*.xcscmblueprint
*.xcresult

## Obj-C/Swift specific
*.hmap
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,6 @@ Include the iOS version, device or simulator, and steps to reproduce. For weathe

- Migrate one `ObservableObject` view model to `@Observable`
- Replace `UIImpactFeedbackGenerator` / `UINotificationFeedbackGenerator` call sites with `.sensoryFeedback`
- Extract user-facing strings into a String Catalog (none exists yet, all copy is inline English)
- Add a new locale to the String Catalog (English and Spanish ship today)
- Split one of the remaining 600+ line views into focused subviews
- VoiceOver labels for weather cards, forecast charts, and trigger indicators
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ Captured on iOS 26 (iPhone). SunHat is iPhone-first. iPad, widget, and watch sur
|---|---|
| Xcode | 26+ |
| Swift | 6.2 |
| Minimum iOS | 26.0 |
| Minimum iOS | 26.5 |
| Dependencies | Google Mobile Ads + User Messaging Platform (SPM), for the ad-supported free tier. Everything else is Apple frameworks. |

No CocoaPods, no Carthage. The only SPM packages are Google Mobile Ads and its
Expand Down Expand Up @@ -161,7 +161,7 @@ Version 1.0, iPhone-first, preparing for App Store submission.

### Toolchain note

The project targets Xcode 26 and Swift 6.2, but it currently builds against the Xcode 27 beta, which is stricter about actor isolation for protocol conformances and introduced a `LinearGradient` `.opacity` ambiguity. Both are handled in-tree with comments. If you're on the released Xcode, the code still compiles.
The project builds with Xcode 26 and Swift 6.2. It also compiles against the Xcode 27 beta, which is stricter about actor isolation for protocol conformances and introduced a `LinearGradient` `.opacity` ambiguity; both are handled in-tree with comments.

CI runs on `macos-latest` via GitHub Actions. The build-for-testing step uses the `SunHatUnitTests` scheme.

Expand Down
2 changes: 1 addition & 1 deletion SunHat/AppIntents/SunHatShortcuts.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// SunHatShortcuts.swift
// SunHat
//
// Created by Codex on 6/27/26.
// Created by Wesley Keetch on 6/27/26.
//

import AppIntents
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Models/WeatherCondition+Display.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// WeatherCondition+Display.swift
// SunHat
//
// Created by Codex on 6/2/26.
// Created by Wesley Keetch on 6/2/26.
//

import SwiftUI
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// AppLifecyclePromptCoordinator.swift
// SunHat
//
// Created by Codex on 7/3/26.
// Created by Wesley Keetch on 7/3/26.
//

import Foundation
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Services/Location/LocationDisplayFormatter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// LocationDisplayFormatter.swift
// SunHat
//
// Created by Codex on 6/3/26.
// Created by Wesley Keetch on 6/3/26.
//

import CoreLocation
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Services/Location/LocationManaging.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// LocationManaging.swift
// SunHat
//
// Created by Codex on 6/2/26.
// Created by Wesley Keetch on 6/2/26.
//

import CoreLocation
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// SunHatNotificationCategoryRegistry.swift
// SunHat
//
// Created by Codex on 6/27/26.
// Created by Wesley Keetch on 6/27/26.
//

import Foundation
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Services/Routing/SunHatIntentHandoff.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// SunHatIntentHandoff.swift
// SunHat
//
// Created by Codex on 6/27/26.
// Created by Wesley Keetch on 6/27/26.
//

import Foundation
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Services/Search/SunHatSearchIndexer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// SunHatSearchIndexer.swift
// SunHat
//
// Created by Codex on 6/27/26.
// Created by Wesley Keetch on 6/27/26.
//

import CoreSpotlight
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// NotificationPermissionProviding.swift
// SunHat
//
// Created by Claude on 6/12/26.
// Created by Wesley Keetch on 6/12/26.
//

import Foundation
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Services/Settings/SettingsOpening.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// SettingsOpening.swift
// SunHat
//
// Created by Codex on 6/2/26.
// Created by Wesley Keetch on 6/2/26.
//

import Foundation
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Services/Weather/WeatherProviding.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// WeatherProviding.swift
// SunHat
//
// Created by Codex on 6/2/26.
// Created by Wesley Keetch on 6/2/26.
//

import Combine
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Utilities/Motion/SunHatMotion.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// SunHatMotion.swift
// SunHat
//
// Created by Codex on 6/27/26.
// Created by Wesley Keetch on 6/27/26.
//

import SwiftUI
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Utilities/Theme/SunHatAtmospherePalette.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// SunHatAtmospherePalette.swift
// SunHat
//
// Created by Codex on 7/3/26.
// Created by Wesley Keetch on 7/3/26.
//

import SwiftUI
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Utilities/Theme/SunHatSurfaceModifier.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// SunHatSurfaceModifier.swift
// SunHat
//
// Created by Codex on 7/2/26.
// Created by Wesley Keetch on 7/2/26.
//

import SwiftUI
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Utilities/Theme/WeatherBackdropPalette.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// WeatherBackdropPalette.swift
// SunHat
//
// Created by Codex on 7/3/26.
// Created by Wesley Keetch on 7/3/26.
//

import Foundation
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Views/Components/LiquidGlassFieldBackground.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// LiquidGlassFieldBackground.swift
// SunHat
//
// Created by Claude on 6/12/26.
// Created by Wesley Keetch on 6/12/26.
//

import SwiftUI
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Views/Components/SelectableTileLabel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// SelectableTileLabel.swift
// SunHat
//
// Created by Claude on 6/12/26.
// Created by Wesley Keetch on 6/12/26.
//

import SwiftUI
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Views/Components/SettingsIconLabel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// SettingsIconLabel.swift
// SunHat
//
// Created by Claude on 6/12/26.
// Created by Wesley Keetch on 6/12/26.
//

import SwiftUI
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Views/Components/SunHatProductComponents.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// SunHatProductComponents.swift
// SunHat
//
// Created by Codex on 6/28/26.
// Created by Wesley Keetch on 6/28/26.
//

import SwiftUI
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Views/Dashboard/DashboardComponents.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// DashboardComponents.swift
// SunHat
//
// Created by Codex on 6/2/26.
// Created by Wesley Keetch on 6/2/26.
//

import SwiftUI
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Views/Dashboard/SunHatForecastRibbon.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// SunHatForecastRibbon.swift
// SunHat
//
// Created by Codex on 7/3/26.
// Created by Wesley Keetch on 7/3/26.
//

import SwiftUI
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Views/Dashboard/SunHatWeatherDial.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// SunHatWeatherDial.swift
// SunHat
//
// Created by Codex on 7/3/26.
// Created by Wesley Keetch on 7/3/26.
//

import SwiftUI
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Views/Dashboard/WeatherHeroMetricPill.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// WeatherHeroMetricPill.swift
// SunHat
//
// Created by Codex on 7/3/26.
// Created by Wesley Keetch on 7/3/26.
//

import SwiftUI
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Views/Engagement/AppFeedbackFormView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// AppFeedbackFormView.swift
// SunHat
//
// Created by Codex on 7/3/26.
// Created by Wesley Keetch on 7/3/26.
//

import SwiftUI
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// LocationPickerCurrentLocationCard.swift
// SunHat
//
// Created by Codex on 7/3/26.
// Created by Wesley Keetch on 7/3/26.
//

import SwiftUI
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Views/Location/LocationPickerEmptyGuidance.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// LocationPickerEmptyGuidance.swift
// SunHat
//
// Created by Codex on 7/3/26.
// Created by Wesley Keetch on 7/3/26.
//

import SwiftUI
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Views/Location/LocationPickerSearchField.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// LocationPickerSearchField.swift
// SunHat
//
// Created by Codex on 7/3/26.
// Created by Wesley Keetch on 7/3/26.
//

import SwiftUI
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Views/Reminders/FilterChip.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// FilterChip.swift
// SunHat
//
// Created by Codex on 7/3/26.
// Created by Wesley Keetch on 7/3/26.
//

import SwiftUI
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Views/Reminders/ReminderGlassCard.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// ReminderGlassCard.swift
// SunHat
//
// Created by Codex on 7/3/26.
// Created by Wesley Keetch on 7/3/26.
//

import SwiftUI
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// StreamlinedCurrentWeatherSection.swift
// SunHat
//
// Created by Claude on 6/12/26.
// Created by Wesley Keetch on 6/12/26.
//

import SwiftUI
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// StreamlinedTimePreferencesSection.swift
// SunHat
//
// Created by Claude on 6/12/26.
// Created by Wesley Keetch on 6/12/26.
//

import SwiftUI
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// StreamlinedWeatherConditionsSection.swift
// SunHat
//
// Created by Claude on 6/12/26.
// Created by Wesley Keetch on 6/12/26.
//

import SwiftUI
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Views/Settings/QuietHoursTimeRow.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// QuietHoursTimeRow.swift
// SunHat
//
// Created by Codex on 7/3/26.
// Created by Wesley Keetch on 7/3/26.
//

import SwiftUI
Expand Down
2 changes: 1 addition & 1 deletion SunHat/Views/Settings/QuietHoursWindowPicker.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// QuietHoursWindowPicker.swift
// SunHat
//
// Created by Codex on 7/3/26.
// Created by Wesley Keetch on 7/3/26.
//

import SwiftUI
Expand Down
2 changes: 1 addition & 1 deletion SunHatTests/AppLifecyclePromptCoordinatorTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// AppLifecyclePromptCoordinatorTests.swift
// SunHatTests
//
// Created by Codex on 7/3/26.
// Created by Wesley Keetch on 7/3/26.
//

import Foundation
Expand Down
2 changes: 1 addition & 1 deletion SunHatTests/LocationDisplayFormatterTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// LocationDisplayFormatterTests.swift
// SunHatTests
//
// Created by Codex on 6/3/26.
// Created by Wesley Keetch on 6/3/26.
//

import Foundation
Expand Down