Commit 7f96d43a4e
7f96d43a4e9c06618e0bef1cfdb1237fafedf78d
parent: 19fe0d0d89
Unsigned
cmc <hello@cleberg.net> · 2026-10-18 08:51 UTC
v2: iPad (!26)
- iPad device family; all orientations on iPad.
- =.tabViewStyle(.sidebarAdaptable)=; reading screens capped at 720 pt, first run at 560 pt.
Checked on an iPad Pro 13-inch simulator (iOS 27): first run, sky full screen, top tab bar, Library with search. iPhone build unchanged.
Layout: unified · split
App/Sources/LaunchesScreen.swift
+1
| @@ -36,6 +36,7 @@ struct LaunchesScreen: View { |
| 36 | 36 | } |
| 37 | 37 | } |
| 38 | 38 | .padding(.horizontal, 20) |
| 39 | .readableWidth() |
| 39 | 40 | } |
| 40 | 41 | .foregroundStyle(ink) |
| 41 | 42 | .background(background.ignoresSafeArea()) |
App/Sources/LibraryScreen.swift
+1
| @@ -98,6 +98,7 @@ struct LibraryPageView: View { |
| 98 | 98 | } |
| 99 | 99 | .padding(.horizontal, 20) |
| 100 | 100 | .frame(maxWidth: .infinity, alignment: .leading) |
| 101 | .readableWidth() |
| 101 | 102 | } |
| 102 | 103 | .foregroundStyle(ink) |
| 103 | 104 | .background(pageBackground.ignoresSafeArea()) |
App/Sources/MoonriseApp.swift
+1
| @@ -22,6 +22,7 @@ struct MoonriseApp: App { |
| 22 | 22 | Tab("Launches", systemImage: "airplane.departure", value: "launches") { LaunchesScreen() } |
| 23 | 23 | Tab("Library", systemImage: "books.vertical", value: "library") { LibraryScreen() } |
| 24 | 24 | } |
| 25 | .tabViewStyle(.sidebarAdaptable) |
| 25 | 26 | // Red tab highlight while the Sky tab is in night mode. |
| 26 | 27 | .tint(tab == "sky" && nightActive ? SkyStyle.nightRed : nil) |
| 27 | 28 | .preferredColorScheme(.dark) |
App/Sources/OnboardingScreen.swift
+3 −1
| @@ -20,7 +20,7 @@ struct OnboardingScreen: View { |
| 20 | 20 | Rectangle().fill(accent).frame(width: 48, height: 5).padding(.top, 10).padding(.bottom, 24) |
| 21 | 21 | VStack(alignment: .leading, spacing: 14) { |
| 22 | 22 | Text("The sky above you tonight, the Sun today, launches, the solar system, and a library of everything up there.") |
| 23 | | Text("To draw the sky for where you are, Moonrise uses your location. It is used on this phone to work out positions and is not sent to us or anyone else.") |
| 23 | Text("To draw the sky for where you are, Moonrise uses your location. It is used on this device to work out positions and is not sent to us or anyone else.") |
| 24 | 24 | .foregroundStyle(ink.opacity(0.75)) |
| 25 | 25 | } |
| 26 | 26 | .font(.body) |
| @@ -49,6 +49,8 @@ struct OnboardingScreen: View { |
| 49 | 49 | } |
| 50 | 50 | .padding(.horizontal, 24) |
| 51 | 51 | .padding(.bottom, 24) |
| 52 | .frame(maxWidth: 560) |
| 53 | .frame(maxWidth: .infinity) |
| 52 | 54 | .foregroundStyle(ink) |
| 53 | 55 | .background(background.ignoresSafeArea()) |
| 54 | 56 | } |
App/Sources/ReadableWidth.swift
added
+8
| @@ -0,0 +1,8 @@ |
| 1 | import SwiftUI |
| 2 | |
| 3 | extension View { |
| 4 | /// Keeps text columns to a comfortable reading width on iPad, centred. |
| 5 | func readableWidth() -> some View { |
| 6 | frame(maxWidth: 720).frame(maxWidth: .infinity) |
| 7 | } |
| 8 | } |
App/Sources/SunScreen.swift
+1
| @@ -41,6 +41,7 @@ struct SunScreen: View { |
| 41 | 41 | Text("Space weather data: NOAA Space Weather Prediction Center. Coastlines: Natural Earth.").font(.caption2).dimmed(0.5).padding(.vertical, 16) |
| 42 | 42 | } |
| 43 | 43 | .padding(.horizontal, 20) |
| 44 | .readableWidth() |
| 44 | 45 | } |
| 45 | 46 | .foregroundStyle(ink) |
| 46 | 47 | .background(background.ignoresSafeArea()) |
App/Sources/SystemScreen.swift
+1
| @@ -93,6 +93,7 @@ struct SystemScreen: View { |
| 93 | 93 | .font(.caption2).dimmed(0.5).padding(.vertical, 16) |
| 94 | 94 | } |
| 95 | 95 | .padding(.horizontal, 20) |
| 96 | .readableWidth() |
| 96 | 97 | } |
| 97 | 98 | .foregroundStyle(ink) |
| 98 | 99 | .background(background.ignoresSafeArea()) |
App/project.yml
+5 −4
| @@ -46,7 +46,7 @@ targets: |
| 46 | 46 | DEVELOPMENT_TEAM: ZCNAX3VL9D |
| 47 | 47 | CODE_SIGN_STYLE: Automatic |
| 48 | 48 | SWIFT_VERSION: "6.0" |
| 49 | | TARGETED_DEVICE_FAMILY: "1" |
| 49 | TARGETED_DEVICE_FAMILY: "1,2" |
| 50 | 50 | MARKETING_VERSION: "1.0" |
| 51 | 51 | CURRENT_PROJECT_VERSION: "1" |
| 52 | 52 | GENERATE_INFOPLIST_FILE: YES |
| @@ -58,7 +58,8 @@ targets: |
| 58 | 58 | ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon |
| 59 | 59 | INFOPLIST_KEY_UILaunchScreen_Generation: YES |
| 60 | 60 | INFOPLIST_KEY_UIStatusBarStyle: UIStatusBarStyleLightContent |
| 61 | | INFOPLIST_KEY_UISupportedInterfaceOrientations: UIInterfaceOrientationPortrait |
| 61 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone: UIInterfaceOrientationPortrait |
| 62 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad: UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight |
| 62 | 63 | INFOPLIST_KEY_NSLocationWhenInUseUsageDescription: Moonrise uses your location to draw the sky above you. |
| 63 | 64 | MoonriseWidgets: |
| 64 | 65 | type: app-extension |
| @@ -84,7 +85,7 @@ targets: |
| 84 | 85 | DEVELOPMENT_TEAM: ZCNAX3VL9D |
| 85 | 86 | CODE_SIGN_STYLE: Automatic |
| 86 | 87 | SWIFT_VERSION: "6.0" |
| 87 | | TARGETED_DEVICE_FAMILY: "1" |
| 88 | TARGETED_DEVICE_FAMILY: "1,2" |
| 88 | 89 | MARKETING_VERSION: "1.0" |
| 89 | 90 | CURRENT_PROJECT_VERSION: "1" |
| 90 | 91 | MoonriseUITests: |
| @@ -99,5 +100,5 @@ targets: |
| 99 | 100 | DEVELOPMENT_TEAM: ZCNAX3VL9D |
| 100 | 101 | CODE_SIGN_STYLE: Automatic |
| 101 | 102 | SWIFT_VERSION: "5.0" |
| 102 | | TARGETED_DEVICE_FAMILY: "1" |
| 103 | TARGETED_DEVICE_FAMILY: "1,2" |
| 103 | 104 | GENERATE_INFOPLIST_FILE: YES |