Real iPhone wallpaper + populated Favourites captures

- PreviewWallpaper image set: the actual iPhone wallpaper extracted from the
  iOS 26.3 sim runtime (ActionButtonSelector Display.ca, 1320x2870 native
  res, JPEG ~180 KB) — replaces the gradient backdrop in the widget mock
- -seedFavourite <substring> launch hook: pins the first matching station
  for Unleaded via the normal keychain+app-group save path, so the
  Favourites tab can be captured populated (Ring Road Service Station,
  129.9, 59.1 mi, TOP badge)
- Re-captured 2-favourites (light), 6-favourites-dark, 9-widgets-dark,
  10-widgets-light with real data
- 95/95 tests green; Release IPA rebuilt + re-served
This commit is contained in:
FuelBoard Contributor
2026-08-15 16:49:09 +01:00
parent 6369eef249
commit 015368faaf
11 changed files with 34 additions and 33 deletions
@@ -0,0 +1,13 @@
{
"images" : [
{
"filename" : "PreviewWallpaper.jpg",
"idiom" : "universal",
"scale" : "1x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

+10
View File
@@ -186,6 +186,16 @@ struct ContentView: View {
// without touching the stored flag.
let args = ProcessInfo.processInfo.arguments
showWidgetMock = args.contains("-widgets")
// `-seedFavourite <substring>` pins the first matching station
// for Unleaded via the normal save path (keychain + app group)
// so screenshot captures can show a populated Favourites tab.
if let i = args.firstIndex(of: "-seedFavourite"), i + 1 < args.count {
let query = args[i + 1]
if let station = FuelStore.loadStations()
.first(where: { $0.name.localizedCaseInsensitiveContains(query) }) {
FuelStore.saveFavourites([FavouriteEntry(station: station, fuel: .e10)])
}
}
if let i = args.firstIndex(of: "-tab"), i + 1 < args.count {
switch args[i + 1] {
case "favourites": selectedTab = 1
+9 -31
View File
@@ -6,11 +6,13 @@ import WidgetKit
/// code the widget extension renders) at small + medium sizes. Used for App
/// Store screenshot captures; not reachable from the UI.
struct WidgetMockScreen: View {
@Environment(\.colorScheme) private var colorScheme
var body: some View {
ZStack {
wallpaper
// Real iPhone wallpaper (extracted from the iOS 26.3 sim runtime
// ActionButtonSelector Display.ca asset, 1320×2870 native res).
Image("PreviewWallpaper")
.resizable()
.scaledToFill()
.ignoresSafeArea()
VStack(alignment: .leading, spacing: 26) {
@@ -23,10 +25,12 @@ struct WidgetMockScreen: View {
VStack(alignment: .leading, spacing: 3) {
Text("FuelBoard")
.font(.title2.bold())
.foregroundStyle(.primary)
.foregroundStyle(.white)
.shadow(radius: 2, y: 1)
Text("Cheapest fuel near you")
.font(.subheadline)
.foregroundStyle(.secondary)
.foregroundStyle(.white.opacity(0.9))
.shadow(radius: 2, y: 1)
}
}
.padding(.top, 8)
@@ -40,32 +44,6 @@ struct WidgetMockScreen: View {
}
}
/// iOS-default-style wallpaper (dark navy black in dark mode, soft
/// blue-grey in light), matching the system default look.
private var wallpaper: some View {
Group {
if colorScheme == .dark {
LinearGradient(
colors: [
Color(red: 0.09, green: 0.14, blue: 0.26),
Color(red: 0.05, green: 0.08, blue: 0.15),
Color(red: 0.02, green: 0.03, blue: 0.06)
],
startPoint: .topLeading, endPoint: .bottomTrailing
)
} else {
LinearGradient(
colors: [
Color(red: 0.72, green: 0.80, blue: 0.94),
Color(red: 0.85, green: 0.90, blue: 0.97),
Color(red: 0.94, green: 0.96, blue: 0.99)
],
startPoint: .topLeading, endPoint: .bottomTrailing
)
}
}
}
private func widgetCard(_ family: WidgetFamily, label: String) -> some View {
// Real widget proportions: system small content is 158×158pt,
// medium 338×158pt (card adds the 14pt padding each side).