From 65b2e8bbf1bd0490d4ebf83e525f60ab441f1d4e Mon Sep 17 00:00:00 2001 From: Considus Date: Thu, 23 Jul 2026 18:56:34 +0100 Subject: [PATCH] Mid-point review cleanup: iPhone-only, retire dead weight, fix stale comments - TARGETED_DEVICE_FAMILY "1" (owner 2026-07-23): iPad is not in scope; XcodeGen's default silently opted us into iPad review + screenshots. - Retire launch-splash.imageset (storyboard launch screen device-confirmed; the asset's own comment said to remove it). - Remove DailiesGlyph/DailiesGlyphShape (unused since Important moved to ImportantGlyph, owner 2026-07-06). - Remove scrollToTakeID (write-only since the UIKit timeline replaced the ScrollViewReader at M7; the editor now keyboard-anchors instead) and its stale load-bearing comments. - Fix stale comments: NewObieIntent IS shared into the widget extension; Quadrant.important Night doc-comment now cites the confirmed #E0D9CE. Co-Authored-By: Claude Fable 5 --- Catchlight/Intents/NewObieIntent.swift | 5 +- .../launch-splash.imageset/Contents.json | 26 ----- .../launch-splash.imageset/Splash_Dark.svg | 91 ------------------ .../launch-splash.imageset/Splash_Light.svg | 94 ------------------- Catchlight/UI/Theme/CatchlightGlyphs.swift | 27 +----- Catchlight/UI/Theme/CatchlightTheme.swift | 2 +- Catchlight/UI/Views/DailiesView.swift | 16 ---- project.yml | 8 +- 8 files changed, 11 insertions(+), 258 deletions(-) delete mode 100644 Catchlight/Resources/Assets.xcassets/launch-splash.imageset/Contents.json delete mode 100644 Catchlight/Resources/Assets.xcassets/launch-splash.imageset/Splash_Dark.svg delete mode 100644 Catchlight/Resources/Assets.xcassets/launch-splash.imageset/Splash_Light.svg diff --git a/Catchlight/Intents/NewObieIntent.swift b/Catchlight/Intents/NewObieIntent.swift index 2ce8c78..74bb8c6 100644 --- a/Catchlight/Intents/NewObieIntent.swift +++ b/Catchlight/Intents/NewObieIntent.swift @@ -8,8 +8,9 @@ // upsert demotes the previous Obie on save (owner 2026-06-23 — set it in process, // remove the old, no confirmation). // -// App-target only (not shared into the widget extension) — there is no Obie -// Control/widget yet; the routing supports one as a drop-in if wanted later. +// Shared into the widget extension (see project.yml's CatchlightWidgets sources) +// — the Obie Control, launcher widget, and split widget all fire it via +// `Button(intent:)`. // import AppIntents diff --git a/Catchlight/Resources/Assets.xcassets/launch-splash.imageset/Contents.json b/Catchlight/Resources/Assets.xcassets/launch-splash.imageset/Contents.json deleted file mode 100644 index 621bd2b..0000000 --- a/Catchlight/Resources/Assets.xcassets/launch-splash.imageset/Contents.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "images" : [ - { - "filename" : "Splash_Light.svg", - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "filename" : "Splash_Dark.svg", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "preserves-vector-representation" : true, - "template-rendering-intent" : "original" - } -} diff --git a/Catchlight/Resources/Assets.xcassets/launch-splash.imageset/Splash_Dark.svg b/Catchlight/Resources/Assets.xcassets/launch-splash.imageset/Splash_Dark.svg deleted file mode 100644 index 080ceae..0000000 --- a/Catchlight/Resources/Assets.xcassets/launch-splash.imageset/Splash_Dark.svg +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Catchlight/Resources/Assets.xcassets/launch-splash.imageset/Splash_Light.svg b/Catchlight/Resources/Assets.xcassets/launch-splash.imageset/Splash_Light.svg deleted file mode 100644 index 454a7de..0000000 --- a/Catchlight/Resources/Assets.xcassets/launch-splash.imageset/Splash_Light.svg +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Catchlight/UI/Theme/CatchlightGlyphs.swift b/Catchlight/UI/Theme/CatchlightGlyphs.swift index e1ee489..3932350 100644 --- a/Catchlight/UI/Theme/CatchlightGlyphs.swift +++ b/Catchlight/UI/Theme/CatchlightGlyphs.swift @@ -5,8 +5,6 @@ // Custom meaning-led glyphs from the icon refinement pass (HiFi v1.6 §-wide): // • ImportantGlyph — an exclamation "!" (stem + dot): the app-wide Important mark // (owner 2026-07-06; replaced the two-Iris glyph, matches the site). -// • DailiesGlyph — two Irises joined by the spine (the timeline motif). Currently -// unused — Important moved to ImportantGlyph — kept for reuse. // • SequenceGlyph — three smaller beads chained on the spine: a SEQUENCE // of Takes (sibling concept to Dailies). // • ObieGlyph — the Obie brand logo (solid italic "O" + catch-dot), the @@ -17,19 +15,6 @@ import SwiftUI -/// Two Irises on the spine (Dailies). Stroke-only; colour via .foregroundStyle. -struct DailiesGlyphShape: Shape { - func path(in rect: CGRect) -> Path { - let u = min(rect.width, rect.height) / 16 - var p = Path() - p.addEllipse(in: CGRect(x: (8 - 2.3) * u, y: (4.3 - 2.3) * u, width: 4.6 * u, height: 4.6 * u)) - p.move(to: CGPoint(x: 8 * u, y: 6.9 * u)) - p.addLine(to: CGPoint(x: 8 * u, y: 9.1 * u)) - p.addEllipse(in: CGRect(x: (8 - 2.3) * u, y: (11.7 - 2.3) * u, width: 4.6 * u, height: 4.6 * u)) - return p - } -} - /// Three beads chained on the spine (Sequence). struct SequenceGlyphShape: Shape { func path(in rect: CGRect) -> Path { @@ -47,15 +32,6 @@ struct SequenceGlyphShape: Shape { } /// Convenience views matching the dock's SF Symbol sizing (icon box ~20pt). -struct DailiesGlyph: View { - var size: CGFloat = 20 - var body: some View { - DailiesGlyphShape() - .stroke(style: StrokeStyle(lineWidth: size * 1.2 / 16, lineCap: .round)) - .frame(width: size, height: size) - } -} - struct SequenceGlyph: View { var size: CGFloat = 20 var body: some View { @@ -106,7 +82,7 @@ struct TaskCheckbox: View { } /// The Important mark — an exclamation "!" (owner 2026-07-06, outline form 2026-07-06). -/// Replaces the two-Iris `DailiesGlyph` as the app-wide Important glyph, matching the +/// Replaces the earlier two-Iris glyph as the app-wide Important glyph, matching the /// redesigned marketing site where Important is a "!". Drawn as a STROKED OUTLINE — a /// tapered stem (rounded top corners, narrowing to a rounded foot) above a ring dot — at /// the house `1.2`-unit weight with round caps/joins, so it sits beside the other line @@ -238,7 +214,6 @@ extension EnvironmentValues { HStack(spacing: 24) { ImportantGlyph().foregroundStyle(Color.ckEmber) ImportantGlyphSlashed().foregroundStyle(Color.ckEmber) - DailiesGlyph().foregroundStyle(Color.ckEmber) SequenceGlyph().foregroundStyle(Color.ckEmber) ObieGlyph().foregroundStyle(Color.ckTextObie) } diff --git a/Catchlight/UI/Theme/CatchlightTheme.swift b/Catchlight/UI/Theme/CatchlightTheme.swift index e95407b..f00def3 100644 --- a/Catchlight/UI/Theme/CatchlightTheme.swift +++ b/Catchlight/UI/Theme/CatchlightTheme.swift @@ -316,7 +316,7 @@ enum Quadrant { /// Important — the Iris North wedge (owner 2026-06-20, indicator only). Uses the /// two previously-unused brand swatches, paired for legibility per mode: Shadow - /// #0A0908 (near-black, ~20:1 on the white card) in Daylight, Stone #E7E1D5 + /// #0A0908 (near-black, ~20:1 on the white card) in Daylight, Stone #E0D9CE /// (light warm stone, light-on-dark) in Night. Shown on an Obie too (an Obie /// auto-flags Important; owner wants the flag visible there alongside the ring). static func important(_ scheme: ColorScheme) -> Color { diff --git a/Catchlight/UI/Views/DailiesView.swift b/Catchlight/UI/Views/DailiesView.swift index 0d2e4e9..6f245ae 100644 --- a/Catchlight/UI/Views/DailiesView.swift +++ b/Catchlight/UI/Views/DailiesView.swift @@ -141,10 +141,6 @@ struct DailiesView: View { /// Delete on a recurring reminder asks "this occurrence" vs "the whole series" /// rather than deleting outright; nil when no such prompt is up. @State private var pendingRecurringDelete: Take? - /// One-shot scroll target — set to bring a Take into view (e.g. a new Take that - /// landed at the bottom under Oldest-first). The timeline's ScrollViewReader - /// consumes and clears it. - @State private var scrollToTakeID: UUID? /// Bloom progress (0→1) for the in-place NEW Take's "appear". Driven explicitly /// (scale+opacity on the row) rather than via a LazyVStack insertion transition, /// which doesn't animate reliably. 1 at rest so existing rows are unaffected. @@ -1232,11 +1228,6 @@ struct DailiesView: View { editDraft = t editFocusedBlockID = t.blocks.last?.id ui.beginEditingInPlace(take) - // Lift the Take above the keyboard via the same one-shot target the new-Take - // and fan paths use (owner 2026-06-19). Previously an existing Take set no - // target and leaned on iOS's native avoidance, which scrolled it up only a - // little — "nowhere near enough" when it started below the keyboard line. - scrollToTakeID = take.id } /// Create a NEW Take in place (Phase 2): seed the blank draft, inject it into the @@ -1371,13 +1362,6 @@ struct DailiesView: View { let refocus = newTaskEntryID ?? d.blocks.first?.id editFocusedBlockID = nil if let refocus { - // Bring the Take above the rising keyboard (owner 2026-06-19): the ring - // closed with the keyboard down, and re-focusing raises it again. Without - // a scroll target the Take can sit under the keyboard — e.g. a new Take - // just reshaped to a Task, sorted to the bottom under Oldest-first. Same - // one-shot target the new-Take flow uses; the keyboardDidShow handler - // settles it to the low anchor against the keyboard-reduced viewport. - scrollToTakeID = d.id DispatchQueue.main.async { editFocusedBlockID = refocus } } } diff --git a/project.yml b/project.yml index fced620..6756105 100644 --- a/project.yml +++ b/project.yml @@ -24,6 +24,10 @@ options: settings: base: SWIFT_VERSION: "5.9" + # iPhone-only (owner 2026-07-23): iPad is not yet in scope — nothing has been + # designed or validated for it, and XcodeGen's default ("1,2") silently opted + # us into iPad App Review + iPad screenshot requirements. + TARGETED_DEVICE_FAMILY: "1" DEVELOPMENT_TEAM: YTPP9HU9F9 # Mark Stradling (brief §3.1) MARKETING_VERSION: "1.0.0" CURRENT_PROJECT_VERSION: "1" @@ -93,8 +97,8 @@ targets: - "CormorantGaramond-Italic[wght].ttf" - "DMSans[opsz,wght].ttf" # Launch screen = LaunchScreen.storyboard (owner 2026-06-15), replacing the - # earlier UILaunchScreen dict + centred composite (launch-splash.imageset, - # now unused — retire once the storyboard is device-confirmed). A storyboard + # earlier UILaunchScreen dict + centred composite (its launch-splash.imageset + # retired 2026-07-23, storyboard device-confirmed). A storyboard # also opts into modern full-screen scene sizing (the gotcha-#1 requirement) # but, unlike the dict's single CENTRED image, it can pin the real # catchlight-icon + catchlight-wordmark assets to the EXACT geometry of the