From d44eb8628764fca1a47d67092ad97ee912260029 Mon Sep 17 00:00:00 2001 From: Kyle Van Essen Date: Fri, 16 Oct 2026 07:01:59 -0700 Subject: [PATCH 01/12] Support Duo runtime and adaptive snapshot hosting --- .circleci/config.yml | 20 - .github/workflows/ci.yml | 1 + AGENTS.md | 6 +- Package.swift | 2 +- Project.swift | 736 +---------------- .../Tests/StuffTestHostSmokeTests.swift | 1 + ...periscopeViewer.PeriscopeViewer_iPhone.png | 4 +- Shared/SnapshotKit/AGENTS.md | 16 +- .../Documentation/DuoMeasurements.json | 506 ++++++++++++ Shared/SnapshotKit/README.md | 60 +- .../SnapshotConfiguration+Traits.swift | 55 +- .../Sources/SnapshotConfiguration.swift | 92 ++- .../Sources/SnapshotDuoFrames.swift | 49 ++ .../Sources/SnapshotLayoutTraits.swift | 98 +++ .../SnapshotKit/Sources/SnapshotTraits.swift | 39 +- .../Tests/SnapshotConfigurationTests.swift | 52 +- .../Tests/SnapshotDuoFramesTests.swift | 38 + .../Tests/SnapshotLayoutTraitsTests.swift | 52 ++ .../Tests/SnapshotTraitsTests.swift | 13 +- Shared/SnapshotKitTesting/AGENTS.md | 9 +- Shared/SnapshotKitTesting/README.md | 52 +- .../Sources/AssertComparisonSnapshots.swift | 1 - .../Sources/AssertSnapshots.swift | 66 +- .../Sources/CaptureConfiguredSnapshot.swift | 60 +- .../Sources/SnapshotCaptureLock.swift | 20 +- .../Sources/SnapshotCaptureRetry.swift | 10 +- .../Sources/SnapshotHostingController.swift | 31 +- .../Sources/SnapshotImageGrid.swift | 109 +-- .../Sources/SnapshotImageRendering.swift | 101 ++- .../Sources/SnapshotPNG.swift | 39 +- .../Tests/AssertSnapshotsTests.swift | 288 ++++++- .../Tests/LargeViewCaptureTests.swift | 111 ++- .../Tests/SafeAreaCompositionTests.swift | 54 ++ .../Tests/SnapshotFixtureTestSupport.swift | 46 ++ .../Tests/SnapshotImageRenderingTests.swift | 95 +++ .../Tests/SnapshotPNGTests.swift | 6 +- Shared/StuffTestHost/AGENTS.md | 1 + Shared/StuffTestHost/README.md | 6 +- .../StuffTestHost/Sources/SceneDelegate.swift | 9 +- Shared/TestHostSupport/AGENTS.md | 1 + Shared/TestHostSupport/README.md | 1 + .../Sources/TestHostSupport.swift | 19 + Tools/AGENTS.md | 3 + Tools/README.md | 111 --- Tools/Tests/simulator_command_test.rb | 7 +- Tools/Tests/test_snapshot_shards.py | 68 ++ Tools/snapshot_shards.py | 31 +- Where/WhereUI/AGENTS.md | 1 + Where/WhereUI/README.md | 3 + .../about.Default_iPad.png | 4 +- .../about.Default_iPad_accessibility.png | 4 +- .../about.Default_iPad_dark.png | 4 +- .../other/about.Default_iPad_ax5.png | 4 +- .../other/about.Default_iPad_contrast.png | 4 +- .../appIcon.Default_iPhone_accessibility.png | 4 +- .../appIcon.Default_iPhone_dark.png | 4 +- .../other/appIcon.Default_iPhone_ax5.png | 4 +- .../other/appIcon.Default_iPhone_contrast.png | 4 +- .../data.Default_iPad.png | 4 +- .../data.Default_iPad_dark.png | 4 +- .../other/data.Default_iPad_ax5.png | 4 +- .../other/data.Default_iPad_contrast.png | 4 +- ...loperOverlay.MenuBottomTrailing_iPhone.png | 4 +- ...Overlay.MenuBottomTrailing_iPhone_dark.png | 4 +- ...developerOverlay.MenuTopLeading_iPhone.png | 4 +- .../devices.Default_iPad.png | 4 +- .../devices.Default_iPad_dark.png | 4 +- .../other/devices.Default_iPad_contrast.png | 4 +- .../flightDayDetail.Default_iPad.png | 4 +- ...htDayDetail.Default_iPad_accessibility.png | 4 +- .../flightDayDetail.Default_iPad_dark.png | 4 +- .../flightDayDetail.MixedFlights_iPad.png | 4 +- ...Detail.MixedFlights_iPad_accessibility.png | 4 +- ...flightDayDetail.MixedFlights_iPad_dark.png | 4 +- .../flightDayDetail.Default_iPad_ax5.png | 4 +- .../flightDayDetail.Default_iPad_contrast.png | 4 +- .../flightDayDetail.MixedFlights_iPad_ax5.png | 4 +- ...htDayDetail.MixedFlights_iPad_contrast.png | 4 +- .../flightReviewPointRow.Gap_iPad_dark.png | 4 +- .../license.Default_iPad.png | 4 +- .../license.Default_iPad_accessibility.png | 4 +- .../license.Default_iPad_dark.png | 4 +- .../license.Default_iPhone.png | 4 +- .../license.Default_iPhone_accessibility.png | 4 +- .../license.Default_iPhone_dark.png | 4 +- .../license.NoNotice_iPhone.png | 4 +- .../license.NoNotice_iPhone_dark.png | 4 +- .../other/license.Default_iPad_ax5.png | 4 +- .../other/license.Default_iPad_contrast.png | 4 +- .../other/license.Default_iPhone_ax5.png | 4 +- .../other/license.Default_iPhone_contrast.png | 4 +- .../loggedDays.Empty_iPhone.png | 4 +- .../loggedDays.Empty_iPhone_dark.png | 4 +- .../loggedDays.Failed_iPhone.png | 4 +- .../loggedDays.Failed_iPhone_dark.png | 4 +- .../loggedDays.Loaded_iPhone.png | 4 +- .../loggedDays.Loaded_iPhone_dark.png | 4 +- .../other/loggedDays.Loaded_iPhone_ax5.png | 4 +- .../loggedDays.Loaded_iPhone_contrast.png | 4 +- .../onboarding.Default_iPad_dark.png | 4 +- .../onboarding.Default_iPhone_dark.png | 4 +- ...arding.PhoneRecordingChoice_iPhone_ax5.png | 4 +- .../planningRegionPicker.Home_iPad_ax5.png | 4 +- ...lanningRegionPicker.Home_iPad_contrast.png | 4 +- .../planningRegionPicker.Home_iPad.png | 4 +- ...ngRegionPicker.Home_iPad_accessibility.png | 4 +- .../planningRegionPicker.Home_iPad_dark.png | 4 +- ...senceTimeline.PlannedStayHidden_iPhone.png | 4 +- ...Timeline.PlannedStayHidden_iPhone_dark.png | 4 +- ...eline.PlannedStay_iPhone_accessibility.png | 4 +- ...Timeline.WithData_iPhone_accessibility.png | 4 +- .../resolution.Empty_iPhone.png | 4 +- .../resolution.Empty_iPhone_dark.png | 4 +- .../widgetFeatures.Default_iPad_dark.png | 4 +- .../Sources/Manual/LoggedDaysView.swift | 28 +- .../Sources/Onboarding/OnboardingView.swift | 12 +- .../Settings/AppearanceSettingsView.swift | 3 + .../Settings/DevicesSettingsView.swift | 48 -- .../Sources/Shared/WhereStylesheet.swift | 8 + .../Sources/Shared/WhereThemePicker.swift | 52 +- .../WhereUI/Tests/WhereStylesheetTests.swift | 3 + flaky | 213 ----- profile | 321 -------- simulator | 441 ----------- test | 744 ------------------ 125 files changed, 2175 insertions(+), 3157 deletions(-) create mode 100644 Shared/SnapshotKit/Documentation/DuoMeasurements.json create mode 100644 Shared/SnapshotKit/Sources/SnapshotDuoFrames.swift create mode 100644 Shared/SnapshotKit/Sources/SnapshotLayoutTraits.swift create mode 100644 Shared/SnapshotKit/Tests/SnapshotDuoFramesTests.swift create mode 100644 Shared/SnapshotKit/Tests/SnapshotLayoutTraitsTests.swift create mode 100644 Shared/SnapshotKitTesting/Tests/SnapshotFixtureTestSupport.swift create mode 100644 Shared/SnapshotKitTesting/Tests/SnapshotImageRenderingTests.swift diff --git a/.circleci/config.yml b/.circleci/config.yml index 1c2507fab..fb0bd44a3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -60,23 +60,3 @@ jobs: git checkout --detach "<< pipeline.git.revision >>" git config gc.auto 0 - run: - name: Classify the complete PR and continue - command: python3 -m Tools.ci_circleci - -workflows: - "Select workflows": - # Keep the existing event gates for CI, signed archives, and Flyover. - # Only one setup workflow runs, even when an API request sets several flags. - when: >- - pipeline.parameters.manual_full_gate == "true" or - (pipeline.event.name == "push" and pipeline.git.branch == "main") or - (pipeline.event.name == "pull_request" and - pipeline.event.github.pull_request.base.ref == "main" and - not (pipeline.event.github.pull_request.title matches /.*NO-CI.*/)) or - (pipeline.event.name == "api" and - pipeline.git.branch == "main" and - pipeline.config.ref == "refs/heads/main" and - (pipeline.parameters.flyover_export == "true" or - pipeline.parameters.installer_archive == "true")) - jobs: - - select-workflows diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2aa0f971e..4eb7665c0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,6 +16,7 @@ permissions: contents: read env: + # The runner label carries several Xcodes. Select the pinned minor explicitly. # CI installs tools only. Agent skills are local-development inputs, and mise # otherwise runs the postinstall hook even when every tool is already cached. MISE_NO_HOOKS: "1" diff --git a/AGENTS.md b/AGENTS.md index 9bfae8aac..456073413 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -37,6 +37,10 @@ Roughly, this file covers: Read the exact pinned versions from those files. Do not trust a copy in prose. A version in a doc goes stale without notice. +Update deployment targets, simulator command defaults, CI Xcode selection, and +snapshot runtime/renderer pins together. Review renderer changes before product +changes. Validate both the iOS suites and the native-macOS suite after an Xcode upgrade. + Library targets live in the root [`Package.swift`](Package.swift) (one local package). Apps, app extensions, and test bundles are Tuist targets in [`Project.swift`](Project.swift) (plus [`Tuist.swift`](Tuist.swift)). That file @@ -222,7 +226,7 @@ Keep the review history in the PR and link the rule to its guard or source. - **A new image suite gets a target, not a scheme.** Add the `*SnapshotTests` target. List only `SnapshotKitTesting` in `extraPackageProducts`. Add it to the `StuffSnapshotTests` scheme's build and test lists. Never add a scheme or CI job of its own. An image bundle links only what its module needs (the Periscope and Inspector suites don't build against WhereUI at all). References follow the sources automatically via `#filePath`. - **Generated websites use the same snapshot scheme.** `ToolsSnapshotTests` renders the install site's production Astro HTML in hosted WebKit through `SnapshotKitTesting`. Its fixture generator runs during each bundle build and needs the installed site dependencies; see [`Tools/AGENTS.md`](Tools/AGENTS.md#install-site-snapshots). - **Separate snapshot bundles are safe because each `.xctest` gets its own `StuffTestHost` process** (measured on Xcode 27 — `ProcessInfo.processIdentifier` probes. Details in the snapshot-bundle comment in [`Project.swift`](Project.swift)). Each bundle statically embeds its own copy of `SnapshotKitTesting`'s capture state. Two copies in one process corrupt each other. Tripwire: if a toolchain ever shares one host process across bundles, re-measure before adding another image bundle. -- **Snapshots containing scrolling content use full-content sizing.** Use SnapshotKit's full-content device presets for ordinary `ScrollView`, `List`, `Form`, or equivalent UIKit-backed content. Those presets keep the normal device width and minimum viewport height while growing vertically. Use an explicit two-axis preset for a spatial canvas that intentionally scrolls in both dimensions. Its bounded capture grows from the normal viewport along both axes. Fixed device frames are for subjects without scrolling content. Preserve production navigation, tab, sheet, search, and toolbar chrome when measurement converges. Snapshot an intentionally bounded or greedy container's shared scrolling child directly. Never add snapshot-only production layout (see `SnapshotConfiguration.Frame.fullContent` and `.fullContent2D`). +- **Snapshots containing scrolling content use full-content sizing.** Use SnapshotKit's full-content device presets for ordinary `ScrollView`, `List`, `Form`, or equivalent UIKit-backed content. Those presets keep the normal device width and minimum viewport height while growing vertically. Use an explicit two-axis preset for a spatial canvas that intentionally scrolls in both dimensions. Its bounded capture grows from the normal viewport along both axes. Fixed device frames are for subjects without scrolling content. The explicit `Frame.viewport` API also covers bounded adaptive shells. Pair each shell with full-content captures of its scrolling panes; viewport coverage proves composition and chrome only. Preserve production navigation, tab, sheet, search, and toolbar chrome when measurement converges. Snapshot an intentionally bounded or greedy container's shared scrolling child directly. Never add snapshot-only production layout (see `SnapshotConfiguration.Frame.fullContent` and `.fullContent2D`). ### Never double-link a product WhereUI already carries diff --git a/Package.swift b/Package.swift index c25d4df0c..de4f5f2f8 100644 --- a/Package.swift +++ b/Package.swift @@ -6,7 +6,7 @@ let package = Package( name: "Stuff", defaultLocalization: "en", platforms: [ - .iOS("27.0"), + .iOS("27.1"), .macOS(.v26), ], products: [ diff --git a/Project.swift b/Project.swift index f90bffbf2..a4cde51f2 100644 --- a/Project.swift +++ b/Project.swift @@ -1,7 +1,7 @@ import ProjectDescription let destinations: Destinations = [.iPhone, .iPad] -let deployment: DeploymentTargets = .iOS("27.0") +let deployment: DeploymentTargets = .iOS("27.1") /// Local Swift package (see root `Package.swift`) for the library products /// (WhereCore, WhereUI, TestHostSupport, the Broadway modules, …). @@ -266,737 +266,3 @@ let packageResourceEnvironment: [String: EnvironmentVariable] = [ let snapshotEnvironment: [String: EnvironmentVariable] = packageResourceEnvironment.merging([ - "SNAPSHOT_EXPECTED_SIMULATOR_RUNTIME_VERSION": "27.2", - "SNAPSHOT_EXPECTED_SCREEN_SCALE": "3", - "SNAPSHOT_EXPECTED_TIMEZONE": "America/Los_Angeles", - "TZ": "America/Los_Angeles", - ]) { _, new in new } - -func unitTests( - name: String, - bundleIdSuffix: String, - productDependency: String, - sources: ProjectDescription.SourceFilesList, - resources: ResourceFileElements = [], - extraPackageProducts: [String] = [], - environmentVariables: [String: EnvironmentVariable] = [:], - scripts: [TargetScript] = [], -) -> Target { - var dependencies: [TargetDependency] = [ - .package(product: productDependency), - .package(product: "TestHostSupport"), - .target(name: "StuffTestHost"), - ] - for product in extraPackageProducts { - dependencies.append(.package(product: product)) - } - return .target( - name: name, - destinations: destinations, - product: .unitTests, - bundleId: "com.stuff.\(bundleIdSuffix).tests", - deploymentTargets: deployment, - sources: sources, - resources: resources, - scripts: scripts, - dependencies: dependencies, - environmentVariables: packageResourceEnvironment - .merging(environmentVariables) { _, new in new }, - ) -} - -/// A shared scheme that builds and tests a single unit-test bundle. -/// `testEnvironmentVariables` are set on the test action, so they reach the -/// test process (schemes without any keep an argument-less test action). -func testScheme( - name: String, - testEnvironmentVariables: [String: EnvironmentVariable] = [:], -) -> Scheme { - .scheme( - name: name, - shared: true, - buildAction: .buildAction(targets: ["\(name)"]), - testAction: .targets( - ["\(name)"], - arguments: .arguments( - environmentVariables: packageResourceEnvironment - .merging(testEnvironmentVariables) { _, new in new }, - ), - ), - ) -} - -private let whereAudienceSchemes: [Scheme] = [ - // Reserve the autogenerated target scheme's name but keep audience-neutral - // entry points out of Xcode's visible scheme picker. - .scheme( - name: "Where", - shared: true, - hidden: true, - buildAction: .buildAction(targets: ["Where"]), - runAction: .runAction(configuration: "Debug", executable: "Where"), - ), -] + whereAudiences.map { audience in - let testAction: TestAction? = switch audience.variant { - case .debug: .targets( - ["WhereTests"], - arguments: .arguments(environmentVariables: packageResourceEnvironment), - configuration: audience.configurationName, - ) - case .release: nil - } - return .scheme( - name: audience.schemeName, - shared: true, - buildAction: .buildAction(targets: ["Where"]), - testAction: testAction, - runAction: .runAction( - configuration: audience.configurationName, - executable: "Where", - ), - archiveAction: .archiveAction(configuration: audience.configurationName), - ) -} - -let project = Project( - name: "Stuff", - options: .options( - defaultKnownRegions: ["en"], - developmentRegion: "en", - ), - packages: [stuffPackage, sfSafeSymbolsPackage], - settings: projectSettings, - targets: [ - .target( - name: "Where", - destinations: destinations, - product: .app, - bundleId: "com.stuff.where", - deploymentTargets: deployment, - infoPlist: .extendingDefault(with: [ - "CFBundleDisplayName": .string("$(WHERE_DISPLAY_NAME)"), - "UILaunchScreen": .dictionary([:]), - "UIApplicationSupportsIndirectInputEvents": .boolean(true), - "UIBackgroundModes": .array([.string("remote-notification")]), - // Stated explicitly rather than left to Tuist's `1.0` / `1` - // defaults, because Settings > About shows them: the version a - // user reads off the screen should be one this manifest chose. - "CFBundleShortVersionString": .string("1.0"), - "CFBundleVersion": .string("1"), - "WhereAudience": .string("$(WHERE_AUDIENCE)"), - "WhereAppGroupIdentifier": .string("$(WHERE_APP_GROUP_IDENTIFIER)"), - "WherePrimaryAppIconName": .string("$(WHERE_PRIMARY_APP_ICON_NAME)"), - "NSLocationWhenInUseUsageDescription": .string( - "Where uses your location to figure out which region you're in.", - ), - "NSLocationAlwaysAndWhenInUseUsageDescription": .string( - "Where checks your location in the background so it can log which region you're in each day.", - ), - ]), - sources: ["Where/Where/Sources/**"], - resources: ["Where/Where/Resources/**"], - entitlements: whereAppEntitlements, - // Writes `WhereGitSHA` / `WhereGitStatus` into the built Info.plist - // for Settings > About. A *post* script so it lands after "Process - // Info.plist" and before signing, and `basedOnDependencyAnalysis: - // false` so an unchanged source tree still re-stamps a new commit. - scripts: [ - .post( - path: "Where/Where/Scripts/stamp-build-info.sh", - name: "Stamp Build Info", - basedOnDependencyAnalysis: false, - ), - ], - dependencies: [ - .package(product: "LifecycleKit"), - .package(product: "RegionKit"), - .package(product: "WhereCrashReporting"), - .package(product: "WhereCore"), - .package(product: "WhereUI"), - .package(product: "WhereIntents"), - .target(name: "WhereWidgets"), - .target(name: "WhereShareExtension"), - ], - // Compile every `*.appiconset` in `AppIcon.xcassets` into the build and - // auto-write the `CFBundleAlternateIcons` plist entries, so the asset - // catalog itself is the source of truth for which alternate icons exist - // (the `./icons` script just adds/removes sets — no names list to keep - // in sync here). Each audience descriptor chooses its primary from - // those sets. Where ships no custom global accent color (it tints - // per-region in SwiftUI), so clear the name actool otherwise looks - // for — an unset `AccentColor` warns. - settings: whereHostSettings(.app, base: [ - "ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS": "YES", - "ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME": "", - ]), - ), - .target( - name: "WhereWidgets", - destinations: destinations, - product: .appExtension, - bundleId: "com.stuff.where.widgets", - deploymentTargets: deployment, - infoPlist: .extendingDefault(with: [ - "CFBundleDisplayName": .string("$(WHERE_DISPLAY_NAME)"), - "WhereAudience": .string("$(WHERE_AUDIENCE)"), - "WhereAppGroupIdentifier": .string("$(WHERE_APP_GROUP_IDENTIFIER)"), - "NSExtension": .dictionary([ - "NSExtensionPointIdentifier": .string("com.apple.widgetkit-extension"), - ]), - ]), - sources: ["Where/WhereWidgets/Sources/**"], - resources: ["Where/WhereWidgets/Resources/**"], - entitlements: whereAppGroupEntitlements, - dependencies: [ - .package(product: "PeriscopeCore"), - .package(product: "RegionKit"), - .package(product: "WhereCore"), - .package(product: "WhereUI"), - ], - settings: whereHostSettings(.widget), - ), - .target( - name: "WhereShareExtension", - destinations: destinations, - product: .appExtension, - bundleId: "com.stuff.where.share", - deploymentTargets: deployment, - infoPlist: .extendingDefault(with: [ - "CFBundleDisplayName": .string("$(WHERE_DISPLAY_NAME)"), - "WhereAudience": .string("$(WHERE_AUDIENCE)"), - "WhereAppGroupIdentifier": .string("$(WHERE_APP_GROUP_IDENTIFIER)"), - "NSExtension": .dictionary([ - "NSExtensionPointIdentifier": .string("com.apple.share-services"), - "NSExtensionPrincipalClass": .string( - "$(PRODUCT_MODULE_NAME).ShareViewController", - ), - // Offer the share action for the content Where can back a - // day-count claim with: images, files (PDFs, `.pkpass` - // tickets, `.eml` emails), plain text, and web URLs. - "NSExtensionAttributes": .dictionary([ - "NSExtensionActivationRule": .dictionary([ - "NSExtensionActivationSupportsImageWithMaxCount": .integer(20), - "NSExtensionActivationSupportsFileWithMaxCount": .integer(20), - "NSExtensionActivationSupportsText": .boolean(true), - "NSExtensionActivationSupportsWebURLWithMaxCount": .integer(20), - ]), - ]), - ]), - ]), - sources: ["Where/WhereShareExtension/Sources/**"], - resources: ["Where/WhereShareExtension/Resources/**"], - entitlements: whereAppGroupEntitlements, - dependencies: [ - .package(product: "PeriscopeCore"), - .package(product: "SFSafeSymbols"), - .package(product: "WhereCore"), - .package(product: "WhereUI"), - ], - settings: whereHostSettings(.share), - ), - .target( - name: "RegionViewer", - // The first (and only) target to opt into Mac Catalyst: a thin - // standalone host for the WhereUI `RegionMapView` developer tool. - // The shared `destinations` constant stays iPhone/iPad-only for - // everything else. - destinations: [.iPhone, .iPad, .macCatalyst], - product: .app, - bundleId: "com.stuff.regionviewer", - deploymentTargets: deployment, - infoPlist: .extendingDefault(with: [ - "UILaunchScreen": .dictionary([:]), - "UIApplicationSupportsIndirectInputEvents": .boolean(true), - ]), - sources: ["Where/RegionViewer/Sources/**"], - resources: ["Where/RegionViewer/Resources/**"], - // No App Group entitlement — the viewer only reads bundled GeoJSON - // (embedded via the RegionKit dependency), never the app's store. - dependencies: [ - .package(product: "RegionKit"), - .package(product: "WhereCore"), - .package(product: "WhereUI"), - ], - // This developer tool ships no custom app icon or accent color, so - // clear the names the asset-catalog compiler otherwise requires - // (its `Resources/Assets.xcassets` is intentionally empty). - settings: .settings(base: [ - "ASSETCATALOG_COMPILER_APPICON_NAME": "", - "ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME": "", - ]), - ), - .target( - name: "WhereTests", - destinations: destinations, - product: .unitTests, - bundleId: "com.stuff.where.tests", - deploymentTargets: deployment, - sources: ["Where/Where/Tests/**"], - dependencies: [ - .target(name: "Where"), - .package(product: "LifecycleKit"), - .package(product: "TestHostSupport"), - .package(product: "WhereUI"), - ], - environmentVariables: packageResourceEnvironment, - ), - .target( - name: "StuffTestHost", - destinations: destinations, - product: .app, - bundleId: "com.stuff.stufftesthost", - deploymentTargets: deployment, - infoPlist: .extendingDefault(with: [ - "UILaunchScreen": .dictionary([:]), - "UIApplicationSceneManifest": .dictionary([ - "UIApplicationSupportsMultipleScenes": .boolean(false), - "UISceneConfigurations": .dictionary([ - "UIWindowSceneSessionRoleApplication": .array([ - .dictionary([ - "UISceneConfigurationName": .string("Default Configuration"), - "UISceneDelegateClassName": .string( - "$(PRODUCT_MODULE_NAME).SceneDelegate", - ), - ]), - ]), - ]), - ]), - ]), - sources: ["Shared/StuffTestHost/Sources/**"], - // Keep this host thin — it deliberately depends on nothing but - // TestHostSupport. - // - // Hosted bundles' `Bundle.module` lookups do *not* resolve against - // this host: `packageResourceEnvironment` points the generated - // accessors at the built-products directory instead. Don't re-add a - // product here to fix a missing-resource failure. The host once - // embedded WhereCore for exactly that (removed in #144 as redundant - // on Xcode 27 beta 3), and when beta 4 broke resource resolution the - // embed could not come back: under beta 4 a package product consumed - // by both this host and the test bundles loses its String Catalog - // generate-symbols step, failing the build (verified with WhereCore - // and, via LifecycleKitUI, with WhereUI). See the note on - // `packageResourceEnvironment` for the full story. - dependencies: [ - // Lets `SceneDelegate` stamp its window with `isMainTestHostWindow` - // so hosted tests can find it via `TestHostSupport.hostKeyWindow()`. - .package(product: "TestHostSupport"), - ], - ), - unitTests( - name: "CreditKitTests", - bundleIdSuffix: "creditkit", - productDependency: "CreditKit", - sources: ["Shared/CreditKit/Tests/**"], - ), - unitTests( - name: "WhereCrashReportingTests", - bundleIdSuffix: "wherecrashreporting", - productDependency: "WhereCrashReporting", - sources: ["Where/WhereCrashReporting/Tests/**"], - ), - unitTests( - name: "LifecycleKitTests", - bundleIdSuffix: "lifecyclekit", - productDependency: "LifecycleKit", - sources: ["Shared/LifecycleKit/Tests/**"], - ), - unitTests( - name: "LifecycleKitUITests", - bundleIdSuffix: "lifecyclekitui", - productDependency: "LifecycleKitUI", - sources: ["Shared/LifecycleKitUI/Tests/**"], - extraPackageProducts: ["LifecycleKit"], - ), - unitTests( - name: "JournalKitTests", - bundleIdSuffix: "journalkit", - productDependency: "JournalKit", - sources: ["Shared/JournalKit/Tests/**"], - ), - unitTests( - name: "PeriscopeCoreTests", - bundleIdSuffix: "periscopecore", - productDependency: "PeriscopeCore", - sources: ["Shared/Periscope/PeriscopeCore/Tests/**"], - extraPackageProducts: ["JournalKit"], - ), - unitTests( - name: "PeriscopeUITests", - bundleIdSuffix: "periscopeui", - productDependency: "PeriscopeUI", - sources: ["Shared/Periscope/PeriscopeUI/Tests/**"], - extraPackageProducts: ["PeriscopeCore"], - ), - unitTests( - name: "PeriscopeToolsTests", - bundleIdSuffix: "periscopetools", - productDependency: "PeriscopeTools", - sources: ["Shared/Periscope/PeriscopeTools/Tests/**"], - extraPackageProducts: [ - "PeriscopeCore", - "PeriscopeUI", - ], - ), - unitTests( - name: "InspectorTests", - bundleIdSuffix: "inspector", - productDependency: "Inspector", - sources: ["Shared/Inspector/Tests/**"], - ), - unitTests( - name: "FlyoverTests", - bundleIdSuffix: "flyover", - productDependency: "Flyover", - sources: ["Shared/Flyover/Tests/**"], - resources: ["Shared/Flyover/Tests/Fixtures/*.json"], - ), - unitTests( - name: "SnapshotKitTests", - bundleIdSuffix: "snapshotkit", - productDependency: "SnapshotKit", - sources: ["Shared/SnapshotKit/Tests/**"], - ), - // The capture/compare pipeline's own regression tests. They render - // through `renderSnapshotImage` (so they need the `StuffTestHost` key - // window) but assert on probed pixels rather than LFS reference images, - // so — unlike `StuffSnapshotTests` — this bundle is fast, has no - // `__Snapshots__/`, and runs in the main `Stuff-iOS-Tests` scheme / - // `test` CI job. `SnapshotKitTesting` embeds its dependency closure - // (SnapshotKit, SnapshotTesting, AccessibilitySnapshot) into the - // `.xctest`, as every bundle here embeds what it links. That means the - // `Stuff-iOS-Tests` host process holds a SnapshotKit copy per bundle - // that links one, but no lookup crosses between them: each bundle's - // capture writes and reads resolve within its own image. - unitTests( - name: "SnapshotKitTestingTests", - bundleIdSuffix: "snapshotkittesting", - productDependency: "SnapshotKitTesting", - sources: ["Shared/SnapshotKitTesting/Tests/**"], - extraPackageProducts: ["SFSafeSymbols"], - ), - unitTests( - name: "RegionKitTests", - bundleIdSuffix: "regionkit", - productDependency: "RegionKit", - sources: ["Where/RegionKit/Tests/**"], - ), - unitTests( - name: "InstallerKitUITests", - bundleIdSuffix: "installerkitui", - productDependency: "InstallerKitUI", - sources: ["Shared/InstallerKitUI/Tests/**"], - ), - unitTests( - name: "InstallerKitTests", - bundleIdSuffix: "installerkit", - productDependency: "InstallerKit", - sources: ["Shared/InstallerKit/Tests/**"], - ), - unitTests( - name: "WhereCoreTests", - bundleIdSuffix: "wherecore", - productDependency: "WhereCore", - sources: ["Where/WhereCore/Tests/**/*.swift"], - resources: [.folderReference(path: "Where/WhereCore/Tests/Fixtures/Flights")], - extraPackageProducts: ["RegionKit"], - ), - // WhereUITests names LifecycleKit and SFSafeSymbols because its test sources - // exercise those public types directly. Xcode 27 emits WhereUI as a dynamic package - // products in this graph, so merely copying WhereUI's transitive frameworks - // does not add them to the test bundle's link command. Everything else arrives - // through WhereUI; re-listing a statically absorbed product can still split - // type-keyed lookups in the full multi-bundle scheme. - // Guard: WhereStylesheetTests.resolvesTraitAwareTokensFromTheBroadwayRoot. - // See "Never double-link a product WhereUI already carries" in the root - // AGENTS.md; mechanism: PR #145. - unitTests( - name: "WhereUITests", - bundleIdSuffix: "whereui", - productDependency: "WhereUI", - sources: ["Where/WhereUI/Tests/**"], - // The parser initializes SwiftUI accessibility for hosted interaction tests, - // including on fresh CI simulators with no accessibility tooling attached. - extraPackageProducts: ["AccessibilitySnapshotParser", "LifecycleKit", "SFSafeSymbols"], - ), - // WhereIntents depends on WhereUI for its snippet cards, so — exactly like - // WhereUITests above — this bundle lists no `extraPackageProducts`: - // WhereUI/WhereCore/RegionKit/Broadway all arrive transitively, and - // re-listing any of them would land a duplicate copy in this image. - // See "Never double-link a product WhereUI already carries" in the root - // AGENTS.md. - unitTests( - name: "WhereIntentsTests", - bundleIdSuffix: "whereintents", - productDependency: "WhereIntents", - sources: ["Where/WhereIntents/Tests/**"], - ), - // Image snapshot bundles: one per module that owns image references, - // all gathered into the single `StuffSnapshotTests` scheme below so CI - // runs them in one `snapshot` job. They are slow and LFS-backed, so - // they are deliberately NOT in the `Stuff-iOS-Tests` scheme. - // - // One bundle per module rather than one shared bundle, because a - // module's image suite should link only what that module needs: the - // Periscope and Inspector suites don't build against WhereUI - // at all. Each records its references beside its own sources — - // SnapshotKitTesting derives the suite directory from the calling - // file's `#filePath` and nests special trait references under `other/`. - // - // Separate bundles are safe here because each `.xctest` gets its own - // `StuffTestHost` process: measured on Xcode 27 by probing - // `ProcessInfo.processIdentifier` from two bundles in one scheme, which - // reported different PIDs on both a filtered and a full unfiltered run. - // That matters specifically for these bundles, because each statically - // embeds its own copy of `SnapshotKitTesting`, whose capture state is - // module-global and therefore per copy (`_swizzleDepth` and the - // override globals in `SafeAreaInsetsSwizzling.swift`, - // `SnapshotCaptureLock`, the `UIView` category). Co-loaded into one - // process those copies would fight over the single `UIView` method - // exchange; in separate processes each is genuinely process-wide, as - // its docs claim. If a future toolchain ever starts sharing one host - // process across bundles, re-measure before adding another. - // - // Each lists only `SnapshotKitTesting` in `extraPackageProducts` — the - // test-only capture pipeline, which no shipping module links. Nothing - // else is re-listed: whatever the module already carries arrives - // transitively, per the double-linking rule in the root AGENTS.md. - // `SnapshotCaptureFlagProbeTests` (in WhereUISnapshotTests) pins the - // pipeline's `traitOverrides` write reaching a WhereUI-defined view's - // `\.isCapturingSnapshot` read, so a toolchain that stopped coalescing - // the two SnapshotKit copies in that bundle would fail loudly rather - // than silently returning defaults. - unitTests( - name: "WhereUISnapshotTests", - bundleIdSuffix: "whereui.snapshot", - productDependency: "WhereUI", - sources: ["Where/WhereUI/SnapshotTests/**"], - extraPackageProducts: ["SnapshotKitTesting"], - environmentVariables: snapshotEnvironment, - ), - unitTests( - name: "InstallerKitUISnapshotTests", - bundleIdSuffix: "installerkitui.snapshot", - productDependency: "InstallerKitUI", - sources: ["Shared/InstallerKitUI/SnapshotTests/**"], - extraPackageProducts: ["SnapshotKitTesting"], - environmentVariables: snapshotEnvironment, - ), - unitTests( - name: "ToolsSnapshotTests", - bundleIdSuffix: "tools.snapshot", - productDependency: "SnapshotKitTesting", - sources: ["Tools/SnapshotTests/**"], - environmentVariables: snapshotEnvironment, - scripts: [.post( - script: """ - cd "$SRCROOT" - PYTHONDONTWRITEBYTECODE=1 python3 -m Tools.Tests.Fixtures.installer_update_site_snapshots \\ - --output "$TARGET_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH/InstallerSiteSnapshots.json" - """, - name: "Generate install-site snapshot fixtures", - basedOnDependencyAnalysis: false, - )], - ), - unitTests( - name: "FlyoverSnapshotTests", - bundleIdSuffix: "flyover.snapshot", - productDependency: "Flyover", - sources: ["Shared/Flyover/SnapshotTests/**"], - extraPackageProducts: ["SnapshotKitTesting"], - environmentVariables: snapshotEnvironment, - ), - unitTests( - name: "PeriscopeToolsSnapshotTests", - bundleIdSuffix: "periscopetools.snapshot", - productDependency: "PeriscopeTools", - sources: ["Shared/Periscope/PeriscopeTools/SnapshotTests/**"], - extraPackageProducts: ["SnapshotKitTesting"], - environmentVariables: snapshotEnvironment, - ), - unitTests( - name: "InspectorSnapshotTests", - bundleIdSuffix: "inspector.snapshot", - productDependency: "Inspector", - sources: ["Shared/Inspector/SnapshotTests/**"], - extraPackageProducts: ["SnapshotKitTesting"], - environmentVariables: snapshotEnvironment, - ), - .target( - name: "BroadwayCatalog", - destinations: destinations, - product: .app, - bundleId: "com.stuff.broadway.catalog", - deploymentTargets: deployment, - infoPlist: .extendingDefault(with: [ - "UILaunchScreen": .dictionary([:]), - "UIApplicationSupportsIndirectInputEvents": .boolean(true), - ]), - sources: ["Shared/Broadway/BroadwayCatalog/Sources/**"], - resources: ["Shared/Broadway/BroadwayCatalog/Resources/**"], - dependencies: [ - .package(product: "BroadwayUI"), - .package(product: "SFSafeSymbols"), - ], - ), - .target( - name: "BroadwayCatalogTests", - destinations: destinations, - product: .unitTests, - bundleId: "com.stuff.broadway.catalog.tests", - deploymentTargets: deployment, - sources: ["Shared/Broadway/BroadwayCatalog/Tests/**"], - dependencies: [ - .target(name: "BroadwayCatalog"), - .package(product: "TestHostSupport"), - ], - ), - unitTests( - name: "BroadwayCoreTests", - bundleIdSuffix: "broadway.core", - productDependency: "BroadwayCore", - sources: ["Shared/Broadway/BroadwayCore/Tests/**"], - ), - unitTests( - name: "BroadwayUITests", - bundleIdSuffix: "broadway.ui", - productDependency: "BroadwayUI", - sources: ["Shared/Broadway/BroadwayUI/Tests/**"], - extraPackageProducts: [ - "BroadwayCore", - ], - ), - ], - // Tuist's autogeneration doesn't emit working standalone test actions for - // these unit-test bundles (only the aggregate `Stuff-Workspace` scheme - // runs them), so declare them explicitly. This lets `tuist test - // WhereCoreTests` / `tuist test WhereTests` / `tuist test WhereUITests` - // target a single bundle without building the whole workspace. - schemes: whereAudienceSchemes + [ - // App target schemes are normally autogenerated, but declare the - // RegionViewer one explicitly so `tuist build RegionViewer` (and a - // Run that launches the Catalyst app) is always available. - .scheme( - name: "RegionViewer", - shared: true, - buildAction: .buildAction(targets: ["RegionViewer"]), - runAction: .runAction(executable: "RegionViewer"), - ), - // CI scheme. Rather than the autogenerated `Stuff-Workspace` scheme, - // CI drives this explicit aggregate of every buildable/testable target - // (see .github/workflows/ci.yml). - .scheme( - name: "Stuff-iOS-Tests", - shared: true, - buildAction: .buildAction(targets: [ - "Where", - "RegionViewer", - "StuffTestHost", - "CreditKitTests", - "WhereCrashReportingTests", - "LifecycleKitTests", - "LifecycleKitUITests", - "JournalKitTests", - "PeriscopeCoreTests", - "PeriscopeUITests", - "PeriscopeToolsTests", - "InspectorTests", - "FlyoverTests", - "SnapshotKitTests", - "SnapshotKitTestingTests", - "RegionKitTests", - "InstallerKitTests", - "InstallerKitUITests", - "WhereCoreTests", - "WhereTests", - "WhereUITests", - "WhereIntentsTests", - "BroadwayCatalog", - "BroadwayCoreTests", - "BroadwayUITests", - "BroadwayCatalogTests", - ]), - testAction: .targets( - [ - "CreditKitTests", - "WhereCrashReportingTests", - "LifecycleKitTests", - "LifecycleKitUITests", - "JournalKitTests", - "PeriscopeCoreTests", - "PeriscopeUITests", - "PeriscopeToolsTests", - "InspectorTests", - "FlyoverTests", - "SnapshotKitTests", - "SnapshotKitTestingTests", - "RegionKitTests", - "InstallerKitTests", - "InstallerKitUITests", - "WhereCoreTests", - "WhereTests", - "WhereUITests", - "WhereIntentsTests", - "BroadwayCoreTests", - "BroadwayUITests", - "BroadwayCatalogTests", - ], - arguments: .arguments(environmentVariables: packageResourceEnvironment), - ), - ), - testScheme(name: "CreditKitTests"), - testScheme(name: "WhereCrashReportingTests"), - testScheme(name: "LifecycleKitTests"), - testScheme(name: "LifecycleKitUITests"), - testScheme(name: "JournalKitTests"), - testScheme(name: "PeriscopeCoreTests"), - testScheme(name: "PeriscopeUITests"), - testScheme(name: "PeriscopeToolsTests"), - testScheme(name: "InspectorTests"), - testScheme(name: "FlyoverTests"), - testScheme(name: "SnapshotKitTests"), - testScheme(name: "SnapshotKitTestingTests"), - testScheme(name: "RegionKitTests"), - testScheme(name: "InstallerKitTests"), - testScheme(name: "InstallerKitUITests"), - testScheme(name: "WhereCoreTests"), - testScheme(name: "WhereTests"), - testScheme(name: "WhereUITests"), - // Every image-snapshot bundle, in one scheme, so CI runs them all in - // the single `snapshot` job. A new module's image suite gets its own - // `*SnapshotTests` target above and joins the lists here — it must not - // get a scheme (or CI job) of its own. - // - // The environment pins (see `snapshotEnvironment`) are why this scheme - // exists rather than folding the bundles into `Stuff-iOS-Tests`. They - // are also set on each snapshot target, so the per-target schemes - // Tuist autogenerates are pinned too. - .scheme( - name: "StuffSnapshotTests", - shared: true, - buildAction: .buildAction(targets: [ - "WhereUISnapshotTests", - "ToolsSnapshotTests", - "InstallerKitUISnapshotTests", - "FlyoverSnapshotTests", - "PeriscopeToolsSnapshotTests", - "InspectorSnapshotTests", - ]), - testAction: .targets( - [ - "WhereUISnapshotTests", - "ToolsSnapshotTests", - "InstallerKitUISnapshotTests", - "FlyoverSnapshotTests", - "PeriscopeToolsSnapshotTests", - "InspectorSnapshotTests", - ], - arguments: .arguments(environmentVariables: snapshotEnvironment), - ), - ), - testScheme(name: "WhereIntentsTests"), - testScheme(name: "BroadwayCoreTests"), - testScheme(name: "BroadwayUITests"), - testScheme(name: "BroadwayCatalogTests"), - ], -) diff --git a/Shared/LifecycleKit/Tests/StuffTestHostSmokeTests.swift b/Shared/LifecycleKit/Tests/StuffTestHostSmokeTests.swift index 5fe6810c1..ac87fe4f9 100644 --- a/Shared/LifecycleKit/Tests/StuffTestHostSmokeTests.swift +++ b/Shared/LifecycleKit/Tests/StuffTestHostSmokeTests.swift @@ -8,5 +8,6 @@ struct StuffTestHostSmokeTests { let window = hostKeyWindow() #expect(window != nil) #expect(window?.rootViewController != nil) + #expect(window?.rootViewController?.preferredVerticalBarBehavior == .disabled) } } diff --git a/Shared/Periscope/PeriscopeTools/SnapshotTests/__Snapshots__/PeriscopeViewerSnapshotTests/periscopeViewer.PeriscopeViewer_iPhone.png b/Shared/Periscope/PeriscopeTools/SnapshotTests/__Snapshots__/PeriscopeViewerSnapshotTests/periscopeViewer.PeriscopeViewer_iPhone.png index 456667fa1..984801f6f 100644 --- a/Shared/Periscope/PeriscopeTools/SnapshotTests/__Snapshots__/PeriscopeViewerSnapshotTests/periscopeViewer.PeriscopeViewer_iPhone.png +++ b/Shared/Periscope/PeriscopeTools/SnapshotTests/__Snapshots__/PeriscopeViewerSnapshotTests/periscopeViewer.PeriscopeViewer_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eb4cca15a697cb208e3b2be2dd20b732f26c86231a55d2b82ed2c7564baac2f2 -size 273754 +oid sha256:69ede4ea292650118a9fb4f3abc11576da6892dabd81e88f385eda7380622b87 +size 240122 diff --git a/Shared/SnapshotKit/AGENTS.md b/Shared/SnapshotKit/AGENTS.md index 407d57cd3..9b62ef54c 100644 --- a/Shared/SnapshotKit/AGENTS.md +++ b/Shared/SnapshotKit/AGENTS.md @@ -25,16 +25,13 @@ Read the root [`AGENTS.md`](../../AGENTS.md) first. - **Non-default values include `dark`, `xxxl`, `contrast`, `rtl`, `bold`, `accessibility`, and `iPad`.** The light/standard/default baseline stays empty. - **Reference-image filenames depend on this.** Treat omission rules as a wire format. - **When you add an axis, give it a default that is omitted.** That is how `layoutDirection`/`legibilityWeight` landed. -- **Treat explicit layout traits as non-default.** Their idiom and size classes must add one stable identifier token. - **Filter `.accessibility` configs out of previews.** `snapshotPreviews` drops them. - **Stuff keeps AccessibilitySnapshot's annotation renderer in the test-only `SnapshotKitTesting` product.** It does not link into shipping UI modules. - **Accessibility configs only render as snapshot tests.** Do not "fix" previews to include them without a preview-only dependency boundary. - **Keep `SnapshotCase` content builders lazy.** Constructing a provider's descriptor array must not instantiate every view or model. -- **Do not assume captured models are isolated between configurations.** The - `SnapshotKitTesting` runner evaluates ordinary content once per case and re-hosts it. - Cutsheet panel builders run per configuration and must create fresh fixtures. - Retries reuse the supplied view and captured models in both paths. Ordinary - per-configuration model isolation remains in [SnapshotKit backlog](https://linear.app/kve/view/c1d3e2053ada). +- **Do not assume captured models are isolated between configurations.** The current + runner invokes the content builder per configuration. Models captured outside + that builder and shared hooks still need independent cases. See [STU-114](https://linear.app/kve/issue/STU-114). - **Use `\.isCapturingSnapshot` for motion end-states only.** A view may read it only to freeze motion at a deterministic phase. - **Never use it to change layout, content, or behavior.** - **One carve-out (documented on the property):** content no settle window can make deterministic may substitute a placeholder of identical layout. @@ -50,7 +47,10 @@ Read the root [`AGENTS.md`](../../AGENTS.md) first. - **Custom full-content frames shrink-wrap unless given a minimum.** - **Capture the production screen including navigation, tab, sheet, search, and toolbar chrome when measurement converges.** - **If a container is intentionally bounded or greedy, snapshot its shared scrolling child directly.** Never add snapshot-only production layout. -- **Fixed device frames are for non-scrolling subjects.** +- **Fixed device frames are for non-scrolling subjects.** Use explicit `Frame.viewport` captures for bounded adaptive shells only with full-content pane coverage. +- **Keep frame names stable when setting layout traits.** Presets carry truthful size classes and idioms; component frames inherit. +- **Source Duo frames from native measurements.** Re-measure `Documentation/DuoMeasurements.json` when the runtime pin changes. Synthetic frames do not change native pose or bar arrangement. +- **Create a separate case and model for each new adaptive configuration.** Readiness hooks must target that configuration's model. - **Use two-axis full-content frames only for spatial canvases.** Choose `.iPhoneFullContent2D`, `.iPadFullContent2D`, or an explicit `.fullContent2D` when the production subject intentionally scrolls in both dimensions. - **Keep ordinary screen presets fixed-width.** Guard: `SnapshotConfigurationTests`. - **Measurement readiness never replaces capture readiness.** @@ -77,3 +77,5 @@ Read the root [`AGENTS.md`](../../AGENTS.md) first. ## Testing `SnapshotKitTests` covers the matrix logic — `combinations` counts and `identifierParts` omission — as pure value assertions (no rendering). Consumers' snapshot bundles exercise the rendering pipeline through `SnapshotKitTesting`. + +Explicit configuration layout traits override frame traits and retain their identifier tokens. With no explicit override, previews and captures use the frame’s measured traits. diff --git a/Shared/SnapshotKit/Documentation/DuoMeasurements.json b/Shared/SnapshotKit/Documentation/DuoMeasurements.json new file mode 100644 index 000000000..cbf3a886e --- /dev/null +++ b/Shared/SnapshotKit/Documentation/DuoMeasurements.json @@ -0,0 +1,506 @@ +{ + "xcodeBuild": "27A9275", + "simulatorRuntimeBuild": "24A94232", + "measuredOn": "2026-10-15", + "device": "iPhone Duo", + "source": "UIWindowScene.screen, UIWindow.safeAreaInsets, UIView.traitCollection, and UIView.reservedRegions(kind:options:), read by a native UIKit simulator app. Device Hub selected each pose.", + "hardwareVerified": false, + "profiles": { + "outer-portrait": { + "divisions": [], + "horizontalSizeClass": 1, + "interfaceIdiom": 0, + "interfaceOrientation": 1, + "occlusions": [ + { + "active": true, + "frame": [ + 399.6666666666667, + 29.333333333333332, + 37, + 37 + ], + "margins": { + "bottom": 0, + "left": 0, + "right": 0, + "top": 0 + } + }, + { + "active": true, + "frame": [ + 382, + 0, + 84, + 170 + ], + "margins": { + "bottom": 0, + "left": 0, + "right": 0, + "top": 0 + } + } + ], + "runtime": "27.1", + "scale": 3, + "screenBounds": [ + 0, + 0, + 466, + 678 + ], + "verticalBarEdge": 2, + "verticalSizeClass": 2, + "viewBounds": [ + 0, + 0, + 466, + 678 + ], + "viewInsets": { + "bottom": 34, + "left": 0, + "right": 84, + "top": 0 + }, + "windowBounds": [ + 0, + 0, + 466, + 678 + ], + "windowInsets": { + "bottom": 34, + "left": 0, + "right": 84, + "top": 0 + } + }, + "outer-landscape": { + "divisions": [], + "horizontalSizeClass": 1, + "interfaceIdiom": 0, + "interfaceOrientation": 4, + "occlusions": [ + { + "active": true, + "frame": [ + 611.6666666666666, + 399.6666666666667, + 37, + 37 + ], + "margins": { + "bottom": 0, + "left": 0, + "right": 0, + "top": 0 + } + }, + { + "active": true, + "frame": [ + 594, + 384, + 84, + 82 + ], + "margins": { + "bottom": 0, + "left": 0, + "right": 0, + "top": 0 + } + } + ], + "runtime": "27.1", + "scale": 3, + "screenBounds": [ + 0, + 0, + 678, + 466 + ], + "verticalBarEdge": 2, + "verticalSizeClass": 1, + "viewBounds": [ + 0, + 0, + 678, + 466 + ], + "viewInsets": { + "bottom": 34, + "left": 0, + "right": 84, + "top": 0 + }, + "windowBounds": [ + 0, + 0, + 678, + 466 + ], + "windowInsets": { + "bottom": 34, + "left": 0, + "right": 84, + "top": 0 + } + }, + "inner-portrait": { + "divisions": [ + { + "active": false, + "frame": [ + 0, + 455.5, + 669, + 40 + ], + "margins": { + "bottom": 20, + "left": 0, + "right": 0, + "top": 20 + } + } + ], + "horizontalSizeClass": 2, + "interfaceIdiom": 0, + "interfaceOrientation": 1, + "occlusions": [ + { + "active": false, + "frame": [ + 21, + 215.66666666666666, + 37, + 57.99999999999997 + ], + "margins": { + "bottom": 0, + "left": 0, + "right": 0, + "top": 0 + } + }, + { + "active": true, + "frame": [ + 535, + 0, + 134, + 82 + ], + "margins": { + "bottom": 0, + "left": 0, + "right": 0, + "top": 0 + } + } + ], + "runtime": "27.1", + "scale": 3, + "screenBounds": [ + 0, + 0, + 669, + 951 + ], + "verticalBarEdge": 0, + "verticalSizeClass": 2, + "viewBounds": [ + 0, + 0, + 669, + 951 + ], + "viewInsets": { + "bottom": 34, + "left": 0, + "right": 0, + "top": 82 + }, + "windowBounds": [ + 0, + 0, + 669, + 951 + ], + "windowInsets": { + "bottom": 34, + "left": 0, + "right": 0, + "top": 82 + } + }, + "inner-landscape": { + "divisions": [ + { + "active": false, + "frame": [ + 455.5, + 0, + 40, + 669 + ], + "margins": { + "bottom": 0, + "left": 20, + "right": 20, + "top": 0 + } + } + ], + "horizontalSizeClass": 2, + "interfaceIdiom": 0, + "interfaceOrientation": 4, + "occlusions": [ + { + "active": false, + "frame": [ + 677.3333333333334, + 21, + 58, + 37 + ], + "margins": { + "bottom": 0, + "left": 0, + "right": 0, + "top": 0 + } + }, + { + "active": true, + "frame": [ + 867, + 0, + 84, + 120 + ], + "margins": { + "bottom": 0, + "left": 0, + "right": 0, + "top": 0 + } + } + ], + "runtime": "27.1", + "scale": 3, + "screenBounds": [ + 0, + 0, + 951, + 669 + ], + "verticalBarEdge": 2, + "verticalSizeClass": 2, + "viewBounds": [ + 0, + 0, + 951, + 669 + ], + "viewInsets": { + "bottom": 34, + "left": 0, + "right": 84, + "top": 0 + }, + "windowBounds": [ + 0, + 0, + 951, + 669 + ], + "windowInsets": { + "bottom": 34, + "left": 0, + "right": 84, + "top": 0 + } + }, + "tabletop-portrait": { + "divisions": [ + { + "active": true, + "frame": [ + 0, + 455.5, + 669, + 40 + ], + "margins": { + "bottom": 20, + "left": 0, + "right": 0, + "top": 20 + } + } + ], + "horizontalSizeClass": 2, + "interfaceIdiom": 0, + "interfaceOrientation": 1, + "occlusions": [ + { + "active": false, + "frame": [ + 21, + 215.66666666666666, + 37, + 57.99999999999997 + ], + "margins": { + "bottom": 0, + "left": 0, + "right": 0, + "top": 0 + } + }, + { + "active": true, + "frame": [ + 535, + 0, + 134, + 82 + ], + "margins": { + "bottom": 0, + "left": 0, + "right": 0, + "top": 0 + } + } + ], + "runtime": "27.1", + "scale": 3, + "screenBounds": [ + 0, + 0, + 669, + 951 + ], + "verticalBarEdge": 0, + "verticalSizeClass": 2, + "viewBounds": [ + 0, + 0, + 669, + 951 + ], + "viewInsets": { + "bottom": 34, + "left": 0, + "right": 0, + "top": 82 + }, + "windowBounds": [ + 0, + 0, + 669, + 951 + ], + "windowInsets": { + "bottom": 34, + "left": 0, + "right": 0, + "top": 82 + } + }, + "tabletop-landscape": { + "divisions": [ + { + "active": true, + "frame": [ + 455.5, + 0, + 40, + 669 + ], + "margins": { + "bottom": 0, + "left": 20, + "right": 20, + "top": 0 + } + } + ], + "horizontalSizeClass": 2, + "interfaceIdiom": 0, + "interfaceOrientation": 4, + "occlusions": [ + { + "active": false, + "frame": [ + 677.3333333333334, + 21, + 58, + 37 + ], + "margins": { + "bottom": 0, + "left": 0, + "right": 0, + "top": 0 + } + }, + { + "active": true, + "frame": [ + 867, + 0, + 84, + 120 + ], + "margins": { + "bottom": 0, + "left": 0, + "right": 0, + "top": 0 + } + } + ], + "runtime": "27.1", + "scale": 3, + "screenBounds": [ + 0, + 0, + 951, + 669 + ], + "verticalBarEdge": 2, + "verticalSizeClass": 2, + "viewBounds": [ + 0, + 0, + 951, + 669 + ], + "viewInsets": { + "bottom": 34, + "left": 0, + "right": 84, + "top": 0 + }, + "windowBounds": [ + 0, + 0, + 951, + 669 + ], + "windowInsets": { + "bottom": 34, + "left": 0, + "right": 84, + "top": 0 + } + } + } +} diff --git a/Shared/SnapshotKit/README.md b/Shared/SnapshotKit/README.md index 73200b84d..4f0f6927b 100644 --- a/Shared/SnapshotKit/README.md +++ b/Shared/SnapshotKit/README.md @@ -13,12 +13,11 @@ capture + comparison pipeline lives in the sibling ## What's in the box -- **`SnapshotConfiguration`** — one rendering variant. It specifies appearance - traits, device layout traits, a device `Frame`, and a `snapshotType`. - Appearance traits include color scheme, Dynamic Type size, contrast, layout - direction, and legibility weight. This `Hashable` value has an `identifier` - that **omits default axes**, so common cases stay terse. The `snapshotType` - is `.standard` or `.accessibility`. +- **`SnapshotConfiguration`** — one rendering variant: color scheme, Dynamic + Type size, contrast, layout direction (`rtl` token), legibility weight (bold + text, `bold` token), a device `Frame`, and a `snapshotType` (`.standard` or + `.accessibility`). `Hashable`, with an `identifier` (built from + `identifierParts`) that **omits default axes** so common cases stay terse. Frames come in four sizing strategies: fixed device viewports (`.iPhone`, `.iPad`), the intrinsic `.component` frame, `.fullContent(name:width:)`, and `.fullContent2D(name:minimumSize:)`. The ordinary full-content frame has a @@ -30,9 +29,9 @@ capture + comparison pipeline lives in the sibling snapshot its shared scrolling child directly, without snapshot-only layout behavior. The iPhone/iPad full-content presets retain their normal viewport height as a minimum and - grow when content is taller. Custom full-content frames shrink-wrap unless + grow when content is taller. custom full-content frames shrink-wrap unless given a minimum. A frame also carries `safeAreaInsets` (default zero, keeping - images device-independent). The `.iPhoneNotched` preset simulates real device + images device-independent). the `.iPhoneNotched` preset simulates real device chrome (Dynamic Island top 47pt, home-indicator bottom 34pt) for cases that must prove layout under it. - **`SnapshotConfiguration.LayoutTraits`** — an explicit interface idiom and @@ -52,8 +51,9 @@ capture + comparison pipeline lives in the sibling scrolling content, including UIKit-backed SwiftUI `List` and `Form` containers, including when they are nested under production screen chrome. Device presets render at least one normal viewport tall, then expand to show - content that would otherwise scroll. fixed-height device frames are for - non-scrolling subjects. + content that would otherwise scroll. Fixed-height device frames are for + non-scrolling subjects. Explicit `Frame.viewport` captures also cover bounded adaptive shells + when paired with full-content captures of their scrolling panes. - **Two-axis full-content frames** (`.iPhoneFullContent2D`, `.iPadFullContent2D`, and `.fullContent2D(name:minimumSize:)`) — start at a normal viewport and expand to one viewport-filling scroll view's complete @@ -63,11 +63,9 @@ capture + comparison pipeline lives in the sibling `static var snapshots: [SnapshotCase]`. - **`SnapshotCase`** — a named group of configurations plus a lazy content builder. Declaring a matrix does not instantiate its views or models. The - current test runner evaluates an ordinary single-view builder once per case - and re-hosts that value across configurations, sharing captured reference models - (see [SnapshotKit backlog](https://linear.app/kve/view/c1d3e2053ada)). Cutsheet panel builders run per configuration - and must construct fresh fixtures. Settling retries reuse the supplied view and - captured models in either path. `SnapshotCase` is + test runner evaluates the builder once per configuration. Models captured outside + that builder and shared readiness hooks still need independent cases (see + [STU-114](https://linear.app/kve/issue/STU-114)). Cutsheet builders also run per configuration. Retries reuse the supplied view. SnapshotCase is also a `View`, so `snapshotPreviews` can render the whole matrix as a scrollable cutsheet inside a `#Preview`. Its `settle` axis (`SnapshotSettle`) declares whether the content needs the capture pipeline's @@ -92,9 +90,10 @@ capture + comparison pipeline lives in the sibling again before capture. The preview cutsheet ignores the hook (only the test pipeline can re-settle around it). - **`snapshotTraits(_:)`** — applies a configuration's traits to a view for the - preview cutsheet. This includes explicit device layout traits. Thus, previews - and test captures stay in lockstep. Simulated frame insets are capture-only. - A preview cannot simulate safe areas. + preview cutsheet (color scheme, Dynamic Type, layout direction, legibility + weight, and an increased-contrast trait override), so previews and test + captures stay in lockstep. Simulated frame insets are capture-only — a + preview can't fake safe areas. - **`\.isCapturingSnapshot`** — an environment flag that is `true` while `SnapshotKitTesting` captures the view (and in the preview cutsheet, which mirrors the tests). A view may read it **only** to render a deterministic @@ -207,3 +206,28 @@ when their identities differ. Raw capture content is available only through the `SnapshotCase.ID` stores the reference group and case name separately. A slash in an ungrouped case name cannot impersonate a grouped case in previews. Reference filenames and configuration identifiers remain unchanged. + +## Adaptive containers + +Frame presets include explicit size classes and interface idiom. Component frames inherit these traits from their host. +Preview and capture hosts apply the same traits. Existing frame names and reference filenames stay unchanged. +Use `Frame.viewport` to capture bounded adaptive shells. Pair these images with full-content captures of each scrolling pane. +Create independent models and readiness hooks for each configuration. Keep one mounted model only in deliberate resize tests. +Device-specific profiles require measured runtime bounds, scale, insets, and reserved regions. +Synthetic windows test layout policy; they do not validate native folding or system bars. + +The Duo presets use [native simulator measurements](Documentation/DuoMeasurements.json) from Xcode build `27A9275`, runtime `24A94232`. +All four profiles use 3× scale and the phone idiom. + +| Frame | Bounds (points) | Horizontal / vertical size class | Insets (top, left, bottom, right) | +| --- | --- | --- | --- | +| `duoOuterPortrait` | 466 × 678 | compact / regular | 0, 0, 34, 84 | +| `duoOuterLandscape` | 678 × 466 | compact / compact | 0, 0, 34, 84 | +| `duoInnerPortrait` | 669 × 951 | regular / regular | 82, 0, 34, 0 | +| `duoInnerLandscape` | 951 × 669 | regular / regular | 0, 0, 34, 84 | + +The inner display reports a 40-point division with 20-point margins on each adjoining side. Its frame already includes these margins. +The division is active when partially folded. Flat layouts must ignore inactive divisions. +The measurement record also contains camera and status-bar occlusions. Use current region geometry in production; these records describe specific simulator poses. + +Explicit configuration layout traits override frame traits and retain their identifier tokens. With no explicit override, previews and captures use the frame’s measured traits. diff --git a/Shared/SnapshotKit/Sources/SnapshotConfiguration+Traits.swift b/Shared/SnapshotKit/Sources/SnapshotConfiguration+Traits.swift index b73ad9a0d..2f47e9c33 100644 --- a/Shared/SnapshotKit/Sources/SnapshotConfiguration+Traits.swift +++ b/Shared/SnapshotKit/Sources/SnapshotConfiguration+Traits.swift @@ -2,13 +2,10 @@ import SwiftUI import UIKit extension SnapshotConfiguration { - /// A `UITraitCollection` expressing this configuration's appearance axes — - /// interface style, content size category, contrast, layout direction, - /// legibility weight, and any explicit device-adaptive traits. Used both by - /// the preview cutsheet's trait override and by the test runner to configure - /// the capture, so the two stay in lockstep. + /// A `UITraitCollection` expressing this configuration's appearance and optional layout + /// traits. Preview and capture hosts share this mapping. public var uiTraitCollection: UITraitCollection { - var traits = [ + var collections = [ UITraitCollection(userInterfaceStyle: colorScheme == .dark ? .dark : .light), UITraitCollection(preferredContentSizeCategory: UIContentSizeCategory(dynamicType)), UITraitCollection(accessibilityContrast: contrast == .increased ? .high : .normal), @@ -19,31 +16,33 @@ extension SnapshotConfiguration { legibilityWeight: legibilityWeight == .bold ? .bold : .regular, ), ] - if let layoutTraits { - traits.append(contentsOf: [ - UITraitCollection(userInterfaceIdiom: layoutTraits.interfaceIdiom.uiValue), - UITraitCollection(horizontalSizeClass: layoutTraits.horizontalSizeClass.uiValue), - UITraitCollection(verticalSizeClass: layoutTraits.verticalSizeClass.uiValue), - ]) + if let traits = resolvedLayoutTraits { + collections += [ + UITraitCollection(horizontalSizeClass: traits.horizontalSizeClass.uiSizeClass), + UITraitCollection(verticalSizeClass: traits.verticalSizeClass.uiSizeClass), + UITraitCollection(userInterfaceIdiom: traits.interfaceIdiom.uiIdiom), + ] } - return UITraitCollection(traitsFrom: traits) + return UITraitCollection(traitsFrom: collections) } -} - -extension SnapshotConfiguration.LayoutTraits.InterfaceIdiom { - fileprivate var uiValue: UIUserInterfaceIdiom { - switch self { - case .phone: .phone - case .tablet: .pad - } - } -} -extension SnapshotConfiguration.LayoutTraits.SizeClass { - fileprivate var uiValue: UIUserInterfaceSizeClass { - switch self { - case .compact: .compact - case .regular: .regular + /// Applies the same UIKit traits to preview and test hosts, before mounting content. + @MainActor + public func applyTraits(to host: UIViewController) { + let traits = uiTraitCollection + host.traitOverrides.userInterfaceStyle = traits.userInterfaceStyle + host.traitOverrides.preferredContentSizeCategory = traits.preferredContentSizeCategory + host.traitOverrides.accessibilityContrast = traits.accessibilityContrast + host.traitOverrides.layoutDirection = traits.layoutDirection + host.traitOverrides.legibilityWeight = traits.legibilityWeight + if let layoutTraits = resolvedLayoutTraits { + host.traitOverrides.horizontalSizeClass = layoutTraits.horizontalSizeClass.uiSizeClass + host.traitOverrides.verticalSizeClass = layoutTraits.verticalSizeClass.uiSizeClass + host.traitOverrides.userInterfaceIdiom = layoutTraits.interfaceIdiom.uiIdiom + } else { + host.traitOverrides.remove(UITraitHorizontalSizeClass.self) + host.traitOverrides.remove(UITraitVerticalSizeClass.self) + host.traitOverrides.remove(UITraitUserInterfaceIdiom.self) } } } diff --git a/Shared/SnapshotKit/Sources/SnapshotConfiguration.swift b/Shared/SnapshotKit/Sources/SnapshotConfiguration.swift index b623185e6..888340b51 100644 --- a/Shared/SnapshotKit/Sources/SnapshotConfiguration.swift +++ b/Shared/SnapshotKit/Sources/SnapshotConfiguration.swift @@ -7,9 +7,10 @@ import SwiftUI /// /// `Hashable` so it can key a matrix, and it vends an ``identifier`` (from /// ``identifierParts``) that names the reference image. The identifier **omits -/// default axes**. A named device, explicit layout traits, or a non-default -/// appearance axis adds a token. Thus, the common baseline stays terse. Treat -/// the omission rules as a wire format. A change renames reference images. +/// default axes** — only a non-default color scheme, Dynamic Type size, contrast, +/// snapshot type, or a named device shows up — so the common (light / large / +/// standard) baseline stays terse. Treat the omission rules as a wire format: +/// changing them renames every reference image on disk. public struct SnapshotConfiguration: Hashable, Sendable { /// The color scheme (light/dark) to render in. public var colorScheme: ColorScheme @@ -21,10 +22,8 @@ public struct SnapshotConfiguration: Hashable, Sendable { public var layoutDirection: LayoutDirection /// The legibility weight (regular / bold text) to render with. public var legibilityWeight: LegibilityWeight - /// Optional device-adaptive traits. `nil` inherits the host simulator's - /// idiom and size classes. - public var layoutTraits: LayoutTraits? /// The frame (size + name) to render into. + public var layoutTraits: LayoutTraits? public var device: Frame /// Whether this is a plain image or a VoiceOver-annotated accessibility image. public var snapshotType: SnapshotType @@ -153,19 +152,26 @@ extension SnapshotConfiguration { /// a preset like ``iPhoneNotched`` opts a case into rendering under /// notch/home-indicator insets. public var safeAreaInsets: Insets + /// Optional traits for this container. Nil inherits the host traits. Names remain + /// unchanged. + public var layoutTraits: LayoutTraits? public init( name: String, size: SizeStrategy, safeAreaInsets: Insets = .zero, + layoutTraits: LayoutTraits? = nil, ) { self.name = name self.size = size self.safeAreaInsets = safeAreaInsets + self.layoutTraits = layoutTraits } /// Safe-area insets in points. A minimal `Hashable` value type so /// ``Frame`` stays hashable (UIKit's `UIEdgeInsets` is not). + /// `leading` and `trailing` map to physical left and right capture edges. + /// Text direction does not mirror a device's reserved edge. public struct Insets: Hashable, Sendable { public var top: CGFloat public var leading: CGFloat @@ -182,6 +188,33 @@ extension SnapshotConfiguration { public static let zero = Insets(top: 0, leading: 0, bottom: 0, trailing: 0) } + /// Captures the visible composition of a bounded adaptive shell. + /// Pair this with full-content captures of its scrolling panes. + public static func viewport( + name: String, + size: CGSize, + safeAreaInsets: Insets = .zero, + layoutTraits: LayoutTraits, + ) -> Frame { + Frame( + name: name, + size: .fixed(size), + safeAreaInsets: safeAreaInsets, + layoutTraits: layoutTraits, + ) + } + + /// A synthetic narrow multitasking window, independent of hardware profiles. + public static let narrowWindow = viewport( + name: "narrowWindow", + size: CGSize(width: 320, height: 640), + layoutTraits: LayoutTraits( + horizontalSizeClass: .compact, + verticalSizeClass: .regular, + interfaceIdiom: .pad, + ), + ) + /// A component frame: sized to fit its content, capped to a phone-width /// maximum so a component without an intrinsic width still measures. public static let component = Frame(name: "", size: .intrinsic(maxWidth: 402)) @@ -200,10 +233,12 @@ extension SnapshotConfiguration { name: String, width: CGFloat, minimumHeight: CGFloat? = nil, + layoutTraits: LayoutTraits? = nil, ) -> Frame { Frame( name: name, size: .fullContent(width: width, minimumHeight: minimumHeight), + layoutTraits: layoutTraits, ) } @@ -214,10 +249,12 @@ extension SnapshotConfiguration { public static func fullContent2D( name: String, minimumSize: CGSize, + layoutTraits: LayoutTraits? = nil, ) -> Frame { Frame( name: name, size: .fullContent2D(minimumSize: minimumSize), + layoutTraits: layoutTraits, ) } @@ -226,6 +263,7 @@ extension SnapshotConfiguration { name: "iPhone", width: iPhoneWidth, minimumHeight: iPhoneHeight, + layoutTraits: .phonePortrait, ) /// An iPad viewport that grows to fit settled scrolling content. @@ -233,29 +271,34 @@ extension SnapshotConfiguration { name: "iPad", width: iPadWidth, minimumHeight: iPadHeight, + layoutTraits: .tablet, ) /// An iPhone viewport that expands along both scrolling axes. public static let iPhoneFullContent2D = fullContent2D( name: "iPhone", minimumSize: CGSize(width: iPhoneWidth, height: iPhoneHeight), + layoutTraits: .phonePortrait, ) /// An iPad viewport that expands along both scrolling axes. public static let iPadFullContent2D = fullContent2D( name: "iPad", minimumSize: CGSize(width: iPadWidth, height: iPadHeight), + layoutTraits: .tablet, ) /// A phone screen frame (iPhone 17 point size). public static let iPhone = Frame( name: "iPhone", size: .fixed(CGSize(width: iPhoneWidth, height: iPhoneHeight)), + layoutTraits: .phonePortrait, ) /// A tablet screen frame (iPad Pro 11" portrait point size). public static let iPad = Frame( name: "iPad", size: .fixed(CGSize(width: iPadWidth, height: iPadHeight)), + layoutTraits: .tablet, ) /// The iPhone frame with simulated device insets (Dynamic Island top, /// home-indicator bottom), for cases that must prove layout under real @@ -264,6 +307,7 @@ extension SnapshotConfiguration { name: "iPhoneNotched", size: .fixed(CGSize(width: iPhoneWidth, height: iPhoneHeight)), safeAreaInsets: Insets(top: 47, leading: 0, bottom: 34, trailing: 0), + layoutTraits: .phonePortrait, ) } @@ -282,24 +326,6 @@ extension SnapshotConfiguration { } } -extension SnapshotConfiguration.LayoutTraits.InterfaceIdiom { - fileprivate var snapshotToken: String { - switch self { - case .phone: "phone" - case .tablet: "tablet" - } - } -} - -extension SnapshotConfiguration.LayoutTraits.SizeClass { - fileprivate var snapshotToken: String { - switch self { - case .compact: "compact" - case .regular: "regular" - } - } -} - extension DynamicTypeSize { /// A short, stable token for identifiers. Only non-`.large` values ever reach /// a filename (the default is omitted), but the full map keeps tokens unique. @@ -321,3 +347,21 @@ extension DynamicTypeSize { } } } + +extension SnapshotConfiguration.LayoutTraits.InterfaceIdiom { + fileprivate var snapshotToken: String { + switch self { + case .phone: "phone" + case .tablet: "tablet" + } + } +} + +extension SnapshotConfiguration.LayoutTraits.SizeClass { + fileprivate var snapshotToken: String { + switch self { + case .compact: "compact" + case .regular: "regular" + } + } +} diff --git a/Shared/SnapshotKit/Sources/SnapshotDuoFrames.swift b/Shared/SnapshotKit/Sources/SnapshotDuoFrames.swift new file mode 100644 index 000000000..aa3113ee9 --- /dev/null +++ b/Shared/SnapshotKit/Sources/SnapshotDuoFrames.swift @@ -0,0 +1,49 @@ +import CoreGraphics + +extension SnapshotConfiguration.Frame { + /// Duo outer portrait bounds and insets measured on the pinned simulator. + /// These synthetic viewports do not change the host simulator's physical pose. + /// See `Documentation/DuoMeasurements.json` for the native measurements. + public static let duoOuterPortrait = viewport( + name: "duoOuterPortrait", + size: CGSize(width: 466, height: 678), + safeAreaInsets: Insets(top: 0, leading: 0, bottom: 34, trailing: 84), + layoutTraits: .phonePortrait, + ) + + /// Duo outer landscape, with compact height and a trailing system bar. + public static let duoOuterLandscape = viewport( + name: "duoOuterLandscape", + size: CGSize(width: 678, height: 466), + safeAreaInsets: Insets(top: 0, leading: 0, bottom: 34, trailing: 84), + layoutTraits: LayoutTraits( + horizontalSizeClass: .compact, + verticalSizeClass: .compact, + interfaceIdiom: .phone, + ), + ) + + /// Duo inner portrait retains the phone idiom with regular size classes. + public static let duoInnerPortrait = viewport( + name: "duoInnerPortrait", + size: CGSize(width: 669, height: 951), + safeAreaInsets: Insets(top: 82, leading: 0, bottom: 34, trailing: 0), + layoutTraits: LayoutTraits( + horizontalSizeClass: .regular, + verticalSizeClass: .regular, + interfaceIdiom: .phone, + ), + ) + + /// Duo inner landscape uses regular size classes and a trailing system bar. + public static let duoInnerLandscape = viewport( + name: "duoInnerLandscape", + size: CGSize(width: 951, height: 669), + safeAreaInsets: Insets(top: 0, leading: 0, bottom: 34, trailing: 84), + layoutTraits: LayoutTraits( + horizontalSizeClass: .regular, + verticalSizeClass: .regular, + interfaceIdiom: .phone, + ), + ) +} diff --git a/Shared/SnapshotKit/Sources/SnapshotLayoutTraits.swift b/Shared/SnapshotKit/Sources/SnapshotLayoutTraits.swift new file mode 100644 index 000000000..7e06e31c0 --- /dev/null +++ b/Shared/SnapshotKit/Sources/SnapshotLayoutTraits.swift @@ -0,0 +1,98 @@ +import SwiftUI +import UIKit + +extension SnapshotConfiguration.Frame { + /// Explicit container traits. Frame dimensions alone do not set UIKit's idiom or size classes. + public struct LayoutTraits: Hashable, Sendable { + public var horizontalSizeClass: SizeClass + public var verticalSizeClass: SizeClass + public var interfaceIdiom: InterfaceIdiom + + public init( + horizontalSizeClass: SizeClass, + verticalSizeClass: SizeClass, + interfaceIdiom: InterfaceIdiom, + ) { + self.horizontalSizeClass = horizontalSizeClass + self.verticalSizeClass = verticalSizeClass + self.interfaceIdiom = interfaceIdiom + } + + public enum SizeClass: Hashable, Sendable { + case compact + case regular + + public var uiSizeClass: UIUserInterfaceSizeClass { + switch self { + case .compact: .compact + case .regular: .regular + } + } + + public var swiftUISizeClass: UserInterfaceSizeClass { + switch self { + case .compact: .compact + case .regular: .regular + } + } + } + + public enum InterfaceIdiom: Hashable, Sendable { + case phone + case pad + + public var uiIdiom: UIUserInterfaceIdiom { + switch self { + case .phone: .phone + case .pad: .pad + } + } + } + + public static let phonePortrait = Self( + horizontalSizeClass: .compact, + verticalSizeClass: .regular, + interfaceIdiom: .phone, + ) + + public static let phoneLandscape = Self( + horizontalSizeClass: .compact, + verticalSizeClass: .compact, + interfaceIdiom: .phone, + ) + + public static let tablet = Self( + horizontalSizeClass: .regular, + verticalSizeClass: .regular, + interfaceIdiom: .pad, + ) + } +} + +extension View { + /// Sets only explicitly configured layout traits; component frames inherit their container. + public func snapshotLayoutTraits(_ configuration: SnapshotConfiguration) -> some View { + transformEnvironment(\.horizontalSizeClass) { value in + if let traits = configuration.resolvedLayoutTraits { + value = traits.horizontalSizeClass.swiftUISizeClass + } + } + .transformEnvironment(\.verticalSizeClass) { value in + if let traits = configuration.resolvedLayoutTraits { + value = traits.verticalSizeClass.swiftUISizeClass + } + } + } +} + +extension SnapshotConfiguration { + /// Explicit configuration overrides win; otherwise the frame supplies its measured traits. + public var resolvedLayoutTraits: Frame.LayoutTraits? { + guard let layoutTraits else { return device.layoutTraits } + return Frame.LayoutTraits( + horizontalSizeClass: layoutTraits.horizontalSizeClass == .compact ? .compact : .regular, + verticalSizeClass: layoutTraits.verticalSizeClass == .compact ? .compact : .regular, + interfaceIdiom: layoutTraits.interfaceIdiom == .phone ? .phone : .pad, + ) + } +} diff --git a/Shared/SnapshotKit/Sources/SnapshotTraits.swift b/Shared/SnapshotKit/Sources/SnapshotTraits.swift index e2c1633fa..73d9e5357 100644 --- a/Shared/SnapshotKit/Sources/SnapshotTraits.swift +++ b/Shared/SnapshotKit/Sources/SnapshotTraits.swift @@ -6,16 +6,16 @@ extension View { /// preview renders the way its snapshot will be captured. /// /// Color scheme, Dynamic Type, layout direction, and legibility weight go - /// through the SwiftUI environment. Increased contrast and device-adaptive - /// traits use a UIKit trait override, which the hosting controller bridges - /// back into the SwiftUI content. + /// through the SwiftUI environment. A UIKit host supplies increased contrast + /// and explicit layout traits, including interface idiom. @ViewBuilder public func snapshotTraits(_ configuration: SnapshotConfiguration) -> some View { let base = environment(\.colorScheme, configuration.colorScheme) .dynamicTypeSize(configuration.dynamicType) .environment(\.layoutDirection, configuration.layoutDirection) .environment(\.legibilityWeight, configuration.legibilityWeight) - if configuration.contrast == .increased || configuration.layoutTraits != nil { + .snapshotLayoutTraits(configuration) + if configuration.contrast == .increased || configuration.resolvedLayoutTraits != nil { SnapshotTraitOverrideHost(configuration: configuration) { base } } else { base @@ -23,8 +23,8 @@ extension View { } } -/// Hosts content with UIKit-only trait overrides. Sized to its content so it -/// lays out inline in the preview cutsheet. +/// Supplies UIKit traits that SwiftUI cannot set directly, including interface +/// idiom. Intrinsic sizing keeps the host inline in the preview cutsheet. private struct SnapshotTraitOverrideHost: UIViewControllerRepresentable { let configuration: SnapshotConfiguration @ViewBuilder var content: () -> Content @@ -33,35 +33,12 @@ private struct SnapshotTraitOverrideHost: UIViewControllerReprese let host = UIHostingController(rootView: content()) host.view.backgroundColor = .clear host.sizingOptions = [.intrinsicContentSize] - applyTraits(to: host) + configuration.applyTraits(to: host) return host } func updateUIViewController(_ host: UIHostingController, context _: Context) { host.rootView = content() - applyTraits(to: host) - } - - private func applyTraits(to host: UIHostingController) { - applySnapshotTraitOverrides(configuration, to: host) - } -} - -/// Updates the UIKit-only traits and removes device overrides that no longer apply. -@MainActor -func applySnapshotTraitOverrides( - _ configuration: SnapshotConfiguration, - to host: UIViewController, -) { - let traits = configuration.uiTraitCollection - host.traitOverrides.accessibilityContrast = traits.accessibilityContrast - if configuration.layoutTraits != nil { - host.traitOverrides.userInterfaceIdiom = traits.userInterfaceIdiom - host.traitOverrides.horizontalSizeClass = traits.horizontalSizeClass - host.traitOverrides.verticalSizeClass = traits.verticalSizeClass - } else { - host.traitOverrides.remove(UITraitUserInterfaceIdiom.self) - host.traitOverrides.remove(UITraitHorizontalSizeClass.self) - host.traitOverrides.remove(UITraitVerticalSizeClass.self) + configuration.applyTraits(to: host) } } diff --git a/Shared/SnapshotKit/Tests/SnapshotConfigurationTests.swift b/Shared/SnapshotKit/Tests/SnapshotConfigurationTests.swift index 59b188b69..31b26ca62 100644 --- a/Shared/SnapshotKit/Tests/SnapshotConfigurationTests.swift +++ b/Shared/SnapshotKit/Tests/SnapshotConfigurationTests.swift @@ -5,6 +5,32 @@ import Testing /// Pure-logic tests for the ``SnapshotConfiguration`` matrix: combination counts, /// preset shapes, and the identifier omission rules that name reference images. struct SnapshotConfigurationTests { + @Test func adaptiveLayoutTraitsHaveStableDistinctIdentifierTokens() { + let phonePortrait = SnapshotConfiguration(layoutTraits: .phonePortrait) + let phoneLandscape = SnapshotConfiguration(layoutTraits: .phoneLandscape) + let tabletPortrait = SnapshotConfiguration(layoutTraits: .tabletPortrait) + + #expect(phonePortrait.identifierParts == ["phone-compact-regular"]) + #expect(phoneLandscape.identifierParts == ["phone-compact-compact"]) + #expect(tabletPortrait.identifierParts == ["tablet-regular-regular"]) + #expect(Set([ + phonePortrait.identifier, + phoneLandscape.identifier, + tabletPortrait.identifier, + ]) + .count == 3) + } + + @Test func combinationsMultiplyAdaptiveLayoutTraits() { + let configs = SnapshotConfiguration.combinations( + devices: [.iPhone, .iPad], + layoutTraits: [.phonePortrait, .tabletPortrait], + ) + + #expect(configs.count == 4) + #expect(Set(configs.compactMap(\.layoutTraits)) == [.phonePortrait, .tabletPortrait]) + } + @Test func emptyCombinationsIsTheDefaultSingleton() { let configs = SnapshotConfiguration.combinations() #expect(configs == [SnapshotConfiguration()]) @@ -27,14 +53,13 @@ struct SnapshotConfigurationTests { #expect(configs.count == 8) } - @Test func combinationsMultiplyAdaptiveLayoutTraits() { + @Test func combinationsRetainEachFramesLayoutTraits() { let configs = SnapshotConfiguration.combinations( devices: [.iPhone, .iPad], - layoutTraits: [.phonePortrait, .tabletPortrait], + colorSchemes: [.light, .dark], ) - #expect(configs.count == 4) - #expect(Set(configs.compactMap(\.layoutTraits)) == [.phonePortrait, .tabletPortrait]) + #expect(Set(configs.compactMap(\.device.layoutTraits)) == [.phonePortrait, .tablet]) } @Test func componentRepresentativeAreAdditiveNotCartesian() { @@ -195,20 +220,11 @@ struct SnapshotConfigurationTests { #expect(SnapshotConfiguration(device: .iPhoneNotched).identifierParts == ["iPhoneNotched"]) } - @Test func adaptiveLayoutTraitsHaveStableDistinctIdentifierTokens() { - let phonePortrait = SnapshotConfiguration(layoutTraits: .phonePortrait) - let phoneLandscape = SnapshotConfiguration(layoutTraits: .phoneLandscape) - let tabletPortrait = SnapshotConfiguration(layoutTraits: .tabletPortrait) - - #expect(phonePortrait.identifierParts == ["phone-compact-regular"]) - #expect(phoneLandscape.identifierParts == ["phone-compact-compact"]) - #expect(tabletPortrait.identifierParts == ["tablet-regular-regular"]) - #expect(Set([ - phonePortrait.identifier, - phoneLandscape.identifier, - tabletPortrait.identifier, - ]) - .count == 3) + @Test func layoutTraitsPreserveExistingReferenceNames() { + #expect(SnapshotConfiguration(device: .iPhone).identifierParts == ["iPhone"]) + #expect(SnapshotConfiguration(device: .iPad).identifierParts == ["iPad"]) + #expect(SnapshotConfiguration(device: .iPhone).device.layoutTraits == .phonePortrait) + #expect(SnapshotConfiguration(device: .iPad).device.layoutTraits == .tablet) } @Test func identifierOrdersAndJoinsPartsWithNameFirst() { diff --git a/Shared/SnapshotKit/Tests/SnapshotDuoFramesTests.swift b/Shared/SnapshotKit/Tests/SnapshotDuoFramesTests.swift new file mode 100644 index 000000000..32c2e7664 --- /dev/null +++ b/Shared/SnapshotKit/Tests/SnapshotDuoFramesTests.swift @@ -0,0 +1,38 @@ +@testable import SnapshotKit +import Testing + +struct SnapshotDuoFramesTests { + @Test(arguments: [ + SnapshotConfiguration.Frame.duoOuterPortrait, + .duoOuterLandscape, + .duoInnerPortrait, + .duoInnerLandscape, + ]) + func duoViewportsRetainPhoneIdiomAndIndependentInsets(_ frame: SnapshotConfiguration.Frame) { + let configuration = SnapshotConfiguration(device: frame) + #expect(configuration.uiTraitCollection.userInterfaceIdiom == .phone) + guard case let .fixed(size) = frame.size else { + Issue.record("Duo shell coverage must use a bounded viewport.") + return + } + let insets = frame.safeAreaInsets.uiEdgeInsets + #expect(size.width > insets.left + insets.right) + #expect(size.height > insets.top + insets.bottom) + #expect(insets.left == 0) + #expect(insets.top > 0 || insets.right > 0) + + var rtl = configuration + rtl.layoutDirection = .rightToLeft + #expect(rtl.device.safeAreaInsets.uiEdgeInsets == insets) + } + + @Test func openingChangesSizeClassesWithoutChangingIdiom() { + let outer = SnapshotConfiguration(device: .duoOuterLandscape).uiTraitCollection + let inner = SnapshotConfiguration(device: .duoInnerLandscape).uiTraitCollection + #expect(outer.horizontalSizeClass == .compact) + #expect(outer.verticalSizeClass == .compact) + #expect(inner.horizontalSizeClass == .regular) + #expect(inner.verticalSizeClass == .regular) + #expect(inner.userInterfaceIdiom == outer.userInterfaceIdiom) + } +} diff --git a/Shared/SnapshotKit/Tests/SnapshotLayoutTraitsTests.swift b/Shared/SnapshotKit/Tests/SnapshotLayoutTraitsTests.swift new file mode 100644 index 000000000..3e079ccbc --- /dev/null +++ b/Shared/SnapshotKit/Tests/SnapshotLayoutTraitsTests.swift @@ -0,0 +1,52 @@ +@testable import SnapshotKit +import SwiftUI +import Testing + +struct SnapshotLayoutTraitsTests { + @Test func namedPresetsKeepTheirIdentifiersAndTruthfulTraits() { + for frame in [ + SnapshotConfiguration.Frame.iPhone, + .iPhoneFullContent, + .iPhoneFullContent2D, + ] { + #expect(SnapshotConfiguration(device: frame).identifier == "iPhone") + #expect(frame.layoutTraits == .phonePortrait) + } + for frame in [SnapshotConfiguration.Frame.iPad, .iPadFullContent, .iPadFullContent2D] { + #expect(SnapshotConfiguration(device: frame).identifier == "iPad") + #expect(frame.layoutTraits == .tablet) + } + #expect(SnapshotConfiguration.Frame.component.layoutTraits == nil) + } + + @Test func explicitConfigurationTraitsOverrideFrameWithoutRenamingReferences() { + let configuration = SnapshotConfiguration(layoutTraits: .phoneLandscape, device: .iPad) + #expect(configuration.resolvedLayoutTraits == .phoneLandscape) + #expect(configuration.uiTraitCollection.userInterfaceIdiom == .phone) + #expect(configuration.uiTraitCollection.horizontalSizeClass == .compact) + #expect(configuration.uiTraitCollection.verticalSizeClass == .compact) + #expect(configuration.identifier == "iPad_phone-compact-compact") + } + + @Test func mapsEachLayoutAxisToUIKit() { + let configuration = SnapshotConfiguration(device: .viewport( + name: "landscapePhone", + size: CGSize(width: 640, height: 320), + layoutTraits: .init( + horizontalSizeClass: .regular, + verticalSizeClass: .compact, + interfaceIdiom: .phone, + ), + )) + #expect(configuration.uiTraitCollection.horizontalSizeClass == .regular) + #expect(configuration.uiTraitCollection.verticalSizeClass == .compact) + #expect(configuration.uiTraitCollection.userInterfaceIdiom == .phone) + } + + @Test func narrowWindowRetainsTabletIdiomWithCompactWidth() { + let configuration = SnapshotConfiguration(device: .narrowWindow) + #expect(configuration.uiTraitCollection.horizontalSizeClass == .compact) + #expect(configuration.uiTraitCollection.verticalSizeClass == .regular) + #expect(configuration.uiTraitCollection.userInterfaceIdiom == .pad) + } +} diff --git a/Shared/SnapshotKit/Tests/SnapshotTraitsTests.swift b/Shared/SnapshotKit/Tests/SnapshotTraitsTests.swift index ec5abbaef..8bf1cc5a6 100644 --- a/Shared/SnapshotKit/Tests/SnapshotTraitsTests.swift +++ b/Shared/SnapshotKit/Tests/SnapshotTraitsTests.swift @@ -7,13 +7,7 @@ import UIKit struct SnapshotTraitsTests { @Test func removesDeviceOverridesWhenAReusedHostReturnsToInheritedTraits() { let host = UIHostingController(rootView: EmptyView()) - applySnapshotTraitOverrides( - SnapshotConfiguration( - contrast: .increased, - layoutTraits: .tabletPortrait, - ), - to: host, - ) + SnapshotConfiguration(contrast: .increased, device: .iPad).applyTraits(to: host) #expect(host.traitCollection.accessibilityContrast == .high) #expect(host.traitCollection.userInterfaceIdiom == .pad) @@ -23,10 +17,7 @@ struct SnapshotTraitsTests { #expect(host.traitOverrides.contains(UITraitHorizontalSizeClass.self)) #expect(host.traitOverrides.contains(UITraitVerticalSizeClass.self)) - applySnapshotTraitOverrides( - SnapshotConfiguration(contrast: .increased), - to: host, - ) + SnapshotConfiguration(contrast: .increased).applyTraits(to: host) #expect(host.traitCollection.accessibilityContrast == .high) #expect(host.traitOverrides.contains(UITraitUserInterfaceIdiom.self) == false) diff --git a/Shared/SnapshotKitTesting/AGENTS.md b/Shared/SnapshotKitTesting/AGENTS.md index c669b4e4f..ed024e5f1 100644 --- a/Shared/SnapshotKitTesting/AGENTS.md +++ b/Shared/SnapshotKitTesting/AGENTS.md @@ -59,6 +59,13 @@ Read the root [`AGENTS.md`](../../AGENTS.md) first. - **A test that pins the wire shape calls `line(...)`.** - **When they were one function, this module's own tests put a fabricated reference at the top of `./test --review`.** Its numbers were borrowed from a real regression. - **Five invented captures also landed in `--timings`.** Then a run that captured nothing reported "5 captures, 0.024s per image". +- **Read display bounds and scale from the marked test-host window.** Never select a process-global main screen. +- **Isolate synthetic captures from the physical scene.** Detach the marked window during an inset-overridden capture, resize it with the content, then restore its scene, frames, visibility, and key state. +- **Keep native geometry when the inset override is nil.** Synthetic captures do not validate Duo system bars or reserved-region delivery. +- **Inset overrides describe content clearance.** Propagate them through the host controller. Native floating bars can retain system positioning; validate their reserved-region clearance on the native runtime. +- **Guards:** `SnapshotImageRenderingTests` checks restoration after success and failure. `LargeViewCaptureTests` checks full searchable content and search placement. +- **Viewport shell captures require companion full-content pane captures.** They do not prove content completeness. +- **Full-content captures reset the primary scroll view to the top after readiness.** Viewport captures preserve restored scroll positions. Guard: `LargeViewCaptureTests.restoredScrollOffsetsApplyOnlyToViewportCaptures`. - **The runner fails fast, once, on setup problems.** Examples: a simulator that does not match the `SNAPSHOT_EXPECTED_*` pins, two variants sharing one reference name. - **Report one clear issue, never hundreds of pixel diffs.** - **An unsettled capture is a failure, not a silent fallback.** @@ -94,7 +101,7 @@ Read the root [`AGENTS.md`](../../AGENTS.md) first. - **A change-free settle loop keeps running until it can prove stability.** A starved machine can fit fewer passes than stability needs. - **Only a hard cap gives up as `.starved`.** That is an environment failure, not view motion. - **Guard: `SnapshotRenderingSupportTests`.** -- **Captures are single-tenant per process.** `renderSnapshotImage` serializes through a FIFO `@MainActor` mutex. +- **Captures are single-tenant per process.** All entry points acquire the FIFO `@MainActor` mutex before window discovery, environment validation, and content preparation. - **The safe-area swizzle is depth-counted.** Nested captures trap. - **Keep the suite serial anyway.** Concurrent scheduling degrades to queued-serial, gaining nothing. - **Guard: `SnapshotKitTestingTests.ConcurrentCaptureTests`.** The rejected experiments below record the interleaving failure. CircleCI shards across isolated VMs and keeps each worker serial; see [the snapshot job](../../.circleci/continue.yml). diff --git a/Shared/SnapshotKitTesting/README.md b/Shared/SnapshotKitTesting/README.md index 6ab2101de..09fb13984 100644 --- a/Shared/SnapshotKitTesting/README.md +++ b/Shared/SnapshotKitTesting/README.md @@ -35,7 +35,7 @@ re-exports `SnapshotKit` and `SnapshotTesting`, so a test author needs a single through `sizeThatFits`. This fallback applies only when scroll content exceeds the reported intrinsic height. A fully visible short document keeps its intrinsic height. Device presets retain their normal viewport height as - the minimum. Height measurement iterates to a stable fixed point for lazy + the minimum. After readiness, full-content captures reset the primary scroll view to the top; viewport captures preserve it. Height measurement iterates to a stable fixed point for lazy content. if it cannot converge within the bounded pass budget, capture throws, the assertion records a test issue, and no arbitrary image is compared or recorded. Captures serialize process-wide through an internal FIFO mutex — @@ -49,6 +49,9 @@ re-exports `SnapshotKit` and `SnapshotTesting`, so a test author needs a single case whose final content arrives asynchronously has to be made deterministic (seed the fixture so the first frame is final, or gate on `onReadyToSnapshot`). + The digest permits one 8-bit color step against the quiet-window anchor to + absorb renderer quantization noise. It keeps that anchor unchanged; any + two-step change anywhere restarts stability. Final image tolerances are separate. `.settledAtLeast(minDuration:)` raises the loop's minimum window for async appearance work that starts quiet and lands after the default floor (the native glass toolbar/tab bar material adaptation). `.immediate` skips the @@ -147,8 +150,10 @@ reference image. It accepts the view, configuration, name, sizing strategy, safe-area insets, readiness hooks, and settle policy. The returned `SnapshotPNG` contains PNG data, point and pixel dimensions, and image scale. -The operation holds the existing capture lock. It also applies snapshot traits, -including explicit interface idiom and size classes. It then does full-content +The operation acquires the capture lock before it finds the host window or prepares content. +Queued cancellation is checked before content mounts. It also applies snapshot traits, +including the interface idiom and size classes from `Frame.layoutTraits`. +It then does full-content measurement, accessibility annotation, settling, and PNG round-tripping. Call it only from a test bundle hosted by `StuffTestHost`. It needs the host app's key window. A rendering or encoding error throws. The caller must not publish @@ -282,43 +287,4 @@ emits one timing line that includes time spent on failed attempts. - Runs in a hosted test bundle (needs a host app window. in this repo that's `StuffTestHost`, reached via `TestHostSupport`). - Device/OS-pinned: reference images are captured on a fixed simulator (this - repo's CI uses iPhone 17 / iOS 27.2). -- Timezone-pinned: references bake wall-clock dates/times into pixels, so the - snapshot scheme pins `TZ` (and the runner verifies it via - `SNAPSHOT_EXPECTED_TIMEZONE`) — see `testScheme` in `Project.swift`. - -## Component comparison sheets - -Use `SnapshotCase.cutsheet(name:configurations:panels:)` to capture the same -component state across consumer-defined appearances. Each `SnapshotPanel` has a -stable typed identity, a display label, and a lazy content builder. Build fresh -fixture state inside that builder. Each configuration produces one two-column -sheet with unscaled, independently hosted panels. Additional panels wrap to new rows. - -The consumer chooses the reference group; Where's theme helper selects `themes`. -The runner stores one PNG with a versioned panel map in its Description metadata. -Each panel uses the ordinary image comparator and its own pixel budget. The complete -sheet also guards headings and spacing. Membership, labels, dimensions, and missing -or malformed metadata fail explicitly. Review the PNG before recording. Preserve -its metadata when copying references; image optimizers that strip metadata invalidate -cutsheet references. - -Single views and cutsheets share configured capture and reference recording helpers. -Each panel's hosting view uses the sheet's fixed white background, including in dark mode. -This fills transparent margins without changing component layout. A component's own background remains visible above it. -Panels retain independent settling and fresh fixtures. The runner compares panels -before assembling their captured images in a SwiftUI `Grid`. SwiftUI lays out labels -and images; geometry observations supply the embedded panel map. The shared hosted -renderer captures the grid. The original component views run only for their independent -captures. All failing panels appear in the verdict, subject to the existing recording policy. - -Ordinary cases accept an optional `SnapshotReferenceGroup`. The default keeps -existing paths. Groups are stable lowercase slugs owned by the consumer; they do -not change configuration identifiers. Special traits use `other/` inside the group. -Use component sheets for appearance coverage and keep screen variants for critical -integration or materially different composition. Preview sheets approximate layout; -the hosted test capture remains authoritative. - -The runner reads SnapshotKit's `Capture` SPI and switches exhaustively between -single-view and cutsheet captures. Panel collections are validated before capture. -No empty-array fallback selects the single-view path. + repo's CI uses the defaults and runtime pins in `Project.swift` and `test`). diff --git a/Shared/SnapshotKitTesting/Sources/AssertComparisonSnapshots.swift b/Shared/SnapshotKitTesting/Sources/AssertComparisonSnapshots.swift index 821862114..64a7f32f4 100644 --- a/Shared/SnapshotKitTesting/Sources/AssertComparisonSnapshots.swift +++ b/Shared/SnapshotKitTesting/Sources/AssertComparisonSnapshots.swift @@ -51,7 +51,6 @@ func captureSnapshotPanels( _ snapshotCase: SnapshotCase, configuration: SnapshotConfiguration, ) async throws -> [SnapshotPanelCapture] { - try waitFor { hostKeyWindow()?.rootViewController != nil } let identifier = fullSnapshotIdentifier( caseName: snapshotCase.name, configuration: configuration, diff --git a/Shared/SnapshotKitTesting/Sources/AssertSnapshots.swift b/Shared/SnapshotKitTesting/Sources/AssertSnapshots.swift index b60b9d1d4..3f000bae6 100644 --- a/Shared/SnapshotKitTesting/Sources/AssertSnapshots.swift +++ b/Shared/SnapshotKitTesting/Sources/AssertSnapshots.swift @@ -1,7 +1,6 @@ @_spi(Capture) import SnapshotKit import SnapshotTesting import SwiftUI -import TestHostSupport import Testing import UIKit @@ -25,7 +24,7 @@ public func assertSnapshots( line: UInt = #line, column: UInt = #column, ) async { - guard simulatorMatchesSnapshotExpectations() else { return } + guard await validateSnapshotEnvironment() else { return } do { _ = try SnapshotSettleTimeoutPolicy.fromEnvironment() } catch { @@ -60,22 +59,25 @@ public func assertSnapshots( column: column, ) case let .single(content): - await assertSnapshots( - of: content(), - named: snapshotCase.name, - configurations: snapshotCase.configurations, - referenceGroup: snapshotCase.referenceGroup, - measurementReadiness: snapshotCase.measurementReadiness, - onReadyToMeasure: snapshotCase.onReadyToMeasure, - settle: snapshotCase.settle, - onReadyToSnapshot: snapshotCase.onReadyToSnapshot, - record: record, - fileID: fileID, - file: filePath, - testName: testName, - line: line, - column: column, - ) + for configuration in snapshotCase.configurations { + guard !Task.isCancelled else { return } + await assertSnapshots( + of: content(), + named: snapshotCase.name, + configurations: [configuration], + referenceGroup: snapshotCase.referenceGroup, + measurementReadiness: snapshotCase.measurementReadiness, + onReadyToMeasure: snapshotCase.onReadyToMeasure, + settle: snapshotCase.settle, + onReadyToSnapshot: snapshotCase.onReadyToSnapshot, + record: record, + fileID: fileID, + file: filePath, + testName: testName, + line: line, + column: column, + ) + } } } } @@ -104,14 +106,7 @@ public func assertSnapshots( line: UInt = #line, column: UInt = #column, ) async { - guard simulatorMatchesSnapshotExpectations() else { return } - do { - try waitFor { hostKeyWindow() != nil } - } catch { - Issue.record("Snapshot host window never appeared: \(error)") - return - } - + guard await validateSnapshotEnvironment() else { return } // Record-mode precedence, resolved here so callers need no per-suite trait: // an explicit `record:` argument wins, then the environment override // (`SNAPSHOT_RECORD`, forwarded as TEST_RUNNER_SNAPSHOT_RECORD on the command @@ -226,7 +221,7 @@ func environmentRecordMode() -> SnapshotTestingConfiguration.Record? { /// When the expectation variables are absent (direct `renderSnapshotImage` /// callers, non-scheme invocations), the guard is inert. @MainActor -private func simulatorMatchesSnapshotExpectations() -> Bool { +private func simulatorMatchesSnapshotExpectations(in hostWindow: UIWindow) -> Bool { let environment = ProcessInfo.processInfo.environment var mismatches: [String] = [] @@ -240,7 +235,7 @@ private func simulatorMatchesSnapshotExpectations() -> Bool { } if let expectedScale = environment["SNAPSHOT_EXPECTED_SCREEN_SCALE"] { - let actualScale = Double(UIScreen.main.scale) + let actualScale = Double(hostWindow.traitCollection.displayScale) if Double(expectedScale) != actualScale { mismatches.append( """ @@ -277,3 +272,18 @@ private func simulatorMatchesSnapshotExpectations() -> Bool { } return true } + +/// Resolve native environment only while the marked host is available. +@MainActor +private func validateSnapshotEnvironment() async -> Bool { + do { + return try await SnapshotCaptureLock.withHost { window in + simulatorMatchesSnapshotExpectations(in: window) + } + } catch is CancellationError { + return false + } catch { + Issue.record(error) + return false + } +} diff --git a/Shared/SnapshotKitTesting/Sources/CaptureConfiguredSnapshot.swift b/Shared/SnapshotKitTesting/Sources/CaptureConfiguredSnapshot.swift index 4611a964c..d993bf794 100644 --- a/Shared/SnapshotKitTesting/Sources/CaptureConfiguredSnapshot.swift +++ b/Shared/SnapshotKitTesting/Sources/CaptureConfiguredSnapshot.swift @@ -22,35 +22,38 @@ func captureConfiguredSnapshot( timeoutPolicy: SnapshotSettleTimeoutPolicy, backgroundColor: UIColor = .clear, ) async throws -> ConfiguredSnapshotCapture { - let sizing: SnapshotSizing = switch configuration.device.size { - case .fixed: .fixed - case let .intrinsic(width): .intrinsic( - width: width ?? UIScreen.main.bounds.width, - minimumHeight: 0, + var retainedTiming: SnapshotCaptureTiming? + return try await SnapshotCaptureRetry.capture(named: name, operation: { + try await SnapshotCaptureLock.withHost { window in + let sizing: SnapshotSizing = switch configuration.device.size { + case .fixed: .fixed + case let .intrinsic(width): .intrinsic( + width: width ?? window.bounds.width, + minimumHeight: 0, + ) + case let .fullContent(width, minimumHeight): .intrinsic( + width: width, + minimumHeight: minimumHeight ?? 0, + ) + case let .fullContent2D(minimumSize): .fullContent2D(minimumSize: minimumSize) + } + let timing = retainedTiming ?? SnapshotCaptureTiming( + identifier: name, + isEnabled: SnapshotCaptureTiming.isEnabledByEnvironment, + sizing: sizing, + measurementReadiness: measurementReadiness, + captureSettle: settle, ) - case let .fullContent(width, minimumHeight): .intrinsic( - width: width, - minimumHeight: minimumHeight ?? 0, + retainedTiming = timing + let controller = makeHostingController( + for: view, + configuration: configuration, + hostWidth: window.bounds.width, ) - case let .fullContent2D(minimumSize): .fullContent2D(minimumSize: minimumSize) - } - let timing = SnapshotCaptureTiming( - identifier: name, - isEnabled: SnapshotCaptureTiming.isEnabledByEnvironment, - sizing: sizing, - measurementReadiness: measurementReadiness, - captureSettle: settle, - ) - let capture = try await SnapshotCaptureRetry.capture( - named: name, - makeViewController: { - let controller = makeHostingController(for: view, configuration: configuration) controller.view.backgroundColor = backgroundColor - return controller - }, - capture: { controller in - try await renderSnapshotCapture( + let capture = try await renderSnapshotCaptureLocked( of: controller, + hostWindow: window, named: name, sizing: sizing, safeAreaInsets: configuration.device.safeAreaInsets.uiEdgeInsets, @@ -63,8 +66,7 @@ func captureConfiguredSnapshot( settleTimeoutPolicy: timeoutPolicy, timing: timing, ) - }, - report: { print($0) }, - ) - return ConfiguredSnapshotCapture(capture: capture, timing: timing) + return ConfiguredSnapshotCapture(capture: capture, timing: timing) + } + }, report: { print($0) }) } diff --git a/Shared/SnapshotKitTesting/Sources/SnapshotCaptureLock.swift b/Shared/SnapshotKitTesting/Sources/SnapshotCaptureLock.swift index bc9722733..113e4f443 100644 --- a/Shared/SnapshotKitTesting/Sources/SnapshotCaptureLock.swift +++ b/Shared/SnapshotKitTesting/Sources/SnapshotCaptureLock.swift @@ -1,4 +1,6 @@ import Foundation +import TestHostSupport +import UIKit /// Serializes snapshot captures process-wide. /// @@ -27,11 +29,12 @@ enum SnapshotCaptureLock { @TaskLocal private static var taskHoldsLock = false - /// Runs `operation` while holding the process-wide capture lock, waiting - /// (FIFO) for any in-flight capture to finish first. - static func withLock( - _ operation: @MainActor () async throws -> Output, - ) async rethrows -> Output { + /// Resolves the marked window after acquiring the capture lock. Synthetic + /// captures detach it from its scene, so discovery and width-dependent + /// hosting must wait until the previous capture restores it. + static func withHost( + _ operation: @MainActor (UIWindow) async throws -> Output, + ) async throws -> Output { precondition( !taskHoldsLock, """ @@ -43,7 +46,12 @@ enum SnapshotCaptureLock { await acquire() defer { release() } return try await $taskHoldsLock.withValue(true) { - try await operation() + try Task.checkCancellation() + try waitFor { hostKeyWindow()?.rootViewController != nil } + guard let window = hostKeyWindow() else { + preconditionFailure("SnapshotKitTesting requires the StuffTestHost key window.") + } + return try await operation(window) } } diff --git a/Shared/SnapshotKitTesting/Sources/SnapshotCaptureRetry.swift b/Shared/SnapshotKitTesting/Sources/SnapshotCaptureRetry.swift index cb7aeee48..15a626883 100644 --- a/Shared/SnapshotKitTesting/Sources/SnapshotCaptureRetry.swift +++ b/Shared/SnapshotKitTesting/Sources/SnapshotCaptureRetry.swift @@ -17,12 +17,20 @@ import UIKit return try await capture(controller) } + return try await Self.capture(named: name, operation: attempt, report: report) + } + + public static func capture( + named name: String, + operation: () async throws -> Output, + report: (String) -> Void, + ) async throws -> Output { let maximumAttempts = 3 var attemptNumber = 1 while true { try Task.checkCancellation() do { - let result = try await attempt() + let result = try await operation() try Task.checkCancellation() if attemptNumber > 1 { report( diff --git a/Shared/SnapshotKitTesting/Sources/SnapshotHostingController.swift b/Shared/SnapshotKitTesting/Sources/SnapshotHostingController.swift index d70948e3c..1f637e4d4 100644 --- a/Shared/SnapshotKitTesting/Sources/SnapshotHostingController.swift +++ b/Shared/SnapshotKitTesting/Sources/SnapshotHostingController.swift @@ -2,17 +2,31 @@ import SnapshotKit import SwiftUI import UIKit -/// Builds a host with the configuration's SwiftUI and UIKit traits. +/// Builds a hosting controller for `view` with the configuration's appearance +/// traits applied and a starting frame set. Dynamic Type, color scheme, layout +/// direction, and legibility weight are applied through the SwiftUI environment +/// (so measurement reflects them) and mirrored onto UIKit trait overrides (for +/// any embedded UIKit); increased contrast — which SwiftUI can't set — is a +/// trait override only. Intrinsic components get only their width here; the +/// pipeline measures their height after the content settles. +/// +/// SwiftUI transaction animations are disabled at the root: every state change +/// in the hosted tree commits its end state instantly instead of animating, so +/// finite time-based reveals no longer "run to completion" during settle — there +/// is no mid-flight frame to catch. The settle loop remains for `.task`-driven +/// async content, which still needs real suspension time to load. @MainActor func makeHostingController( for view: some View, configuration: SnapshotConfiguration, + hostWidth: CGFloat, ) -> UIViewController { let styled = view .environment(\.colorScheme, configuration.colorScheme) .dynamicTypeSize(configuration.dynamicType) .environment(\.layoutDirection, configuration.layoutDirection) .environment(\.legibilityWeight, configuration.legibilityWeight) + .snapshotLayoutTraits(configuration) .transaction { $0.disablesAnimations = true $0.animation = nil @@ -20,24 +34,13 @@ func makeHostingController( let hostingController = UIHostingController(rootView: styled) hostingController.view.backgroundColor = .clear - let traits = configuration.uiTraitCollection - hostingController.traitOverrides.userInterfaceStyle = traits.userInterfaceStyle - hostingController.traitOverrides.preferredContentSizeCategory = traits - .preferredContentSizeCategory - hostingController.traitOverrides.accessibilityContrast = traits.accessibilityContrast - hostingController.traitOverrides.layoutDirection = traits.layoutDirection - hostingController.traitOverrides.legibilityWeight = traits.legibilityWeight - if configuration.layoutTraits != nil { - hostingController.traitOverrides.userInterfaceIdiom = traits.userInterfaceIdiom - hostingController.traitOverrides.horizontalSizeClass = traits.horizontalSizeClass - hostingController.traitOverrides.verticalSizeClass = traits.verticalSizeClass - } + configuration.applyTraits(to: hostingController) switch configuration.device.size { case let .fixed(size): hostingController.view.frame = CGRect(origin: .zero, size: size) case let .intrinsic(maxWidth): - let width = maxWidth ?? UIScreen.main.bounds.width + let width = maxWidth ?? hostWidth hostingController.view.frame = CGRect(x: 0, y: 0, width: width, height: 1) case let .fullContent(width, minimumHeight): let height = minimumHeight ?? 1 diff --git a/Shared/SnapshotKitTesting/Sources/SnapshotImageGrid.swift b/Shared/SnapshotKitTesting/Sources/SnapshotImageGrid.swift index dcd6e109f..a808f645f 100644 --- a/Shared/SnapshotKitTesting/Sources/SnapshotImageGrid.swift +++ b/Shared/SnapshotKitTesting/Sources/SnapshotImageGrid.swift @@ -57,58 +57,69 @@ struct SnapshotImageGrid: View { guard !panels.isEmpty, Set(panels.map(\.identity)).count == panels.count, panels.allSatisfy({ $0.image.cgImage != nil }) else { throw Failure.invalidPanels } - guard let window = hostKeyWindow() else { - preconditionFailure("Snapshot image grids require the StuffTestHost key window.") - } - let scale = window.traitCollection.displayScale - guard panels.allSatisfy({ $0.image.scale == scale }) else { throw Failure.mixedScales } - let measurement = Measurement() - let controller = makeHostingController( - for: SnapshotImageGrid(panels: panels, measurement: measurement), - configuration: SnapshotConfiguration(), - ) - // Images and fixed-font labels have synchronous ideal sizes. SwiftUI owns - // both axes; this measurement sets only the capture viewport. - let size = controller.view.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize) - guard size.width > 0, size.height > 0, - size.width * scale <= 32000, size.height * scale <= 32000, - size.width * size.height * scale * scale <= 100_000_000 - else { throw Failure.oversizedGrid } - controller.view.frame = CGRect(origin: .zero, size: size) - let image = try await renderSnapshotImage( - of: controller, - named: name, - settle: .settled, - ) - guard let pixels = image.cgImage else { throw Failure.invalidPanels } - let canvas = CGRect(x: 0, y: 0, width: pixels.width, height: pixels.height) - let placements = try panels.map { panel in - guard let bounds = measurement.bounds[panel.identity], - let original = panel.image.cgImage - else { - throw Failure.invalidGeometry - } - let pixelBounds = CGRect( - x: (bounds.minX * scale).rounded(), - y: (bounds.minY * scale).rounded(), - width: (bounds.width * scale).rounded(), - height: (bounds.height * scale).rounded(), + return try await SnapshotCaptureLock.withHost { window in + let scale = window.traitCollection.displayScale + guard panels.allSatisfy({ $0.image.scale == scale }) else { throw Failure.mixedScales } + let measurement = Measurement() + let controller = makeHostingController( + for: SnapshotImageGrid(panels: panels, measurement: measurement), + configuration: SnapshotConfiguration(), + hostWidth: window.bounds.width, ) - guard canvas.contains(pixelBounds), - pixelBounds.size == CGSize(width: original.width, height: original.height) - else { - throw Failure.invalidGeometry - } - return SnapshotComparisonLayout.Panel( - identity: panel.identity, - label: panel.label, - bounds: pixelBounds, + // Images and fixed-font labels have synchronous ideal sizes. SwiftUI owns + // both axes; this measurement sets only the capture viewport. + let size = controller.view.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize) + guard size.width > 0, size.height > 0, + size.width * scale <= 32000, size.height * scale <= 32000, + size.width * size.height * scale * scale <= 100_000_000 + else { throw Failure.oversizedGrid } + controller.view.frame = CGRect(origin: .zero, size: size) + let capture = try await renderSnapshotCaptureLocked( + of: controller, + hostWindow: window, + named: name, + sizing: .fixed, + safeAreaInsets: .zero, + isAccessibility: false, + measurementReadiness: .sameAsCapture, + onReadyToMeasure: nil, + measurementHookTimeout: nil, + settle: .settled, + onReadyToSnapshot: nil, + settleTimeoutPolicy: .fromEnvironment(), + timing: SnapshotCaptureTiming(identifier: name, isEnabled: false), ) + let image = capture.image + guard let pixels = image.cgImage else { throw Failure.invalidPanels } + let canvas = CGRect(x: 0, y: 0, width: pixels.width, height: pixels.height) + let placements = try panels.map { panel in + guard let bounds = measurement.bounds[panel.identity], + let original = panel.image.cgImage + else { + throw Failure.invalidGeometry + } + let pixelBounds = CGRect( + x: (bounds.minX * scale).rounded(), + y: (bounds.minY * scale).rounded(), + width: (bounds.width * scale).rounded(), + height: (bounds.height * scale).rounded(), + ) + guard canvas.contains(pixelBounds), + pixelBounds.size == CGSize(width: original.width, height: original.height) + else { + throw Failure.invalidGeometry + } + return SnapshotComparisonLayout.Panel( + identity: panel.identity, + label: panel.label, + bounds: pixelBounds, + ) + } + return SnapshotImageReference(image: image, layout: .init( + panels: placements, + pixelSize: CGSize(width: pixels.width, height: pixels.height), + )) } - return SnapshotImageReference(image: image, layout: .init( - panels: placements, - pixelSize: CGSize(width: pixels.width, height: pixels.height), - )) } enum Failure: Error { diff --git a/Shared/SnapshotKitTesting/Sources/SnapshotImageRendering.swift b/Shared/SnapshotKitTesting/Sources/SnapshotImageRendering.swift index 338dc44a4..a8990ec8e 100644 --- a/Shared/SnapshotKitTesting/Sources/SnapshotImageRendering.swift +++ b/Shared/SnapshotKitTesting/Sources/SnapshotImageRendering.swift @@ -231,10 +231,10 @@ public func renderSnapshotImage( settleTimeoutPolicy: SnapshotSettleTimeoutPolicy, timing: SnapshotCaptureTiming, ) async throws -> SnapshotCapture { - try await SnapshotCaptureLock.withLock { - try Task.checkCancellation() - return try await renderSnapshotImageLocked( + try await SnapshotCaptureLock.withHost { window in + try await renderSnapshotCaptureLocked( of: viewController, + hostWindow: window, named: name, sizing: sizing, safeAreaInsets: safeAreaInsets, @@ -254,8 +254,9 @@ public func renderSnapshotImage( /// ``renderSnapshotImage(of:named:sizing:safeAreaInsets:isAccessibility:measurementReadiness:onReadyToMeasure:measurementHookTimeout:settle:onReadyToSnapshot:)``, /// run while holding ``SnapshotCaptureLock``. @MainActor -private func renderSnapshotImageLocked( +func renderSnapshotCaptureLocked( of viewController: UIViewController, + hostWindow window: UIWindow, named name: String, sizing: SnapshotSizing, safeAreaInsets: UIEdgeInsets?, @@ -269,31 +270,63 @@ private func renderSnapshotImageLocked( timing: SnapshotCaptureTiming, ) async throws -> SnapshotCapture { func capture() async throws -> SnapshotCapture { - // `hostKeyWindow()` is the specific window `StuffTestHost` stamps with - // `isMainTestHostWindow` — the guaranteed root window we set up, not - // merely whatever window happens to be key. So this is stable regardless - // of any transient key-window changes during a capture. - guard let window = hostKeyWindow(), let hostRoot = window.rootViewController else { + guard let hostRoot = window.rootViewController else { preconditionFailure( "SnapshotKitTesting requires the StuffTestHost key window. Run snapshot tests in a hosted bundle.", ) } let initialContentFrame = viewController.view.frame + let initialScene = window.windowScene + let initialKeyWindow = initialScene?.keyWindow + let initialWindowFrame = window.frame + let initialHostFrame = hostRoot.view.frame + let initialAdditionalInsets = hostRoot.additionalSafeAreaInsets + let wasKeyWindow = window.isKeyWindow + let wasHidden = window.isHidden let animationsWereEnabled = UIView.areAnimationsEnabled UIView.setAnimationsEnabled(false) defer { viewController.view.frame = initialContentFrame viewController.traitOverrides.remove(SnapshotCaptureTrait.self) + hostRoot.additionalSafeAreaInsets = initialAdditionalInsets + window.windowScene = initialScene + window.frame = initialWindowFrame + hostRoot.view.frame = initialHostFrame + window.isHidden = wasHidden + if wasKeyWindow { + window.makeKey() + } else { + window.resignKey() + initialKeyWindow?.makeKey() + } + window.layoutIfNeeded() UIView.setAnimationsEnabled(animationsWereEnabled) } + // iOS 27.1 anchors native search chrome to the scene's physical display, + // even when the window and every child have a larger synthetic frame. + // Isolate the marked host window for this serialized capture, retaining + // its appeared root and restoring its scene on success and failure. + // A nil inset override requests native scene geometry instead. + if let safeAreaInsets { + window.windowScene = nil + window.makeKeyAndVisible() + // UIKit containers propagate these insets through their controller + // hierarchy; a root UIView getter override alone covers SwiftUI only. + hostRoot.additionalSafeAreaInsets = safeAreaInsets + } + // Set on the content controller itself (not a wrapper) so it survives // re-hosting between the intrinsic-measurement probe and the capture // wrapper; UIKit propagates it down the tree and the bridged key // surfaces it to SwiftUI as `\.isCapturingSnapshot`. viewController.traitOverrides[SnapshotCaptureTrait.self] = true + if case .fixed = sizing { + resizeHostWindow(window, root: hostRoot, to: initialContentFrame.size) + } + try await resolveContentSize( of: viewController, named: name, @@ -324,7 +357,13 @@ private func renderSnapshotImageLocked( wrappingViewController.view.setNeedsLayout() CATransaction.performWithoutAnimation(wrappingViewController.view.layoutIfNeeded) } - defer { removeChildAfterCapture(wrappingViewController) } + defer { + removeChildAfterCapture(viewController) + if captureViewController !== viewController { + removeChildAfterCapture(captureViewController) + } + removeChildAfterCapture(wrappingViewController) + } try await throwIfUnsettled( timing.measure(.settle) { @@ -366,6 +405,36 @@ private func renderSnapshotImageLocked( ) } + // A pane can restore its anchor when the measurement host is replaced. + // Full-content sizing must include its first row even when that late + // scroll request survives expansion to the complete content height. + if case .intrinsic = sizing, + let scrollView = viewController.view.viewportFillingScrollContentExtent?.scrollView, + abs(scrollView.contentOffset.y + scrollView.adjustedContentInset.top) > 0.5 + { + CATransaction.performWithoutAnimation { + scrollView.setContentOffset( + CGPoint(x: scrollView.contentOffset.x, y: -scrollView.adjustedContentInset.top), + animated: false, + ) + wrappingViewController.view.layoutIfNeeded() + } + try await throwIfUnsettled( + timing.measure(.settle) { + await settleForCapture( + wrappingViewController.view, + named: name, + settle: settle, + timing: timing, + timeoutPolicy: settleTimeoutPolicy, + ) + }, + phase: "full-content scroll reset", + of: viewController, + named: name, + ) + } + // Parse accessibility only after the content has settled, so the // annotation reflects the loaded/revealed state (not a placeholder). // A raised settle floor opts accessibility rendering into a preparation @@ -473,6 +542,15 @@ private func removeChildAfterCapture(_ child: UIViewController) { child.removeFromParent() } +/// Keeps native chrome aligned with the synthetic viewport after scene isolation. +@MainActor +private func resizeHostWindow(_ window: UIWindow, root: UIViewController, to size: CGSize) { + window.frame.size = size + root.view.frame = window.bounds + window.setNeedsLayout() + CATransaction.performWithoutAnimation(window.layoutIfNeeded) +} + /// For measured-content sizing, hosts the content at the initial viewport with /// the full appearance lifecycle driven (so SwiftUI `.task` loads and finite /// time-based reveals run), lets it settle, then measures `sizeThatFits` and @@ -529,6 +607,7 @@ private func resolveContentSize( } let probeWrapper = timing.measure(.intrinsicMeasure) { + resizeHostWindow(window, root: hostRoot, to: probeSize) viewController.view.frame = CGRect(origin: .zero, size: probeSize) let wrapper = SnapshotWrappingViewController(viewController) @@ -603,6 +682,7 @@ private func resolveContentSize( var measuredHeights = [measured.height] var didConverge = false for _ in 0 ..< 10 { + resizeHostWindow(window, root: hostRoot, to: measured) viewController.view.frame = CGRect(origin: .zero, size: measured) probeWrapper.view.frame.size = measured CATransaction.performWithoutAnimation(probeWrapper.view.layoutIfNeeded) @@ -664,6 +744,7 @@ private func resolveContentSize( named: name, ) timing.measure(.intrinsicMeasure) { + resizeHostWindow(window, root: hostRoot, to: measurement.size) viewController.view.frame = CGRect(origin: .zero, size: measurement.size) probeWrapper.view.frame.size = measurement.size CATransaction.performWithoutAnimation(probeWrapper.view.layoutIfNeeded) diff --git a/Shared/SnapshotKitTesting/Sources/SnapshotPNG.swift b/Shared/SnapshotKitTesting/Sources/SnapshotPNG.swift index 10ad0918f..55b2be613 100644 --- a/Shared/SnapshotKitTesting/Sources/SnapshotPNG.swift +++ b/Shared/SnapshotKitTesting/Sources/SnapshotPNG.swift @@ -1,6 +1,5 @@ import SnapshotKit import SwiftUI -import TestHostSupport import UIKit /// PNG bytes and dimensions from a hosted capture without a reference compare. @@ -34,23 +33,29 @@ public func captureSnapshotPNG( settle: SnapshotSettle, onReadyToSnapshot: (@MainActor () async -> Void)?, ) async throws -> SnapshotPNG { - try waitFor { hostKeyWindow()?.rootViewController != nil } - let controller = makeHostingController(for: view, configuration: configuration) let timeoutPolicy = try SnapshotSettleTimeoutPolicy.fromEnvironment() - let capture = try await renderSnapshotCapture( - of: controller, - named: name, - sizing: sizing, - safeAreaInsets: safeAreaInsets, - isAccessibility: configuration.snapshotType == .accessibility, - measurementReadiness: measurementReadiness, - onReadyToMeasure: onReadyToMeasure, - measurementHookTimeout: measurementHookTimeout, - settle: settle, - onReadyToSnapshot: onReadyToSnapshot, - settleTimeoutPolicy: timeoutPolicy, - timing: SnapshotCaptureTiming(identifier: name, isEnabled: false), - ) + let capture = try await SnapshotCaptureLock.withHost { window in + let controller = makeHostingController( + for: view, + configuration: configuration, + hostWidth: window.bounds.width, + ) + return try await renderSnapshotCaptureLocked( + of: controller, + hostWindow: window, + named: name, + sizing: sizing, + safeAreaInsets: safeAreaInsets, + isAccessibility: configuration.snapshotType == .accessibility, + measurementReadiness: measurementReadiness, + onReadyToMeasure: onReadyToMeasure, + measurementHookTimeout: measurementHookTimeout, + settle: settle, + onReadyToSnapshot: onReadyToSnapshot, + settleTimeoutPolicy: timeoutPolicy, + timing: SnapshotCaptureTiming(identifier: name, isEnabled: false), + ) + } guard let image = capture.image.cgImage else { throw SnapshotRenderingError.missingCGImage(name: name) } diff --git a/Shared/SnapshotKitTesting/Tests/AssertSnapshotsTests.swift b/Shared/SnapshotKitTesting/Tests/AssertSnapshotsTests.swift index 368755557..3042bde2f 100644 --- a/Shared/SnapshotKitTesting/Tests/AssertSnapshotsTests.swift +++ b/Shared/SnapshotKitTesting/Tests/AssertSnapshotsTests.swift @@ -1,9 +1,10 @@ import SnapshotKit -@_spi(Testing) import SnapshotKitTesting +@_spi(Testing) @testable import SnapshotKitTesting import SwiftUI import Synchronization import TestHostSupport import Testing +import UIKit @MainActor struct AssertSnapshotsTests { @@ -65,6 +66,231 @@ struct AssertSnapshotsTests { #expect(comparisons.withLock { $0 } == 1) } + @Test func assertionWaitsForCaptureBeforeResolvingTheHostWidth() async throws { + try waitFor { hostKeyWindow() != nil } + let originalWidth = try #require(hostKeyWindow()).bounds.width + let probe = AssertionCaptureQueueProbe() + let holder = Task { @MainActor in + try await captureSnapshotPNG( + of: Color.red, + configuration: SnapshotConfiguration(device: .init( + name: "holder", + size: .fixed(CGSize(width: 80, height: 60)), + )), + named: "assertion-queue-holder", + sizing: .fixed, + safeAreaInsets: .zero, + measurementReadiness: .sameAsCapture, + onReadyToMeasure: nil, + settle: .immediate, + onReadyToSnapshot: { + probe.holderStarted = true + while !probe.canFinishHolder, !Task.isCancelled { + await Task.yield() + } + }, + ) + } + defer { + probe.canFinishHolder = true + holder.cancel() + } + try await waitForAsync { probe.holderStarted } + + let name = UUID().uuidString + let source: StaticString = "/tmp/SnapshotKitFixtureProbes/Fixture.swift" + let assertion = Task { @MainActor in + probe.assertionStarted = true + await withKnownIssue("Recording a temporary image intentionally reports an issue") { + await assertSnapshots( + of: Color.blue.frame(height: 40), + named: "Queued", + configurations: [SnapshotConfiguration(device: .init( + name: "host-width", + size: .intrinsic(maxWidth: nil), + ))], + measurementReadiness: .immediate, + settle: .immediate, + record: .all, + file: source, + testName: name, + ) + } matching: { issue in + if case .unconditional = issue.kind { + return issue.comments.contains { + $0.rawValue.hasPrefix("Record mode is on. Automatically recorded snapshot:") + } + } + return false + } + } + try await waitForAsync { probe.assertionStarted } + probe.canFinishHolder = true + _ = try await holder.value + await assertion.value + + let reference = snapshotReferenceURL( + testFilePath: "\(source)", + testName: name, + identifier: "Queued_host-width", + configuration: SnapshotConfiguration(device: .init( + name: "host-width", + size: .intrinsic(maxWidth: nil), + )), + ) + let image = try #require(UIImage(contentsOfFile: reference.path)) + let pixels = try #require(image.cgImage) + let scale = try #require(hostKeyWindow()).traitCollection.displayScale + #expect(CGFloat(pixels.width) == originalWidth * scale) + #expect(image.probePixel(atUnitPoint: CGPoint(x: 0.5, y: 0.5)).blue > 0.5) + try FileManager.default.removeItem(at: reference) + } + + @Test func mountedHostResizesWithoutReplacingViewState() async throws { + let probe = SnapshotResizeProbeState() + let host = UIHostingController(rootView: SnapshotResizeProbe(state: probe)) + let frames: [SnapshotConfiguration.Frame] = [ + .narrowWindow, + .iPad, + .viewport( + name: "short-window", + size: CGSize(width: 640, height: 320), + layoutTraits: .init( + horizontalSizeClass: .regular, + verticalSizeClass: .compact, + interfaceIdiom: .pad, + ), + ), + .narrowWindow, + ] + try await show(host) { controller in + var firstIdentity: UUID? + for frame in frames { + guard case let .fixed(size) = frame.size else { + Issue.record("Resize fixtures must have explicit viewport bounds.") + return + } + let traits = try #require(frame.layoutTraits) + SnapshotConfiguration(device: frame).applyTraits(to: controller) + controller.view.frame = CGRect(origin: .zero, size: size) + controller.view.layoutIfNeeded() + do { + try await waitForAsync { + probe.size == size + && probe.horizontal == traits.horizontalSizeClass.swiftUISizeClass + && probe.vertical == traits.verticalSizeClass.swiftUISizeClass + && probe.identity != nil + } + } catch { + Issue + .record( + "Resize \(frame.name): measured \(String(describing: probe.size)), horizontal \(String(describing: probe.horizontal)), vertical \(String(describing: probe.vertical)), identity \(String(describing: probe.identity))", + ) + throw error + } + if let firstIdentity { + #expect(probe.identity == firstIdentity) + } else { + firstIdentity = probe.identity + } + } + } + } + + @Test func providerConstructsFreshContentForEachConfiguration() async throws { + IndependentSnapshotProvider.probes = [] + let name = UUID().uuidString + let source: StaticString = "/tmp/SnapshotKitFixtureProbes/Fixture.swift" + await withKnownIssue("Recording temporary images intentionally reports issues") { + await assertSnapshots( + of: IndependentSnapshotProvider.self, + record: .all, + file: source, + testName: name, + ) + } matching: { issue in + if case .unconditional = issue.kind { + return issue.comments.contains { + $0.rawValue.hasPrefix("Record mode is on. Automatically recorded snapshot:") + } + } + return false + } + #expect(IndependentSnapshotProvider.probes.count == 2) + #expect(IndependentSnapshotProvider.probes.allSatisfy { $0.mutations == 1 }) + for identifier in ["Independent", "Independent_second"] { + let url = snapshotReferenceURL( + testFilePath: "\(source)", + testName: name, + identifier: identifier, + configuration: SnapshotConfiguration(), + ) + let image = try #require(UIImage(contentsOfFile: url.path)) + let center = image.probePixel(atUnitPoint: CGPoint(x: 0.5, y: 0.5)) + #expect(center.green > 0.5) + #expect(center.red < 0.5) + try FileManager.default.removeItem(at: url) + } + IndependentSnapshotProvider.probes = [] + } + + @Test func removingExplicitLayoutTraitsRestoresInheritance() { + let host = UIHostingController(rootView: Color.clear) + SnapshotConfiguration(device: .iPad).applyTraits(to: host) + #expect(host.traitOverrides.contains(UITraitUserInterfaceIdiom.self)) + SnapshotConfiguration().applyTraits(to: host) + #expect(host.traitOverrides.contains(UITraitUserInterfaceIdiom.self) == false) + #expect(host.traitOverrides.contains(UITraitHorizontalSizeClass.self) == false) + #expect(host.traitOverrides.contains(UITraitVerticalSizeClass.self) == false) + } + + @Test func configuredLayoutTraitsReachSwiftUIAndUIKit() throws { + let probe = SnapshotLayoutProbeState() + let host = makeHostingController( + for: SnapshotLayoutProbe(state: probe), + configuration: SnapshotConfiguration(device: .iPad), + hostWidth: 402, + ) + try show(host) { controller in + try waitFor { probe.horizontal == .regular && probe.vertical == .regular } + #expect(controller.traitCollection.userInterfaceIdiom == .pad) + } + } + + @Test func componentWithoutLayoutTraitsInheritsTheHost() throws { + let probe = SnapshotLayoutProbeState() + let host = makeHostingController( + for: SnapshotLayoutProbe(state: probe), + configuration: SnapshotConfiguration(), + hostWidth: 320, + ) + #expect(host.view.frame.width == 402) + try show(host) { controller in + controller.traitOverrides.horizontalSizeClass = .regular + controller.traitOverrides.verticalSizeClass = .compact + try waitFor { probe.horizontal == .regular && probe.vertical == .compact } + } + } + + @Test func previewAndCaptureUseTheSameLayoutTraits() throws { + let probe = SnapshotLayoutProbeState() + let host = UIHostingController(rootView: SnapshotLayoutProbe(state: probe) + .snapshotTraits(SnapshotConfiguration(device: .narrowWindow))) + try show(host) { _ in + try waitFor { probe.horizontal == .compact && probe.vertical == .regular } + } + } + + @Test func intrinsicFallbackUsesMarkedHostWidth() { + let frame = SnapshotConfiguration.Frame(name: "unbounded", size: .intrinsic(maxWidth: nil)) + let host = makeHostingController( + for: Color.green, + configuration: SnapshotConfiguration(device: frame), + hostWidth: 731, + ) + #expect(host.view.frame.width == 731) + } + @Test func cancellationDuringMeasurementReadinessEndsQuietly() async throws { try waitFor { hostKeyWindow() != nil } let probe = MeasurementHookCancellationProbe() @@ -91,7 +317,7 @@ struct AssertSnapshotsTests { await assertion.value } - @Test func cancelledProviderDoesNotBuildItsNextCase() async throws { + @Test func cancelledProviderDoesNotBuildItsNextCaseOrConfiguration() async throws { try waitFor { hostKeyWindow() != nil } let probe = MeasurementHookCancellationProbe() let hooks = ProviderCancellationHooks( @@ -101,6 +327,7 @@ struct AssertSnapshotsTests { await Task.yield() } }, + didBuildContent: { probe.contentBuildCount += 1 }, didBuildSecondCase: { probe.didBuildSecondCase = true }, @@ -118,17 +345,27 @@ struct AssertSnapshotsTests { } #expect(probe.didBuildSecondCase == false) + #expect(probe.contentBuildCount == 1) } } +@MainActor +private final class AssertionCaptureQueueProbe { + var holderStarted = false + var canFinishHolder = false + var assertionStarted = false +} + @MainActor private final class MeasurementHookCancellationProbe { var didStart = false var didBuildSecondCase = false + var contentBuildCount = 0 } private struct ProviderCancellationHooks { let waitForCancellation: @MainActor @Sendable () async -> Void + let didBuildContent: @MainActor @Sendable () -> Void let didBuildSecondCase: @MainActor @Sendable () -> Void } @@ -148,12 +385,14 @@ private struct CancellationSnapshotProvider: SnapshotProviding { size: .intrinsic(maxWidth: 100), ), ), + SnapshotConfiguration(colorScheme: .dark), ], measurementReadiness: .immediate, onReadyToMeasure: hooks?.waitForCancellation, settle: .immediate, ) { - Color.red.frame(height: 40) + hooks?.didBuildContent() + return Color.red.frame(height: 40) } SnapshotCase( name: "must-not-build", @@ -165,3 +404,46 @@ private struct CancellationSnapshotProvider: SnapshotProviding { } } } + +@MainActor +private final class SnapshotLayoutProbeState { + var horizontal: UserInterfaceSizeClass? + var vertical: UserInterfaceSizeClass? +} + +private struct SnapshotLayoutProbe: View { + let state: SnapshotLayoutProbeState + @Environment(\.horizontalSizeClass) private var horizontal + @Environment(\.verticalSizeClass) private var vertical + + var body: some View { + Color.clear + .onChange(of: horizontal, initial: true) { _, value in state.horizontal = value } + .onChange(of: vertical, initial: true) { _, value in state.vertical = value } + } +} + +@MainActor +private final class SnapshotResizeProbeState { + var size: CGSize? + var horizontal: UserInterfaceSizeClass? + var vertical: UserInterfaceSizeClass? + var identity: UUID? +} + +private struct SnapshotResizeProbe: View { + let state: SnapshotResizeProbeState + @State private var identity = UUID() + @Environment(\.horizontalSizeClass) private var horizontal + @Environment(\.verticalSizeClass) private var vertical + + var body: some View { + Color.clear + .onGeometryChange(for: CGSize.self) { $0.size } action: { state.size = $0 } + .onChange(of: horizontal, initial: true) { _, value in state.horizontal = value } + .onChange(of: vertical, initial: true) { _, value in state.vertical = value } + .onAppear { state.identity = identity } + // Expand the geometry probe itself, not only its painted background. + .ignoresSafeArea() + } +} diff --git a/Shared/SnapshotKitTesting/Tests/LargeViewCaptureTests.swift b/Shared/SnapshotKitTesting/Tests/LargeViewCaptureTests.swift index 61da5b24a..9fae04092 100644 --- a/Shared/SnapshotKitTesting/Tests/LargeViewCaptureTests.swift +++ b/Shared/SnapshotKitTesting/Tests/LargeViewCaptureTests.swift @@ -130,6 +130,46 @@ struct LargeViewCaptureTests { #expect(image.probePixel(atUnitPoint: CGPoint(x: 0.5, y: 0.9)).blue > 0.5) } + @Test(arguments: [false, true]) + func restoredScrollOffsetsApplyOnlyToViewportCaptures(fullContent: Bool) async throws { + try waitFor { hostKeyWindow() != nil } + let host = UIHostingController(rootView: ScrollView { + VStack(spacing: 0) { + Color.red.frame(height: 100) + Color.blue.frame(height: 2900) + } + }) + host.view.frame = CGRect(x: 0, y: 0, width: 402, height: 874) + let image = try await renderSnapshotImage( + of: host, + named: "restored-scroll-offset", + sizing: fullContent ? .intrinsic(width: 402, minimumHeight: 874) : .fixed, + safeAreaInsets: .zero, + onReadyToSnapshot: { + @MainActor func scrollViews(in view: UIView) -> [UIScrollView] { + if let scrollView = view as? UIScrollView { return [scrollView] } + return view.subviews.flatMap { scrollViews(in: $0) } + } + guard let scrollView = scrollViews(in: host.view).first else { + Issue.record("The hosted fixture must contain its production scroll view") + return + } + scrollView.setContentOffset(CGPoint(x: 0, y: 180), animated: false) + }, + ) + let firstRow = image.probePixel(atUnitPoint: CGPoint(x: 0.5, y: 0.01)) + if fullContent { + #expect(image.size.height == 3000) + #expect(firstRow.red > 0.5) + #expect(firstRow.blue < 0.5) + #expect(image.probePixel(atUnitPoint: CGPoint(x: 0.5, y: 0.99)).blue > 0.5) + } else { + #expect(image.size.height == 874) + #expect(firstRow.blue > 0.5) + #expect(firstRow.red < 0.5) + } + } + @Test func capturesAHorizontalScrollViewsFullContentInMultipleTiles() async throws { try waitFor { hostKeyWindow() != nil } let scroll = ScrollView(.horizontal) { @@ -255,8 +295,23 @@ struct LargeViewCaptureTests { safeAreaInsets: .zero, measurementReadiness: .immediate, ) - #expect(image.size.height >= 3255) - #expect(image.size.height < 3265) + // Native bar heights vary by runtime and arrangement. Prove that all + // 3,000 points of content survive, independently of that chrome height. + var redRows = 0 + var blueRows = 0 + var greenRows = 0 + for row in 0 ..< Int(image.size.height) { + let pixel = image.probePixel(atUnitPoint: CGPoint( + x: 0.5, + y: (CGFloat(row) + 0.5) / image.size.height, + )) + if pixel.red > 0.5, pixel.green < 0.5, pixel.blue < 0.5 { redRows += 1 } + if pixel.blue > 0.5, pixel.red < 0.5 { blueRows += 1 } + if pixel.green > 0.5, pixel.red < 0.5, pixel.blue < 0.5 { greenRows += 1 } + } + #expect(abs(redRows - 1500) <= 1) + #expect(abs(blueRows - 1500) <= 1) + #expect(abs(greenRows - 50) <= 1) let topToolbar = image.probePixel(atUnitPoint: CGPoint( x: 0.1, @@ -321,6 +376,58 @@ struct LargeViewCaptureTests { } } + @Test func searchableFullContentUsesTheCaptureWindowAndRetainsEveryRow() async throws { + try waitFor { hostKeyWindow() != nil } + let screen = NavigationStack { + List { + ForEach(0 ..< 20, id: \.self) { _ in + Color.red.frame(height: 100).listRowInsets(EdgeInsets()) + } + Color.blue.frame(height: 500).listRowInsets(EdgeInsets()) + } + .searchable(text: .constant("")) + .navigationTitle("Searchable history") + } + let host = UIHostingController(rootView: screen) + host.traitOverrides.horizontalSizeClass = .compact + host.traitOverrides.verticalSizeClass = .regular + host.traitOverrides.userInterfaceIdiom = .phone + host.view.frame = CGRect(x: 0, y: 0, width: 402, height: 1) + let image = try await renderSnapshotImage( + of: host, + named: "searchable-full-content-probe", + sizing: .intrinsic(width: 402, minimumHeight: 874), + safeAreaInsets: .zero, + onReadyToSnapshot: { + #expect(host.view.window?.bounds.size == host.view.bounds.size) + @MainActor func searchBars(in view: UIView) -> [UITextField] { + if let field = view as? UITextField { return [field] } + return view.subviews.flatMap { searchBars(in: $0) } + } + let bars = searchBars(in: host.view) + #expect(!bars.isEmpty) + for bar in bars { + let frame = bar.convert(bar.bounds, to: host.view) + #expect(frame.maxY <= host.view.bounds.maxY) + #expect(frame.maxY >= host.view.bounds.maxY - 120) + } + }, + ) + var redRows = 0 + var blueRows = 0 + for row in 0 ..< Int(image.size.height) { + let pixel = image.probePixel(atUnitPoint: CGPoint( + x: 0.5, + y: (CGFloat(row) + 0.5) / image.size.height, + )) + if pixel.red > 0.5, pixel.green < 0.5, pixel.blue < 0.5 { redRows += 1 } + if pixel.blue > 0.5, pixel.red < 0.5 { blueRows += 1 } + } + #expect(image.size.height >= 2500) + #expect(redRows >= 1980) + #expect(blueRows >= 490) + } + @Test func annotatesTallFullContentAccessibilitySnapshots() async throws { try waitFor { hostKeyWindow() != nil } let screen = ScrollView { diff --git a/Shared/SnapshotKitTesting/Tests/SafeAreaCompositionTests.swift b/Shared/SnapshotKitTesting/Tests/SafeAreaCompositionTests.swift index 027b9c7e0..5deafee1d 100644 --- a/Shared/SnapshotKitTesting/Tests/SafeAreaCompositionTests.swift +++ b/Shared/SnapshotKitTesting/Tests/SafeAreaCompositionTests.swift @@ -17,6 +17,60 @@ import UIKit /// such contributions; this pins that it doesn't. @MainActor struct SafeAreaCompositionTests { + @Test func nativeNavigationPropagatesIndependentContentInsets() async throws { + try waitFor { hostKeyWindow() != nil } + let screen = NavigationStack { + List { Text("History") } + .searchable(text: .constant("")) + .navigationTitle("History") + .navigationBarTitleDisplayMode(.inline) + } + let host = UIHostingController(rootView: screen) + host.traitOverrides.horizontalSizeClass = .compact + host.traitOverrides.userInterfaceIdiom = .phone + host.view.frame = CGRect(x: 0, y: 0, width: 402, height: 874) + let insets = UIEdgeInsets(top: 37, left: 11, bottom: 59, right: 29) + _ = try await renderSnapshotImage( + of: host, + named: "native-asymmetric-insets", + safeAreaInsets: insets, + onReadyToSnapshot: { + @MainActor func navigationControllers(in controller: UIViewController) + -> [UINavigationController] + { + if let navigation = controller as? UINavigationController { return [navigation] + } + return controller.children.flatMap { navigationControllers(in: $0) } + } + let controllers = navigationControllers(in: host) + #expect(!controllers.isEmpty) + for controller in controllers { + let bar = controller.navigationBar + let frame = bar.convert(bar.bounds, to: host.view) + #expect(frame.minY >= insets.top) + #expect(frame.minY <= insets.top + 8) + #expect(controller.view.safeAreaInsets.left == insets.left) + #expect(controller.view.safeAreaInsets.right == insets.right) + #expect(controller.view.safeAreaInsets.bottom >= insets.bottom) + } + @MainActor func fields(in view: UIView) -> [UITextField] { + if let field = view as? UITextField { return [field] } + return view.subviews.flatMap { fields(in: $0) } + } + let searchFields = fields(in: host.view) + #expect(!searchFields.isEmpty) + for field in searchFields { + let frame = field.convert(field.bounds, to: host.view) + // Floating search chrome uses system geometry rather than + // additional content insets. Its placement within native + // reserved regions requires a native-device check. + #expect(host.view.bounds.contains(frame)) + #expect(frame.maxY >= host.view.bounds.maxY - 120) + } + }, + ) + } + @Test func zeroedRootLeavesNoDeviceInset() async throws { try waitFor { hostKeyWindow() != nil } let host = UIHostingController(rootView: Color.red) diff --git a/Shared/SnapshotKitTesting/Tests/SnapshotFixtureTestSupport.swift b/Shared/SnapshotKitTesting/Tests/SnapshotFixtureTestSupport.swift new file mode 100644 index 000000000..aab42798f --- /dev/null +++ b/Shared/SnapshotKitTesting/Tests/SnapshotFixtureTestSupport.swift @@ -0,0 +1,46 @@ +import Observation +import SnapshotKit +import SwiftUI + +/// A ready hook changes each fixture once. Reusing the fixture makes the second image red. +@MainActor @Observable +final class SnapshotFixtureProbe { + var mutations = 0 +} + +@MainActor +enum IndependentSnapshotProvider: SnapshotProviding { + static var probes: [SnapshotFixtureProbe] = [] + + static var snapshots: [SnapshotCase] { + SnapshotCase( + name: "Independent", + configurations: [ + SnapshotConfiguration(device: .init( + name: "", + size: .fixed(CGSize(width: 20, height: 20)), + )), + SnapshotConfiguration(device: .init( + name: "second", + size: .fixed(CGSize(width: 20, height: 20)), + )), + ], + onReadyToSnapshot: { + precondition(!probes.isEmpty) + probes[probes.count - 1].mutations += 1 + }, + ) { + let probe = SnapshotFixtureProbe() + probes.append(probe) + return SnapshotFixtureProbeView(probe: probe) + } + } +} + +private struct SnapshotFixtureProbeView: View { + let probe: SnapshotFixtureProbe + + var body: some View { + probe.mutations == 1 ? Color.green : Color.red + } +} diff --git a/Shared/SnapshotKitTesting/Tests/SnapshotImageRenderingTests.swift b/Shared/SnapshotKitTesting/Tests/SnapshotImageRenderingTests.swift new file mode 100644 index 000000000..995a0d7e2 --- /dev/null +++ b/Shared/SnapshotKitTesting/Tests/SnapshotImageRenderingTests.swift @@ -0,0 +1,95 @@ +import SnapshotKitTesting +import SwiftUI +import TestHostSupport +import Testing +import UIKit + +@MainActor +struct SnapshotImageRenderingTests { + @Test func aNilInsetOverrideKeepsTheNativeScene() async throws { + try waitFor { hostKeyWindow() != nil } + let window = try #require(hostKeyWindow()) + let scene = try #require(window.windowScene) + let host = UIHostingController(rootView: Color.red) + host.view.frame = window.bounds + _ = try await renderSnapshotImage( + of: host, + named: "native-scene", + safeAreaInsets: nil, + settle: .immediate, + onReadyToSnapshot: { + #expect(window.windowScene === scene) + #expect(hostKeyWindow() === window) + #expect(host.view.window === window) + }, + ) + #expect(host.parent == nil) + #expect(hostKeyWindow() === window) + } + + @Test(arguments: [false, true], [false, true]) + func restoresTheMarkedWindowAfterCapture(fails: Bool, anotherWindowIsKey: Bool) async throws { + try waitFor { hostKeyWindow() != nil } + let window = try #require(hostKeyWindow()) + let scene = try #require(window.windowScene) + let otherWindow = UIWindow(windowScene: scene) + defer { + otherWindow.isHidden = true + otherWindow.windowScene = nil + window.makeKeyAndVisible() + } + if anotherWindowIsKey { + otherWindow.rootViewController = UIViewController() + otherWindow.makeKeyAndVisible() + #expect(otherWindow.isKeyWindow) + #expect(!window.isKeyWindow) + } + let root = try #require(window.rootViewController) + let frame = window.frame + let rootFrame = root.view.frame + let rootInsets = root.additionalSafeAreaInsets + let wasKey = window.isKeyWindow + let wasHidden = window.isHidden + let animationsWereEnabled = UIView.areAnimationsEnabled + let host = UIHostingController(rootView: Color.red) + let additionalInsets = UIEdgeInsets(top: 5, left: 7, bottom: 9, right: 11) + host.additionalSafeAreaInsets = additionalInsets + let contentFrame = CGRect(x: 0, y: 0, width: 280, height: 400) + host.view.frame = contentFrame + + do { + _ = try await renderSnapshotImage( + of: host, + named: "window-restoration", + onReadyToMeasure: fails ? {} : nil, + settle: .immediate, + onReadyToSnapshot: { + #expect(window.windowScene == nil) + #expect(host.view.window === window) + #expect(window.bounds.size == contentFrame.size) + }, + ) + #expect(!fails) + } catch { + #expect(fails) + #expect(error as? SnapshotRenderingError == .measurementHookRequiresIntrinsicSizing( + name: "window-restoration", + )) + } + + #expect(hostKeyWindow() === window) + #expect(window.windowScene === scene) + #expect(window.rootViewController === root) + #expect(window.frame == frame) + #expect(root.view.frame == rootFrame) + #expect(root.additionalSafeAreaInsets == rootInsets) + #expect(window.isKeyWindow == wasKey) + if anotherWindowIsKey { #expect(otherWindow.isKeyWindow) } + #expect(window.isHidden == wasHidden) + #expect(UIView.areAnimationsEnabled == animationsWereEnabled) + #expect(host.view.frame == contentFrame) + #expect(host.additionalSafeAreaInsets == additionalInsets) + #expect(host.parent == nil) + #expect(root.children.isEmpty) + } +} diff --git a/Shared/SnapshotKitTesting/Tests/SnapshotPNGTests.swift b/Shared/SnapshotKitTesting/Tests/SnapshotPNGTests.swift index abaa4b977..1f57acc10 100644 --- a/Shared/SnapshotKitTesting/Tests/SnapshotPNGTests.swift +++ b/Shared/SnapshotKitTesting/Tests/SnapshotPNGTests.swift @@ -34,7 +34,7 @@ struct SnapshotPNGTests { @Test func appliesTabletLayoutTraitsToUIKitAndSwiftUI() async throws { try await expectAdaptiveLayoutTraits( - .tabletPortrait, + .tablet, expected: AdaptiveTraitExpectation( interfaceIdiom: .pad, horizontalSizeClass: .regular, @@ -262,15 +262,15 @@ struct SnapshotPNGTests { @MainActor private func expectAdaptiveLayoutTraits( - _ layoutTraits: SnapshotConfiguration.LayoutTraits, + _ layoutTraits: SnapshotConfiguration.Frame.LayoutTraits, expected: AdaptiveTraitExpectation, captureName: String, ) async throws { let configuration = SnapshotConfiguration( - layoutTraits: layoutTraits, device: SnapshotConfiguration.Frame( name: captureName, size: .fixed(CGSize(width: 100, height: 60)), + layoutTraits: layoutTraits, ), ) let png = try await captureSnapshotPNG( diff --git a/Shared/StuffTestHost/AGENTS.md b/Shared/StuffTestHost/AGENTS.md index 15ad18eed..f65596524 100644 --- a/Shared/StuffTestHost/AGENTS.md +++ b/Shared/StuffTestHost/AGENTS.md @@ -10,6 +10,7 @@ Read the root [`AGENTS.md`](../../AGENTS.md) first. That file owns build system, - **Provide a key window with a root VC.** Hosted tests assume `TestHostSupport.hostKeyWindow()` returns a window whose `rootViewController` is non-nil. Do not defer window creation. Do not leave root unset. - **Stamp the window in `SceneDelegate`.** Set `isMainTestHostWindow` in `scene(_:willConnectTo:)`. `TestHostSupport.hostKeyWindow()` finds the host window only by that marker, not by "the first key window". - **Keep the scene name aligned with the plist.** `AppDelegate` must modify and return the session's plist-derived configuration. Do not construct a separately named configuration that can drift from `Project.swift`. +- **Keep the test root's native bars horizontal.** Virtual phone and tablet snapshots must not inherit Duo's side bar. Validate native Duo bars in the production app. ## Don't add products here for `Bundle.module` diff --git a/Shared/StuffTestHost/README.md b/Shared/StuffTestHost/README.md index 9c1c4936f..7e9221183 100644 --- a/Shared/StuffTestHost/README.md +++ b/Shared/StuffTestHost/README.md @@ -11,7 +11,11 @@ Test bundles link those libraries plus `TestHostSupport` and run inside this app ## What it provides - `@main` [`AppDelegate`](Sources/AppDelegate.swift) — installs the scene delegate on the plist-derived default window-scene configuration. -- [`SceneDelegate`](Sources/SceneDelegate.swift) — creates a key window with an empty `UIViewController` as root and marks it `isMainTestHostWindow` (from `TestHostSupport`) so `hostKeyWindow()` can find it. +- [`SceneDelegate`](Sources/SceneDelegate.swift) creates the key window and marks it `isMainTestHostWindow` so `hostKeyWindow()` can find it. + +The empty root controller uses horizontal native bars. This keeps virtual phone and tablet frames free of the Duo simulator's side bar. +Synthetic Duo viewports cover bounds, content, and layout policy. They do not reproduce the simulator's physical pose or native vertical bars. +Native bar and folding validation uses the production app in Device Hub and on hardware. ## Bundle.module and resources diff --git a/Shared/StuffTestHost/Sources/SceneDelegate.swift b/Shared/StuffTestHost/Sources/SceneDelegate.swift index 4c63867e7..e91252d10 100644 --- a/Shared/StuffTestHost/Sources/SceneDelegate.swift +++ b/Shared/StuffTestHost/Sources/SceneDelegate.swift @@ -12,10 +12,17 @@ final class SceneDelegate: UIResponder, UIWindowSceneDelegate { ) { guard let windowScene = scene as? UIWindowScene else { return } let window = UIWindow(windowScene: windowScene) - window.rootViewController = UIViewController() + window.rootViewController = TestRootViewController() // Marks this as the window `TestHostSupport.hostKeyWindow()` / `show()` target. window.isMainTestHostWindow = true window.makeKeyAndVisible() self.window = window } } + +/// Keeps virtual phone and tablet frames independent of the simulator's side bar. +private final class TestRootViewController: UIViewController { + override var preferredVerticalBarBehavior: UIVerticalBarBehavior { + .disabled + } +} diff --git a/Shared/TestHostSupport/AGENTS.md b/Shared/TestHostSupport/AGENTS.md index 3934672f3..ba2ca0aa1 100644 --- a/Shared/TestHostSupport/AGENTS.md +++ b/Shared/TestHostSupport/AGENTS.md @@ -16,6 +16,7 @@ Read the root [`AGENTS.md`](../../AGENTS.md) first. This file adds module rules. - **The host stamps its window. Do not guess.** `hostKeyWindow()` returns only the window marked `isMainTestHostWindow`. `StuffTestHost`'s `SceneDelegate` sets that marker. Do not reintroduce a `first { $0.isKeyWindow } ?? first` search. - **Key `isMainTestHostWindow` on a name-interned `Selector`.** This module is statically embedded into the host app and each `.xctest` bundle. An associated-object key must resolve to the same pointer in every image. A per-image `static var key: UInt8` does not match across the host↔bundle boundary. That mismatch silently reads `nil`. That flake is what this replaces. - **Both `show` overloads wait for readiness.** They pump the run loop for the host window and root VC before hosting. They follow Apple's parent/child VC order. They always restore `layer.speed` through a `defer` at entry. Then a test that runs before the scene connects does not fail spuriously. +- **Use `waitForAsync` for main-actor task completion.** Async polling must suspend between checks, use a monotonic deadline, and propagate cancellation. ## Testing diff --git a/Shared/TestHostSupport/README.md b/Shared/TestHostSupport/README.md index b9e3960ef..5dbc20c1c 100644 --- a/Shared/TestHostSupport/README.md +++ b/Shared/TestHostSupport/README.md @@ -36,6 +36,7 @@ import TestHostSupport - `show(_:loadAndPlaceView:timeout:perform:)` — hosts a `UIViewController` in the test host's main window for the duration of `perform`, driving the real UIKit appearance lifecycle (`addChild` → attach → `didMove(toParent:)`, reversed on teardown) and restoring `layer.speed` even if the body throws. Synchronous and async-body overloads keep the view hosted while their body runs. - `hostKeyWindow()` — the host's designated window (see below), or `nil` before the scene connects. - `waitFor(timeout:predicate:)` — pump the run loop until a predicate holds. +- `waitForAsync(timeout:predicate:)` — suspend between predicate checks so main-actor tasks can run. Uses a monotonic deadline and propagates cancellation. - `UIWindow.isMainTestHostWindow` — the marker the host stamps on its window. ## How it works diff --git a/Shared/TestHostSupport/Sources/TestHostSupport.swift b/Shared/TestHostSupport/Sources/TestHostSupport.swift index 355191e27..9ae6d9910 100644 --- a/Shared/TestHostSupport/Sources/TestHostSupport.swift +++ b/Shared/TestHostSupport/Sources/TestHostSupport.swift @@ -172,6 +172,25 @@ private func waitForHostRootViewController(timeout: TimeInterval) throws -> UIVi // MARK: - Run Loop Helpers +/// Waits for a predicate while allowing main-actor tasks to make progress. +/// Use this in async hosted tests whose content updates through SwiftUI tasks or geometry +/// callbacks. +@MainActor +public func waitForAsync( + timeout: Duration = .seconds(10), + predicate: () -> Bool, +) async throws { + let clock = ContinuousClock() + let deadline = clock.now.advanced(by: timeout) + try Task.checkCancellation() + while !predicate() { + guard clock.now < deadline else { + throw TestHostError("waitForAsync timed out waiting for a check to pass.") + } + try await clock.sleep(for: .milliseconds(10)) + } +} + /// Drives the run loop until `predicate` holds, or throws once `timeout` elapses. @MainActor public func waitFor(timeout: TimeInterval = 10.0, predicate: () -> Bool) throws { diff --git a/Tools/AGENTS.md b/Tools/AGENTS.md index 4f135130f..888cafd65 100644 --- a/Tools/AGENTS.md +++ b/Tools/AGENTS.md @@ -38,9 +38,12 @@ These rules also apply when changing a root command or installer that calls this Guards: [test_worktree_cleanup.py](Tests/test_worktree_cleanup.py) and [test_worktree_command.py](Tests/test_worktree_command.py). - Keep dry runs free of the mutations they preview. Test the public command with fake processes and temporary destinations, not developer devices or installed apps. +- Propagate simulator creation failures before recording ownership, including failures that write diagnostics to stdout. + Guard: `SimulatorCommandTest#test_interrupted_creation_never_records_an_owner`. ## Snapshot shard plans +- Discover each snapshot source root from its owning target's literal source array, including multiline arrays with shared support files. Reject unsupported declarations without borrowing the next target's sources. Guard: `test_snapshot_shards.py`. - Keep measured timings in balance reports, not the persisted execution plan. - Preserve assignments unless intake, the improvement threshold, or an explicit shard-count change requires an update. Guard: [test_snapshot_shards.py](Tests/test_snapshot_shards.py). diff --git a/Tools/README.md b/Tools/README.md index 842c2112b..3f015901f 100644 --- a/Tools/README.md +++ b/Tools/README.md @@ -99,114 +99,3 @@ Tests use the same module imports without changing Python's search path. The [Astro project](InstallerKit/Site/README.md) owns routes, components, and styles. [Where's distribution guide](../Where/DISTRIBUTION.md) owns its signing setup and device validation. -## Documentation-only CI - -[`ci_changes.py`](ci_changes.py) owns the shared documentation policy for GitHub Actions and CircleCI. -It compares the complete PR from its merge base to the event's head commit. -Regular `.md` and `.markdown` files qualify, including mixed-case extensions and nested paths. -The classifier excludes executable files, symlinks, and Markdown in directories that contain build inputs, rendered content, or fixtures. -`INPUT_DIRECTORIES` in the classifier owns those exclusions. - -The Git diff includes additions, edits, deletions, and both paths of a rename. -It has no API file-count limit. -A later documentation commit cannot hide an earlier code change in the PR. -An empty diff, unavailable history, or classification error selects full CI and prints the reason. -Main pushes and manual runs always select full CI. -The existing `NO-CI` title marker remains available for prototypes. - -GitHub runs one Linux classification job and skips the existing required jobs for documentation-only PRs. -If classification fails, those jobs run. -The workflow retains its triggers and required job names. -Workflow-level path filters can leave required checks pending, so selection uses job conditions. -See [GitHub's conditional-job behavior](https://docs.github.com/en/actions/how-tos/write-workflows/choose-when-workflows-run/control-jobs-with-conditions). - -CircleCI starts with [`.circleci/config.yml`](../.circleci/config.yml) on Linux. -[`ci_circleci.py`](ci_circleci.py) passes the decision to [`.circleci/continue.yml`](../.circleci/continue.yml) through the continuation API. -Documentation-only PRs complete the existing `iOS CI` workflow with a small Linux job. -Other PRs retain the existing macOS build and test graph. -Installer and Flyover publication retain their event gates, parameters, and signing boundaries. -If setup fails before publication starts, both controllers stop on the next poll and report failure. -The setup and continuation configurations declare the same original parameters. The continuation request passes only the new classification parameter. - -This flow requires CircleCI's dynamic configuration setting, which new projects enable by default. -After a setup failure, trigger a new pipeline. CircleCI does not permit continuation twice for the same pipeline. -See [CircleCI's dynamic configuration requirements](https://circleci.com/docs/guides/orchestrate/dynamic-config/). - -The focused regression command covers Git history, command output, continuation failures, and required-check wiring: - -```bash -python3 -m unittest Tools.Tests.test_ci_changes Tools.Tests.test_ci_circleci Tools.Tests.test_ci_workflows Tools.Tests.test_flyover_workflows -``` - -## Worktree cleanup - -`./worktree --cleanup` removes the current checkout's DerivedData and registered simulator. -It attempts both operations. If either operation fails, the command reports failure. -Add `--dry-run` to preview cache removal and the simulator command without changes. - -`./worktree --prune-derived-data` removes caches for absent Codex worktrees of this repository. -It recognizes `$CODEX_HOME/worktrees`, `~/.codex/worktrees`, and the older `~/.codex-workspaces/worktrees` location. -It requires an available worktree root and preserves existing checkouts, even when their generated workspace is absent. -Add `--dry-run` to preview removal. Both modes accept `--derived-data-root PATH` for a custom cache location. -The default location is `~/Library/Developer/Xcode/DerivedData`. - -`worktree_cleanup.py` reads each cache's `info.plist` and matches its absolute `WorkspacePath` to the checkout. -Root-level projects, workspaces, and workspaces embedded in root-level projects are supported. -Ownership paths with `..` components are rejected before normalization. -Cache names alone never establish ownership. Shared caches and caches without usable metadata remain untouched. -Before removal, the command checks the directory identity, metadata, and resolved checkout ownership again. -The orphan sweep also checks that the checkout is still absent. -It reports parse errors, skipped repository caches, and removal failures on stderr. - -Before cleanup, stop builds for the affected checkouts. -Keep checkout and cache paths stable until cleanup finishes. -Validation and deletion are separate operations. -The command does not coordinate concurrent builds, checkout restoration, or path changes. - -## Snapshot shard policy - -`snapshot_shards.py` keeps weekly assignments stable. Its bounded greedy search -places intake first, then stops existing-suite moves at a 5% reduction in the -slowest worker. If single-suite moves cannot reach that target, it discards them. -It does not search swaps or claim a globally minimal number of moves. -Explicit shard-count changes retain full longest-processing-time balancing. -The balance command emits a JSON report on stdout and diagnostics on stderr; -only version and assignments are persisted. Legacy plans containing timing -metadata remain readable. No-op writes preserve their original bytes. -The [rebalance skill](../.agents/skills/rebalance-snapshot-shards/SKILL.md) -owns sample selection and publication. - -## Testing - -Install the site dependencies before the retained installer tests or snapshot builds: - -```bash -mise exec -- npm ci -``` - -```bash -python3 -m unittest discover -s Tools/Tests -p 'test_*.py' -mise exec -- ruby -I Tools/Tests -e 'Dir["Tools/Tests/**/*_test.rb"].sort.each { |file| require File.expand_path(file) }' -``` - -These Python and Ruby tests must not require Xcode, Java/TLC, networking, or the developer's real -repository state. Add shared fixtures under `Tools/Tests/Fixtures`; otherwise -create the smallest useful input in the test's temporary directory. - -The install site's image tests run on the pinned iOS simulator: - -```bash -./test ToolsSnapshotTests --review -``` - -Each build runs [the fixture generator](Tests/Fixtures/installer_update_site_snapshots.py) -against the production Astro build. The bundle loads those pages in offline -`WKWebView` instances through `SnapshotKitTesting.assertHTMLSnapshots`. -The generator inlines the emitted CSS and artwork for offline capture. -References cover the main-build homepage, app PR pages, release details, unavailable commit history, -retired channels, an empty catalog, and missing artwork and metadata on iPhone and iPad in both appearances. -They use the existing LFS references, snapshot scheme, and CI shard discovery. - -[`ADVERSARIAL_TEST_PLAN.md`](ADVERSARIAL_TEST_PLAN.md) records the public -behavior contracts, portability matrix, destructive-operation boundaries, and -mutation review used to accept changes to these tools. diff --git a/Tools/Tests/simulator_command_test.rb b/Tools/Tests/simulator_command_test.rb index e0d9ab61a..cd4f6a8bd 100644 --- a/Tools/Tests/simulator_command_test.rb +++ b/Tools/Tests/simulator_command_test.rb @@ -78,9 +78,10 @@ def test_interrupted_creation_never_records_an_owner with_fixture(create_status: 23) do |fixture| fixture.write_inventory(all: {}, available: {}) - _stdout, _stderr, status = fixture.run("--no-boot") + stdout, _stderr, status = fixture.run("--no-boot") - refute status.success? + assert_equal 23, status.exitstatus + assert_empty stdout refute_path_exists fixture.registry_path assert_path_exists fixture.lock_file end @@ -367,6 +368,8 @@ def write_fake_xcrun(path, create_status:, delete_status:, runtime_available:) PY fi printf '%s\n' created + else + printf '%s\n' 'Unable to create a device for device type: incompatible runtime' fi exit #{create_status} elif [ "$1 $2" = "simctl delete" ]; then diff --git a/Tools/Tests/test_snapshot_shards.py b/Tools/Tests/test_snapshot_shards.py index 6e9aeaa8b..689850c78 100755 --- a/Tools/Tests/test_snapshot_shards.py +++ b/Tools/Tests/test_snapshot_shards.py @@ -72,6 +72,74 @@ def test_validates_a_complete_source_partition(self): self.assertEqual(len(inventory), 3) self.assertEqual(len(partition), 2) + def test_multiline_sources_keep_shared_support_out_of_suite_discovery(self): + with tempfile.TemporaryDirectory() as directory: + repo = self.make_repo(directory) + other = repo / "Other" / "SnapshotTests" + other.mkdir(parents=True) + (other / "OtherTests.swift").write_text( + "import Testing\nstruct OtherTests { @Test func example() {} }\n" + ) + (repo / "Project.swift").write_text(''' + unitTests( + name: "ModuleSnapshotTests", + sources: [ + "Module/Tests/Support/TestStore.swift", + "Module/SnapshotTests/**", + ], + ), + unitTests( + name: "OtherSnapshotTests", + sources: ["Other/SnapshotTests/**"], + ), + ''') + plan = self.make_plan() + plan["shards"][0]["suites"].append("OtherSnapshotTests/OtherTests") + path = repo / "plan.json" + path.write_text(json.dumps(plan)) + + self.assertEqual(MODULE.source_inventory(repo), { + "ModuleSnapshotTests/FirstSnapshotTests", + "ModuleSnapshotTests/SecondSnapshotTests", + "ModuleSnapshotTests/ThirdSnapshotTests", + "OtherSnapshotTests/OtherTests", + }) + result = subprocess.run( + [str(SCRIPT.parents[1] / "snapshot-shards"), "--plan", str(path), + "check", "--repo", str(repo)], + cwd=repo, capture_output=True, text=True, + ) + self.assertEqual(result.returncode, 0, result.stderr) + self.assertIn("4 suites", result.stdout) + + def test_source_array_without_a_snapshot_glob_cannot_borrow_the_next_target(self): + with tempfile.TemporaryDirectory() as directory: + repo = self.make_repo(directory) + project = repo / "Project.swift" + project.write_text(''' + unitTests( + name: "BrokenSnapshotTests", + sources: ["Module/Tests/Support/TestStore.swift"], + ), + ''' + project.read_text()) + + with self.assertRaisesRegex(ValueError, "BrokenSnapshotTests has no literal"): + MODULE.source_inventory(repo) + + def test_nonliteral_sources_fail_without_borrowing_the_next_target(self): + with tempfile.TemporaryDirectory() as directory: + repo = self.make_repo(directory) + project = repo / "Project.swift" + project.write_text(''' + unitTests( + name: "BrokenSnapshotTests", + sources: sharedSources, + ), + ''' + project.read_text()) + + with self.assertRaisesRegex(ValueError, "literal source arrays.*BrokenSnapshotTests"): + MODULE.source_inventory(repo) + def test_rejects_a_suite_that_is_missing_from_the_plan(self): with tempfile.TemporaryDirectory() as directory: repo = self.make_repo(directory) diff --git a/Tools/snapshot_shards.py b/Tools/snapshot_shards.py index a5a2a6cae..b71e75445 100755 --- a/Tools/snapshot_shards.py +++ b/Tools/snapshot_shards.py @@ -18,11 +18,15 @@ FORMAT_VERSION = 1 # Minimum reduction in the slowest worker required to move existing suites. MINIMUM_IMPROVEMENT = 0.05 -SNAPSHOT_TARGET_PATTERN = re.compile( +SNAPSHOT_TARGET_HEADER = ( r"unitTests\(\s*" r'name:\s*"(?P[^"]+SnapshotTests)",' - r".*?" - r'sources:\s*\["(?P[^"]+/SnapshotTests)/\*\*"\]', +) +SNAPSHOT_TARGET_PATTERN = re.compile( + SNAPSHOT_TARGET_HEADER + # Never borrow another target's sources when this declaration is unsupported. + + r"(?:(?!\bunitTests\s*\(|\n[ \t]*\),).)*?" + + r"sources:\s*\[(?P[^\]]*)\]", re.DOTALL, ) @@ -47,14 +51,23 @@ def load_plan(path): def snapshot_source_roots(repo): project = (repo / "Project.swift").read_text() roots = {} + declared = { + match.group("bundle") + for match in re.finditer(SNAPSHOT_TARGET_HEADER, project) + } + parsed = set() for match in SNAPSHOT_TARGET_PATTERN.finditer(project): bundle = match.group("bundle") - source = match.group("sources") - if source in roots: - raise ValueError( - f"duplicate snapshot source path in Project.swift: {source}" - ) - roots[source] = bundle + sources = re.findall(r'"([^"\n]+/SnapshotTests)/\*\*"', match.group("sources")) + if not sources: + raise ValueError(f"{bundle} has no literal SnapshotTests/** source path") + parsed.add(bundle) + for source in sources: + if source in roots: + raise ValueError(f"duplicate snapshot source path in Project.swift: {source}") + roots[source] = bundle + if missing := sorted(declared - parsed): + raise ValueError(f"snapshot targets need literal source arrays: {missing}") if not roots: raise ValueError("Project.swift has no snapshot test targets") return roots diff --git a/Where/WhereUI/AGENTS.md b/Where/WhereUI/AGENTS.md index 4ec9177c3..3c8bc3cf6 100644 --- a/Where/WhereUI/AGENTS.md +++ b/Where/WhereUI/AGENTS.md @@ -159,6 +159,7 @@ Layering, localization, preview, and testing conventions live in the feature minimum and active-scene visibility: the first foreground-visible `MainTabs` reveal stays covered when headless promotion coalesces or the first hold is interrupted, while warm resumes never replay it. +- Measure calendar month sections and day rows eagerly so full-content measurement and scroll restoration use their actual heights. Guard: `CalendarContentViewSnapshotTests`. - Keep itinerary persistence, forecast bounds, overlaps, and Home projections in WhereCore. `LocationForecastModel` mirrors one planning snapshot through store-change refreshes. Complete the latest started read when its requesting sheet disappears; keep older results from replacing it. diff --git a/Where/WhereUI/README.md b/Where/WhereUI/README.md index 83bca762c..31316d859 100644 --- a/Where/WhereUI/README.md +++ b/Where/WhereUI/README.md @@ -691,3 +691,6 @@ for changes confined to a child component. Standard references keep existing pat Flat screen references use `flat/`, and comparison sheets use `themes/`. Special traits nest under the group's `other/` directory. Review sheet PNGs before recording. Their embedded panel maps are part of the reference; preserve PNG metadata when copying them. + +Calendar month sections and day rows measure eagerly. This gives full-content +snapshots their complete height before capture on the pinned Duo runtime. diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPad.png index 1c22d5276..09ccedf85 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7604c7932e339690da6cf52b386474a806a268d3d6bac9e8493f97b2350a8348 -size 3487131 +oid sha256:b284bdbbe0e248a0474dcf08fe346e77d6d8478286c6d4e17524d29dd1b4e109 +size 3473131 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPad_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPad_accessibility.png index db3a6f41b..f1b2b64ad 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPad_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:44de0253ed12a417a2205d5dbcfeb193da9f1942a1c91e47d547745066612b86 -size 2443890 +oid sha256:5c421b8feae740daad2aa4df509bc5553f08534cc5c95ebd0dce9d8002292e6a +size 2425080 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPad_dark.png index 01fc062a3..41e4531c8 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:87f33956e2056c21d1d82bc83315b84e73936a66c34a13a2647a82dea7666244 -size 3501942 +oid sha256:61cac64b224722c29a0a224393cc454dffa8f13a514f48cb7a5fe766d95bb892 +size 3487248 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/other/about.Default_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/other/about.Default_iPad_ax5.png index e9c460a00..c635e8241 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/other/about.Default_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/other/about.Default_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:452c1e2da68cab2bf5440f99f484417866cb466f58e9e87dbce922331cfe1983 -size 11216277 +oid sha256:b8ebfb186728011e4948f5ee2731e1c9ea718467fbe2a55205dae3fc4c60481f +size 11149617 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/other/about.Default_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/other/about.Default_iPad_contrast.png index f0affa4af..fb8f1c228 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/other/about.Default_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/other/about.Default_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0e6dbd587eb78b8ef7577fd3fe710fbaafdcd43286fa4c2321d0572517d6bc42 -size 3494500 +oid sha256:0c733c8db986ec22dcbf79fe354471d3c05b628a04c30abe0556ae80fe1989cc +size 3481111 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/appIcon.Default_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/appIcon.Default_iPhone_accessibility.png index 92a05d111..d022a1997 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/appIcon.Default_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/appIcon.Default_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d6443a1f46d7e789f52f95bbda25a90991a1e1e8d1414f21670caf2c003ab252 -size 920460 +oid sha256:32b4f1f2375d5b7d3b1945549965cbef9a44656396860f0e7a494eef14137d00 +size 918224 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/appIcon.Default_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/appIcon.Default_iPhone_dark.png index d423abec1..ea422a761 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/appIcon.Default_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/appIcon.Default_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b164c5853d7dee7e4ed468ef25e35b7dbfb0952c9fc9f5ce31eb93a0e8f299ab -size 944419 +oid sha256:60cc773b349c08c93d4f30b04c4d38c9d486b6f5cf2e2a372039704d49a879b2 +size 936107 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/other/appIcon.Default_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/other/appIcon.Default_iPhone_ax5.png index de1aade60..bcf69067e 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/other/appIcon.Default_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/other/appIcon.Default_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f0d91d1cddf62e0e5ca192da7387336711e16b75975dac44dd01c9e2123a1ccc -size 1399785 +oid sha256:c71270afb754f79131ca3ed3e1ab4b86644b5abc1e3105855b5db6cb90e9caa5 +size 1395194 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/other/appIcon.Default_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/other/appIcon.Default_iPhone_contrast.png index 53583fe4b..554f68099 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/other/appIcon.Default_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/other/appIcon.Default_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4382e2a70f919f62c836658ce44d19f7983e7a6b0d5c5d6ad82649d57d218346 -size 1214938 +oid sha256:60704cdf50cf5e9dd1442a1e3b9eb37d6cbeaf050a5cde6fb8a26c3a799b0511 +size 1213800 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/data.Default_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/data.Default_iPad.png index 4623ca29e..2ffc64c6f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/data.Default_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/data.Default_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:794af4730078329446edfccaed1c30e22898eff8078cc935bbf1664c334128f9 -size 3111750 +oid sha256:55d69edd16f64467d2744c8c07e700e6e154d0578c562200b562fd560e51410d +size 3111758 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/data.Default_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/data.Default_iPad_dark.png index 73ca6b0e5..c2e2d1fca 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/data.Default_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/data.Default_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4d4a89a88022153a3d1ceab563f54f56548e9708811ca64668beb871578d9b24 -size 3113332 +oid sha256:586ca950f5beea71a48a0d628bcf202ca85c5de0929f82e09d0aef19497af39e +size 3113293 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/other/data.Default_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/other/data.Default_iPad_ax5.png index aaba0aaa2..fb48c0379 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/other/data.Default_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/other/data.Default_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b5e082390be0033ea53ba8926f63e484a02f465da873d7533b2183fbe7182248 -size 9837159 +oid sha256:c3365e3204ecf48f99530414f33c16eacc5a7be686e45ae31418b6b2b67a38e5 +size 9825412 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/other/data.Default_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/other/data.Default_iPad_contrast.png index 0abadf250..f8140516e 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/other/data.Default_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/other/data.Default_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:605e825d4ddd4ae5be5557139c3cdf655583ec501aa151f874206ba40621711d -size 3114658 +oid sha256:8d18d394b9518294e1990518d5328152d7941c0bf19c1179935923ad2c381f7d +size 3114705 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperOverlaySnapshotTests/developerOverlay.MenuBottomTrailing_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperOverlaySnapshotTests/developerOverlay.MenuBottomTrailing_iPhone.png index b74268d0c..9fd91fd1e 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperOverlaySnapshotTests/developerOverlay.MenuBottomTrailing_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperOverlaySnapshotTests/developerOverlay.MenuBottomTrailing_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6a2e64e94bc70d3c3dc81b0c14a2cc5f101faace8ef7792c993e3b85670d678b -size 430194 +oid sha256:a37a6a7fdbae8e8285b1a50ed3f1afcf80f2e3fea9401bb5942769866e7534be +size 439920 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperOverlaySnapshotTests/developerOverlay.MenuBottomTrailing_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperOverlaySnapshotTests/developerOverlay.MenuBottomTrailing_iPhone_dark.png index 13e15ffe7..8e2297191 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperOverlaySnapshotTests/developerOverlay.MenuBottomTrailing_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperOverlaySnapshotTests/developerOverlay.MenuBottomTrailing_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e574d2318939c58669917d565a1e78d0d8cf59d89d61f5d7fe998d6067645a7 -size 339077 +oid sha256:51cf5ba3e95362afef2b666a4f4355dc1cfd41c9a5709f999004cd6e694cb5b5 +size 354175 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperOverlaySnapshotTests/developerOverlay.MenuTopLeading_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperOverlaySnapshotTests/developerOverlay.MenuTopLeading_iPhone.png index 355f50682..0e2852238 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperOverlaySnapshotTests/developerOverlay.MenuTopLeading_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperOverlaySnapshotTests/developerOverlay.MenuTopLeading_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a49087f387a62dd51d76ba837b7f07c10dd01f6f99cbfd2c7460d26fbc4d1362 -size 431882 +oid sha256:815b6fe79e620beb554d063df6ed771d68649328919264747abcf7d5e1c51ce4 +size 434138 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/devices.Default_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/devices.Default_iPad.png index d8d02f537..0a83bcbc8 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/devices.Default_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/devices.Default_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:79a9c8de5c13507607f2e61493b3a93ea5dce109e5b9786bc25a2a6488f814e4 -size 336902 +oid sha256:d0204bc64186fd5dac2d4869bb57808230f8dbf17d1cf7b8522123425c56e31a +size 336911 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/devices.Default_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/devices.Default_iPad_dark.png index d5ab036c4..1b5fd4646 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/devices.Default_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/devices.Default_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:da600de0b835e3a1ad47aa4ce39d3ac5ec7d1b546bba820d6746d6c1c8d73b38 -size 341387 +oid sha256:827e1ec0c44806e0ddca30199bb7ae8e4efd45841ad63e637fca0a02abea82ac +size 341811 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/other/devices.Default_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/other/devices.Default_iPad_contrast.png index b66787af3..5ed1bb21f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/other/devices.Default_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/other/devices.Default_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:656ef69702bb62acbfaa037345d815235f05ae810b935222d894c82ca74db0c9 -size 338042 +oid sha256:1a9927e410531a6ed576aa504ecd5d26914de98a7b76b6e2e8f527a4b27c0fc6 +size 337596 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPad.png index 545770c96..d76507617 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:66114902c6a71f77269a75798ab6de61d797db2e90324809478f035b1778c293 -size 461598 +oid sha256:8cfb3d339888d2e2c9096486ddaff398a9801765034c6667dccf462395ea51e3 +size 448638 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPad_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPad_accessibility.png index 003411235..8ca201932 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPad_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ca210c3e54f2ce21e5fa1ec8790d03358a3432ec94554c60633aba2f9e12a9dc -size 895690 +oid sha256:ba9096204e9543daa712bd475fdb8a528ed617bb610407cce46d1f12b8b8620f +size 876045 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPad_dark.png index e71d1ed51..3a03c04f0 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:debab5b8f4636bed9c6aabeb4371c8b0ecdc836113ce8961b46bf8d150dbce74 -size 475653 +oid sha256:caf76b3e6d7ae9a53797979061e329c73709729ddc0c85fe1107abf8770adf07 +size 464386 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPad.png index 2396b4537..24cd29c99 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:33a49e7055f7590d0e38a00c5aed8dec77f090f028d8ddc58a1c1b3be0f493f4 -size 530871 +oid sha256:80bf69298ed4023f930edd2f2cafa148d6f383127718174fcfc39928cb17ad34 +size 517441 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPad_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPad_accessibility.png index 155ed88ee..53a3859f4 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPad_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:98fed147ce98488bdee12be69798f7caf2d068d23e86e168d572ad497a771b40 -size 1022142 +oid sha256:f25a24a53fb14119bcd4b773efce0127ccc2fbfc1ecf9477eaf68c85a0a4a077 +size 1003030 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPad_dark.png index 0974d6cef..215f5324a 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0c24e7575907f9735d0b4341c7e47c055e0deeb2cd438a9b2ef7d80e13981fe6 -size 546604 +oid sha256:0bc7f33754c9738cca61ad0c19b68f914a0a6aa44e17e4f802c7538107cee3f8 +size 534354 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.Default_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.Default_iPad_ax5.png index 9cb4c75d0..b5ac2761f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.Default_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.Default_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cf38a3abf515c738a160a1bf31bf6ea02a4f7254625c82e56c298b4719118b5a -size 1289681 +oid sha256:e22cbe072de3f1b2df9514d726c51ad75850a6c9bb61f2b744ffca69a9f4e28e +size 1261434 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.Default_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.Default_iPad_contrast.png index 75be812fa..134b537ec 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.Default_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.Default_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0c0f8ad5cd2465b175528ed4a5e5bba951661eba6607c8531a58021ccd04a05c -size 464502 +oid sha256:ce0b589b6ccd4b7d07a224581dc4b594190d1927270865dc0b3748afd9bd11d5 +size 451435 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.MixedFlights_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.MixedFlights_iPad_ax5.png index 6d1962926..ec3d54e5a 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.MixedFlights_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.MixedFlights_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:351dfdaa28b09faf3c91787078b0b7efc03b1ac0d5ddddad6447a2925b5e6e80 -size 1559221 +oid sha256:f463f4c2d76f9a4eede78ca199e5f6cc4c2bad8481c578fc8744ea7eedb3adbe +size 1539001 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.MixedFlights_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.MixedFlights_iPad_contrast.png index bd2af7772..fc494bc4c 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.MixedFlights_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.MixedFlights_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:debf1e54c0083b390810c243517e6db9cb1adca2c9831cdf99818e349c75cb73 -size 534692 +oid sha256:533d343470573c16e9ddcc4ebb355ad00fce9e9f0464514ca331320740e7527c +size 521924 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightReviewPointRowSnapshotTests/flightReviewPointRow.Gap_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightReviewPointRowSnapshotTests/flightReviewPointRow.Gap_iPad_dark.png index daa9e5bfe..9912270af 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightReviewPointRowSnapshotTests/flightReviewPointRow.Gap_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightReviewPointRowSnapshotTests/flightReviewPointRow.Gap_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b961b3e17085a77174c157a5cdb03dcc23a00c20c20a05ee62e1911aeec9b615 -size 431178 +oid sha256:285ad912d25319b397b480c13cb2931cea618d6d69060ae4eefe6c40be35145e +size 226414 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPad.png index 6a34cb675..ea389f56f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b09ccdf25615b58b6e57a54d820a10a260bae3cf92d4e7779ecb576a534cb5dc -size 234042 +oid sha256:3eac5bdc7888c26414942c0165ece5316d0fdce604c68e912bd5d1b5555a7c28 +size 233443 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPad_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPad_accessibility.png index 0fa5c2f96..7eb6eb27a 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPad_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:26e79d00c2b0af61214f8ee29901517ba51651a28864e1fd0d89cc46f2100d5c -size 426122 +oid sha256:27d9fc4c657ff8db4a7fb099d55b041c88b814c00af0f9aa712299861811f54a +size 424150 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPad_dark.png index 5c6de7f72..ff5a36aab 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:39e711d9bd781d6270ac26c69522457c3a309efdf1da983f46e50647b30c9ba4 -size 254695 +oid sha256:8b5a898855b36c0009dda25173ae4c55c42a0c6889bef658c3b3db9da460f730 +size 253698 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPhone.png index a85dc5766..ffdf0c935 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cc35d18dfaca0eb6279e2734b89e6239f9a8f33eaba4eda4a08d8fac2f7b68da -size 130913 +oid sha256:b386a9a278e586166f0b6299a931932de3fd47a62063657b19a01cd9172e2b14 +size 130912 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPhone_accessibility.png index b9a85c9c4..990f330fe 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6a050c6c8f7c29b2b74fe1d9f44f266e3969062628d4f95e2037f12973a5f73f -size 294392 +oid sha256:3f6616bfdfbf5dd61b4a7396047032f07edbbe787ebd5ca88039459fdaf5421e +size 293761 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPhone_dark.png index ef375e477..8ac936e69 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:025984aa3a209a42a52c84f83ad46f4c298b85db56688798d0eef81130e4ce81 -size 140123 +oid sha256:75578bf2e3cd42294cee1c0d84c493a5e1719618e1a48e26f9092c15830635f6 +size 140107 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.NoNotice_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.NoNotice_iPhone.png index e5a6866b9..da1698d1f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.NoNotice_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.NoNotice_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e8f3722b01575f6e6308396f749f482a71393c177e95213e6b9bdf00a7abf1ae -size 95407 +oid sha256:a7c97aaff1d0e800946ced9b721812342f07acec48c949f2827e3bbfd16a7b59 +size 95772 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.NoNotice_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.NoNotice_iPhone_dark.png index 2551303e5..513488452 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.NoNotice_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.NoNotice_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cc794788e1d38be656ab221d501166cd1068ceda0f9b1d3deb7470c2bf0cf818 -size 104225 +oid sha256:49bbfdd924e7830ddc9969f458933f95866c1ae5bc6815b1eefa27c203b3eac7 +size 104542 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/other/license.Default_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/other/license.Default_iPad_ax5.png index 9582a6f9f..351927ea7 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/other/license.Default_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/other/license.Default_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db20743e5f477b45c5b33cf0bdc66a2bd61d60589f53aff229d08da2550171ee -size 428256 +oid sha256:d4c4c8ce63b86639a2cad3c47d10be3e7a703787f7eaa52124eb730239fd4239 +size 428338 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/other/license.Default_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/other/license.Default_iPad_contrast.png index 12ebcf62e..c34190135 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/other/license.Default_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/other/license.Default_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eb3dc7e160a512d51d4e0fc16bbe739e2240a31b76e006a81d8b986e13f3f8f2 -size 234452 +oid sha256:a8dce93f0fdbc3cc3972af061466201a0500da654edfae78136cfa5b710fd9b4 +size 233843 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/other/license.Default_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/other/license.Default_iPhone_ax5.png index 4dbb8b7b0..817ba3575 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/other/license.Default_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/other/license.Default_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e55e1e0e4a6572090fea8ba0a490592bd24264f93430ff2c6ae6236e530e57ce -size 397505 +oid sha256:a937745ac745951229c2188820d39991c037b824f11a3815499e1ff139cbf156 +size 391903 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/other/license.Default_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/other/license.Default_iPhone_contrast.png index 980489ba6..cd398be52 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/other/license.Default_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/other/license.Default_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0771da176143fc03ef058f8b958124760f7b3b213dd8653d9b8e03504e1d0a0c -size 131198 +oid sha256:73465f39fe0640e50c402642db41955c362db5aa663ce3f281d36d0fed1799d7 +size 131213 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Empty_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Empty_iPhone.png index c0f80e2bc..73a4a9a8c 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Empty_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Empty_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8400984dad06eb11aff9723e03741a1595ef999db295500dfdbddd1630cf840d -size 133261 +oid sha256:6bd3a5faa261a6d5d559496a293184ca59b1e471057bc85bfcf9ff455b00d7ca +size 130914 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Empty_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Empty_iPhone_dark.png index a10429918..9d6188b15 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Empty_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Empty_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:59f35947a23ac12a9b79389987267aacd7c102fbf62ab9b568659c5b74b3f147 -size 141387 +oid sha256:0d0ca97b671853d390693665c9ac0b76fa0fff463dfc9e8cdd9c8fffd7bbc8e3 +size 135215 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Failed_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Failed_iPhone.png index d76dce76b..6d3093987 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Failed_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Failed_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e5d9590e11d6efffd1dffbc661f41ebdc907671cfdaa91beb3ae9820231f5e21 -size 107591 +oid sha256:dc3a6e038b5529153508d61afd01b4a2a97280d963f5634b9ed494cd309c34b2 +size 105120 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Failed_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Failed_iPhone_dark.png index 0439eaf06..764838f46 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Failed_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Failed_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ff7378d7f60b9be4b57a95b375e233096c00835ab0ea8973bd02fdc8db82d4f7 -size 117281 +oid sha256:77e5a09bb5f8e50e786cffa56c67743fbe3b0c9a6c8314df0dd5ecc5f502afb8 +size 111699 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Loaded_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Loaded_iPhone.png index 25d9fd28a..be2200dcf 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Loaded_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Loaded_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a92e028216d2fed4c762bac9dc6bea624572c1fc08b2091a4775202eb7ef9380 -size 155834 +oid sha256:f3e51f008d0a21e9a3bf9eb777a41cd928f83f59d0d282c51d2f94c7e6d2d671 +size 152839 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Loaded_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Loaded_iPhone_dark.png index 4ff1df9b0..dba1d0680 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Loaded_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Loaded_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1a550169bd7a81345c86ce4303fc56c74c15f94cdfa36044c09bf9113b7e02c7 -size 166943 +oid sha256:07f06d34348603bd8e61620b5cc3652fa0ee763181754097d6b9ee628a9e9d2a +size 160169 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/other/loggedDays.Loaded_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/other/loggedDays.Loaded_iPhone_ax5.png index 366b573ee..460d20092 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/other/loggedDays.Loaded_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/other/loggedDays.Loaded_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5b311253cde3604d0b85f91ed32c907b1b7ab5e8aa42ed6adbab79263fa12a12 -size 356907 +oid sha256:9180170681ea0c3924ca1e2364e7a4bd90022e399fef412ad428ebed104af6b2 +size 354327 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/other/loggedDays.Loaded_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/other/loggedDays.Loaded_iPhone_contrast.png index 9c37fb9e0..cfac257f5 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/other/loggedDays.Loaded_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/other/loggedDays.Loaded_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d4431f53c0835dc8218ef53fe4d6db97b8e98e269b446b0576ba0694781d348f -size 155278 +oid sha256:91ef2b092cf78c3a99d4e2dc7acb65f0f85d7f94b35173a2b16507149e3e36df +size 153442 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingViewSnapshotTests/onboarding.Default_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingViewSnapshotTests/onboarding.Default_iPad_dark.png index 7d58175f9..9c9558e76 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingViewSnapshotTests/onboarding.Default_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingViewSnapshotTests/onboarding.Default_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3ea421e43414ee3545aa128fedcbacfc34b78f0eccae3a427ad184edd072302b -size 1045095 +oid sha256:9f79434ae0bff5b7ab1d1f5f878645a2f248aeb812490023186cd109abc95339 +size 1017833 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingViewSnapshotTests/onboarding.Default_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingViewSnapshotTests/onboarding.Default_iPhone_dark.png index e440bac4b..1a41b6de4 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingViewSnapshotTests/onboarding.Default_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingViewSnapshotTests/onboarding.Default_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:53bffac116aa3c3f6f34e358fdebc5abdc2a19625d9a88d79f18aaee866ed456 -size 537818 +oid sha256:a6d168093bc5e48d6ba21c23a101095c356e2518139774b539d97a35d30ffa42 +size 521880 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingViewSnapshotTests/other/onboarding.PhoneRecordingChoice_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingViewSnapshotTests/other/onboarding.PhoneRecordingChoice_iPhone_ax5.png index a1937083f..dfd79fd9d 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingViewSnapshotTests/other/onboarding.PhoneRecordingChoice_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingViewSnapshotTests/other/onboarding.PhoneRecordingChoice_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cee43ce3888d9c80e8592de5b2324f48cbe8bc6fe7553588a37247e88e1ea9c0 -size 926415 +oid sha256:ddd8693342d5ed94b3761ad4fa5bd1b52092fcb6218ae703f5adf1d29712837e +size 1125067 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/other/planningRegionPicker.Home_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/other/planningRegionPicker.Home_iPad_ax5.png index b0ee20625..edb98ea7e 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/other/planningRegionPicker.Home_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/other/planningRegionPicker.Home_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e4d31fe3d4b3232628157ab95dd1c6ebfc50e99dd6e43ea93b5bc0d9de9eb7ce -size 358134 +oid sha256:a7d5d107f0abd0be8012bc95d4fd983bc0500fe5b06d6c967713243641de5e26 +size 355298 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/other/planningRegionPicker.Home_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/other/planningRegionPicker.Home_iPad_contrast.png index da610c2af..162820392 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/other/planningRegionPicker.Home_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/other/planningRegionPicker.Home_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a1a97dc5136474c585286e5441c88ab5dfe9215f6d96cff13403c26a9035454a -size 255131 +oid sha256:ec7fb620c654ed6b9879d6053cc4d768194e9e0bd8e8e4514eea0f8ddb700c85 +size 253357 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Home_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Home_iPad.png index 0f220d04d..738f57c06 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Home_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Home_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cca7eeaf28f8124e394ccec875dc81b7083caef471dab67cf1e0025ec61ef599 -size 256025 +oid sha256:1403ac297bb92328acefc66312d69d5d92033873f83fd18fe2b65a803e5aad40 +size 254044 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Home_iPad_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Home_iPad_accessibility.png index a24a3c3e2..8c1197641 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Home_iPad_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Home_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a52c33c950831c40caad7ee4bf743ec8bd9851b5902706567f8dd81e22ea13f1 -size 426789 +oid sha256:673a207b6045bfd2a0661817805d208fc10ae17e3c7b466973d0a3098d050a8e +size 402533 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Home_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Home_iPad_dark.png index 10f29ec5d..d137e7e8b 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Home_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Home_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ca017018aae359d05f9c0e8c69b6e505546f2621c8c0b58bece48898a004edac -size 249665 +oid sha256:3b1ff2552f532fdcdf6b1091c5435a0600dd2121e9e31ffedfb1c3e761fdf641 +size 248534 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayHidden_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayHidden_iPhone.png index bc6ad8079..930a53e47 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayHidden_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayHidden_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ece523d213dbdad54c8c6018c8ce0de9a3ecd98b7fa0003bcd8a02726b4c094c -size 164519 +oid sha256:d600f44095e44d1c5e2623b114114337a18a4b521106bc81da4cc6e6d1ff8e1c +size 165784 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayHidden_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayHidden_iPhone_dark.png index d278f5b99..f384f3cb9 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayHidden_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayHidden_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d0ca90440d332c9967fb60b26409038d54609455d47c9748326edf2b72a75214 -size 169501 +oid sha256:5e32c1a0c3c8d643510e087535988183f76d23d52e127fea625a3715ff65cc60 +size 170996 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStay_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStay_iPhone_accessibility.png index 792bd0118..46e144b7f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStay_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStay_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a5c452a6c9e9e08feb89a8041c34ab199cf93e3361080026ccf85aa98b088434 -size 1778080 +oid sha256:e1b8b0b65a41192854e1a972ad0bab0bb64d30eb99c2ec4f58a5cf1d5cbc606b +size 1777665 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPhone_accessibility.png index 97a738a2d..c206087f2 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:47fd5c6545eed2be7da549e1270a8b7c45a14bfd6d1c1b8ebcff6474ed2626e1 -size 1811304 +oid sha256:59080a07b5e1e51093a819fc1a63205b08caf8436b369bd9f350f7831f5a5104 +size 1809779 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Empty_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Empty_iPhone.png index 798c8d5a9..0304a5145 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Empty_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Empty_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9229caae45199020a31162fd241d18e1c00a10bcaf3069dd7fa9c7b53208f2d4 -size 114921 +oid sha256:fe6e3d4fc1aca901b6c8ea11fab7ca8188afa30681d6abecabb2b2f409b45bb6 +size 109957 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Empty_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Empty_iPhone_dark.png index 6217c2e46..313043120 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Empty_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Empty_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e07bb895541248dff5d2732f0bc952c7d03616a998f8d2eb8cb34bb08976caf -size 124173 +oid sha256:20d8bd428486a70b4f64ad6ed2d41bd015c523a7575bb1e5f80469d337bb0145 +size 115190 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/WidgetFeaturesViewSnapshotTests/widgetFeatures.Default_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/WidgetFeaturesViewSnapshotTests/widgetFeatures.Default_iPad_dark.png index 5497579a8..3039a2b93 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/WidgetFeaturesViewSnapshotTests/widgetFeatures.Default_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/WidgetFeaturesViewSnapshotTests/widgetFeatures.Default_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b60ceb0033dcd5f21a1659c811d75f5f3668565e977242373a1b1dc60b134ee6 -size 5790944 +oid sha256:df47ff698fb25308c2c166bb93e2310c705272d4f6a78088b685403e8d06b53f +size 5591234 diff --git a/Where/WhereUI/Sources/Manual/LoggedDaysView.swift b/Where/WhereUI/Sources/Manual/LoggedDaysView.swift index c4ba09346..7e8633d54 100644 --- a/Where/WhereUI/Sources/Manual/LoggedDaysView.swift +++ b/Where/WhereUI/Sources/Manual/LoggedDaysView.swift @@ -235,11 +235,12 @@ private struct LoggedDayRow: View { @Environment(\.stylesheet) private var stylesheet var body: some View { - HStack(spacing: stylesheet.spacing.large) { + HStack(alignment: .top, spacing: stylesheet.spacing.large) { Image(systemSymbol: day.isAuthoritative ? .pencilCircle : .calendarBadgePlus) .font(.title3) .foregroundStyle(.tint) - .frame(width: stylesheet.size.statusIconWidth) + .fixedSize() + .frame(minWidth: stylesheet.size.statusIconWidth) .accessibilityHidden(true) VStack(alignment: .leading, spacing: stylesheet.spacing.xxSmall) { Text(dateText) @@ -251,16 +252,17 @@ private struct LoggedDayRow: View { Text(note) .font(.footnote) .foregroundStyle(.secondary) - .lineLimit(2) + .lineLimit(stylesheet.loggedDay.layout == .stacked ? nil : 2) + } + if stylesheet.loggedDay.layout == .stacked { + kindLabel } } - Spacer(minLength: stylesheet.spacing.small) - // `fixedSize` keeps the tag at its intrinsic width so long region - // lists wrap in the VStack rather than squeezing "Logged"/"Overridden". - Text(kindText) - .font(.caption) - .foregroundStyle(.secondary) - .fixedSize() + .frame(maxWidth: .infinity, alignment: .leading) + if stylesheet.loggedDay.layout == .inline { + Spacer(minLength: stylesheet.spacing.small) + kindLabel.fixedSize() + } } .padding(.vertical, stylesheet.spacing.xxSmall) // Make the whole row (including the spacer) tap into the edit sheet. @@ -268,6 +270,12 @@ private struct LoggedDayRow: View { .accessibilityElement(children: .combine) } + private var kindLabel: some View { + Text(kindText) + .font(.caption) + .foregroundStyle(.secondary) + } + private var dateText: String { day.displayDate.formatted(.dateTime.weekday(.abbreviated).month(.wide).day().year()) } diff --git a/Where/WhereUI/Sources/Onboarding/OnboardingView.swift b/Where/WhereUI/Sources/Onboarding/OnboardingView.swift index 615861590..6387343a9 100644 --- a/Where/WhereUI/Sources/Onboarding/OnboardingView.swift +++ b/Where/WhereUI/Sources/Onboarding/OnboardingView.swift @@ -456,9 +456,13 @@ struct OnboardingPage: Identifiable { }, whereSnapshot( name: "PhoneRecordingChoice", - configurations: SnapshotConfiguration.combinations(devices: [.iPhone]) + [ - SnapshotConfiguration(dynamicType: .accessibility5, device: .iPhone), - ], + configurations: SnapshotConfiguration + .combinations(devices: [.iPhoneFullContent]) + [ + SnapshotConfiguration( + dynamicType: .accessibility5, + device: .iPhoneFullContent, + ), + ], ) { OnboardingView( gate: LifecycleGateHandle( @@ -472,7 +476,7 @@ struct OnboardingPage: Identifiable { }, whereSnapshot( name: "TabletRecordingChoice", - configurations: SnapshotConfiguration.combinations(devices: [.iPad]), + configurations: SnapshotConfiguration.combinations(devices: [.iPadFullContent]), ) { OnboardingView( gate: LifecycleGateHandle( diff --git a/Where/WhereUI/Sources/Settings/AppearanceSettingsView.swift b/Where/WhereUI/Sources/Settings/AppearanceSettingsView.swift index 86f31b773..d8fe89b06 100644 --- a/Where/WhereUI/Sources/Settings/AppearanceSettingsView.swift +++ b/Where/WhereUI/Sources/Settings/AppearanceSettingsView.swift @@ -248,6 +248,9 @@ extension AppearanceSettingsView: SettingsSection { name: "Default", configurations: .fullContentScreenRepresentative, measurementReadiness: .immediate, + // Native navigation adapts when the Form reaches its full height. + // Reparse accessibility after that preparation pass, as About does. + settle: .settledAtLeast(minDuration: 1.5), onReadyToSnapshot: { await PreviewSupport.loadCardArtwork(for: [.california], cache: cache) }, diff --git a/Where/WhereUI/Sources/Settings/DevicesSettingsView.swift b/Where/WhereUI/Sources/Settings/DevicesSettingsView.swift index 7bcc7abc6..c18c38ce1 100644 --- a/Where/WhereUI/Sources/Settings/DevicesSettingsView.swift +++ b/Where/WhereUI/Sources/Settings/DevicesSettingsView.swift @@ -152,51 +152,3 @@ extension DevicesSettingsView: SettingsSection { whereSnapshot( name: "Default", configurations: .fullContentScreenRepresentative, - onReadyToSnapshot: { await session.start() }, - ) { - NavigationStack { - DevicesSettingsView( - session: session, - configurations: PreviewSupport.recordingDeviceConfigurations(), - ) - } - .environment(session) - .task { await session.start() } - } - whereSnapshot( - name: "PermissionRequiredRecordingOff", - configurations: .fullContentPhoneLightDark, - onReadyToSnapshot: { await permissionRequiredSession.start() }, - ) { - NavigationStack { - DevicesSettingsView( - session: permissionRequiredSession, - configurations: PreviewSupport.recordingDeviceConfigurations( - automaticRecordingEnabled: false, - ), - ) - } - .environment(permissionRequiredSession) - .task { await permissionRequiredSession.start() } - } - } - } - - #Preview { - DevicesSettingsView.snapshotPreviews - } -#endif - -#if DEBUG - extension DevicesSettingsView: WhereFlyoverProviding { - static let flyoverData = WhereFlyoverData.hosted( - DevicesSettingsView.self, - title: "Devices", - ) { world in - DevicesSettingsView( - session: world.session, - configurations: PreviewSupport.recordingDeviceConfigurations(), - ) - } - } -#endif diff --git a/Where/WhereUI/Sources/Shared/WhereStylesheet.swift b/Where/WhereUI/Sources/Shared/WhereStylesheet.swift index 912eb4980..6f36e19cc 100644 --- a/Where/WhereUI/Sources/Shared/WhereStylesheet.swift +++ b/Where/WhereUI/Sources/Shared/WhereStylesheet.swift @@ -35,6 +35,7 @@ struct WhereStylesheet: BStylesheet { var typography = Typography.standard var themePicker = ThemePickerStyle() var yearModePicker = YearModePickerStyle() + var loggedDay = LoggedDayStyle() var settings = SettingsStyle.standard var featureDiscovery = FeatureDiscoveryStyle.standard var passportSeal = PassportSealStyle.standard @@ -68,6 +69,7 @@ struct WhereStylesheet: BStylesheet { privacyPassportCard.disclosure.layout = .stacked themePicker.layout = .stacked yearModePicker.layout = .stacked + loggedDay.layout = .stacked openSourceStamp.layout = .stacked plannedStayWarningStamp.layout = .stacked featureDiscovery.appIcon.layout = .stacked @@ -2831,8 +2833,14 @@ extension WhereStylesheet { var layout = ContentLayout.inline } + struct LoggedDayStyle: Equatable { + var layout = ContentLayout.inline + } + struct ThemePickerStyle: Equatable { var layout = ContentLayout.inline var spacing: CGFloat = 12 + /// Two 176-point specimens plus their gap keep counts readable in a narrow pane. + var minimumInlineWidth: CGFloat = 364 } } diff --git a/Where/WhereUI/Sources/Shared/WhereThemePicker.swift b/Where/WhereUI/Sources/Shared/WhereThemePicker.swift index d40bd0236..53d64c333 100644 --- a/Where/WhereUI/Sources/Shared/WhereThemePicker.swift +++ b/Where/WhereUI/Sources/Shared/WhereThemePicker.swift @@ -12,30 +12,44 @@ struct WhereThemePicker: View { @Environment(\.stylesheet) private var stylesheet var body: some View { - let layout = stylesheet.themePicker.layout == .stacked - ? AnyLayout(VStackLayout(spacing: stylesheet.themePicker.spacing)) - : AnyLayout(HStackLayout(alignment: .top, spacing: stylesheet.themePicker.spacing)) - - layout { - ForEach(WhereTheme.allCases, id: \.self) { theme in - Button { - onSelect(theme) - } label: { - WhereThemeOption(theme: theme, isSelected: theme == selection) + Group { + if stylesheet.themePicker.layout == .stacked { + stackedOptions + } else { + ViewThatFits(in: .horizontal) { + HStack(alignment: .top, spacing: stylesheet.themePicker.spacing) { + options + } + .frame(minWidth: stylesheet.themePicker.minimumInlineWidth) + stackedOptions } - .buttonStyle(.plain) - .accessibilityLabel(theme.title) - .accessibilityValue( - theme == selection - ? String(localized: .themeSelectedValue) - : String(localized: .themeNotSelectedValue), - ) - .accessibilityHint(theme.detail) - .accessibilityAddTraits(theme == selection ? .isSelected : []) } } .sensoryFeedback(.selection, trigger: selection) } + + private var stackedOptions: some View { + VStack(spacing: stylesheet.themePicker.spacing) { options } + } + + private var options: some View { + ForEach(WhereTheme.allCases, id: \.self) { theme in + Button { + onSelect(theme) + } label: { + WhereThemeOption(theme: theme, isSelected: theme == selection) + } + .buttonStyle(.plain) + .accessibilityLabel(theme.title) + .accessibilityValue( + theme == selection + ? String(localized: .themeSelectedValue) + : String(localized: .themeNotSelectedValue), + ) + .accessibilityHint(theme.detail) + .accessibilityAddTraits(theme == selection ? .isSelected : []) + } + } } private struct WhereThemeOption: View { diff --git a/Where/WhereUI/Tests/WhereStylesheetTests.swift b/Where/WhereUI/Tests/WhereStylesheetTests.swift index 355fe73f6..53b43d248 100644 --- a/Where/WhereUI/Tests/WhereStylesheetTests.swift +++ b/Where/WhereUI/Tests/WhereStylesheetTests.swift @@ -50,6 +50,7 @@ struct WhereStylesheetTests { #expect(sheet.privacyPassportCard.disclosure.layout == layout) #expect(sheet.themePicker.layout == layout) #expect(sheet.yearModePicker.layout == layout) + #expect(sheet.loggedDay.layout == layout) #expect(sheet.openSourceStamp.layout == layout) #expect(sheet.plannedStayWarningStamp.layout == layout) #expect(sheet.featureDiscovery.appIcon.layout == layout) @@ -92,6 +93,8 @@ struct WhereStylesheetTests { #expect(style.privacyPassportCard.disclosure.layout == .inline) #expect(style.themePicker == .init()) #expect(style.themePicker.spacing == 12) + #expect(style.themePicker.minimumInlineWidth == 364) + #expect(style.loggedDay.layout == .inline) #expect(style.openSourceStamp.layout == .inline) #expect(style.plannedStayWarningStamp.layout == .inline) #expect(style.featureDiscovery.appIcon.layout == .inline) diff --git a/flaky b/flaky index e07bbf8c3..ae03518e8 100755 --- a/flaky +++ b/flaky @@ -32,216 +32,3 @@ set -euo pipefail SUITE_RUNS=10 # Phase 1: how many times to run the full suite ITERATIONS=50 # Phase 2: how many times to tight-loop each suspect -DEVICE="iPhone 17" -OS="27.2" -SCHEME="Stuff-iOS-Tests" -RELAUNCH="YES" # fresh process per tight-loop iteration (-test-repetition-relaunch-enabled) -UPDATE=true # write FLAKY_TESTS.md (disable with --no-update) -TOP=1000000 # cap on how many flaky tests to list in the report/doc - -usage() { - cat <<'USAGE' -Usage: ./flaky [options] - -Detects flaky tests by running the suite repeatedly, then tight-looping the -tests that ever failed. Writes the findings (with flake counts) to -FLAKY_TESTS.md. Report only — it never fails on flaky tests. - -Options: - --suite-runs N Times to run the whole suite in phase 1 (default: 10) - --iterations M Times to tight-loop each suspect in phase 2 (default: 50) - --device NAME Simulator device name (default: "iPhone 17") - --os VERSION Simulator iOS version (default: "27.2") - --scheme NAME Scheme to test (default: "Stuff-iOS-Tests") - --relaunch YES|NO New process per tight-loop iteration (default: YES) - --no-update Print the report but don't write FLAKY_TESTS.md - --top N List at most N flaky tests (default: all) - -h, --help Show this help - -Examples: - ./flaky - ./flaky --suite-runs 3 --iterations 20 - ./flaky --no-update --top 10 -USAGE -} - -while [ $# -gt 0 ]; do - case "$1" in - --suite-runs) shift; SUITE_RUNS="${1:?--suite-runs requires a value}" ;; - --iterations) shift; ITERATIONS="${1:?--iterations requires a value}" ;; - --device) shift; DEVICE="${1:?--device requires a value}" ;; - --os) shift; OS="${1:?--os requires a value}" ;; - --scheme) shift; SCHEME="${1:?--scheme requires a value}" ;; - --relaunch) shift; RELAUNCH="${1:?--relaunch requires YES or NO}" ;; - --no-update) UPDATE=false ;; - --top) shift; TOP="${1:?--top requires a value}" ;; - -h|--help) usage; exit 0 ;; - *) echo "error: unknown option '$1' (see ./flaky --help)" >&2; exit 1 ;; - esac - shift -done - -cd "$(dirname "$0")" - -WORKSPACE="Stuff.xcworkspace" -# Boot the target up front and address it by UDID. This matters most here: a -# name-based `simctl`/destination can hit a same-named device on another -# runtime, and a device shared with another checkout can be installed to or -# erased mid-run — either way the `Application failed preflight checks (Busy)` / -# `Mach error -308` launch failures look exactly like the flakes this script -# hunts. `./simulator` hands back this checkout's own device (creating it the -# first time), which rules both out. -DESTINATION="platform=iOS Simulator,id=$(./simulator --device "$DEVICE" --os "$OS")" - -# Under Xcode's DerivedData rather than `$TMPDIR`, because the warm rebuild -# below depends on this surviving between runs: macOS sweeps unread files from -# `/var/folders/…/T` after ~3 days, taking package manifests with them, so a -# "warm" re-run would go cold or fail outright. Not in the checkout either — -# the repo's tree-walking scripts would descend into the vendored package -# sources. Suffixed per checkout; nothing prunes it, so delete by hand. -WORKDIR="$HOME/Library/Developer/Xcode/DerivedData/where-flaky-$(basename "$PWD")" -DERIVED="$WORKDIR/DerivedData" -BUILD_LOG="$WORKDIR/build.log" -SUITE_DIR="$WORKDIR/suite" -TIGHT_DIR="$WORKDIR/tight" -SUSPECTS="$WORKDIR/suspects.txt" -SUITE_COUNTS="$WORKDIR/suite_counts.json" -# The suite/tight run outputs are per-invocation; clear them so a re-run never -# mixes in stale results. DerivedData is deliberately kept for a warm rebuild. -rm -rf "$SUITE_DIR" "$TIGHT_DIR" "$SUSPECTS" "$SUITE_COUNTS" -mkdir -p "$WORKDIR" "$SUITE_DIR" "$TIGHT_DIR" - -rule() { printf '%s\n' "============================================================"; } - -echo "==> Regenerating project (tuist generate --no-open)" -mise exec -- tuist generate --no-open >/dev/null - -# Xcode does not expand the scheme's $(BUILT_PRODUCTS_DIR) environment value -# for command-line test runs. Resolve the concrete package-resource location, -# matching ./test and ./profile, so Bundle.module works in every test process. -TEST_RUN_ENV=() -BUILT_PRODUCTS_DIR="$(xcodebuild -showBuildSettings \ - -workspace "$WORKSPACE" \ - -scheme "$SCHEME" \ - -destination "$DESTINATION" \ - -derivedDataPath "$DERIVED" 2>/dev/null \ - | awk -F' = ' '/ BUILT_PRODUCTS_DIR = /{print $2; exit}')" -if [ -n "$BUILT_PRODUCTS_DIR" ]; then - TEST_RUN_ENV+=("TEST_RUNNER_PACKAGE_RESOURCE_BUNDLE_PATH=$BUILT_PRODUCTS_DIR") -else - echo "warning: could not resolve BUILT_PRODUCTS_DIR; package resource" \ - "bundle lookups will fall back to the linker's placement" >&2 -fi - -echo "==> Building for testing ($SCHEME) on $DEVICE / iOS $OS" -set +e -xcodebuild build-for-testing \ - -workspace "$WORKSPACE" \ - -scheme "$SCHEME" \ - -destination "$DESTINATION" \ - -derivedDataPath "$DERIVED" \ - >"$BUILD_LOG" 2>&1 -build_status=$? -set -e -if [ "$build_status" -ne 0 ]; then - echo "error: build failed (exit $build_status). Tail of $BUILD_LOG:" >&2 - tail -n 40 "$BUILD_LOG" >&2 - exit "$build_status" -fi - -# --------------------------------------------------------------------------- -# Phase 1 — run the whole suite SUITE_RUNS times. -# --------------------------------------------------------------------------- -echo -echo "==> Phase 1: running the full suite $SUITE_RUNS time(s)" -for i in $(seq 1 "$SUITE_RUNS"); do - rb="$SUITE_DIR/run_$i.xcresult" - log="$SUITE_DIR/run_$i.log" - rm -rf "$rb" - echo " - suite run $i/$SUITE_RUNS" - # Test failures are the whole point here, so don't let a non-zero exit abort - # the loop — we read the truth out of the .xcresult regardless. - set +e - env ${TEST_RUN_ENV[@]+"${TEST_RUN_ENV[@]}"} \ - xcodebuild test-without-building \ - -workspace "$WORKSPACE" \ - -scheme "$SCHEME" \ - -destination "$DESTINATION" \ - -derivedDataPath "$DERIVED" \ - -resultBundlePath "$rb" \ - -collect-test-diagnostics never \ - >"$log" 2>&1 - set -e - xcrun xcresulttool get test-results tests --path "$rb" >"$SUITE_DIR/run_$i.json" 2>>"$log" \ - || echo " warning: could not read results for suite run $i (see $log)" >&2 -done - -echo -echo "==> Analyzing suite runs" -# Build the suspect set (tests that failed in >=1 suite run) and per-test suite -# counts. Best-effort parse: warn and continue if the xcresult schema shifts. -python3 Tools/flaky_results.py analyze-suite \ - --suite-dir "$SUITE_DIR" --suspects "$SUSPECTS" --counts "$SUITE_COUNTS" - -# `grep -c` prints 0 *and* exits non-zero on no match, which would trip the -# `|| ...` fallback into appending a second count; count non-blank lines with -# awk instead so an empty/absent suspects file cleanly yields 0. -SUSPECT_COUNT=$(awk 'NF' "$SUSPECTS" 2>/dev/null | wc -l | tr -d '[:space:]') -SUSPECT_COUNT=${SUSPECT_COUNT:-0} - -# --------------------------------------------------------------------------- -# Phase 2 — tight-loop each suspect in isolation. -# --------------------------------------------------------------------------- -if [ "$SUSPECT_COUNT" -gt 0 ]; then - echo - echo "==> Phase 2: tight-looping $SUSPECT_COUNT suspect(s) $ITERATIONS time(s) each" - i=0 - while IFS= read -r id; do - [ -z "$id" ] && continue - i=$((i + 1)) - rb="$TIGHT_DIR/tight_$i.xcresult" - log="$TIGHT_DIR/tight_$i.log" - rm -rf "$rb" - echo " - [$i/$SUSPECT_COUNT] $id" - printf '%s\n' "$id" >"$TIGHT_DIR/tight_$i.id" - set +e - env ${TEST_RUN_ENV[@]+"${TEST_RUN_ENV[@]}"} \ - xcodebuild test-without-building \ - -workspace "$WORKSPACE" \ - -scheme "$SCHEME" \ - -destination "$DESTINATION" \ - -derivedDataPath "$DERIVED" \ - -only-testing:"$id" \ - -test-iterations "$ITERATIONS" \ - -test-repetition-relaunch-enabled "$RELAUNCH" \ - -resultBundlePath "$rb" \ - -collect-test-diagnostics never \ - >"$log" 2>&1 - set -e - xcrun xcresulttool get test-results tests --path "$rb" \ - >"$TIGHT_DIR/tight_$i.tests.json" 2>>"$log" || true - xcrun xcresulttool get test-results summary --path "$rb" \ - >"$TIGHT_DIR/tight_$i.summary.json" 2>>"$log" || true - done <"$SUSPECTS" -else - echo - echo "==> Phase 2: skipped (no suspects from phase 1)" -fi - -# --------------------------------------------------------------------------- -# Aggregate + report + write FLAKY_TESTS.md. -# --------------------------------------------------------------------------- -echo -rule -echo "FLAKY TEST REPORT" -rule -report_args=() -[ "$UPDATE" = true ] && report_args+=(--update) -python3 Tools/flaky_results.py report \ - --counts "$SUITE_COUNTS" --tight-dir "$TIGHT_DIR" \ - --suite-runs "$SUITE_RUNS" --iterations "$ITERATIONS" --top "$TOP" \ - --device "$DEVICE" --os "$OS" --relaunch "$RELAUNCH" \ - ${report_args[@]+"${report_args[@]}"} - -echo -echo "Logs and result bundles: $WORKDIR" diff --git a/profile b/profile index 9a1eb84ee..a0863b3e7 100755 --- a/profile +++ b/profile @@ -34,324 +34,3 @@ set -euo pipefail # formatter-independent source of per-test timings. We still let Tuist own # project generation so a run always reflects the current manifests. -DEVICE="iPhone 17" -OS="27.2" -TOP=15 -TEST_THRESHOLD="0.1" # seconds — tests at/over this are flagged as hot spots -TC_THRESHOLD=100 # milliseconds — slow type-check warn threshold -DO_BUILD=true -DO_TESTS=true -DO_SNAPSHOTS=true -CI_SHAPE=false - -usage() { - cat <<'USAGE' -Usage: ./profile [options] - -Profiles Where's clean build and its test run — the unit-test bundles via the -Stuff-iOS-Tests scheme plus the image-snapshot suite via its standalone -StuffSnapshotTests scheme — then prints the hot spots. - -Options: - --build-only Only profile the build - --tests-only Only profile the tests - --no-snapshots Skip the StuffSnapshotTests leg (saves ~10-15 min) - --ci-shape Use separate cold DerivedData for unit and snapshot - jobs, matching CI topology (default shares products) - --device NAME Simulator device name (default: "iPhone 17") - --os VERSION Simulator iOS version (default: "27.2") - --top N How many slowest tests to list (default: 15) - --test-threshold SECS Flag tests at/over this many seconds (default: 0.1) - --typecheck-threshold MS Warn on type-check work over this many ms (default: 100) - -h, --help Show this help - -Examples: - ./profile - ./profile --tests-only --no-snapshots --top 25 --test-threshold 0.2 - ./profile --ci-shape - ./profile --device 'iPhone 17 Pro' --os 27.2 -USAGE -} - -while [ $# -gt 0 ]; do - case "$1" in - --build-only) DO_TESTS=false ;; - --tests-only) DO_BUILD=false ;; - --no-snapshots) DO_SNAPSHOTS=false ;; - --ci-shape) CI_SHAPE=true ;; - --device) shift; DEVICE="${1:?--device requires a value}" ;; - --os) shift; OS="${1:?--os requires a value}" ;; - --top) shift; TOP="${1:?--top requires a value}" ;; - --test-threshold) shift; TEST_THRESHOLD="${1:?--test-threshold requires a value}" ;; - --typecheck-threshold) shift; TC_THRESHOLD="${1:?--typecheck-threshold requires a value}" ;; - -h|--help) usage; exit 0 ;; - *) echo "error: unknown option '$1' (see ./profile --help)" >&2; exit 1 ;; - esac - shift -done - -cd "$(dirname "$0")" - -WORKSPACE="Stuff.xcworkspace" -SCHEME="Stuff-iOS-Tests" -SNAPSHOT_SCHEME="StuffSnapshotTests" -# Boot the target up front and address it by UDID: a cold simulator otherwise -# lands in the timings as build/test cost, and a name-based destination can -# resolve to a same-named device on another runtime. `./simulator` hands back -# the device this checkout owns (creating it the first time), so a run in -# another checkout can't perturb these numbers by sharing it. -SECONDS=0 -SIMULATOR_UDID="$(./simulator --device "$DEVICE" --os "$OS")" -simulator_wall=$SECONDS -DESTINATION="platform=iOS Simulator,id=$SIMULATOR_UDID" - -CHECKOUT_HASH="$(printf '%s' "$(pwd -P)" | shasum -a 256 | cut -c1-12)" -# Keep profiling artifacts isolated just like the checkout-owned simulator: -# concurrent clones/worktrees must not replace one another's DerivedData, -# logs, or result bundles. PROFILE_WORKDIR remains an explicit CI override. -WORKDIR="${PROFILE_WORKDIR:-${TMPDIR:-/tmp}/where-profile-$CHECKOUT_HASH}" -DERIVED="$WORKDIR/DerivedData" -SNAPSHOT_DERIVED="$DERIVED" -[ "$CI_SHAPE" = true ] && SNAPSHOT_DERIVED="$WORKDIR/SnapshotDerivedData" -BUILD_LOG="$WORKDIR/build.log" -TEST_LOG="$WORKDIR/test.log" -RESULT_BUNDLE="$WORKDIR/tests.xcresult" -TESTS_JSON="$WORKDIR/tests.json" -SNAPSHOT_BUILD_LOG="$WORKDIR/snapshot-build.log" -SNAPSHOT_TEST_LOG="$WORKDIR/snapshot-test.log" -SNAPSHOT_RESULT_BUNDLE="$WORKDIR/snapshot-tests.xcresult" -SNAPSHOT_TESTS_JSON="$WORKDIR/snapshot-tests.json" -SNAPSHOT_TIMINGS="$WORKDIR/snapshot-timings.jsonl" -mkdir -p "$WORKDIR" && chmod 700 "$WORKDIR" - -rule() { printf '%s\n' "============================================================"; } - -# `$(inherited)` must reach xcodebuild literally; only $TC_THRESHOLD is ours. -# Shared by the clean unit build and the snapshot scheme's incremental -# build below — identical settings are what let the second build reuse the -# first instead of recompiling the world. -tc_flags="\$(inherited) -Xfrontend -warn-long-function-bodies=$TC_THRESHOLD -Xfrontend -warn-long-expression-type-checking=$TC_THRESHOLD" - -echo "==> Regenerating project (tuist generate --no-open)" -SECONDS=0 -mise exec -- tuist generate --no-open >/dev/null -generation_wall=$SECONDS - -# Xcode does not expand the scheme's $(BUILT_PRODUCTS_DIR) environment value -# for command-line test runs. Resolve the profiler's isolated build-products -# directory and hand it to SwiftPM's Bundle.module accessors through the same -# TEST_RUNNER_ override as ./test. See packageResourceEnvironment in -# Project.swift for the hosted-test linking bug this works around. -UNIT_TEST_RUN_ENV=() -SNAPSHOT_TEST_RUN_ENV=("TEST_RUNNER_SNAPSHOT_TIMING=1") -SECONDS=0 -BUILT_PRODUCTS_DIR="$(xcodebuild -showBuildSettings \ - -workspace "$WORKSPACE" \ - -scheme "$SCHEME" \ - -destination "$DESTINATION" \ - -derivedDataPath "$DERIVED" 2>/dev/null \ - | awk -F' = ' '/ BUILT_PRODUCTS_DIR = /{print $2; exit}')" -unit_build_settings_wall=$SECONDS -if [ -n "$BUILT_PRODUCTS_DIR" ]; then - UNIT_TEST_RUN_ENV+=("TEST_RUNNER_PACKAGE_RESOURCE_BUNDLE_PATH=$BUILT_PRODUCTS_DIR") -else - echo "warning: could not resolve BUILT_PRODUCTS_DIR; package resource" \ - "bundle lookups will fall back to the linker's placement" >&2 -fi - -snapshot_build_settings_wall=0 -if [ "$DO_TESTS" = true ] && [ "$DO_SNAPSHOTS" = true ]; then - SECONDS=0 - SNAPSHOT_BUILT_PRODUCTS_DIR="$(xcodebuild -showBuildSettings \ - -workspace "$WORKSPACE" \ - -scheme "$SNAPSHOT_SCHEME" \ - -destination "$DESTINATION" \ - -derivedDataPath "$SNAPSHOT_DERIVED" 2>/dev/null \ - | awk -F' = ' '/ BUILT_PRODUCTS_DIR = /{print $2; exit}')" - snapshot_build_settings_wall=$SECONDS - if [ -n "$SNAPSHOT_BUILT_PRODUCTS_DIR" ]; then - SNAPSHOT_TEST_RUN_ENV+=( - "TEST_RUNNER_PACKAGE_RESOURCE_BUNDLE_PATH=$SNAPSHOT_BUILT_PRODUCTS_DIR" - ) - else - echo "warning: could not resolve snapshot BUILT_PRODUCTS_DIR; package resource" \ - "bundle lookups will fall back to the linker's placement" >&2 - fi -fi - -if [ "$DO_BUILD" = true ]; then - echo "==> Clean build-for-testing on $DEVICE / iOS $OS (cold build)" - SECONDS=0 - set +e - xcodebuild clean build-for-testing \ - -workspace "$WORKSPACE" \ - -scheme "$SCHEME" \ - -destination "$DESTINATION" \ - -derivedDataPath "$DERIVED" \ - -showBuildTimingSummary \ - OTHER_SWIFT_FLAGS="$tc_flags" \ - >"$BUILD_LOG" 2>&1 - build_status=$? - set -e - build_wall=$SECONDS - if [ "$build_status" -ne 0 ]; then - echo "error: build failed (exit $build_status). Tail of $BUILD_LOG:" >&2 - tail -n 30 "$BUILD_LOG" >&2 - exit "$build_status" - fi - echo - rule - echo "BUILD HOT SPOTS — cold build wall: ${build_wall}s" - rule - # Parsing is best-effort: if xcodebuild's log format ever shifts, warn and - # keep going rather than aborting the run with a traceback. - set +e - python3 Tools/profile_results.py build \ - --log "$BUILD_LOG" --typecheck-threshold "$TC_THRESHOLD" - set -e - echo -fi - -if [ "$DO_TESTS" = true ]; then - if [ "$DO_BUILD" = true ]; then - TEST_ACTION="test-without-building" - TEST_WALL_LABEL="test-execution wall" - echo "==> Running unit tests (test-without-building, reuses the build above)" - else - # `test` builds then tests, so the wall below includes compilation - # (a full cold build on an empty DerivedData) — label it accordingly. - TEST_ACTION="test" - TEST_WALL_LABEL="build+test wall" - echo "==> Running unit tests (build + test) on $DEVICE / iOS $OS" - fi - rm -rf "$RESULT_BUNDLE" - SECONDS=0 - set +e - env ${UNIT_TEST_RUN_ENV[@]+"${UNIT_TEST_RUN_ENV[@]}"} \ - xcodebuild "$TEST_ACTION" \ - -workspace "$WORKSPACE" \ - -scheme "$SCHEME" \ - -destination "$DESTINATION" \ - -derivedDataPath "$DERIVED" \ - -resultBundlePath "$RESULT_BUNDLE" \ - >"$TEST_LOG" 2>&1 - test_status=$? - set -e - test_wall=$SECONDS - if [ "$test_status" -ne 0 ]; then - echo "error: unit-test leg ($SCHEME) failed (exit $test_status). Tail of $TEST_LOG:" >&2 - tail -n 40 "$TEST_LOG" >&2 - exit "$test_status" - fi - xcrun xcresulttool get test-results tests --path "$RESULT_BUNDLE" >"$TESTS_JSON" - TEST_JSON_PATHS="$TESTS_JSON" - WALL_SUMMARY="$TEST_WALL_LABEL: ${test_wall}s" - - if [ "$DO_SNAPSHOTS" = true ]; then - if [ "$DO_BUILD" = true ]; then - if [ "$CI_SHAPE" = true ]; then - SNAPSHOT_BUILD_ACTION=(clean build-for-testing) - SNAPSHOT_BUILD_LABEL="cold, separate DerivedData matching CI" - else - # Same DerivedData, destination, and flags as the clean unit - # build above, so this reuses shared products while adding the - # image bundles. - SNAPSHOT_BUILD_ACTION=(build-for-testing) - SNAPSHOT_BUILD_LABEL="incremental, reuses the unit build" - fi - echo "==> ${SNAPSHOT_BUILD_ACTION[*]} $SNAPSHOT_SCHEME ($SNAPSHOT_BUILD_LABEL)" - SECONDS=0 - set +e - xcodebuild "${SNAPSHOT_BUILD_ACTION[@]}" \ - -workspace "$WORKSPACE" \ - -scheme "$SNAPSHOT_SCHEME" \ - -destination "$DESTINATION" \ - -derivedDataPath "$SNAPSHOT_DERIVED" \ - OTHER_SWIFT_FLAGS="$tc_flags" \ - >"$SNAPSHOT_BUILD_LOG" 2>&1 - snapshot_build_status=$? - set -e - snapshot_build_wall=$SECONDS - if [ "$snapshot_build_status" -ne 0 ]; then - echo "error: snapshot build ($SNAPSHOT_SCHEME) failed (exit $snapshot_build_status). Tail of $SNAPSHOT_BUILD_LOG:" >&2 - tail -n 30 "$SNAPSHOT_BUILD_LOG" >&2 - exit "$snapshot_build_status" - fi - echo " snapshot build ($SNAPSHOT_BUILD_LABEL): ${snapshot_build_wall}s" - SNAPSHOT_TEST_ACTION="test-without-building" - echo "==> Running snapshot tests (test-without-building, $SNAPSHOT_SCHEME scheme — serial by design, ~10-15 min)" - else - SNAPSHOT_TEST_ACTION="test" - echo "==> Running snapshot tests (build + test, $SNAPSHOT_SCHEME scheme — serial by design, ~10-15 min)" - fi - rm -rf "$SNAPSHOT_RESULT_BUNDLE" - SECONDS=0 - set +e - env ${SNAPSHOT_TEST_RUN_ENV[@]+"${SNAPSHOT_TEST_RUN_ENV[@]}"} \ - xcodebuild "$SNAPSHOT_TEST_ACTION" \ - -workspace "$WORKSPACE" \ - -scheme "$SNAPSHOT_SCHEME" \ - -destination "$DESTINATION" \ - -derivedDataPath "$SNAPSHOT_DERIVED" \ - -resultBundlePath "$SNAPSHOT_RESULT_BUNDLE" \ - >"$SNAPSHOT_TEST_LOG" 2>&1 - snapshot_status=$? - set -e - snapshot_wall=$SECONDS - if [ "$snapshot_status" -ne 0 ]; then - echo "error: snapshot-test leg ($SNAPSHOT_SCHEME) failed (exit $snapshot_status). Tail of $SNAPSHOT_TEST_LOG:" >&2 - tail -n 40 "$SNAPSHOT_TEST_LOG" >&2 - echo "note: a red snapshot leg usually means failed image comparisons (e.g. stale references on this branch), not a profile bug — rerun with --no-snapshots to profile without it." >&2 - exit "$snapshot_status" - fi - xcrun xcresulttool get test-results tests --path "$SNAPSHOT_RESULT_BUNDLE" >"$SNAPSHOT_TESTS_JSON" - : >"$SNAPSHOT_TIMINGS" - grep -o 'SNAPSHOT_TIMING {.*}' "$SNAPSHOT_TEST_LOG" 2>/dev/null \ - | sed 's/^SNAPSHOT_TIMING //' >>"$SNAPSHOT_TIMINGS" || true - echo - rule - echo "SNAPSHOT CAPTURE PHASES" - rule - python3 Tools/snapshot_reports.py timings "$SNAPSHOT_TIMINGS" \ - --detailed --empty-message "no timing lines found" - TEST_JSON_PATHS="$TESTS_JSON:$SNAPSHOT_TESTS_JSON" - WALL_SUMMARY="$TEST_WALL_LABEL: ${test_wall}s (unit) + ${snapshot_wall}s (snapshot)" - fi - - echo - rule - echo "TEST HOT SPOTS — $WALL_SUMMARY" - rule - # Best-effort parse: warn and continue if the xcresult schema shifts. - set +e - python3 Tools/profile_results.py tests \ - --tests-json-paths "$TEST_JSON_PATHS" \ - --top "$TOP" --threshold "$TEST_THRESHOLD" - set -e - echo -fi - -rule -echo "PROFILE WALLS" -rule -echo " simulator resolve/boot: ${simulator_wall}s" -echo " project generation: ${generation_wall}s" -echo " unit build settings: ${unit_build_settings_wall}s" -if [ "$DO_TESTS" = true ] && [ "$DO_SNAPSHOTS" = true ]; then - echo " snapshot build settings: ${snapshot_build_settings_wall}s" -fi -if [ "$DO_BUILD" = true ]; then - echo " cold unit build: ${build_wall}s" -fi -if [ "$DO_TESTS" = true ]; then - echo " unit $TEST_WALL_LABEL: ${test_wall}s" - if [ "$DO_SNAPSHOTS" = true ]; then - if [ "$DO_BUILD" = true ]; then - echo " snapshot build ($SNAPSHOT_BUILD_LABEL): ${snapshot_build_wall}s" - fi - echo " snapshot execution wall: ${snapshot_wall}s" - fi -fi -echo - -echo "Logs and result bundles: $WORKDIR" diff --git a/simulator b/simulator index 113969ec6..ee39e80e6 100755 --- a/simulator +++ b/simulator @@ -32,444 +32,3 @@ set -euo pipefail # Registry-backed deletion requires an exact checkout, UDID, name, and runtime # match. A derived name without a registry claim is discoverable but unowned. -DEVICE="iPhone 17" -OS="27.2" -BOOT=true -SHARED=false -DRY_RUN=false -MODE=resolve - -usage() { - cat <<'USAGE' -Usage: ./simulator [options] - -Resolves this checkout's own iOS Simulator by UDID (never by name), creating it -if it doesn't exist yet, boots it, waits for the boot to finish, and prints the -UDID on stdout. - -Every checkout — clone or worktree — owns a separate device, so parallel work -on one machine can't collide booting, installing, or erasing the same one. - -Options: - --device NAME Simulator device name (default: "iPhone 17") - --os VERSION Simulator iOS version (default: "27.2") - --no-boot Only resolve (creating if needed) and print the UDID - --shared Target any existing device with that name instead of this - checkout's own — for throwaway machines (CI) that are already - isolated - --list List the per-checkout devices on this machine - --prune Delete devices whose checkout is gone, and forget devices - that no longer exist. Devices no checkout claims — a renamed - or moved checkout leaves one — are reported, never deleted - --dry-run With --prune: report what it would do and change nothing - --delete Delete this checkout's device - --recreate Delete this checkout's device, then create and boot a fresh one - -h, --help Show this help - -Renaming or moving a checkout changes the name it resolves to, so it gets a -fresh device and the old one turns up as unowned in --list. - -Examples: - ./simulator - ./simulator --device 'iPhone 17 Pro' --os 27.2 - ./simulator --list - ./simulator --prune --dry-run - xcodebuild test -destination "platform=iOS Simulator,id=$(./simulator)" … -USAGE -} - -while [ $# -gt 0 ]; do - case "$1" in - --device) shift; DEVICE="${1:?--device requires a value}" ;; - --os) shift; OS="${1:?--os requires a value}" ;; - --no-boot) BOOT=false ;; - --shared) SHARED=true ;; - --list) MODE=list ;; - --prune) MODE=prune ;; - --dry-run) DRY_RUN=true ;; - --delete) MODE=delete ;; - --recreate) MODE=recreate ;; - -h|--help) usage; exit 0 ;; - *) echo "error: unknown option '$1' (see ./simulator --help)" >&2; exit 1 ;; - esac - shift -done - -if [ "$SHARED" = true ] && [ "$MODE" != resolve ]; then - echo "error: --shared has no checkout of its own to $MODE (see ./simulator --help)" >&2 - exit 1 -fi - -if [ "$DRY_RUN" = true ] && [ "$MODE" != prune ]; then - echo "error: --dry-run only applies to --prune (see ./simulator --help)" >&2 - exit 1 -fi - -cd "$(dirname "$0")" - -# `jq` is deliberately unpinned: macOS ships it as an Apple-signed system binary -# (`/usr/bin/jq`, identifier com.apple.jq) on the macOS 26 baseline this repo -# requires, same as xcrun/simctl/plutil. The queries below are stable jq syntax -# and are exercised against both the OS build and the newer one on CI — so don't -# add it to .mise.toml or gate it behind an install check. - -runtime_key="com.apple.CoreSimulator.SimRuntime.iOS-${OS//./-}" - -# A worktree's toplevel is the worktree itself, so worktrees count as separate -# checkouts — which is the point. Outside a repo (a copied tree, an archive), -# the script's own directory is the checkout. -checkout="$(git rev-parse --show-toplevel 2>/dev/null || pwd -P)" - -slug() { printf '%s' "$1" | tr -cs 'A-Za-z0-9.' '-' | sed 's/^-//; s/-$//'; } - -# The prefix marks a device as one of ours, so --list and --prune can find the -# managed devices no index entry points at any more (a renamed or moved -# checkout hashes differently and leaves its old device behind). -name_prefix="Stuff-" -checkout_hash="$(printf '%s' "$checkout" | shasum -a 256 | cut -c1-8)" -owned_name="$name_prefix$(slug "$(basename "$checkout")")-$checkout_hash-$(slug "$DEVICE")-$(slug "$OS")" - -# The registry is the ownership authority; `simctl` remains the authority on -# whether that exact UDID exists on the recorded runtime. The derived name lets -# an unambiguous unclaimed device be recovered, but a name alone never permits -# deletion. -registry_dir="$HOME/Library/Application Support/Stuff/simulators" - -# `available` hides devices whose runtime has been uninstalled — right for -# resolving something to run on, wrong for --list/--prune, which must still see -# (and be able to delete) a device stranded on a removed runtime. -# -# Listing also nudges CoreSimulator into rebuilding its device cache, which a -# freshly provisioned machine (notably the xcode-27 CI image) needs before a -# destination will resolve at all. -available_devices_json() { xcrun simctl list devices available --json; } -all_devices_json() { xcrun simctl list devices --json; } - -udids_named() { # - printf '%s' "$1" \ - | jq -r --arg key "$runtime_key" --arg name "$2" \ - '.devices[$key][]? | select(.name == $name) | .udid' -} - -managed_devices() { # -> " " per line, every runtime - printf '%s' "$1" \ - | jq -r --arg prefix "$name_prefix" \ - '.devices | to_entries[] | .value[] - | select(.name | startswith($prefix)) | "\(.udid) \(.name)"' -} - -indexed_udids() { # every UDID the index knows, whatever checkout it belongs to - [ -d "$registry_dir" ] || return 0 - local entry - for entry in "$registry_dir"/*; do - [ -f "$entry" ] || continue - registry_field "$entry" udid - done -} - -registry_write() { # - mise exec -- ruby Tools/simulator_registry.rb record \ - --registry-dir "$registry_dir" --name "$1" \ - --checkout "$checkout" --udid "$2" --device "$DEVICE" --os "$OS" -} - -registry_forget() { # - mise exec -- ruby Tools/simulator_registry.rb forget \ - --registry-dir "$registry_dir" --name "$1" -} - -registry_field() { # - awk -v key="$2" 'index($0, key "=") == 1 { print substr($0, length(key) + 2); exit }' "$1" -} - -create_device() { # -> udid on stdout - local type_id runtime_available udid - type_id="$( - xcrun simctl list devicetypes --json \ - | jq -r --arg name "$DEVICE" '.devicetypes[] | select(.name == $name) | .identifier' \ - | head -1 - )" - if [ -z "$type_id" ]; then - echo "error: no '$DEVICE' device type is installed." >&2 - echo "Available device types:" >&2 - xcrun simctl list devicetypes >&2 - exit 1 - fi - - runtime_available="$( - xcrun simctl list runtimes --json \ - | jq -r --arg key "$runtime_key" \ - '.runtimes[] | select(.identifier == $key and .isAvailable == true) | .identifier' - )" - if [ -z "$runtime_available" ]; then - echo "error: the iOS $OS runtime ($runtime_key) isn't installed or isn't usable." >&2 - echo "Available runtimes:" >&2 - xcrun simctl list runtimes >&2 - exit 1 - fi - - echo "==> Creating $1 ($DEVICE / iOS $OS) for $checkout" >&2 - udid="$(xcrun simctl create "$1" "$type_id" "$runtime_key" | tr -d '[:space:]')" - if [ -z "$udid" ]; then - echo "error: simctl create returned no UDID for '$1'." >&2 - exit 1 - fi - printf '%s' "$udid" -} - -registry_resolution() { # exact ownership decision from all + available inventories - local devices_json available_json - devices_json="$(all_devices_json)" - available_json="$(available_devices_json)" - printf '{"all":%s,"available":%s}\n' "$devices_json" "$available_json" \ - | mise exec -- ruby Tools/simulator_registry.rb resolve \ - --registry-dir "$registry_dir" --name "$owned_name" \ - --checkout "$checkout" --device "$DEVICE" --os "$OS" \ - --runtime-key "$runtime_key" -} - -delete_owned_device() { # exact registry-owned target only - local devices_json decision action udid - devices_json="$(all_devices_json)" - decision="$(printf '%s' "$devices_json" \ - | mise exec -- ruby Tools/simulator_registry.rb delete-target \ - --registry-dir "$registry_dir" --name "$owned_name" \ - --checkout "$checkout" --device "$DEVICE" --os "$OS" \ - --runtime-key "$runtime_key")" - action="${decision%%$'\t'*}" - udid="" - [ "$decision" = "$action" ] || udid="${decision#*$'\t'}" - case "$action" in - delete) - echo "==> Deleting $owned_name ($udid)" >&2 - xcrun simctl delete "$udid" >&2 - registry_forget "$owned_name" - ;; - stale) - echo "warning: forgetting $owned_name — its registered device no longer exists" >&2 - registry_forget "$owned_name" - ;; - none) - echo "==> No device for this checkout to delete" >&2 - ;; - *) - echo "error: unknown registry deletion action '$action'" >&2 - exit 1 - ;; - esac -} - -# Two first runs in one checkout would otherwise each miss the lookup and create -# a device, leaving twins that share a name — the ambiguity this script exists -# to prevent. Serialize *resolve-or-create* per checkout, and only that: booting -# takes minutes on a device's first launch, and two callers waiting on one boot -# is fine, so the lock is released before it. The kernel releases this advisory -# lock after any process death; the persistent file itself carries no state. -lock_file="${TMPDIR:-/tmp}/stuff-simulator-$checkout_hash.lock" -lock_wait_limit=120 -lock_held=false - -acquire_lock() { - if [ "$lock_held" = true ]; then - return 0 - fi - exec 9>>"$lock_file" - if ! /usr/bin/lockf -t "$lock_wait_limit" 9; then - exec 9>&- - echo "error: timed out waiting for the ./simulator run holding $lock_file." >&2 - exit 1 - fi - lock_held=true - trap release_lock EXIT -} - -release_lock() { - if [ "$lock_held" = true ]; then - exec 9>&- - lock_held=false - fi -} - -case "$MODE" in - list) - devices_json="$(all_devices_json)" - states="$(printf '%s' "$devices_json" | jq -r '.devices | to_entries[] | .value[] | "\(.udid) \(.state)"')" - known_indexed="$(indexed_udids)" - rows="" - if [ -d "$registry_dir" ]; then - for entry in "$registry_dir"/*; do - [ -f "$entry" ] || continue - entry_udid="$(registry_field "$entry" udid)" - entry_checkout="$(registry_field "$entry" checkout)" - entry_device="$(registry_field "$entry" device) / iOS $(registry_field "$entry" os)" - entry_state="$(printf '%s\n' "$states" | awk -v u="$entry_udid" '$1 == u { print $2 }')" - [ -n "$entry_state" ] || entry_state="gone" - [ -d "$entry_checkout" ] || entry_checkout="$entry_checkout (missing)" - rows+="$(printf '%-10s %-36s %-22s %s' \ - "$entry_state" "$entry_udid" "$entry_device" "$entry_checkout")"$'\n' - done - fi - # Devices carrying our prefix that no index entry claims: a checkout that - # was renamed or moved (it now hashes to a different name), or an index - # that was cleared. Showing them is the only way they're ever noticed. - while read -r managed_udid managed_name; do - [ -n "$managed_udid" ] || continue - if printf '%s\n' "$known_indexed" | grep -Fqx "$managed_udid"; then - continue - fi - managed_state="$(printf '%s\n' "$states" | awk -v u="$managed_udid" '$1 == u { print $2 }')" - rows+="$(printf '%-10s %-36s %-22s %s' \ - "$managed_state" "$managed_udid" "$managed_name" "unowned — no index entry")"$'\n' - done <<<"$(managed_devices "$devices_json")" - if [ -z "$rows" ]; then - echo "No per-checkout simulators on this machine yet." >&2 - exit 0 - fi - printf '%-10s %-36s %-22s %s\n' STATE UDID DEVICE CHECKOUT - printf '%s' "$rows" - exit 0 - ;; - prune) - devices_json="$(all_devices_json)" - known_udids="$(printf '%s' "$devices_json" | jq -r '.devices | to_entries[] | .value[] | .udid')" - known_indexed="$(indexed_udids)" - pruned=0 - if [ "$DRY_RUN" = true ]; then - delete_verb="Would delete" - forget_verb="Would forget" - else - delete_verb="Deleting" - forget_verb="Forgetting" - fi - if [ -d "$registry_dir" ]; then - for entry in "$registry_dir"/*; do - [ -f "$entry" ] || continue - entry_udid="$(registry_field "$entry" udid)" - entry_checkout="$(registry_field "$entry" checkout)" - if [ -z "$entry_udid" ]; then - echo "==> $forget_verb $(basename "$entry") — the entry records no UDID" >&2 - [ "$DRY_RUN" = true ] || rm -f "$entry" - pruned=$((pruned + 1)) - elif ! printf '%s\n' "$known_udids" | grep -Fqx "$entry_udid"; then - echo "==> $forget_verb $(basename "$entry") — device $entry_udid no longer exists" >&2 - [ "$DRY_RUN" = true ] || rm -f "$entry" - pruned=$((pruned + 1)) - elif [ ! -d "$entry_checkout" ]; then - # A checkout on an unmounted volume looks exactly like a - # deleted one, and deleting a device throws away whatever is - # installed on it. Its parent still being there is what tells - # the two apart, so anything else is left for a human. - if [ ! -d "$(dirname "$entry_checkout")" ]; then - echo "==> Skipping $(basename "$entry") — $entry_checkout is missing, but so is its parent (unmounted volume?)" >&2 - else - entry_name="$(basename "$entry")" - entry_os="$(registry_field "$entry" os)" - entry_runtime_key="com.apple.CoreSimulator.SimRuntime.iOS-${entry_os//./-}" - if ! prune_decision="$(printf '%s' "$devices_json" \ - | mise exec -- ruby Tools/simulator_registry.rb prune-target \ - --registry-dir "$registry_dir" --name "$entry_name" \ - --runtime-key "$entry_runtime_key")" - then - echo "==> Skipping $entry_name — its ownership record does not match simctl" >&2 - continue - fi - prune_action="${prune_decision%%$'\t'*}" - prune_udid="${prune_decision#*$'\t'}" - if [ "$prune_action" != delete ] || [ "$prune_udid" != "$entry_udid" ]; then - echo "==> Skipping $entry_name — exact deletion target could not be proven" >&2 - continue - fi - echo "==> $delete_verb $entry_name ($entry_udid) — $entry_checkout is gone" >&2 - if [ "$DRY_RUN" != true ]; then - xcrun simctl delete "$entry_udid" >&2 - registry_forget "$entry_name" - fi - pruned=$((pruned + 1)) - fi - fi - done - fi - # Unowned devices are reported, never deleted: an index that was cleared - # leaves a live checkout's device looking exactly like an abandoned one, - # and that checkout reclaims it on its next run. - unowned=0 - while read -r managed_udid managed_name; do - [ -n "$managed_udid" ] || continue - if printf '%s\n' "$known_indexed" | grep -Fqx "$managed_udid"; then - continue - fi - echo "==> Unowned: $managed_name ($managed_udid) — no checkout claims it." >&2 - echo " A checkout that resolves to that name reclaims it on its next run;" >&2 - echo " otherwise remove it with: xcrun simctl delete $managed_udid" >&2 - unowned=$((unowned + 1)) - done <<<"$(managed_devices "$devices_json")" - if [ "$DRY_RUN" = true ] && [ "$pruned" -gt 0 ]; then - echo "Dry run — nothing was deleted." >&2 - elif [ "$pruned" -eq 0 ] && [ "$unowned" -eq 0 ]; then - echo "Nothing to prune." >&2 - elif [ "$pruned" -eq 0 ]; then - echo "Nothing to prune — the unowned devices above are left alone." >&2 - fi - exit 0 - ;; - delete) - acquire_lock - delete_owned_device - exit 0 - ;; - recreate) - acquire_lock - delete_owned_device - ;; - resolve) ;; -esac - -if [ "$SHARED" = true ]; then - # Every checkout that asks for it lands on the same device, so this is only - # safe where the machine itself is the isolation (a CI job's VM). - name="$DEVICE" - udids="$(udids_named "$(available_devices_json)" "$name")" - if [ -z "$udids" ]; then - echo "error: no available '$name' on the iOS $OS runtime." >&2 - echo "Available devices:" >&2 - xcrun simctl list devices available >&2 - exit 1 - fi -else - name="$owned_name" - acquire_lock - resolution="$(registry_resolution)" - resolution_action="${resolution%%$'\t'*}" - resolution_udid="" - [ "$resolution" = "$resolution_action" ] \ - || resolution_udid="${resolution#*$'\t'}" - case "$resolution_action" in - owned|claim) udids="$resolution_udid" ;; - create) udids="$(create_device "$name")" ;; - *) echo "error: unknown registry resolution action '$resolution_action'" >&2; exit 1 ;; - esac -fi - -udid="$(printf '%s\n' "$udids" | head -1)" - -# Same name *and* same runtime is a genuinely ambiguous setup — routine for -# `--shared` (a machine with two hand-made "iPhone 17"s), and a sign someone -# duplicated a managed device otherwise. Pick one deterministically, but say so: -# silently choosing is how you end up debugging the wrong device. -if [ "$(printf '%s\n' "$udids" | wc -l | tr -d ' ')" -gt 1 ]; then - echo "warning: several '$name' devices on iOS $OS; using $udid" >&2 -fi - -if [ "$SHARED" != true ]; then - registry_write "$name" "$udid" - release_lock -fi - -if [ "$BOOT" = true ]; then - echo "==> Booting $name ($DEVICE / iOS $OS, $udid)" >&2 - # `-b` boots the device if needed, then waits for boot to finish — a - # condition to wait on rather than a fixed sleep. - xcrun simctl bootstatus "$udid" -b >&2 -fi - -printf '%s\n' "$udid" diff --git a/test b/test index d6e379eb4..3858edeb6 100755 --- a/test +++ b/test @@ -61,747 +61,3 @@ set -euo pipefail # # Exits non-zero when tests fail (./profile's posture, not ./flaky's). -DEVICE="iPhone 17" -OS="27.2" -SCOPE=changed # changed | all | snapshots | everything | bundles | only -BUNDLES=() -ONLY=() -ONLY_FILE="" -RECORD="" -DO_BUILD=true -DO_GENERATE=true -BUILD_ARTIFACTS="" -TEST_ARTIFACTS="" -ENUMERATE_SUITES="" -HEARTBEAT=15 -STATUS_FILE="" -TIMINGS=false -REVIEW=false -BASE_REF="origin/main" -SHARED=false -RUN_ARCHITECTURE=true -ARCHITECTURE_ONLY=false -HAS_TEST_ARGUMENTS=false -HOST_MACROS=false -RUN_HOST_TESTS=true - -usage() { - cat <<'USAGE' -Usage: ./test [options] [BundleName ...] - -Runs this repo's tests against the simulator this checkout owns, streaming -progress as it goes. With no arguments it runs only the bundles affected by the -working tree's changes. Every normal invocation first validates and tests the -Bumper Bowling rules, then enforces the architecture. Unit and affected scopes -also run the fast host-side backup-upgrader regression suite. Every normal -invocation runs the fast Flyover command regression suite. - -Scope: - (no arguments) Bundles affected by the diff against origin/main, including - uncommitted and untracked files - BundleName ... Named bundles only (e.g. ./test WhereCoreTests) - PeriscopeMacrosTests runs on the host without a simulator - --all The full unit suite plus host macro tests - --snapshots The image-snapshot suite (StuffSnapshotTests) - --everything All iOS unit and image bundles, plus default host/architecture checks - --only ID An xcodebuild test identifier, repeatable: - Bundle, Bundle/Suite, or 'Bundle/Suite/test()' - --only-file PATH Read newline-delimited Bundle/Suite identifiers from PATH - --base REF Compare against REF instead of origin/main - -Independent checks: - --architecture-only Run only the Bumper configuration, rule tests, and lint - --skip-architecture Skip Bumper checks because another CI job owns them - --skip-host-tests Skip attribution, backup-upgrader, and macro tests - because another CI job owns them - -Running: - --no-build Reuse the last build (test-without-building) - --no-generate Skip `tuist generate` (assumes the project is current) - --build-artifacts DIR - Build selected iOS schemes into DIR without running them - Host checks still run unless --skip-host-tests is set - --test-artifacts DIR - Run simulator tests from the manifest and .xctestrun files - in DIR. A separate invocation owns host-side checks - --enumerate-suites PATH - Write the selected artifact's Bundle/Suite identifiers - --record MODE Re-record snapshots: all | failed | missing | never - --device NAME Simulator device name (default: "iPhone 17") - --os VERSION Simulator iOS version (default: "27.2") - --shared Use any existing simulator with that name rather than this - checkout's own — for a throwaway machine (CI) that is - already isolated - -Reporting: - --timings Collect per-phase snapshot capture timings and print a - breakdown (sets SNAPSHOT_TIMING) - --review Report how each differing snapshot differs — pixel count, - max channel delta, changed region (sets SNAPSHOT_DIFF) - --heartbeat SECS Seconds between progress lines when not on a terminal - (default: 15) - --status-file P Keep only the latest progress line in P, for a watcher that - would rather read one small file than scan a log - -h, --help Show this help - -Examples: - ./test # just what your change affects - ./test WhereCoreTests WhereUITests - ./test --snapshots --review # snapshots, with the diffs described - ./test --snapshots --timings # where the capture time goes - ./test --everything # all iOS unit and image bundles - ./test --only 'WhereUITests/WhereStylesheetTests/resolvesTraitAwareTokens()' -USAGE -} - -while [ $# -gt 0 ]; do - case "$1" in - --all) SCOPE=all; HAS_TEST_ARGUMENTS=true ;; - --snapshots) SCOPE=snapshots; HAS_TEST_ARGUMENTS=true ;; - --everything) SCOPE=everything; HAS_TEST_ARGUMENTS=true ;; - --only) - HAS_TEST_ARGUMENTS=true - shift - ONLY+=("${1:?--only requires a test identifier}") - [ "$SCOPE" = changed ] && SCOPE=only - ;; - --only-file) - HAS_TEST_ARGUMENTS=true - shift - ONLY_FILE="${1:?--only-file requires a path}" - [ "$SCOPE" = changed ] && SCOPE=only - ;; - --base) HAS_TEST_ARGUMENTS=true; shift; BASE_REF="${1:?--base requires a git ref}" ;; - --no-build) DO_BUILD=false; HAS_TEST_ARGUMENTS=true ;; - --no-generate) DO_GENERATE=false; HAS_TEST_ARGUMENTS=true ;; - --build-artifacts) - HAS_TEST_ARGUMENTS=true - shift - BUILD_ARTIFACTS="${1:?--build-artifacts requires a directory}" - ;; - --test-artifacts) - HAS_TEST_ARGUMENTS=true - shift - TEST_ARTIFACTS="${1:?--test-artifacts requires a directory}" - DO_BUILD=false - DO_GENERATE=false - RUN_HOST_TESTS=false - ;; - --enumerate-suites) - HAS_TEST_ARGUMENTS=true - shift - ENUMERATE_SUITES="${1:?--enumerate-suites requires a path}" - ;; - --record) HAS_TEST_ARGUMENTS=true; shift; RECORD="${1:?--record requires a mode}" ;; - --device) HAS_TEST_ARGUMENTS=true; shift; DEVICE="${1:?--device requires a value}" ;; - --shared) SHARED=true; HAS_TEST_ARGUMENTS=true ;; - --os) HAS_TEST_ARGUMENTS=true; shift; OS="${1:?--os requires a value}" ;; - --timings) TIMINGS=true; HAS_TEST_ARGUMENTS=true ;; - --review) REVIEW=true; HAS_TEST_ARGUMENTS=true ;; - --heartbeat) HAS_TEST_ARGUMENTS=true; shift; HEARTBEAT="${1:?--heartbeat requires a value}" ;; - --status-file) HAS_TEST_ARGUMENTS=true; shift; STATUS_FILE="${1:?--status-file requires a path}" ;; - --architecture-only) ARCHITECTURE_ONLY=true ;; - --skip-architecture) RUN_ARCHITECTURE=false ;; - --skip-host-tests) RUN_HOST_TESTS=false; HAS_TEST_ARGUMENTS=true ;; - -h|--help) usage; exit 0 ;; - -*) echo "error: unknown option '$1' (see ./test --help)" >&2; exit 1 ;; - *) BUNDLES+=("$1"); SCOPE=bundles; HAS_TEST_ARGUMENTS=true ;; - esac - shift -done - -cd "$(dirname "$0")" - -if [ -n "$ONLY_FILE" ]; then - if [ ! -f "$ONLY_FILE" ]; then - echo "error: --only-file does not exist: $ONLY_FILE" >&2 - exit 1 - fi - while IFS= read -r identifier || [ -n "$identifier" ]; do - [ -n "$identifier" ] && ONLY+=("$identifier") - done <"$ONLY_FILE" - if [ "${#ONLY[@]}" -eq 0 ]; then - echo "error: --only-file contains no test identifiers: $ONLY_FILE" >&2 - exit 1 - fi -fi - -case "$RECORD" in - ""|all|failed|missing|never) ;; - *) echo "error: --record must be all, failed, missing or never (got '$RECORD')" >&2 - exit 1 ;; -esac - -if [ "$ARCHITECTURE_ONLY" = true ] && [ "$RUN_ARCHITECTURE" = false ]; then - echo "error: --architecture-only cannot be combined with --skip-architecture" >&2 - exit 1 -fi -if [ "$ARCHITECTURE_ONLY" = true ] && [ "$HAS_TEST_ARGUMENTS" = true ]; then - echo "error: --architecture-only cannot be combined with test options or bundles" >&2 - exit 1 -fi -if [ -n "$BUILD_ARTIFACTS" ] && [ -n "$TEST_ARTIFACTS" ]; then - echo "error: --build-artifacts cannot be combined with --test-artifacts" >&2 - exit 1 -fi -if [ -n "$BUILD_ARTIFACTS" ] && { [ "$DO_BUILD" = false ] || [ -n "$ONLY_FILE" ] || - [ "${#ONLY[@]}" -gt 0 ] || [ -n "$ENUMERATE_SUITES" ]; } -then - echo "error: --build-artifacts cannot be combined with test filters or test-only modes" >&2 - exit 1 -fi -if [ -n "$ENUMERATE_SUITES" ] && [ -z "$TEST_ARTIFACTS" ]; then - echo "error: --enumerate-suites requires --test-artifacts" >&2 - exit 1 -fi -if [ -n "$ENUMERATE_SUITES" ] && [ "$SCOPE" != snapshots ]; then - echo "error: --enumerate-suites requires --snapshots" >&2 - exit 1 -fi -if [ "$RUN_HOST_TESTS" = false ] && [ "$SCOPE" = bundles ]; then - for bundle in ${BUNDLES[@]+"${BUNDLES[@]}"}; do - if [ "$bundle" = PeriscopeMacrosTests ]; then - echo "error: PeriscopeMacrosTests requires host tests to be enabled" >&2 - exit 1 - fi - done -fi - -run_architecture_checks() { - export BUMPER_CACHE_DIR="${BUMPER_CACHE_DIR:-.build/bumper-cache}" - export BUMPER_RUNNER_BUILD_CONFIGURATION="${BUMPER_RUNNER_BUILD_CONFIGURATION:-debug}" - - echo "==> Validating Bumper Bowling configuration" - swift run bumper config . - echo "==> Testing Bumper Bowling rules" - swift run bumper test . - echo "==> Enforcing Where architecture" - swift run bumper lint . --timings -} - -if [ "$RUN_ARCHITECTURE" = true ]; then - run_architecture_checks -fi -if [ "$ARCHITECTURE_ONLY" = true ]; then - exit 0 -fi - -if [ "$RUN_HOST_TESTS" = true ]; then - if [ -f Shared/Flyover/Tools/Tests/flyover_test.sh ]; then - echo "==> Testing flyover command" - bash Shared/Flyover/Tools/Tests/flyover_test.sh - fi - echo "==> Testing attribution generator" - mise exec -- ruby Shared/CreditKit/Tools/Tests/generate_attribution_test.rb -fi - -WORKSPACE="Stuff.xcworkspace" -UNIT_SCHEME="Stuff-iOS-Tests" -SNAPSHOT_SCHEME="StuffSnapshotTests" -CHECKOUT_HASH="$(printf '%s' "$(pwd -P)" | shasum -a 256 | cut -c1-12)" -# Overridable so CI can collect the logs and result bundles from a known path -# rather than digging through DerivedData. Local runs include the canonical -# checkout path's hash so clones/worktrees cannot overwrite one another's -# logs, progress state, or result bundles while running concurrently. -WORKDIR="${TEST_WORKDIR:-${TMPDIR:-/tmp}/where-test-$CHECKOUT_HASH}" -# Test logs and result metadata can include developer paths and failure details. -# Keep the per-checkout work directory private while preserving its stable path. -mkdir -p "$WORKDIR" && chmod 700 "$WORKDIR" - -rule() { printf '%s\n' "============================================================"; } - -phase_started() { - python3 Tools/test_runner.py phase-started -} - -emit_phase_timing() { - python3 Tools/test_runner.py phase-timing "$1" "$2" "${3:-}" "${4:-0}" -} - -# The image bundles, read from the manifest rather than listed here: a bundle can -# only run from a scheme that contains it, and StuffSnapshotTests is the only one -# carrying the SNAPSHOT_EXPECTED_* / TZ pins the comparisons rely on. -snapshot_bundles() { - python3 Tools/test_runner.py snapshot-bundles -} - -# The backup upgrader is a host-side unit regression, not an image test. Keep it -# in affected and unit-capable runs, but do not make a snapshot-only invocation -# repeat work owned by the host CI job. -backup_upgrader_is_needed() { - local image_bundles bundle identifier - [ "$RUN_HOST_TESTS" = false ] && return 1 - image_bundles="$(snapshot_bundles)" - { [ -n "$BUILD_ARTIFACTS" ] || [ -n "$TEST_ARTIFACTS" ]; } && return 1 - - case "$SCOPE" in - changed|all|everything) return 0 ;; - snapshots|only) ;; - bundles) - for bundle in "${BUNDLES[@]}"; do - if ! printf '%s\n' "$image_bundles" | grep -qx "$bundle"; then - return 0 - fi - done - return 1 - ;; - esac - - for identifier in ${ONLY[@]+"${ONLY[@]}"}; do - bundle="${identifier%%/*}" - if ! printf '%s\n' "$image_bundles" | grep -qx "$bundle"; then - return 0 - fi - done - return 1 -} - -if backup_upgrader_is_needed; then - echo "==> Testing backup upgrader" - mise exec -- ruby Where/Tools/Tests/upgrade_backup_test.rb -fi - -# Which bundles a set of changed paths affects. -affected_bundles() { - printf '%s\n' "$1" | python3 Tools/test_runner.py affected-bundles -} - -# The importable progress filter reads xcodebuild output from stdin. Keeping it -# in Tools makes its terminal, heartbeat, cache, and zero-test behavior directly -# testable without launching Xcode. - -# Resolve the run plan: -SCHEMES=() -UNIT_FILTERS=() -SNAPSHOT_FILTERS=() - -add_scheme() { - local candidate="$1" existing - for existing in ${SCHEMES[@]+"${SCHEMES[@]}"}; do - [ "$existing" = "$candidate" ] && return 0 - done - SCHEMES+=("$candidate") -} - -case "$SCOPE" in - all) add_scheme "$UNIT_SCHEME"; HOST_MACROS=true ;; - snapshots) add_scheme "$SNAPSHOT_SCHEME" ;; - everything) add_scheme "$UNIT_SCHEME"; add_scheme "$SNAPSHOT_SCHEME"; HOST_MACROS=true ;; - bundles|changed) - if [ "$SCOPE" = changed ]; then - if git rev-parse --verify --quiet "$BASE_REF" >/dev/null; then - base="$(git merge-base HEAD "$BASE_REF")" - else - echo "warning: '$BASE_REF' not found; using uncommitted changes only" >&2 - base="HEAD" - fi - changed_files="$( { git diff --name-only "$base" - git diff --name-only - git ls-files --others --exclude-standard; } | sort -u )" - if [ -z "$changed_files" ]; then - echo "==> No changes against $BASE_REF — nothing to test." - exit 0 - fi - if printf '%s\n' "$changed_files" | grep -Eq \ - '^(Package\.swift|Package\.resolved|test|Shared/Periscope/PeriscopeMacros/)'; then - HOST_MACROS=true - fi - set +e - selection="$(affected_bundles "$changed_files")" - selection_status=$? - set -e - if [ "$selection_status" -ne 0 ]; then - echo "error: could not work out which bundles your changes affect." >&2 - echo " Run an explicit scope instead: ./test --all, ./test --snapshots," >&2 - echo " or ./test --everything." >&2 - exit 1 - fi - while IFS= read -r bundle; do - [ -n "$bundle" ] && BUNDLES+=("$bundle") - done < No test bundle covers these changes:" - printf '%s\n' "$changed_files" | sed 's/^/ /' - exit 0 - fi - if [ "${#BUNDLES[@]}" -gt 0 ]; then - echo "==> Affected bundles: ${BUNDLES[*]}" - fi - fi - image_bundles="$(snapshot_bundles)" - for bundle in "${BUNDLES[@]}"; do - if [ "$bundle" = PeriscopeMacrosTests ]; then - HOST_MACROS=true - elif printf '%s\n' "$image_bundles" | grep -qx "$bundle"; then - add_scheme "$SNAPSHOT_SCHEME" - SNAPSHOT_FILTERS+=("-only-testing:$bundle") - else - add_scheme "$UNIT_SCHEME" - UNIT_FILTERS+=("-only-testing:$bundle") - fi - done - ;; -esac - -if [ "${#ONLY[@]}" -gt 0 ]; then - # An identifier's first component is its bundle, which decides the scheme — - # so `./test --only 'WhereUISnapshotTests/…'` needs no `--snapshots`. Without - # this, an identifier copied from the failure report above would run against - # a scheme that doesn't contain its bundle and match nothing. - only_images="$(snapshot_bundles)" - for identifier in "${ONLY[@]}"; do - if printf '%s\n' "$only_images" | grep -qx "${identifier%%/*}"; then - add_scheme "$SNAPSHOT_SCHEME" - [ -z "$ONLY_FILE" ] && SNAPSHOT_FILTERS+=("-only-testing:$identifier") - else - add_scheme "$UNIT_SCHEME" - [ -z "$ONLY_FILE" ] && UNIT_FILTERS+=("-only-testing:$identifier") - fi - done -fi - -if [ -n "$ONLY_FILE" ]; then - if [ "${#SCHEMES[@]}" -ne 1 ]; then - echo "error: --only-file must contain identifiers for one test scheme" >&2 - exit 1 - fi - if [ "${SCHEMES[0]}" = "$SNAPSHOT_SCHEME" ]; then - SNAPSHOT_FILTERS=("-only-testing" "@$ONLY_FILE") - else - UNIT_FILTERS=("-only-testing" "@$ONLY_FILE") - fi -fi - -# Artifact consumers and explicit --skip-host-tests runs leave host checks to -# a separate invocation. Normal local runs keep the selected host checks. -if [ "$RUN_HOST_TESTS" = false ]; then - HOST_MACROS=false -fi - -if [ "${#SCHEMES[@]}" -eq 0 ] && [ "$HOST_MACROS" = false ]; then - echo "error: nothing to run (see ./test --help)" >&2 - exit 1 -fi - -for scheme in ${SCHEMES[@]+"${SCHEMES[@]}"}; do - [ "$scheme" = "$SNAPSHOT_SCHEME" ] || continue - - expected_xcode_version="$(< .xcode-version)" - xcode_version="$(xcodebuild -version | awk '/^Xcode /{print $2}')" - xcode_version="$(printf '%s\n' "$xcode_version" | cut -d. -f1,2)" - if [ "$xcode_version" != "$expected_xcode_version" ]; then - echo "error: snapshot tests require Xcode $expected_xcode_version; found $xcode_version" >&2 - echo " Install the pinned Xcode major.minor version. Then select it before capturing snapshots." >&2 - exit 1 - fi - break -done - -overall_status=0 -RESULTS=() -LOGS=() - -if [ "$HOST_MACROS" = true ]; then - echo "==> Building PeriscopeMacrosTests on the host" - macro_build_log="$WORKDIR/PeriscopeMacrosTests-build.log" - # A target build stops at the test module and does not link the .xctest bundle. - # The synthesized product links it without building the package's iOS-only targets. - if ! mise exec -- swift build --product PeriscopeMacrosTests >"$macro_build_log" 2>&1; then - echo "error: build failed for PeriscopeMacrosTests. Tail of $macro_build_log:" >&2 - tail -n 30 "$macro_build_log" >&2 - exit 1 - fi - macro_bin_dir="$(mise exec -- swift build --show-bin-path)" - macro_bundle="$macro_bin_dir/PeriscopeMacrosTests.xctest" - if [ ! -d "$macro_bundle" ]; then - echo "error: SwiftPM did not produce PeriscopeMacrosTests.xctest" >&2 - exit 1 - fi - echo "==> Testing PeriscopeMacrosTests on macOS" - macro_log="$WORKDIR/PeriscopeMacrosTests.log" - set +e - xcrun xctest "$macro_bundle" 2>&1 | tee "$macro_log" - macro_status="${PIPESTATUS[0]}" - set -e - LOGS+=("$macro_log") - [ "$macro_status" -ne 0 ] && overall_status="$macro_status" -fi - -if [ "${#SCHEMES[@]}" -eq 0 ]; then - echo - if [ "$overall_status" -eq 0 ]; then - echo "==> Passed. Logs and result bundles: $WORKDIR" - else - echo "==> Failed (exit $overall_status). Logs and result bundles: $WORKDIR" - fi - exit "$overall_status" -fi - -if [ "$DO_GENERATE" = true ]; then - echo "==> Regenerating project (tuist generate --no-open)" - started="$(phase_started)" - if mise exec -- tuist generate --no-open >"$WORKDIR/generate.log" 2>&1; then - emit_phase_timing generate "$started" - else - status=$? - emit_phase_timing generate "$started" "" "$status" - echo "error: tuist generate failed. Tail of $WORKDIR/generate.log:" >&2 - tail -n 20 "$WORKDIR/generate.log" >&2 - exit "$status" - fi -fi - -if [ -n "$TEST_ARTIFACTS" ]; then - ARTIFACT_SCHEME_ARGS=() - for scheme in "${SCHEMES[@]}"; do - ARTIFACT_SCHEME_ARGS+=(--scheme "$scheme") - done - python3 .circleci/test_artifacts.py resolve-all \ - --root "$TEST_ARTIFACTS" \ - "${ARTIFACT_SCHEME_ARGS[@]}" >/dev/null - echo "Validated test artifacts before simulator boot." -fi - -if [ -n "$BUILD_ARTIFACTS" ]; then - BUILD_ARTIFACTS="$(mkdir -p "$BUILD_ARTIFACTS" && cd "$BUILD_ARTIFACTS" && pwd -P)" - DESTINATION="generic/platform=iOS Simulator" - DERIVED_DATA_ARGS=(-derivedDataPath "$BUILD_ARTIFACTS/DerivedData") -else - SIMULATOR_FLAGS=(--device "$DEVICE" --os "$OS") - [ "$SHARED" = true ] && SIMULATOR_FLAGS+=(--shared) - started="$(phase_started)" - if UDID="$(./simulator "${SIMULATOR_FLAGS[@]}")"; then - emit_phase_timing simulator "$started" - else - status=$? - emit_phase_timing simulator "$started" "" "$status" - exit "$status" - fi - DESTINATION="platform=iOS Simulator,id=$UDID" - DERIVED_DATA_ARGS=() -fi - -# xcodebuild strips the TEST_RUNNER_ prefix on the way in, which is why the -# pipeline reads SNAPSHOT_* rather than these names. -RUN_ENV=() -[ -n "$RECORD" ] && RUN_ENV+=("TEST_RUNNER_SNAPSHOT_RECORD=$RECORD") -[ "$TIMINGS" = true ] && RUN_ENV+=("TEST_RUNNER_SNAPSHOT_TIMING=1") -[ "$REVIEW" = true ] && RUN_ENV+=("TEST_RUNNER_SNAPSHOT_DIFF=1") -[ -n "${SNAPSHOT_SETTLE_TIMEOUT_MULTIPLIER:-}" ] \ - && RUN_ENV+=("TEST_RUNNER_SNAPSHOT_SETTLE_TIMEOUT_MULTIPLIER=$SNAPSHOT_SETTLE_TIMEOUT_MULTIPLIER") -for flyover_name in DIRECTORY PROFILES COMMIT DIRTY BRANCH GENERATED_AT XCODE_VERSION SIMULATOR_DEVICE SIMULATOR_OS; do - flyover_variable="FLYOVER_EXPORT_$flyover_name" - if [ -n "${!flyover_variable:-}" ]; then - RUN_ENV+=("TEST_RUNNER_$flyover_variable=${!flyover_variable}") - fi -done - -# SwiftPM's generated `Bundle.module` accessors honor -# PACKAGE_RESOURCE_BUNDLE_PATH as their first lookup candidate (DEBUG-only, -# which test builds are). The schemes set it to $(BUILT_PRODUCTS_DIR) for -# Xcode-IDE runs, but xcodebuild does not expand build-setting macros in -# scheme environment variables, so this script resolves the concrete path -# and delivers it via TEST_RUNNER_ like the pins above. See -# `packageResourceEnvironment` in Project.swift for why the lookup needs an -# override at all (Xcode 27 beta 4's package linking orphans the resource -# bundles copied into each .xctest). -if [ -n "$TEST_ARTIFACTS" ]; then - BUILT_PRODUCTS_DIR="$(python3 .circleci/test_artifacts.py resolve \ - --root "$TEST_ARTIFACTS" --scheme "${SCHEMES[0]}" --field products)" -elif [ -n "$BUILD_ARTIFACTS" ]; then - BUILT_PRODUCTS_DIR="" -else - BUILT_PRODUCTS_DIR="$(xcodebuild -showBuildSettings \ - -workspace "$WORKSPACE" \ - -scheme "${SCHEMES[0]}" \ - -destination "$DESTINATION" 2>/dev/null \ - | awk -F' = ' '/ BUILT_PRODUCTS_DIR = /{print $2; exit}')" -fi -if [ -n "$BUILT_PRODUCTS_DIR" ]; then - RUN_ENV+=("TEST_RUNNER_PACKAGE_RESOURCE_BUNDLE_PATH=$BUILT_PRODUCTS_DIR") -elif [ -z "$BUILD_ARTIFACTS" ]; then - echo "warning: could not resolve BUILT_PRODUCTS_DIR; package resource" \ - "bundle lookups will fall back to the linker's placement" >&2 -fi - -for scheme in "${SCHEMES[@]}"; do - filters=() - if [ "$scheme" = "$SNAPSHOT_SCHEME" ]; then - filters=(${SNAPSHOT_FILTERS[@]+"${SNAPSHOT_FILTERS[@]}"}) - else - filters=(${UNIT_FILTERS[@]+"${UNIT_FILTERS[@]}"}) - fi - log="$WORKDIR/$scheme.log" - result="$WORKDIR/$scheme.xcresult" - rm -rf "$result" - - if [ "$DO_BUILD" = true ]; then - echo "==> Building $scheme for testing" - started="$(phase_started)" - if xcodebuild build-for-testing \ - -workspace "$WORKSPACE" \ - -scheme "$scheme" \ - -configuration Debug \ - -destination "$DESTINATION" \ - ${DERIVED_DATA_ARGS[@]+"${DERIVED_DATA_ARGS[@]}"} \ - ${BUILD_ARTIFACTS:+ARCHS=arm64} \ - ${BUILD_ARTIFACTS:+ONLY_ACTIVE_ARCH=YES} \ - >"$WORKDIR/$scheme-build.log" 2>&1 - then - emit_phase_timing build "$started" "$scheme" - else - status=$? - emit_phase_timing build "$started" "$scheme" "$status" - echo "error: build failed for $scheme. Tail of $WORKDIR/$scheme-build.log:" >&2 - tail -n 30 "$WORKDIR/$scheme-build.log" >&2 - exit "$status" - fi - fi - - [ -n "$BUILD_ARTIFACTS" ] && continue - - if [ -n "$TEST_ARTIFACTS" ]; then - XCTESTRUN="$(python3 .circleci/test_artifacts.py resolve \ - --root "$TEST_ARTIFACTS" --scheme "$scheme" --field xctestrun)" - TEST_LOCATION=(-xctestrun "$XCTESTRUN") - else - TEST_LOCATION=(-workspace "$WORKSPACE" -scheme "$scheme") - fi - - if [ -n "$ENUMERATE_SUITES" ]; then - raw_enumeration="$WORKDIR/$scheme-enumeration.json" - started="$(phase_started)" - if xcodebuild test-without-building \ - ${TEST_LOCATION[@]+"${TEST_LOCATION[@]}"} \ - -destination "$DESTINATION" \ - -enumerate-tests \ - -test-enumeration-style hierarchical \ - -test-enumeration-format json \ - -test-enumeration-output-path "$raw_enumeration" \ - >"$WORKDIR/$scheme-enumeration.log" 2>&1 - then - python3 .circleci/test_artifacts.py suites \ - --input "$raw_enumeration" --output "$ENUMERATE_SUITES" - emit_phase_timing enumerate "$started" "$scheme" - exit 0 - else - status=$? - emit_phase_timing enumerate "$started" "$scheme" "$status" - tail -n 30 "$WORKDIR/$scheme-enumeration.log" >&2 - exit "$status" - fi - fi - - # One cache entry per scheme + filter set: a run of three bundles and a run - # of the whole scheme have different totals, and mixing them is what made the - # progress line read "368/38". - scope_key="$(printf '%s\n' "$scheme" ${filters[@]+"${filters[@]}"} \ - | shasum | cut -c1-12)" - counts="$WORKDIR/counts-$scheme-$scope_key.json" - progress_args=( - --heartbeat "$HEARTBEAT" - --counts-file "$counts" - --scheme "$scheme" - ) - [ -n "$STATUS_FILE" ] && progress_args+=(--status-file "$STATUS_FILE") - [ "$TIMINGS" = true ] && progress_args+=(--count-images) - - echo "==> Testing $scheme on $DEVICE / iOS $OS" - started="$(phase_started)" - set +e - env ${RUN_ENV[@]+"${RUN_ENV[@]}"} \ - xcodebuild test-without-building \ - ${TEST_LOCATION[@]+"${TEST_LOCATION[@]}"} \ - -destination "$DESTINATION" \ - -resultBundlePath "$result" \ - -collect-test-diagnostics never \ - ${filters[@]+"${filters[@]}"} \ - 2>&1 \ - | tee "$log" \ - | python3 -u Tools/test_runner.py progress "${progress_args[@]}" - # [0] is xcodebuild; [1] is tee and [2] the progress filter. Prefer the - # authoritative test status, then surface a logging/reporting failure when - # Xcode itself succeeded. No pipeline stage may turn a broken run green. - pipeline_statuses=("${PIPESTATUS[@]}") - status="${pipeline_statuses[0]}" - [ "$status" -eq 0 ] && [ "${pipeline_statuses[1]}" -ne 0 ] \ - && status="${pipeline_statuses[1]}" - [ "$status" -eq 0 ] && [ "${pipeline_statuses[2]}" -ne 0 ] \ - && status="${pipeline_statuses[2]}" - set -e - emit_phase_timing test "$started" "$scheme" "$status" - RESULTS+=("$result") - LOGS+=("$log") - [ "$status" -ne 0 ] && overall_status="$status" - if [ -f "$counts.empty" ]; then - rm -f "$counts.empty" - [ "$overall_status" -eq 0 ] && overall_status=1 - fi -done - -if [ -n "$BUILD_ARTIFACTS" ]; then - manifest_args=() - for scheme in "${SCHEMES[@]}"; do - manifest_args+=(--scheme "$scheme") - done - python3 .circleci/test_artifacts.py create \ - --root "$BUILD_ARTIFACTS" "${manifest_args[@]}" - artifact_bytes="$(du -sk "$BUILD_ARTIFACTS/DerivedData/Build/Products" | awk '{print $1 * 1024}')" - printf 'CI_ARTIFACT {"bytes":%s,"schemes":%s}\n' \ - "$artifact_bytes" "${#SCHEMES[@]}" - exit "$overall_status" -fi - -# Failures, reprinted with the identifier that re-runs each one. -if [ "$overall_status" -ne 0 ]; then - echo - rule - echo "FAILURES" - rule - for result in "${RESULTS[@]}"; do - [ -d "$result" ] || continue - xcrun xcresulttool get test-results tests --path "$result" \ - >"$WORKDIR/failures.json" 2>/dev/null || true - python3 Tools/test_runner.py failures \ - --result "$result" --tests-json "$WORKDIR/failures.json" - done -fi - -if [ "$TIMINGS" = true ]; then - echo - rule - echo "SNAPSHOT CAPTURE PHASES" - rule - : >"$WORKDIR/timings.jsonl" - for log in "${LOGS[@]}"; do - grep -o 'SNAPSHOT_TIMING {.*}' "$log" 2>/dev/null \ - | sed 's/^SNAPSHOT_TIMING //' >>"$WORKDIR/timings.jsonl" || true - done - python3 Tools/snapshot_reports.py timings "$WORKDIR/timings.jsonl" -fi - -if [ "$REVIEW" = true ]; then - echo - rule - echo "SNAPSHOT DIFFERENCES" - rule - : >"$WORKDIR/diffs.jsonl" - for log in "${LOGS[@]}"; do - grep -o 'SNAPSHOT_DIFF {.*}' "$log" 2>/dev/null \ - | sed 's/^SNAPSHOT_DIFF //' >>"$WORKDIR/diffs.jsonl" || true - done - difference_args=() - [ -n "$RECORD" ] && [ "$RECORD" != never ] && difference_args+=(--recording) - python3 Tools/snapshot_reports.py differences \ - "$WORKDIR/diffs.jsonl" ${difference_args[@]+"${difference_args[@]}"} -fi - -echo -if [ "$overall_status" -eq 0 ]; then - echo "==> Passed. Logs and result bundles: $WORKDIR" -else - echo "==> Failed (exit $overall_status). Logs and result bundles: $WORKDIR" -fi -exit "$overall_status" From 3ea705da4c31590914820706b908c46cabdad97b Mon Sep 17 00:00:00 2001 From: Kyle Van Essen Date: Fri, 30 Oct 2026 18:20:55 -0400 Subject: [PATCH 02/12] Refresh merged main references for isolated snapshot captures --- .../calendarContent.YearOverviewEmpty_iPhone.png | 4 ++-- .../calendarContent.YearOverviewEmpty_iPhone_dark.png | 4 ++-- .../calendarContent.YearOverviewHiddenEstimates_iPhone.png | 4 ++-- ...alendarContent.YearOverviewHiddenEstimates_iPhone_dark.png | 4 ++-- .../calendarContent.YearOverviewPastYear_iPhone.png | 4 ++-- .../calendarContent.YearOverviewPastYear_iPhone_dark.png | 4 ++-- .../ElsewhereViewSnapshotTests/elsewhere.Empty_iPhone.png | 4 ++-- .../elsewhere.Empty_iPhone_dark.png | 4 ++-- .../ElsewhereViewSnapshotTests/elsewhere.Failure_iPhone.png | 4 ++-- .../elsewhere.Failure_iPhone_dark.png | 4 ++-- .../locations.ElsewhereOnly_iPhone.png | 4 ++-- .../locations.ElsewhereOnly_iPhone_dark.png | 4 ++-- .../LocationsViewSnapshotTests/locations.Empty_iPhone.png | 4 ++-- .../locations.Empty_iPhone_dark.png | 4 ++-- .../other/mainTabs.WelcomeActionRequired_iPhone_ax5.png | 4 ++-- .../other/mainTabs.WelcomeLocating_iPhone_ax5.png | 4 ++-- .../other/regionDays.WithData_iPad_ax5.png | 4 ++-- .../other/regionDays.WithData_iPad_contrast.png | 4 ++-- .../RegionDaysViewSnapshotTests/regionDays.WithData_iPad.png | 4 ++-- .../regionDays.WithData_iPad_accessibility.png | 4 ++-- .../regionDays.WithData_iPad_dark.png | 4 ++-- .../RootViewSnapshotTests/root.LoggedIn_iPhone.png | 4 ++-- .../RootViewSnapshotTests/root.LoggedIn_iPhone_dark.png | 4 ++-- .../root.RecordingConfigurationWarning_iPhone.png | 4 ++-- .../root.RecordingConfigurationWarning_iPhone_dark.png | 4 ++-- 25 files changed, 50 insertions(+), 50 deletions(-) diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewEmpty_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewEmpty_iPhone.png index 3951d215a..1a0f478ee 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewEmpty_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewEmpty_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c48d232ee43acf5c8ba6accf19f849c7ff3d450e5737e58ffaba584cb19f9822 -size 257841 +oid sha256:3e1fa00ce61fc36fb50722829b5eff2b990f7961aebc84bd5b568ea9be3078c3 +size 252857 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewEmpty_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewEmpty_iPhone_dark.png index a8452cf99..f84d119c1 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewEmpty_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewEmpty_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:05c38720a8543aa199f59777a05716d9cf20df904285c8079affcd735c9af20f -size 275209 +oid sha256:08a5d9035a4e2f38d7fd61a20302c8400d0c347e7aee0b436dbb9182616dfef2 +size 267868 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewHiddenEstimates_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewHiddenEstimates_iPhone.png index f4099a64e..3cd7e9069 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewHiddenEstimates_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewHiddenEstimates_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4d36f48d4ab77c0e4f84cc99453afbaf0965edba9a0c86ea3bb1dbb4a68b5226 -size 266188 +oid sha256:77a4368dfb704d15b92f17454284cd611d6b06257912dadea41964d1711d09ee +size 263919 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewHiddenEstimates_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewHiddenEstimates_iPhone_dark.png index 9ff8ec017..87e1772f6 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewHiddenEstimates_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewHiddenEstimates_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cdd3c199dc24cfc67abfe4709dc5db7f5cd63b0f351bcbcea2d0e5b7ea0becc2 -size 281409 +oid sha256:44cf5455c77cfc5bd63b0a7180db28e88c6cf937f80966e62ad3cc88be9aa7ae +size 276227 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewPastYear_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewPastYear_iPhone.png index 5539ac9e1..d0ae4cdb7 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewPastYear_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewPastYear_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:77aa1b6fd58fe32812d5daece91de247769606a329fa527d6ef96dcfba7a9d9a -size 284122 +oid sha256:421bea71cd6b5839a7d40edf058ddacf48d9c86191b72d47e0cf67c02a91a5a3 +size 278256 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewPastYear_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewPastYear_iPhone_dark.png index c6b234763..084a14ace 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewPastYear_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewPastYear_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2064fc4cefdd7fdbe4e7b5442ccadcb96edd632c073edb3e90a08dd2fbdd463b -size 293902 +oid sha256:12ed255b302b0dcc6b63bff579f6f215bb1e340a33792657f8fb00c9d84c2eaf +size 284779 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Empty_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Empty_iPhone.png index 2bf1a1fb1..601df508a 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Empty_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Empty_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:92b889790d38908e519f33bd3f1cb0e8396f14cf00f31b38846c426ccbf736f2 -size 414047 +oid sha256:42c522e315b301292f2cea809f31fa4926d254fd817ba7a754224704e49262d1 +size 413605 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Empty_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Empty_iPhone_dark.png index 9599ce0a8..706e42ae9 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Empty_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Empty_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cf9fdc21218675bc171a376efe24ae1fd462044773e611f68167b0e46ab020cf -size 433810 +oid sha256:665ec1926f73aa10d967b00ee08756a100d0700bf275e81a84585398234a304e +size 433259 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Failure_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Failure_iPhone.png index a1bc8881c..88ae87477 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Failure_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Failure_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8c13546662e3fea9389ff3659320ab78d35cc27ec49e38300f452f95df3f67f1 -size 396517 +oid sha256:a43705199ac9d9299328ad89b16389f4066bfaa1daf4cc6f96b3c14beb028763 +size 396206 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Failure_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Failure_iPhone_dark.png index b1ee90a9c..5def0d55c 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Failure_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Failure_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c8b6dec7bc47c7f566d0ad5924336acc6f413740c9e85b21b9d2dbdd5ac6ce4c -size 416121 +oid sha256:bb0dba9a98aa1cf9aa998f0c725db0413d5b84ebf4d8acb6972c360bb8f1678a +size 415582 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ElsewhereOnly_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ElsewhereOnly_iPhone.png index 34f1db3dd..46499776d 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ElsewhereOnly_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ElsewhereOnly_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cae75479ff7330f81b28ddab2f856423dcc0fcc02360b927d5cc37534d4d3fbd -size 428742 +oid sha256:9d82f4f80a32678ef4b77a865f5731c99aa737def496a0fc053a4f0ff7cdd884 +size 424272 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ElsewhereOnly_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ElsewhereOnly_iPhone_dark.png index 23f502fbf..cf487f5b3 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ElsewhereOnly_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ElsewhereOnly_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5c24008712ff89a36c7dae4d70652fd83a5e725ef24aac42ccdecb8e1cede6a8 -size 449354 +oid sha256:1688da2abc54f3ebb114b614eaf3466034a9b4b10ae77d8663f2284603929291 +size 441262 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Empty_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Empty_iPhone.png index a1677bd99..d0b7cdcde 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Empty_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Empty_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:91dc908e07b07e1ef116d941bf3558b4b79d92aa28a620e2663048899dd18ada -size 423049 +oid sha256:124523341732b9f54b50ad08ecf65e04e3e7bdc7fe4aeedd150fae50c56a6e2c +size 419631 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Empty_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Empty_iPhone_dark.png index 4d92cde6d..39a020af1 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Empty_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Empty_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:86fdd3b2712db7e925fb164ec7640a3a6ce7d7869134bb85d57bb7e4b8eaaced -size 442998 +oid sha256:0620255286042290e5c753792ab5ec249679748cdae1f3be089b8e05687dd872 +size 435859 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.WelcomeActionRequired_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.WelcomeActionRequired_iPhone_ax5.png index 9a262018b..cf4f2e5b2 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.WelcomeActionRequired_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.WelcomeActionRequired_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e8aabe45fe8a8618f4989666bcbf94c431c6b88b235714b9b92c2b3f44204e5e -size 502967 +oid sha256:51af036022fcaf433d7932b077158be0b0d0fbd516f843bc7a6c6a4e87592514 +size 308803 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.WelcomeLocating_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.WelcomeLocating_iPhone_ax5.png index ff312fd72..1d4b5c557 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.WelcomeLocating_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.WelcomeLocating_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fc727088c79348e144c948c2f4e7fecce75abcdce1b90d79505f122452c0d65b -size 504619 +oid sha256:88c8e602ba0492da73ce7111ff15024741fb67aaf7bf0bc914d0b669ff740fac +size 309524 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/other/regionDays.WithData_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/other/regionDays.WithData_iPad_ax5.png index 37ffbc6ee..fb9e71768 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/other/regionDays.WithData_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/other/regionDays.WithData_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:264a81d2ddd70064680912e77048ffcf34436a0f0b1ff4f933e2cead5f732883 -size 411838 +oid sha256:24b8ac8e9299713de505871d555b195a3578e6e1d3da7294e0a98a9a66216973 +size 409926 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/other/regionDays.WithData_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/other/regionDays.WithData_iPad_contrast.png index 4e152ba06..f5fee4c0b 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/other/regionDays.WithData_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/other/regionDays.WithData_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d4e003e512906cc1af2e25cbbfa0719fa8a26f2c241aaabb51d02d1954c9c6a8 -size 258924 +oid sha256:e9238e22db64094cd714621423de832891d2f48cf1164b99f1207eaf71769c9e +size 260542 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/regionDays.WithData_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/regionDays.WithData_iPad.png index bcdd06f71..e998af2b3 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/regionDays.WithData_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/regionDays.WithData_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:df5fbc05e6268d94b2166f12436f621396501fd5562c3c0337fdabea0d4f909a -size 257564 +oid sha256:1a8e6126c65f5b24668fe0ea21d3888c93e75f7528b713754ff9ad0605e864be +size 259407 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/regionDays.WithData_iPad_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/regionDays.WithData_iPad_accessibility.png index a47901104..3a5eaf3da 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/regionDays.WithData_iPad_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/regionDays.WithData_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0199d24518e63642123186ccaad6c853d6dd9b51760a7bf3d4a797ef070d992f -size 447033 +oid sha256:1428808cf313f835f0993f5ad6896066fa461f499fca4a82dfb663de8fa9921e +size 446869 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/regionDays.WithData_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/regionDays.WithData_iPad_dark.png index ab52c262c..d777154c9 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/regionDays.WithData_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/regionDays.WithData_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6c5a46bb5b25ab22922d45b2cda5ad69e399b3d8624b0387ff00f4add0c5241a -size 261608 +oid sha256:e96c02ecfb385643e2cf5189d1a2106d1d28ac79ae24a4184bf87b912e339f32 +size 262601 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RootViewSnapshotTests/root.LoggedIn_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RootViewSnapshotTests/root.LoggedIn_iPhone.png index 21de4f1d4..23b38af47 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RootViewSnapshotTests/root.LoggedIn_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RootViewSnapshotTests/root.LoggedIn_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a991d8fd3bc13fc43d63f54d7f3f2c27a37d8ca4159a028ce15935622f304474 -size 494605 +oid sha256:e4480a3c71d7dd1df3107b5a585b826af5bc0658cf1b82db8c23af09d1ba609f +size 455767 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RootViewSnapshotTests/root.LoggedIn_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RootViewSnapshotTests/root.LoggedIn_iPhone_dark.png index 58344d169..8f2e8affb 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RootViewSnapshotTests/root.LoggedIn_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RootViewSnapshotTests/root.LoggedIn_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:efbe499be5ac9e90dc2597d5a64a51a5fa73fe21587cfe0bf80b5aaa790d636b -size 511788 +oid sha256:ddaad312074fd63bfcfd0354809ebc8e7f862e36e398b37176714c798f945ab8 +size 458927 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RootViewSnapshotTests/root.RecordingConfigurationWarning_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RootViewSnapshotTests/root.RecordingConfigurationWarning_iPhone.png index 51c6e1a88..ce13b4835 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RootViewSnapshotTests/root.RecordingConfigurationWarning_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RootViewSnapshotTests/root.RecordingConfigurationWarning_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aa36d1f62d1c16f5cc6b722d8a4381f1fc0734c384986553cff84aff2d2e56c8 -size 495206 +oid sha256:f6978edd8b869e266a65dd807ccfd2793331534e81d49dbb03199851a41cdabc +size 456721 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RootViewSnapshotTests/root.RecordingConfigurationWarning_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RootViewSnapshotTests/root.RecordingConfigurationWarning_iPhone_dark.png index ec517fdc5..bf4187d33 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RootViewSnapshotTests/root.RecordingConfigurationWarning_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RootViewSnapshotTests/root.RecordingConfigurationWarning_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:15b1cead9789168fb26a9b47c1e97e066ba95643d4141c4c92c66fa19c09cdfb -size 511854 +oid sha256:5f1d1d5166c99b9de87fe64e54adcc44514ac30289bb5e71fd4cb80ce0b6eddc +size 460109 From bb0ff71cab478a460f188eb0a3d75c645cd3ac10 Mon Sep 17 00:00:00 2001 From: Kyle Van Essen Date: Fri, 30 Oct 2026 18:48:58 -0400 Subject: [PATCH 03/12] Normalize new main updater references for isolated captures --- .../other/updates.Available_iPad_ax5.png | 4 ++-- .../other/updates.Available_iPad_contrast.png | 4 ++-- .../other/updates.Available_iPhone_ax5.png | 4 ++-- .../other/updates.Available_iPhone_contrast.png | 4 ++-- .../other/updates.Local_iPad_ax5.png | 4 ++-- .../other/updates.Local_iPad_contrast.png | 4 ++-- .../other/updates.Local_iPhone_ax5.png | 4 ++-- .../other/updates.Local_iPhone_contrast.png | 4 ++-- .../AppUpdatesViewSnapshotTests/updates.Available_iPad.png | 4 ++-- .../updates.Available_iPad_accessibility.png | 4 ++-- .../updates.Available_iPad_dark.png | 4 ++-- .../AppUpdatesViewSnapshotTests/updates.Available_iPhone.png | 4 ++-- .../updates.Available_iPhone_accessibility.png | 4 ++-- .../updates.Available_iPhone_dark.png | 4 ++-- .../AppUpdatesViewSnapshotTests/updates.Current_iPhone.png | 4 ++-- .../updates.Current_iPhone_dark.png | 4 ++-- .../AppUpdatesViewSnapshotTests/updates.LocalDirty_iPhone.png | 4 ++-- .../updates.LocalDirty_iPhone_dark.png | 4 ++-- .../updates.LocalOffline_iPhone.png | 4 ++-- .../updates.LocalOffline_iPhone_dark.png | 4 ++-- .../updates.LocalUnknown_iPhone.png | 4 ++-- .../updates.LocalUnknown_iPhone_dark.png | 4 ++-- .../AppUpdatesViewSnapshotTests/updates.Local_iPad.png | 4 ++-- .../updates.Local_iPad_accessibility.png | 4 ++-- .../AppUpdatesViewSnapshotTests/updates.Local_iPad_dark.png | 4 ++-- .../AppUpdatesViewSnapshotTests/updates.Local_iPhone.png | 4 ++-- .../updates.Local_iPhone_accessibility.png | 4 ++-- .../AppUpdatesViewSnapshotTests/updates.Local_iPhone_dark.png | 4 ++-- .../updates.MissingDetails_iPhone.png | 4 ++-- .../updates.MissingDetails_iPhone_dark.png | 4 ++-- .../updates.MissingFeed_iPhone.png | 4 ++-- .../updates.MissingFeed_iPhone_dark.png | 4 ++-- .../updates.MissingHistory_iPhone.png | 4 ++-- .../updates.MissingHistory_iPhone_dark.png | 4 ++-- .../AppUpdatesViewSnapshotTests/updates.Offline_iPhone.png | 4 ++-- .../updates.Offline_iPhone_dark.png | 4 ++-- .../updates.RetiredWithoutMain_iPhone.png | 4 ++-- .../updates.RetiredWithoutMain_iPhone_dark.png | 4 ++-- .../AppUpdatesViewSnapshotTests/updates.Retired_iPhone.png | 4 ++-- .../updates.Retired_iPhone_dark.png | 4 ++-- .../updates.RewrittenHistory_iPhone.png | 4 ++-- .../updates.RewrittenHistory_iPhone_dark.png | 4 ++-- .../updates.Unpublished_iPhone.png | 4 ++-- .../updates.Unpublished_iPhone_dark.png | 4 ++-- .../browser.Available_iPhone_accessibility.png | 4 ++-- .../browser.Available_iPhone_dark.png | 4 ++-- .../UpdateBrowserViewSnapshotTests/browser.Empty_iPhone.png | 4 ++-- .../browser.Empty_iPhone_dark.png | 4 ++-- .../UpdateBrowserViewSnapshotTests/browser.Local_iPhone.png | 4 ++-- .../browser.Local_iPhone_dark.png | 4 ++-- .../browser.MissingFeed_iPhone.png | 4 ++-- .../browser.MissingFeed_iPhone_dark.png | 4 ++-- .../UpdateBrowserViewSnapshotTests/browser.Offline_iPhone.png | 4 ++-- .../browser.Offline_iPhone_dark.png | 4 ++-- .../UpdateBrowserViewSnapshotTests/browser.Retired_iPhone.png | 4 ++-- .../browser.Retired_iPhone_dark.png | 4 ++-- .../other/browser.Available_iPhone_ax5.png | 4 ++-- .../other/browser.Available_iPhone_contrast.png | 4 ++-- .../UpdateBuildViewSnapshotTests/build.Installed_iPhone.png | 4 ++-- .../build.Installed_iPhone_dark.png | 4 ++-- .../build.MissingDetails_iPhone.png | 4 ++-- .../build.MissingDetails_iPhone_dark.png | 4 ++-- .../UpdateBuildViewSnapshotTests/build.OlderBuild_iPhone.png | 4 ++-- .../build.OlderBuild_iPhone_dark.png | 4 ++-- .../build.OtherChannel_iPhone.png | 4 ++-- .../build.OtherChannel_iPhone_accessibility.png | 4 ++-- .../build.OtherChannel_iPhone_dark.png | 4 ++-- .../build.RewrittenHistory_iPhone.png | 4 ++-- .../build.RewrittenHistory_iPhone_dark.png | 4 ++-- .../UpdateBuildViewSnapshotTests/build.Unavailable_iPhone.png | 4 ++-- .../build.Unavailable_iPhone_dark.png | 4 ++-- .../other/build.OtherChannel_iPhone_ax5.png | 4 ++-- .../other/build.OtherChannel_iPhone_contrast.png | 4 ++-- .../UpdateHistoryViewSnapshotTests/history.History_iPhone.png | 4 ++-- .../history.History_iPhone_accessibility.png | 4 ++-- .../history.History_iPhone_dark.png | 4 ++-- .../UpdateHistoryViewSnapshotTests/history.Retired_iPhone.png | 4 ++-- .../history.Retired_iPhone_dark.png | 4 ++-- .../other/history.History_iPhone_ax5.png | 4 ++-- .../other/history.History_iPhone_contrast.png | 4 ++-- .../other/updates.Available_iPhone_ax5.png | 4 ++-- .../updates.Available_iPad.png | 4 ++-- .../updates.Available_iPhone.png | 4 ++-- .../updates.Available_iPhone_accessibility.png | 4 ++-- .../updates.Available_iPhone_dark.png | 4 ++-- .../updates.Local_iPhone.png | 4 ++-- 86 files changed, 172 insertions(+), 172 deletions(-) diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPad_ax5.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPad_ax5.png index c4ab10773..355f4c34a 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPad_ax5.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2109e9571938890c3ce014f9f9aec2c003bb07aff0bd49b23c98ab9e26fd4ea0 -size 1422278 +oid sha256:6bd08293fc6d38cf3d31f70802df091d7fdebf3fb65150b17f0dda2d5c9ba0f7 +size 1411570 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPad_contrast.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPad_contrast.png index 9403203ab..bc351754b 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPad_contrast.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:25d2d8f6c2adc9b7f62c12b16277a51f9f80da23406f66cfccf9e317bb8fe164 -size 479570 +oid sha256:98fcd2350ae7c4cae2cf40e8983aa892b551e277481590eef745b8adba304686 +size 465476 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPhone_ax5.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPhone_ax5.png index ea62b75d8..8e319ef2f 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPhone_ax5.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f4dcd947c38e12c8448cdb18c372d29b4c3bdf537aec921a9b16acea1ddfb41c -size 1249245 +oid sha256:61c912dd491f51196ed2bafa3930cfafe3e55ba8ff0ea258066af9c0915a64b5 +size 1243754 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPhone_contrast.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPhone_contrast.png index c0962b4ee..cb644e630 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPhone_contrast.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b5e76ba01fad9220fab2798cca8c5b824034ac791424a7716f8cab45254df489 -size 371267 +oid sha256:27336cffa329686dcd9e78ccec7fbcd758253332f9f2572f62f71c7103470d6b +size 364971 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Local_iPad_ax5.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Local_iPad_ax5.png index c10f59271..0648c308b 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Local_iPad_ax5.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Local_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ca1c33e410adfd12cbd9d468ed4b14997bc8620b2e9158e335a84e8d6aed0714 -size 700588 +oid sha256:b9fc9c3fcee2d0db30de0d56282e7465cdd66df61743ae7ab57f77a31c5c1359 +size 688468 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Local_iPad_contrast.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Local_iPad_contrast.png index 4aa34418f..312ce1eab 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Local_iPad_contrast.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Local_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f571f2235adfdcd0d8ddd41134be0a4a5560b1b4626ec742f234c6942b04994b -size 324406 +oid sha256:65be8bf0c229b08782f39561353d67fa4454945b50df8314934aaec8729b388a +size 324265 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Local_iPhone_ax5.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Local_iPhone_ax5.png index 15fdc49cf..28ffee0ca 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Local_iPhone_ax5.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Local_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:15030283fc47e082e1c84b0cb189e2d9efc25c558598c849bd67595701beadd9 -size 630200 +oid sha256:4613680e499ef8623c47618cba2ea94cff61149739164be388646893322a4fb2 +size 623656 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Local_iPhone_contrast.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Local_iPhone_contrast.png index e5214a18e..2cb0b19f4 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Local_iPhone_contrast.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Local_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5620a481658e4883bbe4dd459cc046a0eeea84655dfc817cdbb58f1def3c529a -size 201414 +oid sha256:bcc2188162884f954a48248d7013fbbd649da0b33c4fdb1b2a40992a5fa6c3e0 +size 201658 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPad.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPad.png index d6d519659..50f01bfc6 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPad.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8688e677fad2f2e54df4d8d3bc1e3a27e19d9d69fec328e2002393261a066853 -size 471717 +oid sha256:290ff9cb211f64aee982c130e76b41558672b1d82a728d942466e6695b4ff8af +size 457894 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPad_accessibility.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPad_accessibility.png index 3629b8fc3..d50011ab1 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPad_accessibility.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8f0bd3ad20f64f5d87021082ce7f82034599327d0dacaf98174945568b2606d5 -size 1012084 +oid sha256:a3a8ccc1356120c765cb834252be991945ac7977e2c4c36c95d4ddb0bd51638a +size 999758 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPad_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPad_dark.png index 1fd1b5aaf..2d25eddc3 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPad_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e57332b595524f5d0ba9e0e90c37f1abd9de74aa5e1b288b3b29a04895eb3ed2 -size 496333 +oid sha256:1ad6f5ed1256a25cf19864c53b79d9e8b7cd19562d0b8820d38296648925ffa2 +size 483526 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPhone.png index 5aa05d62c..4e30c92ae 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:738b2f0c1fc1d6d2231b3496d5f5adf4a2ffaf6cbf3bb77a6128ef5746884119 -size 367472 +oid sha256:fb07f3b3f84cb9a693bae6c14e8120c89eb9257a35aab2b9d6306ca0bc40f090 +size 362275 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPhone_accessibility.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPhone_accessibility.png index 1ea2ab172..500e0f669 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPhone_accessibility.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:89503bde75f42a9d4c31e31719a532dc3b13ac7ca10937d9f9463e0bab50531b -size 906865 +oid sha256:923259d803061c0bb957a73b0ee156ec785fe15f68aebfcc94db9ae02aa3e174 +size 898743 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPhone_dark.png index b795c9e39..52cdab75f 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d28ad93165ee8f8e34f4f17381e7d14892ae70447ebcfc1972b32d5628ea748 -size 380610 +oid sha256:b8f90bae3cde1f35fb0edd949f00a1e409d1189a65dfe2463bd6df77975411ee +size 374546 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Current_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Current_iPhone.png index 034721b4b..bbee26b1c 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Current_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Current_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a69f0f166f5af616aaae23345c7980fc1159a133c57f417ef757ed1dbfa2d68d -size 182723 +oid sha256:8c0e76d1c4baeb769254c982be90844450d90cad312ea298e9434bb6895ba956 +size 183752 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Current_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Current_iPhone_dark.png index ac478931c..aec6709b1 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Current_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Current_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7660c8cf092e86f5a0af3a9797d460c9a5a447d0367ece9b77e9e6e40d33377a -size 188573 +oid sha256:7d78e5bc0deca0647c82ecb770db8451be123ec00e08c73657aab5eea476f133 +size 189108 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalDirty_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalDirty_iPhone.png index 479d2ff66..b3235bafa 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalDirty_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalDirty_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dd1bc5f97bdaa430a72e917616508fb4ce69aae4f870f375ee3227d37532d980 -size 202192 +oid sha256:6e5ba32ff4ec7b22d746e78fc83645fded7a6f3ece757dcdd4136a3f44d2c69f +size 202520 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalDirty_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalDirty_iPhone_dark.png index 9a8afcb04..052678439 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalDirty_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalDirty_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bb0516d90f46fe32bc6f3e89a189abb3133ab0ee177149648c1fa44304a7cfa1 -size 208402 +oid sha256:b67ca703979224314e7c89b14d5c88279139d06a2e8422bece870fdb948387fd +size 208570 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalOffline_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalOffline_iPhone.png index 766de1bbb..7fcd317d7 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalOffline_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalOffline_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f2a2b3c5b3533d340aeb1d0c6c0ab4ea76d9d2ee3d9f5fa17fdc58fb002b6830 -size 262367 +oid sha256:3f64e9e724d6f43e3179c87e2b790a9d43348dc4953b18d97e823f5c3db5f0e5 +size 254943 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalOffline_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalOffline_iPhone_dark.png index d12697e36..f87156769 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalOffline_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalOffline_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d7c78d5c9dcbf51789c988f4d0edc64dd889ebfb954596510ed43e2f61778664 -size 269899 +oid sha256:050fe2bdc94e690bbc15571574883f5a8814856d7dc5794c3e00173bffff20fe +size 264336 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalUnknown_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalUnknown_iPhone.png index 735077f3d..3a8abdaf7 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalUnknown_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalUnknown_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e2b5610e7566acc2d5deb5edc4f0ae619f7ece9eb6d09fa97fc5289ce19bdcce -size 193635 +oid sha256:dd94a7e7ca1ded59d109db8a22a752a72a723e62d094b7e19b0ed0e9fcf4d59e +size 194889 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalUnknown_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalUnknown_iPhone_dark.png index dfb1a462d..c741294dc 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalUnknown_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalUnknown_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1be6fb6859d5fdd5f0858135a42aa3947e9dd45cb9c98e5d653391fa7d87a413 -size 199160 +oid sha256:171d7307dd204ef0f588ad1c5e64e0d84a89cdaf6a22081abccb96505d5599bd +size 200433 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPad.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPad.png index 75c32dcaa..2a1c6ed3e 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPad.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6f09bb293feaaa5c273390a1c344fd696881ae544d6d4249e9e90e4e6c3c456f -size 321349 +oid sha256:9e9d477e99d0dcd2e7532578e2b22ddd79e82dfcb37d6cc7bff4b34566c9a44b +size 320911 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPad_accessibility.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPad_accessibility.png index 280a06d12..50b7246a2 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPad_accessibility.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8a4437a3a6523d617ed9707e8d6d377b87efdab45ed62e881fcd080401c68004 -size 594556 +oid sha256:ad4b05e9a09684b995a67d60b1eb6961b48269765ae609e0bb1a8554a55f0e4a +size 598566 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPad_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPad_dark.png index 4b5fdfdfe..6a61e880a 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPad_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:493bf1a12fa64be3f47d830af63504a3ae45107272853b6efe1670278114f6c6 -size 331403 +oid sha256:6348eae26feb82a5448b13f3b27a252d46f862042facc0085f1d25043af5c793 +size 331188 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPhone.png index 2d906f8e0..c7c48e1a5 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0770d7b015a9b132d8a7335bb28656d61485e35e844a3065f596002fec121a3f -size 197806 +oid sha256:08ec9471e52b42d963440c364c9958d2a13e81566d52560db60e14b9ebd5b428 +size 198323 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPhone_accessibility.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPhone_accessibility.png index 8e20ba35f..8801a779c 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPhone_accessibility.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5604071c77446bfa616ec451aacc5c53ccf396c6935d598883e8afdf9e15c00c -size 442719 +oid sha256:b3422c7b03bdd8117269718dfe0795ee740a52baff32ce28d0aa5927c7838720 +size 446210 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPhone_dark.png index d010cb053..99159f4c5 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f7ae3e7369a3c9393c5064da476df97ba118c1694fea840042a710a8f09a497d -size 204200 +oid sha256:369ce700cd649ab10673044c0fc6a65cc4a80cd4d82c182b457cdd9020bc0108 +size 204432 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingDetails_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingDetails_iPhone.png index 5f22b97a4..b0f35ae14 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingDetails_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingDetails_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8274089390b555f20065df546b918a302e32e2ed27ed7656552a3b474bf2f075 -size 369209 +oid sha256:759e178d4a1d414deaec2a65b1d4ccbfd625f3431dbfe4fb2a826fe8bfba8365 +size 363973 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingDetails_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingDetails_iPhone_dark.png index 94481f702..2a770da9d 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingDetails_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingDetails_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f5f222997ffcb9aaaf29eea91d0fbf748d300ee85ffb1fbc17fb1051e0ef1fe5 -size 382512 +oid sha256:ff87be41da7daa69bdc8616bdc81d6b5d0444ef440a6fc163aeb1cd126d91114 +size 376248 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingFeed_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingFeed_iPhone.png index b0e94f3a4..e944b09a1 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingFeed_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingFeed_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bd84a81e6537a60ad6efcd002ee9ce9b79d4e3d17e519a978280a5b1c1abbc3b -size 241566 +oid sha256:eda90c7e6b97e0819e1e2829847b2058634f292b61a1c2309526ab48b8879720 +size 235399 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingFeed_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingFeed_iPhone_dark.png index 47a435fd1..001f0ce50 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingFeed_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingFeed_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:884975c618a421518f8fe0e7d2c66557ced1c5c21ca7c8f576259e51e49545e8 -size 248867 +oid sha256:771bb467295fd3cdfcc7dd7b45e4a97b94c469bbeb2776c65af2ebfe9fb8cb0b +size 243041 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingHistory_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingHistory_iPhone.png index 7a518a767..b62cca279 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingHistory_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingHistory_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7c380e4370e8149bb25dc54acfcf627f83409fe286f6c2f42776ec36d36bae7f -size 338300 +oid sha256:939362cc56aa6ebabb5cce95e597804ff6b06e27ec2f385826563fbfb9d38a9a +size 331932 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingHistory_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingHistory_iPhone_dark.png index fbca35aa4..1b86805c5 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingHistory_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingHistory_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b89eba0457a4ec30d4152126d0f828c1d7fc20744130797aececb519e8c915fb -size 349340 +oid sha256:44b4ac45ee37d99957cfc3998b1adb3171e21fa48ccaddf467f9bd69ea091ed8 +size 343391 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Offline_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Offline_iPhone.png index 2b819ad7a..201bae91b 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Offline_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Offline_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c838b6b06df3f3f5126e04faf6e49b5af06fd08bb9b7db972aad4e367d9e515b -size 433220 +oid sha256:bcdbec56e23539ad051dadd4756288f2b6ab2bbe08c79ec8cc8bfe24188321eb +size 426712 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Offline_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Offline_iPhone_dark.png index 865fabf36..a61fe0d16 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Offline_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Offline_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1ce79989050fdbf07c04b378acf8024044ce74967201f6cc580301095043c686 -size 447887 +oid sha256:81a36c7cc616e1029d8f02d07dc76ae7972765fd834e63622d08cf79f6afbf9c +size 440988 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.RetiredWithoutMain_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.RetiredWithoutMain_iPhone.png index 76192229b..deae74a37 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.RetiredWithoutMain_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.RetiredWithoutMain_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:938faaff9cd683277d0f1108aa23d465ef54c0a9e25c2aa1191b965ab004b4ab -size 204634 +oid sha256:0d035aab6a7481770de2df201936772604db993248838e413a488e29f343783d +size 203310 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.RetiredWithoutMain_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.RetiredWithoutMain_iPhone_dark.png index e0c18951a..bca767d90 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.RetiredWithoutMain_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.RetiredWithoutMain_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cb60db7694f4be34417ed20599ffc2af05244ade71449f9962c820f0a54a7cf2 -size 212023 +oid sha256:7d138be307bfc00574beca832ef7fd6927d4e6e91fd663e19adc41821bf8aa97 +size 210903 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Retired_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Retired_iPhone.png index 7c007f6f5..591c5afbb 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Retired_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Retired_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1fe84506a125a0d281385f9500e25a8649f4fd0a7edb16cf28913a99af588373 -size 335502 +oid sha256:93925de20c1b54c7371a6e28f383a58ddf7f6418db29169251f106a6a6683772 +size 329118 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Retired_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Retired_iPhone_dark.png index 6f6716c8f..794aa13e8 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Retired_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Retired_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:29ed664c2e69f7498343983cbb1b7977ed331406d7ed7ea58699d38035a2e4c4 -size 346384 +oid sha256:f9e7dc3f09a0b2dc14965a4fc552bdd403be47a2c3b59882291871d325efadc8 +size 340574 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.RewrittenHistory_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.RewrittenHistory_iPhone.png index 6526baa89..a00666670 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.RewrittenHistory_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.RewrittenHistory_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:10c4161f071d6037027436d82ac9e0fac04974fece3e87d549fc7d62ec1a5837 -size 340427 +oid sha256:cdcb625833e3b5e531c92e051ac9f4c3b11f900472f097456a20c9a15da5687d +size 334131 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.RewrittenHistory_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.RewrittenHistory_iPhone_dark.png index 22c423c68..b5ef6a598 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.RewrittenHistory_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.RewrittenHistory_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:369d3b61ae315baa95efb03a3b9ea850f6b64149e05874aaa2972d40944bac0d -size 351574 +oid sha256:716589832ace062e4d3eea2abef1c1a20b960e292a013a7b1cfd6f02c1aa57a6 +size 345631 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Unpublished_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Unpublished_iPhone.png index 1731aabf2..d03a36332 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Unpublished_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Unpublished_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d8260a498254293ef557ad3dcf79a40715fb15f53589d441f151ee6f8c68619 -size 201398 +oid sha256:b805b1451891407751fa613b468078ed44f99eee1accc42e7b0917b4a7bc0cb3 +size 199938 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Unpublished_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Unpublished_iPhone_dark.png index 0b98295ec..9c3b4477b 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Unpublished_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Unpublished_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:836cbd34e4e16af107e43805200deaef7f0792037bbfd173779c7ae4734b8a0c -size 208723 +oid sha256:d20dd98e51c8fd49e844aea15b7ae10c4fbed370d401a4b29b632e7c8a595ef7 +size 207579 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPhone_accessibility.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPhone_accessibility.png index 24ddf2307..1d627e8b1 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPhone_accessibility.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4cca417a86560141ddafe9b5193288e82bb596db86b01483248b4e8f72288376 -size 556922 +oid sha256:f28b3385403e3d66db7414ce06127e9d4a43c6bf8353e2b2a32b46e66a01acd9 +size 546307 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPhone_dark.png index 3a9528587..d930fe8ed 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6c33dc177d89ef9ee069f34a2320ed8fead79e84b5fd91ecf7a1e5f007082d32 -size 269714 +oid sha256:48a7d75f51e97278c24a7589ee43f7a848abbefb013991b67c30669a5b60d3b3 +size 254350 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Empty_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Empty_iPhone.png index 1692000a6..a31988af2 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Empty_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Empty_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f3cf4d74dc5b8de0bcc98612cd607b81beb74671fdf4224d3aed41ba276f925e -size 193962 +oid sha256:e09f39cd0cf0ec7be896f2e41decab18c9fad85a7231924c0ff4893da2708646 +size 181919 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Empty_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Empty_iPhone_dark.png index 5bdcc2a9a..71bdb366d 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Empty_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Empty_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7a3ad921b042cb2b9612ec32bafe5b5a662dd15745e1e61993f764ab4dbee241 -size 186667 +oid sha256:43a602196050b896f52c42ef342627dd7d5e07750007552927134afdaae9e6e4 +size 178553 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Local_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Local_iPhone.png index 7c8876d07..0a5a139ac 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Local_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Local_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c866bec56930f660005da27e1bcc8991134e97e2341ab3269eb0a22062ec367b -size 271282 +oid sha256:f1978f8fa01cf949ba495640a3a6d35edff7d4dfd6f97788b6981f8255360910 +size 252306 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Local_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Local_iPhone_dark.png index a38a31193..2d1681010 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Local_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Local_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:97ae8a910016db5130f38562489725dee6ed54c9b1969aa60c9aa8d51aae6e6f -size 269220 +oid sha256:ac044cd7d51e9ecdd71ffdda6dc8b604daadbba5538a0d0d6e360930a0dd1b35 +size 254096 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.MissingFeed_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.MissingFeed_iPhone.png index 1007dd07e..d21406a48 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.MissingFeed_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.MissingFeed_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a9170f8d3761279c975d7aabb5d8e3a8987e2e353b7347c6105cde2038e572ea -size 158878 +oid sha256:4bd2a37db8e501438bc03fd3588eaaeae11eb849d3a58ff31c005cf7b1fdbba7 +size 146881 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.MissingFeed_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.MissingFeed_iPhone_dark.png index 56ed9c6d8..8f918076c 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.MissingFeed_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.MissingFeed_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:199a3a0a217168f1606a8d4c96005f95378f216f76eec8d74f1c47ab6686db99 -size 150850 +oid sha256:abf056079b5b9c89ed54c63b71f8d878b672e70d972f2e7303220b7965e7d8fc +size 141748 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Offline_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Offline_iPhone.png index 6716c179a..155d2fd1c 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Offline_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Offline_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c942d209e2a774102b983e5e8657a6fde49489019d00c59c16281d76580e3b8a -size 336656 +oid sha256:00f2c708e72d05d99769b8d84d43cff34fb9a446ac3011d11a95afe4a9f6cb25 +size 317314 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Offline_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Offline_iPhone_dark.png index 3d3d3e954..c901d83d9 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Offline_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Offline_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d849b8ecb94c4364de09bb889388bb2b1577157bbc3f915bc43752b1765648b0 -size 336408 +oid sha256:abd3a978678bb5f7b1dfc1e0648aba0880eb9883b53b6867470e622a35cd49b8 +size 320669 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Retired_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Retired_iPhone.png index 210084193..5c270cbfd 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Retired_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Retired_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f73709ece713c5c4774d428a06f38077f80712cbd141ee78ffe2637bb8d94236 -size 227521 +oid sha256:15fd1fc39037f70c21bb3810275a6f15778d09d84c575d3f2765a17900ea1e07 +size 214438 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Retired_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Retired_iPhone_dark.png index 7468e3036..301093568 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Retired_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Retired_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5f7d9105db4a097e1d3a20fd0741a1f94581b0d1d2e4b4f8b3027f0b375dd5d3 -size 223502 +oid sha256:14e824f4a78b3dad5c0d71d545878f5f69faca45318ffaf7428b399da2907dcc +size 213723 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/other/browser.Available_iPhone_ax5.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/other/browser.Available_iPhone_ax5.png index 08c0d0800..a0e071879 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/other/browser.Available_iPhone_ax5.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/other/browser.Available_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:235884810d61aaa559466af8d2a3c0cf7d1123418159c1c7bd235b5682f87a81 -size 826392 +oid sha256:b7b31c13f638f1aabfe7c7da1c8ceac2348744e060deef448ae83dde33d77be8 +size 806993 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/other/browser.Available_iPhone_contrast.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/other/browser.Available_iPhone_contrast.png index 8147837a8..dc8da58e6 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/other/browser.Available_iPhone_contrast.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/other/browser.Available_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f6907e9e2ba4b7f2a591ac7c562fec3c27cabe86185c0f6f73f730b9d082c0e -size 266772 +oid sha256:bfe898147be5b8238224492e8e3e46782b03873feccf8bade24a4a5983109791 +size 253652 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.Installed_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.Installed_iPhone.png index 6c048f06f..c6f9d7117 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.Installed_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.Installed_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:823549503cb6c2d0e308343d8c5b0a879cbbae2bf55522ab8157cfbf05d4ae62 -size 301514 +oid sha256:31cedfeac7de9eb595963fb856a951bf18bd907a0e80b8918ed51e1832c32479 +size 286698 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.Installed_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.Installed_iPhone_dark.png index 7dc5c77b3..cb067da66 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.Installed_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.Installed_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0162ce2e5b88106a1b7ebbcb93371647dce29374131b47b530a00b9898e67732 -size 305706 +oid sha256:a80b539a753e5973c55e4110df9620e4d5e8fc3caf7cabe750817763d8faf070 +size 291987 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.MissingDetails_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.MissingDetails_iPhone.png index 28b0ed581..6d7e86ca4 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.MissingDetails_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.MissingDetails_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:052132ca20b5fd00ba3663b9b869842f78cdbce01ac64dcc0500bb21fd698d04 -size 320557 +oid sha256:4cc0afdaa48fba2b71a8ec843dcc950489696a27f2c9bc46c632cf9ab97bde87 +size 306009 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.MissingDetails_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.MissingDetails_iPhone_dark.png index 689f901ef..8a7a331d5 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.MissingDetails_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.MissingDetails_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f9b45446f98fc4c8025eedcbc628399a7d3e18fa6873b2cb770f5d7074bcd70d -size 323185 +oid sha256:a4ef18f4b89ca577b9be0101f3a3083c359a02a5d0612662211f910de0109d7e +size 309920 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OlderBuild_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OlderBuild_iPhone.png index a90e1ac9a..f1bb3a766 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OlderBuild_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OlderBuild_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9a8c31e3f055b8e5c465108912f98b6c1563948dcacdd121ad81ac340bf928d1 -size 315131 +oid sha256:6e98b3a35bb131dd8de186f828d8ae4b9d3de8cbfff3fef1a672a27175509ac1 +size 300613 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OlderBuild_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OlderBuild_iPhone_dark.png index bb7cf044c..2aa6eee04 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OlderBuild_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OlderBuild_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:93db0f9aa9da0bf6952e638e54d1e360cd0e8223984ec5fb70aca626be0b51e0 -size 317649 +oid sha256:e7095d4e87309edadd379712612125667e979955a3d136e97ea70d4b3a15b620 +size 304271 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPhone.png index 485e78c55..871a45fd8 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:90cb116f4ed4ea96a21e5657426f5bb0943012a2fb9e1faf2242a2faab3f1057 -size 308059 +oid sha256:fa9e5b1ec0f31a5737c131ebfab0949a388e2a4c74dd1d05395904aabdf78e8f +size 293022 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPhone_accessibility.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPhone_accessibility.png index 02d1975b3..f11d4b0c7 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPhone_accessibility.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4a3626bc18757f5d694d5391c448a79b8e20f0a2f17eaa3832eff782c8d0dc7b -size 723502 +oid sha256:1ef8ebf99dd7550b005c15eef7ba0592763b0e080605ed1095824b109ba4d86c +size 717652 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPhone_dark.png index e0bc4d6bb..05d519666 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7b30d56ec8a2e718ccb679baf24a7102cd1abb86364466524742a82aa5b4f87f -size 310664 +oid sha256:dc8f42a4a88206182401406e86cc9572efc62172dba5e6bf84020e11114e2583 +size 297059 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.RewrittenHistory_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.RewrittenHistory_iPhone.png index 8981d5f3b..79dcc588f 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.RewrittenHistory_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.RewrittenHistory_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:244c07410242d20eb53990f497b41f595275149f8f7c8f84f4470a834e663979 -size 323141 +oid sha256:8ce545e62e72659bdcbd29b1f2e43f42675299322d641e0ba732678f05f4e945 +size 308406 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.RewrittenHistory_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.RewrittenHistory_iPhone_dark.png index 550f7ffaa..efb9b04c2 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.RewrittenHistory_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.RewrittenHistory_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d6afa01eda84279b5ae3f93195c7ac2c7999e593b5762f4d0fa3daf3617cc384 -size 325842 +oid sha256:7804be1f3bd20ee2433dd4b2839e8cb5f9aa760d54682e5a341aef2088b6f9ae +size 312487 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.Unavailable_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.Unavailable_iPhone.png index e945b9f6a..570cc2ebf 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.Unavailable_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.Unavailable_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ca3ec0848efec8b874418d19f0464027b45bfe93ae9c8239fde276d0b1512c1 -size 140641 +oid sha256:f5255d40bdafba038b29a81a674e4cb79f666b46b0332d31b903bed78b5efe8c +size 132990 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.Unavailable_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.Unavailable_iPhone_dark.png index c3dcf20aa..f1e32e43a 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.Unavailable_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.Unavailable_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4f6afbf67ff0e9db23ed1e10c17f60bb7f82709adfa87f3319a4052c14af5da2 -size 135831 +oid sha256:a06daada0d9582b9407c1c8fa30116c350aa473e62746ccc9d863a8c814dba84 +size 129382 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/other/build.OtherChannel_iPhone_ax5.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/other/build.OtherChannel_iPhone_ax5.png index 31858a1bb..4cf19e161 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/other/build.OtherChannel_iPhone_ax5.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/other/build.OtherChannel_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d35a66e5a36c1c69b1a7144b5dd486de495da3b0f649ba4fce34d6b8a4086ff0 -size 1007976 +oid sha256:1c36b996c411ec2aea9d4710d758870e2b000cbd13881cb15df5401d832e38dd +size 994994 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/other/build.OtherChannel_iPhone_contrast.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/other/build.OtherChannel_iPhone_contrast.png index 6b50071ac..16977ace0 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/other/build.OtherChannel_iPhone_contrast.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/other/build.OtherChannel_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4ed02421910a495d1e7ff068f9be2736d0085850ba7b528089bb549efedf4957 -size 305157 +oid sha256:6db1d2c8a352f32c5344533ce07d14cf5ca46d4b76aac74f3626034bc24edbf5 +size 294525 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPhone.png index 705e544f1..528aef4de 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0fb275597e6d4f4b3ee3a9ef85dc78b3aab8c49b4262542149f753043a65232d -size 222931 +oid sha256:a04cd63f6e03a5ba91af2024af9f24a838ea0f3d49294d1bb206f60865b77829 +size 208461 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPhone_accessibility.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPhone_accessibility.png index 10a419893..e4b276ea0 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPhone_accessibility.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:52978044a6443990e1d3883fa48347b7f239b317197747764ba84b427c04cdaa -size 488596 +oid sha256:c7e0a43282c64a390f3fc36fe3976ba6d2a7d584925a0edf8159ca9098acbf66 +size 478052 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPhone_dark.png index 6acb23814..c894cccfc 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:844da4d27d76cdddc1afecf9a740d634e447e08978ede119aad774e6110ddd96 -size 222925 +oid sha256:e935c911cb2c6d6035bcaa4279a8f32f916e65428556b5398d1efd49bbd78751 +size 209126 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.Retired_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.Retired_iPhone.png index 69ec7707f..129ad65d6 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.Retired_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.Retired_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f38503effa852febcfaffbe4c1313baac0c7dae111524df7126f2f0af840da11 -size 142824 +oid sha256:4a62a0dd76734848c69252b8cac1eb390be4ee9052cb5f663a59d5facbd8592e +size 135088 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.Retired_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.Retired_iPhone_dark.png index cfa4cf738..c2216bd00 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.Retired_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.Retired_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f54bad0430d040ec5fcfb0e9d57fbe7251b7da8985675abaa0d4459a3e68d557 -size 137836 +oid sha256:770248b547634ea5ec99d7734069c23239fbbd7fc2fe47afc207cc3d10eaef94 +size 131336 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/other/history.History_iPhone_ax5.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/other/history.History_iPhone_ax5.png index 62c8b316c..91df9df39 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/other/history.History_iPhone_ax5.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/other/history.History_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4d34669eaa76a9a1cd649e7d6c23ac38a09b8cb235d5b9a6898d277fa230797e -size 584770 +oid sha256:49b80005f5f320c08001f7e8f92c5626eba1f2fcbd5bd53bb417470917843a70 +size 570151 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/other/history.History_iPhone_contrast.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/other/history.History_iPhone_contrast.png index 517edd818..2ea5b58ad 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/other/history.History_iPhone_contrast.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/other/history.History_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:99b8571573eacbdce08983797b2f6911e68fd354424cd8fc9229f4fbae5f60f6 -size 219227 +oid sha256:f5453c45992da110fcac01685fce56ab60e0e045b9cfd53ba47ccf82b43cd2e3 +size 208644 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/other/updates.Available_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/other/updates.Available_iPhone_ax5.png index 098a3a85a..d017e09b3 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/other/updates.Available_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/other/updates.Available_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8b81e8fea42545938d9dc4bd146e6cbf7d044261d2687e659f9292910777c40e -size 1859700 +oid sha256:c4c7b65eae4df8ebe9bb84a3ea9de78fd8811224a756337e4271fdcb1d66bd6a +size 1852580 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPad.png index 49cf3dba2..8fbecaeb0 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:91f8eb2ce4ffe168f2cbedd6b2c15aebd48fbdf4cc6c93a2078c66b9c86be1d6 -size 607420 +oid sha256:594646a98255db19e9252a79d69d7283be13c56fe3fbe426cd939f7ac9322abd +size 592446 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPhone.png index aed2d6c66..72c03ce68 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a0d63d1f8817d294fef78649c02dd689326cf9de21612eb32a9596deb4803b86 -size 498879 +oid sha256:49496ff572d8ad966c86847d31d9415fa29ec496a25e413cffe4041fd3226e86 +size 492624 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPhone_accessibility.png index 0bcdbe217..99a7f5c36 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d5c3d25627c939a49156f6eb839e58b4a2d9a0cf010cc2b81efbee2acd2f6fb -size 987811 +oid sha256:ea84583ca25b36b74285499e6d575dcf7216266f84274fe30c5ed5d8dae66820 +size 979714 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPhone_dark.png index 279f99dcb..e7a315ec1 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae81503984e5866d23ac9acb2b8b8539e28bfa44e897403f41ff718f0ef0964f -size 487658 +oid sha256:ba4f7e0d68c01c472042039926c2dd6aaee4a596c40bb3c7722a149ae4f12825 +size 480857 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Local_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Local_iPhone.png index 14cf97dba..4befee9b9 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Local_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Local_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e57875fbf660c8582050f153a7b9b49a76c55e3c9d62245463b17c9569ef6341 -size 329078 +oid sha256:643bd235e39cd7e3f4943c3a7d99281506f01b1e37a5f14c2a93139354eb7b6d +size 328992 From 33807742006cfdcd2296084262f5131744389c33 Mon Sep 17 00:00:00 2001 From: Kyle Van Essen Date: Fri, 30 Oct 2026 19:10:24 -0400 Subject: [PATCH 04/12] Format snapshot shard parser and regression tests --- Tools/Tests/test_snapshot_shards.py | 55 ++++++++++++++++++++--------- Tools/snapshot_shards.py | 7 ++-- 2 files changed, 42 insertions(+), 20 deletions(-) diff --git a/Tools/Tests/test_snapshot_shards.py b/Tools/Tests/test_snapshot_shards.py index 689850c78..5f03aea1a 100755 --- a/Tools/Tests/test_snapshot_shards.py +++ b/Tools/Tests/test_snapshot_shards.py @@ -80,7 +80,7 @@ def test_multiline_sources_keep_shared_support_out_of_suite_discovery(self): (other / "OtherTests.swift").write_text( "import Testing\nstruct OtherTests { @Test func example() {} }\n" ) - (repo / "Project.swift").write_text(''' + (repo / "Project.swift").write_text(""" unitTests( name: "ModuleSnapshotTests", sources: [ @@ -92,22 +92,33 @@ def test_multiline_sources_keep_shared_support_out_of_suite_discovery(self): name: "OtherSnapshotTests", sources: ["Other/SnapshotTests/**"], ), - ''') + """) plan = self.make_plan() plan["shards"][0]["suites"].append("OtherSnapshotTests/OtherTests") path = repo / "plan.json" path.write_text(json.dumps(plan)) - self.assertEqual(MODULE.source_inventory(repo), { - "ModuleSnapshotTests/FirstSnapshotTests", - "ModuleSnapshotTests/SecondSnapshotTests", - "ModuleSnapshotTests/ThirdSnapshotTests", - "OtherSnapshotTests/OtherTests", - }) + self.assertEqual( + MODULE.source_inventory(repo), + { + "ModuleSnapshotTests/FirstSnapshotTests", + "ModuleSnapshotTests/SecondSnapshotTests", + "ModuleSnapshotTests/ThirdSnapshotTests", + "OtherSnapshotTests/OtherTests", + }, + ) result = subprocess.run( - [str(SCRIPT.parents[1] / "snapshot-shards"), "--plan", str(path), - "check", "--repo", str(repo)], - cwd=repo, capture_output=True, text=True, + [ + str(SCRIPT.parents[1] / "snapshot-shards"), + "--plan", + str(path), + "check", + "--repo", + str(repo), + ], + cwd=repo, + capture_output=True, + text=True, ) self.assertEqual(result.returncode, 0, result.stderr) self.assertIn("4 suites", result.stdout) @@ -116,28 +127,38 @@ def test_source_array_without_a_snapshot_glob_cannot_borrow_the_next_target(self with tempfile.TemporaryDirectory() as directory: repo = self.make_repo(directory) project = repo / "Project.swift" - project.write_text(''' + project.write_text( + """ unitTests( name: "BrokenSnapshotTests", sources: ["Module/Tests/Support/TestStore.swift"], ), - ''' + project.read_text()) + """ + + project.read_text() + ) - with self.assertRaisesRegex(ValueError, "BrokenSnapshotTests has no literal"): + with self.assertRaisesRegex( + ValueError, "BrokenSnapshotTests has no literal" + ): MODULE.source_inventory(repo) def test_nonliteral_sources_fail_without_borrowing_the_next_target(self): with tempfile.TemporaryDirectory() as directory: repo = self.make_repo(directory) project = repo / "Project.swift" - project.write_text(''' + project.write_text( + """ unitTests( name: "BrokenSnapshotTests", sources: sharedSources, ), - ''' + project.read_text()) + """ + + project.read_text() + ) - with self.assertRaisesRegex(ValueError, "literal source arrays.*BrokenSnapshotTests"): + with self.assertRaisesRegex( + ValueError, "literal source arrays.*BrokenSnapshotTests" + ): MODULE.source_inventory(repo) def test_rejects_a_suite_that_is_missing_from_the_plan(self): diff --git a/Tools/snapshot_shards.py b/Tools/snapshot_shards.py index b71e75445..593fe786e 100755 --- a/Tools/snapshot_shards.py +++ b/Tools/snapshot_shards.py @@ -52,8 +52,7 @@ def snapshot_source_roots(repo): project = (repo / "Project.swift").read_text() roots = {} declared = { - match.group("bundle") - for match in re.finditer(SNAPSHOT_TARGET_HEADER, project) + match.group("bundle") for match in re.finditer(SNAPSHOT_TARGET_HEADER, project) } parsed = set() for match in SNAPSHOT_TARGET_PATTERN.finditer(project): @@ -64,7 +63,9 @@ def snapshot_source_roots(repo): parsed.add(bundle) for source in sources: if source in roots: - raise ValueError(f"duplicate snapshot source path in Project.swift: {source}") + raise ValueError( + f"duplicate snapshot source path in Project.swift: {source}" + ) roots[source] = bundle if missing := sorted(declared - parsed): raise ValueError(f"snapshot targets need literal source arrays: {missing}") From 141fab854078e4b208907acbbf8a1a8b6058dcb6 Mon Sep 17 00:00:00 2001 From: Kyle Van Essen Date: Fri, 30 Oct 2026 20:01:14 -0400 Subject: [PATCH 05/12] Stabilize synthetic capture geometry and accessibility outlines --- .circleci/config.yml | 20 + Project.swift | 734 ++++++++++++++++++ Shared/SnapshotKitTesting/AGENTS.md | 7 +- Shared/SnapshotKitTesting/README.md | 66 ++ .../AccessibilitySnapshotViewController.swift | 6 + .../Sources/SafeAreaInsetsSwizzling.swift | 23 +- .../Sources/SnapshotImageRendering.swift | 45 +- ...ssibilitySnapshotViewControllerTests.swift | 57 ++ .../Tests/SafeAreaCompositionTests.swift | 3 +- .../Tests/SnapshotImageRenderingTests.swift | 249 +++++- Tools/README.md | 115 +++ 11 files changed, 1293 insertions(+), 32 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index fb0bd44a3..1c2507fab 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -60,3 +60,23 @@ jobs: git checkout --detach "<< pipeline.git.revision >>" git config gc.auto 0 - run: + name: Classify the complete PR and continue + command: python3 -m Tools.ci_circleci + +workflows: + "Select workflows": + # Keep the existing event gates for CI, signed archives, and Flyover. + # Only one setup workflow runs, even when an API request sets several flags. + when: >- + pipeline.parameters.manual_full_gate == "true" or + (pipeline.event.name == "push" and pipeline.git.branch == "main") or + (pipeline.event.name == "pull_request" and + pipeline.event.github.pull_request.base.ref == "main" and + not (pipeline.event.github.pull_request.title matches /.*NO-CI.*/)) or + (pipeline.event.name == "api" and + pipeline.git.branch == "main" and + pipeline.config.ref == "refs/heads/main" and + (pipeline.parameters.flyover_export == "true" or + pipeline.parameters.installer_archive == "true")) + jobs: + - select-workflows diff --git a/Project.swift b/Project.swift index a4cde51f2..b9a41dfff 100644 --- a/Project.swift +++ b/Project.swift @@ -266,3 +266,737 @@ let packageResourceEnvironment: [String: EnvironmentVariable] = [ let snapshotEnvironment: [String: EnvironmentVariable] = packageResourceEnvironment.merging([ + "SNAPSHOT_EXPECTED_SIMULATOR_RUNTIME_VERSION": "27.2", + "SNAPSHOT_EXPECTED_SCREEN_SCALE": "3", + "SNAPSHOT_EXPECTED_TIMEZONE": "America/Los_Angeles", + "TZ": "America/Los_Angeles", + ]) { _, new in new } + +func unitTests( + name: String, + bundleIdSuffix: String, + productDependency: String, + sources: ProjectDescription.SourceFilesList, + resources: ResourceFileElements = [], + extraPackageProducts: [String] = [], + environmentVariables: [String: EnvironmentVariable] = [:], + scripts: [TargetScript] = [], +) -> Target { + var dependencies: [TargetDependency] = [ + .package(product: productDependency), + .package(product: "TestHostSupport"), + .target(name: "StuffTestHost"), + ] + for product in extraPackageProducts { + dependencies.append(.package(product: product)) + } + return .target( + name: name, + destinations: destinations, + product: .unitTests, + bundleId: "com.stuff.\(bundleIdSuffix).tests", + deploymentTargets: deployment, + sources: sources, + resources: resources, + scripts: scripts, + dependencies: dependencies, + environmentVariables: packageResourceEnvironment + .merging(environmentVariables) { _, new in new }, + ) +} + +/// A shared scheme that builds and tests a single unit-test bundle. +/// `testEnvironmentVariables` are set on the test action, so they reach the +/// test process (schemes without any keep an argument-less test action). +func testScheme( + name: String, + testEnvironmentVariables: [String: EnvironmentVariable] = [:], +) -> Scheme { + .scheme( + name: name, + shared: true, + buildAction: .buildAction(targets: ["\(name)"]), + testAction: .targets( + ["\(name)"], + arguments: .arguments( + environmentVariables: packageResourceEnvironment + .merging(testEnvironmentVariables) { _, new in new }, + ), + ), + ) +} + +private let whereAudienceSchemes: [Scheme] = [ + // Reserve the autogenerated target scheme's name but keep audience-neutral + // entry points out of Xcode's visible scheme picker. + .scheme( + name: "Where", + shared: true, + hidden: true, + buildAction: .buildAction(targets: ["Where"]), + runAction: .runAction(configuration: "Debug", executable: "Where"), + ), +] + whereAudiences.map { audience in + let testAction: TestAction? = switch audience.variant { + case .debug: .targets( + ["WhereTests"], + arguments: .arguments(environmentVariables: packageResourceEnvironment), + configuration: audience.configurationName, + ) + case .release: nil + } + return .scheme( + name: audience.schemeName, + shared: true, + buildAction: .buildAction(targets: ["Where"]), + testAction: testAction, + runAction: .runAction( + configuration: audience.configurationName, + executable: "Where", + ), + archiveAction: .archiveAction(configuration: audience.configurationName), + ) +} + +let project = Project( + name: "Stuff", + options: .options( + defaultKnownRegions: ["en"], + developmentRegion: "en", + ), + packages: [stuffPackage, sfSafeSymbolsPackage], + settings: projectSettings, + targets: [ + .target( + name: "Where", + destinations: destinations, + product: .app, + bundleId: "com.stuff.where", + deploymentTargets: deployment, + infoPlist: .extendingDefault(with: [ + "CFBundleDisplayName": .string("$(WHERE_DISPLAY_NAME)"), + "UILaunchScreen": .dictionary([:]), + "UIApplicationSupportsIndirectInputEvents": .boolean(true), + "UIBackgroundModes": .array([.string("remote-notification")]), + // Stated explicitly rather than left to Tuist's `1.0` / `1` + // defaults, because Settings > About shows them: the version a + // user reads off the screen should be one this manifest chose. + "CFBundleShortVersionString": .string("1.0"), + "CFBundleVersion": .string("1"), + "WhereAudience": .string("$(WHERE_AUDIENCE)"), + "WhereAppGroupIdentifier": .string("$(WHERE_APP_GROUP_IDENTIFIER)"), + "WherePrimaryAppIconName": .string("$(WHERE_PRIMARY_APP_ICON_NAME)"), + "NSLocationWhenInUseUsageDescription": .string( + "Where uses your location to figure out which region you're in.", + ), + "NSLocationAlwaysAndWhenInUseUsageDescription": .string( + "Where checks your location in the background so it can log which region you're in each day.", + ), + ]), + sources: ["Where/Where/Sources/**"], + resources: ["Where/Where/Resources/**"], + entitlements: whereAppEntitlements, + // Writes `WhereGitSHA` / `WhereGitStatus` into the built Info.plist + // for Settings > About. A *post* script so it lands after "Process + // Info.plist" and before signing, and `basedOnDependencyAnalysis: + // false` so an unchanged source tree still re-stamps a new commit. + scripts: [ + .post( + path: "Where/Where/Scripts/stamp-build-info.sh", + name: "Stamp Build Info", + basedOnDependencyAnalysis: false, + ), + ], + dependencies: [ + .package(product: "LifecycleKit"), + .package(product: "RegionKit"), + .package(product: "WhereCrashReporting"), + .package(product: "WhereCore"), + .package(product: "WhereUI"), + .package(product: "WhereIntents"), + .target(name: "WhereWidgets"), + .target(name: "WhereShareExtension"), + ], + // Compile every `*.appiconset` in `AppIcon.xcassets` into the build and + // auto-write the `CFBundleAlternateIcons` plist entries, so the asset + // catalog itself is the source of truth for which alternate icons exist + // (the `./icons` script just adds/removes sets — no names list to keep + // in sync here). Each audience descriptor chooses its primary from + // those sets. Where ships no custom global accent color (it tints + // per-region in SwiftUI), so clear the name actool otherwise looks + // for — an unset `AccentColor` warns. + settings: whereHostSettings(.app, base: [ + "ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS": "YES", + "ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME": "", + ]), + ), + .target( + name: "WhereWidgets", + destinations: destinations, + product: .appExtension, + bundleId: "com.stuff.where.widgets", + deploymentTargets: deployment, + infoPlist: .extendingDefault(with: [ + "CFBundleDisplayName": .string("$(WHERE_DISPLAY_NAME)"), + "WhereAudience": .string("$(WHERE_AUDIENCE)"), + "WhereAppGroupIdentifier": .string("$(WHERE_APP_GROUP_IDENTIFIER)"), + "NSExtension": .dictionary([ + "NSExtensionPointIdentifier": .string("com.apple.widgetkit-extension"), + ]), + ]), + sources: ["Where/WhereWidgets/Sources/**"], + resources: ["Where/WhereWidgets/Resources/**"], + entitlements: whereAppGroupEntitlements, + dependencies: [ + .package(product: "PeriscopeCore"), + .package(product: "RegionKit"), + .package(product: "WhereCore"), + .package(product: "WhereUI"), + ], + settings: whereHostSettings(.widget), + ), + .target( + name: "WhereShareExtension", + destinations: destinations, + product: .appExtension, + bundleId: "com.stuff.where.share", + deploymentTargets: deployment, + infoPlist: .extendingDefault(with: [ + "CFBundleDisplayName": .string("$(WHERE_DISPLAY_NAME)"), + "WhereAudience": .string("$(WHERE_AUDIENCE)"), + "WhereAppGroupIdentifier": .string("$(WHERE_APP_GROUP_IDENTIFIER)"), + "NSExtension": .dictionary([ + "NSExtensionPointIdentifier": .string("com.apple.share-services"), + "NSExtensionPrincipalClass": .string( + "$(PRODUCT_MODULE_NAME).ShareViewController", + ), + // Offer the share action for the content Where can back a + // day-count claim with: images, files (PDFs, `.pkpass` + // tickets, `.eml` emails), plain text, and web URLs. + "NSExtensionAttributes": .dictionary([ + "NSExtensionActivationRule": .dictionary([ + "NSExtensionActivationSupportsImageWithMaxCount": .integer(20), + "NSExtensionActivationSupportsFileWithMaxCount": .integer(20), + "NSExtensionActivationSupportsText": .boolean(true), + "NSExtensionActivationSupportsWebURLWithMaxCount": .integer(20), + ]), + ]), + ]), + ]), + sources: ["Where/WhereShareExtension/Sources/**"], + resources: ["Where/WhereShareExtension/Resources/**"], + entitlements: whereAppGroupEntitlements, + dependencies: [ + .package(product: "PeriscopeCore"), + .package(product: "SFSafeSymbols"), + .package(product: "WhereCore"), + .package(product: "WhereUI"), + ], + settings: whereHostSettings(.share), + ), + .target( + name: "RegionViewer", + // The first (and only) target to opt into Mac Catalyst: a thin + // standalone host for the WhereUI `RegionMapView` developer tool. + // The shared `destinations` constant stays iPhone/iPad-only for + // everything else. + destinations: [.iPhone, .iPad, .macCatalyst], + product: .app, + bundleId: "com.stuff.regionviewer", + deploymentTargets: deployment, + infoPlist: .extendingDefault(with: [ + "UILaunchScreen": .dictionary([:]), + "UIApplicationSupportsIndirectInputEvents": .boolean(true), + ]), + sources: ["Where/RegionViewer/Sources/**"], + resources: ["Where/RegionViewer/Resources/**"], + // No App Group entitlement — the viewer only reads bundled GeoJSON + // (embedded via the RegionKit dependency), never the app's store. + dependencies: [ + .package(product: "RegionKit"), + .package(product: "WhereCore"), + .package(product: "WhereUI"), + ], + // This developer tool ships no custom app icon or accent color, so + // clear the names the asset-catalog compiler otherwise requires + // (its `Resources/Assets.xcassets` is intentionally empty). + settings: .settings(base: [ + "ASSETCATALOG_COMPILER_APPICON_NAME": "", + "ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME": "", + ]), + ), + .target( + name: "WhereTests", + destinations: destinations, + product: .unitTests, + bundleId: "com.stuff.where.tests", + deploymentTargets: deployment, + sources: ["Where/Where/Tests/**"], + dependencies: [ + .target(name: "Where"), + .package(product: "LifecycleKit"), + .package(product: "TestHostSupport"), + .package(product: "WhereUI"), + ], + environmentVariables: packageResourceEnvironment, + ), + .target( + name: "StuffTestHost", + destinations: destinations, + product: .app, + bundleId: "com.stuff.stufftesthost", + deploymentTargets: deployment, + infoPlist: .extendingDefault(with: [ + "UILaunchScreen": .dictionary([:]), + "UIApplicationSceneManifest": .dictionary([ + "UIApplicationSupportsMultipleScenes": .boolean(false), + "UISceneConfigurations": .dictionary([ + "UIWindowSceneSessionRoleApplication": .array([ + .dictionary([ + "UISceneConfigurationName": .string("Default Configuration"), + "UISceneDelegateClassName": .string( + "$(PRODUCT_MODULE_NAME).SceneDelegate", + ), + ]), + ]), + ]), + ]), + ]), + sources: ["Shared/StuffTestHost/Sources/**"], + // Keep this host thin — it deliberately depends on nothing but + // TestHostSupport. + // + // Hosted bundles' `Bundle.module` lookups do *not* resolve against + // this host: `packageResourceEnvironment` points the generated + // accessors at the built-products directory instead. Don't re-add a + // product here to fix a missing-resource failure. The host once + // embedded WhereCore for exactly that (removed in #144 as redundant + // on Xcode 27 beta 3), and when beta 4 broke resource resolution the + // embed could not come back: under beta 4 a package product consumed + // by both this host and the test bundles loses its String Catalog + // generate-symbols step, failing the build (verified with WhereCore + // and, via LifecycleKitUI, with WhereUI). See the note on + // `packageResourceEnvironment` for the full story. + dependencies: [ + // Lets `SceneDelegate` stamp its window with `isMainTestHostWindow` + // so hosted tests can find it via `TestHostSupport.hostKeyWindow()`. + .package(product: "TestHostSupport"), + ], + ), + unitTests( + name: "CreditKitTests", + bundleIdSuffix: "creditkit", + productDependency: "CreditKit", + sources: ["Shared/CreditKit/Tests/**"], + ), + unitTests( + name: "WhereCrashReportingTests", + bundleIdSuffix: "wherecrashreporting", + productDependency: "WhereCrashReporting", + sources: ["Where/WhereCrashReporting/Tests/**"], + ), + unitTests( + name: "LifecycleKitTests", + bundleIdSuffix: "lifecyclekit", + productDependency: "LifecycleKit", + sources: ["Shared/LifecycleKit/Tests/**"], + ), + unitTests( + name: "LifecycleKitUITests", + bundleIdSuffix: "lifecyclekitui", + productDependency: "LifecycleKitUI", + sources: ["Shared/LifecycleKitUI/Tests/**"], + extraPackageProducts: ["LifecycleKit"], + ), + unitTests( + name: "JournalKitTests", + bundleIdSuffix: "journalkit", + productDependency: "JournalKit", + sources: ["Shared/JournalKit/Tests/**"], + ), + unitTests( + name: "PeriscopeCoreTests", + bundleIdSuffix: "periscopecore", + productDependency: "PeriscopeCore", + sources: ["Shared/Periscope/PeriscopeCore/Tests/**"], + extraPackageProducts: ["JournalKit"], + ), + unitTests( + name: "PeriscopeUITests", + bundleIdSuffix: "periscopeui", + productDependency: "PeriscopeUI", + sources: ["Shared/Periscope/PeriscopeUI/Tests/**"], + extraPackageProducts: ["PeriscopeCore"], + ), + unitTests( + name: "PeriscopeToolsTests", + bundleIdSuffix: "periscopetools", + productDependency: "PeriscopeTools", + sources: ["Shared/Periscope/PeriscopeTools/Tests/**"], + extraPackageProducts: [ + "PeriscopeCore", + "PeriscopeUI", + ], + ), + unitTests( + name: "InspectorTests", + bundleIdSuffix: "inspector", + productDependency: "Inspector", + sources: ["Shared/Inspector/Tests/**"], + ), + unitTests( + name: "FlyoverTests", + bundleIdSuffix: "flyover", + productDependency: "Flyover", + sources: ["Shared/Flyover/Tests/**"], + resources: ["Shared/Flyover/Tests/Fixtures/*.json"], + ), + unitTests( + name: "SnapshotKitTests", + bundleIdSuffix: "snapshotkit", + productDependency: "SnapshotKit", + sources: ["Shared/SnapshotKit/Tests/**"], + ), + // The capture/compare pipeline's own regression tests. They render + // through `renderSnapshotImage` (so they need the `StuffTestHost` key + // window) but assert on probed pixels rather than LFS reference images, + // so — unlike `StuffSnapshotTests` — this bundle is fast, has no + // `__Snapshots__/`, and runs in the main `Stuff-iOS-Tests` scheme / + // `test` CI job. `SnapshotKitTesting` embeds its dependency closure + // (SnapshotKit, SnapshotTesting, AccessibilitySnapshot) into the + // `.xctest`, as every bundle here embeds what it links. That means the + // `Stuff-iOS-Tests` host process holds a SnapshotKit copy per bundle + // that links one, but no lookup crosses between them: each bundle's + // capture writes and reads resolve within its own image. + unitTests( + name: "SnapshotKitTestingTests", + bundleIdSuffix: "snapshotkittesting", + productDependency: "SnapshotKitTesting", + sources: ["Shared/SnapshotKitTesting/Tests/**"], + extraPackageProducts: ["SFSafeSymbols"], + ), + unitTests( + name: "RegionKitTests", + bundleIdSuffix: "regionkit", + productDependency: "RegionKit", + sources: ["Where/RegionKit/Tests/**"], + ), + unitTests( + name: "InstallerKitUITests", + bundleIdSuffix: "installerkitui", + productDependency: "InstallerKitUI", + sources: ["Shared/InstallerKitUI/Tests/**"], + ), + unitTests( + name: "InstallerKitTests", + bundleIdSuffix: "installerkit", + productDependency: "InstallerKit", + sources: ["Shared/InstallerKit/Tests/**"], + ), + unitTests( + name: "WhereCoreTests", + bundleIdSuffix: "wherecore", + productDependency: "WhereCore", + sources: ["Where/WhereCore/Tests/**/*.swift"], + resources: [.folderReference(path: "Where/WhereCore/Tests/Fixtures/Flights")], + extraPackageProducts: ["RegionKit"], + ), + // WhereUITests names LifecycleKit and SFSafeSymbols because its test sources + // exercise those public types directly. Xcode 27 emits WhereUI as a dynamic package + // products in this graph, so merely copying WhereUI's transitive frameworks + // does not add them to the test bundle's link command. Everything else arrives + // through WhereUI; re-listing a statically absorbed product can still split + // type-keyed lookups in the full multi-bundle scheme. + // Guard: WhereStylesheetTests.resolvesTraitAwareTokensFromTheBroadwayRoot. + // See "Never double-link a product WhereUI already carries" in the root + // AGENTS.md; mechanism: PR #145. + unitTests( + name: "WhereUITests", + bundleIdSuffix: "whereui", + productDependency: "WhereUI", + sources: ["Where/WhereUI/Tests/**"], + // The parser initializes SwiftUI accessibility for hosted interaction tests, + // including on fresh CI simulators with no accessibility tooling attached. + extraPackageProducts: ["AccessibilitySnapshotParser", "LifecycleKit", "SFSafeSymbols"], + ), + // WhereIntents depends on WhereUI for its snippet cards, so — exactly like + // WhereUITests above — this bundle lists no `extraPackageProducts`: + // WhereUI/WhereCore/RegionKit/Broadway all arrive transitively, and + // re-listing any of them would land a duplicate copy in this image. + // See "Never double-link a product WhereUI already carries" in the root + // AGENTS.md. + unitTests( + name: "WhereIntentsTests", + bundleIdSuffix: "whereintents", + productDependency: "WhereIntents", + sources: ["Where/WhereIntents/Tests/**"], + ), + // Image snapshot bundles: one per module that owns image references, + // all gathered into the single `StuffSnapshotTests` scheme below so CI + // runs them in one `snapshot` job. They are slow and LFS-backed, so + // they are deliberately NOT in the `Stuff-iOS-Tests` scheme. + // + // One bundle per module rather than one shared bundle, because a + // module's image suite should link only what that module needs: the + // Periscope and Inspector suites don't build against WhereUI + // at all. Each records its references beside its own sources — + // SnapshotKitTesting derives the suite directory from the calling + // file's `#filePath` and nests special trait references under `other/`. + // + // Separate bundles are safe here because each `.xctest` gets its own + // `StuffTestHost` process: measured on Xcode 27 by probing + // `ProcessInfo.processIdentifier` from two bundles in one scheme, which + // reported different PIDs on both a filtered and a full unfiltered run. + // That matters specifically for these bundles, because each statically + // embeds its own copy of `SnapshotKitTesting`, whose capture state is + // module-global and therefore per copy (`_swizzleDepth` and the + // override globals in `SafeAreaInsetsSwizzling.swift`, + // `SnapshotCaptureLock`, the `UIView` category). Co-loaded into one + // process those copies would fight over the single `UIView` method + // exchange; in separate processes each is genuinely process-wide, as + // its docs claim. If a future toolchain ever starts sharing one host + // process across bundles, re-measure before adding another. + // + // Each lists only `SnapshotKitTesting` in `extraPackageProducts` — the + // test-only capture pipeline, which no shipping module links. Nothing + // else is re-listed: whatever the module already carries arrives + // transitively, per the double-linking rule in the root AGENTS.md. + // `SnapshotCaptureFlagProbeTests` (in WhereUISnapshotTests) pins the + // pipeline's `traitOverrides` write reaching a WhereUI-defined view's + // `\.isCapturingSnapshot` read, so a toolchain that stopped coalescing + // the two SnapshotKit copies in that bundle would fail loudly rather + // than silently returning defaults. + unitTests( + name: "WhereUISnapshotTests", + bundleIdSuffix: "whereui.snapshot", + productDependency: "WhereUI", + sources: ["Where/WhereUI/SnapshotTests/**"], + extraPackageProducts: ["SnapshotKitTesting"], + environmentVariables: snapshotEnvironment, + ), + unitTests( + name: "InstallerKitUISnapshotTests", + bundleIdSuffix: "installerkitui.snapshot", + productDependency: "InstallerKitUI", + sources: ["Shared/InstallerKitUI/SnapshotTests/**"], + extraPackageProducts: ["SnapshotKitTesting"], + environmentVariables: snapshotEnvironment, + ), + unitTests( + name: "ToolsSnapshotTests", + bundleIdSuffix: "tools.snapshot", + productDependency: "SnapshotKitTesting", + sources: ["Tools/SnapshotTests/**"], + environmentVariables: snapshotEnvironment, + scripts: [.post( + script: """ + cd "$SRCROOT" + PYTHONDONTWRITEBYTECODE=1 python3 -m Tools.Tests.Fixtures.installer_update_site_snapshots \\ + --output "$TARGET_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH/InstallerSiteSnapshots.json" + """, + name: "Generate install-site snapshot fixtures", + basedOnDependencyAnalysis: false, + )], + ), + unitTests( + name: "FlyoverSnapshotTests", + bundleIdSuffix: "flyover.snapshot", + productDependency: "Flyover", + sources: ["Shared/Flyover/SnapshotTests/**"], + extraPackageProducts: ["SnapshotKitTesting"], + environmentVariables: snapshotEnvironment, + ), + unitTests( + name: "PeriscopeToolsSnapshotTests", + bundleIdSuffix: "periscopetools.snapshot", + productDependency: "PeriscopeTools", + sources: ["Shared/Periscope/PeriscopeTools/SnapshotTests/**"], + extraPackageProducts: ["SnapshotKitTesting"], + environmentVariables: snapshotEnvironment, + ), + unitTests( + name: "InspectorSnapshotTests", + bundleIdSuffix: "inspector.snapshot", + productDependency: "Inspector", + sources: ["Shared/Inspector/SnapshotTests/**"], + extraPackageProducts: ["SnapshotKitTesting"], + environmentVariables: snapshotEnvironment, + ), + .target( + name: "BroadwayCatalog", + destinations: destinations, + product: .app, + bundleId: "com.stuff.broadway.catalog", + deploymentTargets: deployment, + infoPlist: .extendingDefault(with: [ + "UILaunchScreen": .dictionary([:]), + "UIApplicationSupportsIndirectInputEvents": .boolean(true), + ]), + sources: ["Shared/Broadway/BroadwayCatalog/Sources/**"], + resources: ["Shared/Broadway/BroadwayCatalog/Resources/**"], + dependencies: [ + .package(product: "BroadwayUI"), + .package(product: "SFSafeSymbols"), + ], + ), + .target( + name: "BroadwayCatalogTests", + destinations: destinations, + product: .unitTests, + bundleId: "com.stuff.broadway.catalog.tests", + deploymentTargets: deployment, + sources: ["Shared/Broadway/BroadwayCatalog/Tests/**"], + dependencies: [ + .target(name: "BroadwayCatalog"), + .package(product: "TestHostSupport"), + ], + ), + unitTests( + name: "BroadwayCoreTests", + bundleIdSuffix: "broadway.core", + productDependency: "BroadwayCore", + sources: ["Shared/Broadway/BroadwayCore/Tests/**"], + ), + unitTests( + name: "BroadwayUITests", + bundleIdSuffix: "broadway.ui", + productDependency: "BroadwayUI", + sources: ["Shared/Broadway/BroadwayUI/Tests/**"], + extraPackageProducts: [ + "BroadwayCore", + ], + ), + ], + // Tuist's autogeneration doesn't emit working standalone test actions for + // these unit-test bundles (only the aggregate `Stuff-Workspace` scheme + // runs them), so declare them explicitly. This lets `tuist test + // WhereCoreTests` / `tuist test WhereTests` / `tuist test WhereUITests` + // target a single bundle without building the whole workspace. + schemes: whereAudienceSchemes + [ + // App target schemes are normally autogenerated, but declare the + // RegionViewer one explicitly so `tuist build RegionViewer` (and a + // Run that launches the Catalyst app) is always available. + .scheme( + name: "RegionViewer", + shared: true, + buildAction: .buildAction(targets: ["RegionViewer"]), + runAction: .runAction(executable: "RegionViewer"), + ), + // CI scheme. Rather than the autogenerated `Stuff-Workspace` scheme, + // CI drives this explicit aggregate of every buildable/testable target + // (see .github/workflows/ci.yml). + .scheme( + name: "Stuff-iOS-Tests", + shared: true, + buildAction: .buildAction(targets: [ + "Where", + "RegionViewer", + "StuffTestHost", + "CreditKitTests", + "WhereCrashReportingTests", + "LifecycleKitTests", + "LifecycleKitUITests", + "JournalKitTests", + "PeriscopeCoreTests", + "PeriscopeUITests", + "PeriscopeToolsTests", + "InspectorTests", + "FlyoverTests", + "SnapshotKitTests", + "SnapshotKitTestingTests", + "RegionKitTests", + "InstallerKitTests", + "InstallerKitUITests", + "WhereCoreTests", + "WhereTests", + "WhereUITests", + "WhereIntentsTests", + "BroadwayCatalog", + "BroadwayCoreTests", + "BroadwayUITests", + "BroadwayCatalogTests", + ]), + testAction: .targets( + [ + "CreditKitTests", + "WhereCrashReportingTests", + "LifecycleKitTests", + "LifecycleKitUITests", + "JournalKitTests", + "PeriscopeCoreTests", + "PeriscopeUITests", + "PeriscopeToolsTests", + "InspectorTests", + "FlyoverTests", + "SnapshotKitTests", + "SnapshotKitTestingTests", + "RegionKitTests", + "InstallerKitTests", + "InstallerKitUITests", + "WhereCoreTests", + "WhereTests", + "WhereUITests", + "WhereIntentsTests", + "BroadwayCoreTests", + "BroadwayUITests", + "BroadwayCatalogTests", + ], + arguments: .arguments(environmentVariables: packageResourceEnvironment), + ), + ), + testScheme(name: "CreditKitTests"), + testScheme(name: "WhereCrashReportingTests"), + testScheme(name: "LifecycleKitTests"), + testScheme(name: "LifecycleKitUITests"), + testScheme(name: "JournalKitTests"), + testScheme(name: "PeriscopeCoreTests"), + testScheme(name: "PeriscopeUITests"), + testScheme(name: "PeriscopeToolsTests"), + testScheme(name: "InspectorTests"), + testScheme(name: "FlyoverTests"), + testScheme(name: "SnapshotKitTests"), + testScheme(name: "SnapshotKitTestingTests"), + testScheme(name: "RegionKitTests"), + testScheme(name: "InstallerKitTests"), + testScheme(name: "InstallerKitUITests"), + testScheme(name: "WhereCoreTests"), + testScheme(name: "WhereTests"), + testScheme(name: "WhereUITests"), + // Every image-snapshot bundle, in one scheme, so CI runs them all in + // the single `snapshot` job. A new module's image suite gets its own + // `*SnapshotTests` target above and joins the lists here — it must not + // get a scheme (or CI job) of its own. + // + // The environment pins (see `snapshotEnvironment`) are why this scheme + // exists rather than folding the bundles into `Stuff-iOS-Tests`. They + // are also set on each snapshot target, so the per-target schemes + // Tuist autogenerates are pinned too. + .scheme( + name: "StuffSnapshotTests", + shared: true, + buildAction: .buildAction(targets: [ + "WhereUISnapshotTests", + "ToolsSnapshotTests", + "InstallerKitUISnapshotTests", + "FlyoverSnapshotTests", + "PeriscopeToolsSnapshotTests", + "InspectorSnapshotTests", + ]), + testAction: .targets( + [ + "WhereUISnapshotTests", + "ToolsSnapshotTests", + "InstallerKitUISnapshotTests", + "FlyoverSnapshotTests", + "PeriscopeToolsSnapshotTests", + "InspectorSnapshotTests", + ], + arguments: .arguments(environmentVariables: snapshotEnvironment), + ), + ), + testScheme(name: "WhereIntentsTests"), + testScheme(name: "BroadwayCoreTests"), + testScheme(name: "BroadwayUITests"), + testScheme(name: "BroadwayCatalogTests"), + ], +) diff --git a/Shared/SnapshotKitTesting/AGENTS.md b/Shared/SnapshotKitTesting/AGENTS.md index ed024e5f1..62a64080d 100644 --- a/Shared/SnapshotKitTesting/AGENTS.md +++ b/Shared/SnapshotKitTesting/AGENTS.md @@ -32,6 +32,7 @@ Read the root [`AGENTS.md`](../../AGENTS.md) first. - **Keep PNG export hosted.** `captureSnapshotPNG` requires `StuffTestHost`'s key window and must not gain a headless renderer. - **Its `async` is load-bearing.** A synchronous `Snapshotting` pullback could never settle `.task`-driven content. - **Accessibility annotations use AccessibilitySnapshot's SwiftUI renderer.** Keep the focused `AccessibilitySnapshotCore` + `AccessibilitySnapshotPreviews` products. +- **Keep annotation padding’s safe-area insets at zero.** Subject clearance belongs to the captured root; guard centered-content outline alignment. - **Raised-floor accessibility captures parse twice.** Settle between passes and keep only the second render (`AccessibilitySnapshotViewControllerTests`). - **The umbrella also links the upstream SnapshotTesting integration that this module replaces.** - **The compare sees on-disk bytes.** Every capture round-trips through PNG encoding before comparison. @@ -60,7 +61,11 @@ Read the root [`AGENTS.md`](../../AGENTS.md) first. - **When they were one function, this module's own tests put a fabricated reference at the top of `./test --review`.** Its numbers were borrowed from a real regression. - **Five invented captures also landed in `--timings`.** Then a run that captured nothing reported "5 captures, 0.024s per image". - **Read display bounds and scale from the marked test-host window.** Never select a process-global main screen. -- **Isolate synthetic captures from the physical scene.** Detach the marked window during an inset-overridden capture, resize it with the content, then restore its scene, frames, visibility, and key state. +- **Keep the scene only for fixed, regular-width phone captures with inset overrides.** Resolve the predicate from the content controller’s traits before hosting. +- **Detach already-mounted subjects before configuring the capture host.** For fixed captures, subtract the resized host controller’s native insets from the requested clearance. +- **Override only the captured root’s safe-area getter.** Native controller insets own ancestor propagation; root pinning preserves translated tile geometry. +- **Detach other synthetic captures, including compact phones, tablets, and full content.** Resize the marked window with the content. +- **Restore the scene, frames, insets, visibility, and key state after every capture.** Guard: `SnapshotImageRenderingTests`. - **Keep native geometry when the inset override is nil.** Synthetic captures do not validate Duo system bars or reserved-region delivery. - **Inset overrides describe content clearance.** Propagate them through the host controller. Native floating bars can retain system positioning; validate their reserved-region clearance on the native runtime. - **Guards:** `SnapshotImageRenderingTests` checks restoration after success and failure. `LargeViewCaptureTests` checks full searchable content and search placement. diff --git a/Shared/SnapshotKitTesting/README.md b/Shared/SnapshotKitTesting/README.md index 09fb13984..1629712f2 100644 --- a/Shared/SnapshotKitTesting/README.md +++ b/Shared/SnapshotKitTesting/README.md @@ -288,3 +288,69 @@ emits one timing line that includes time spent on failed attempts. `StuffTestHost`, reached via `TestHostSupport`). - Device/OS-pinned: reference images are captured on a fixed simulator (this repo's CI uses the defaults and runtime pins in `Project.swift` and `test`). +<<<<<<< HEAD +======= +- Timezone-pinned: references bake wall-clock dates/times into pixels, so the + snapshot scheme pins `TZ` (and the runner verifies it via + `SNAPSHOT_EXPECTED_TIMEZONE`) — see `testScheme` in `Project.swift`. + +## Component comparison sheets + +Use `SnapshotCase.cutsheet(name:configurations:panels:)` to capture the same +component state across consumer-defined appearances. Each `SnapshotPanel` has a +stable typed identity, a display label, and a lazy content builder. Build fresh +fixture state inside that builder. Each configuration produces one two-column +sheet with unscaled, independently hosted panels. Additional panels wrap to new rows. + +The consumer chooses the reference group; Where's theme helper selects `themes`. +The runner stores one PNG with a versioned panel map in its Description metadata. +Each panel uses the ordinary image comparator and its own pixel budget. The complete +sheet also guards headings and spacing. Membership, labels, dimensions, and missing +or malformed metadata fail explicitly. Review the PNG before recording. Preserve +its metadata when copying references; image optimizers that strip metadata invalidate +cutsheet references. + +Single views and cutsheets share configured capture and reference recording helpers. +Each panel's hosting view uses the sheet's fixed white background, including in dark mode. +This fills transparent margins without changing component layout. A component's own background remains visible above it. +Panels retain independent settling and fresh fixtures. The runner compares panels +before assembling their captured images in a SwiftUI `Grid`. SwiftUI lays out labels +and images; geometry observations supply the embedded panel map. The shared hosted +renderer captures the grid. The original component views run only for their independent +captures. All failing panels appear in the verdict, subject to the existing recording policy. + +Ordinary cases accept an optional `SnapshotReferenceGroup`. The default keeps +existing paths. Groups are stable lowercase slugs owned by the consumer; they do +not change configuration identifiers. Special traits use `other/` inside the group. +Use component sheets for appearance coverage and keep screen variants for critical +integration or materially different composition. Preview sheets approximate layout; +the hosted test capture remains authoritative. + +The runner reads SnapshotKit's `Capture` SPI and switches exhaustively between +single-view and cutsheet captures. Panel collections are validated before capture. +No empty-array fallback selects the single-view path. + +## Adaptive containers + +The runner applies each frame's layout traits before mounting its content. +It reads fallback width and display scale from the marked test host window. +Each configuration invokes the content builder again. Models captured outside that builder still need separate fixtures and hooks. +See [SnapshotKit's adaptive container contract](../SnapshotKit/README.md#adaptive-containers) for viewport coverage and measured device profiles. + +Fixed, regular-width phone captures retain their scene so native bar heights stay stable during settlement. +The pipeline selects this path from the content controller’s layout traits before hosting. +Other synthetic captures detach the marked window. This prevents physical reserved regions from truncating compact titles and keeps full-content search anchored to expanded content. +For fixed captures, the pipeline subtracts the resized host controller’s native insets from the requested clearance. +It detaches already-mounted subjects before configuring the capture host. +Only the captured root overrides its safe-area getter. Native controller insets supply ancestor clearance; root pinning preserves translated tile geometry. +Annotation padding has zero safe-area insets so image content and accessibility outlines share the same layout. +The host controller propagates the configured content insets through native navigation containers. + +The pipeline restores the scene, frames, additional insets, visibility, and key state after success or failure. +Window discovery, environment checks, and content preparation run under the same capture lock. +Capture hooks use their retained model or view references while the window is detached. + +A nil safe-area override retains native scene geometry. +Synthetic captures validate composition and complete content. Native floating bars can retain system positioning despite custom content insets. +Native Duo checks validate their clearance and reserved-region delivery. +>>>>>>> 02f3c090 (Stabilize synthetic capture geometry and accessibility outlines) diff --git a/Shared/SnapshotKitTesting/Sources/AccessibilitySnapshotViewController.swift b/Shared/SnapshotKitTesting/Sources/AccessibilitySnapshotViewController.swift index 7f807477c..7bde7f7b3 100644 --- a/Shared/SnapshotKitTesting/Sources/AccessibilitySnapshotViewController.swift +++ b/Shared/SnapshotKitTesting/Sources/AccessibilitySnapshotViewController.swift @@ -81,6 +81,12 @@ final class AccessibilitySnapshotViewController: UIViewController { private final class InsetView: UIView { private static let inset: CGFloat = 8 + /// This wrapper adds annotation padding, not device clearance. Native insets + /// here can move centered content between image rendering and marker parsing. + override var safeAreaInsets: UIEdgeInsets { + .zero + } + init(content: UIView) { let frame = content.frame.inset( by: UIEdgeInsets( diff --git a/Shared/SnapshotKitTesting/Sources/SafeAreaInsetsSwizzling.swift b/Shared/SnapshotKitTesting/Sources/SafeAreaInsetsSwizzling.swift index a9f27238a..db0aeb550 100644 --- a/Shared/SnapshotKitTesting/Sources/SafeAreaInsetsSwizzling.swift +++ b/Shared/SnapshotKitTesting/Sources/SafeAreaInsetsSwizzling.swift @@ -5,14 +5,14 @@ import UIKit /// instead of the host simulator's device insets. This decouples the image from /// the physical simulator (notch / home indicator). Unswizzled in all paths. /// -/// Only the captured root and its ancestors (the capture scaffolding up to the -/// window) report the override; views *inside* the hosted tree keep the native -/// implementation. UIKit composes safe areas root-down, so the interior sees the -/// zeroed device insets from our root **plus** everything legitimately layered on -/// mid-tree — navigation-bar overlap, `safeAreaInset` accessories, a VC's -/// `additionalSafeAreaInsets`. Two earlier designs failed here: +/// Only the captured root reports the override. The host controller supplies +/// native insets through `additionalSafeAreaInsets`; ancestors and descendants +/// keep their native getters. Overriding ancestors applies nonzero insets twice +/// when full-content measurement rehosts a navigation container. +/// Root pinning keeps translated tiles from acquiring artificial safe areas. +/// Two earlier designs failed here: /// -/// - Returning the override for **every** in-tree view erased those interior +/// - Returning the override for **every** in-tree view erased interior /// contributions, so scroll content laid out flush under floating bars (a /// summary screen crammed its text into the bar blur). /// - Geometrically re-deriving the root's safe rect per view produced phantom @@ -82,12 +82,9 @@ extension UIView { return _overrideSafeAreaInsets } - // The captured root and the scaffolding above it report the override; - // everything inside the tree keeps the native implementation (which, - // after the method exchange, *is* `snapshotKitOverriddenSafeAreaInsets`) - // so interior contributions — bars, `safeAreaInset` accessories, - // `additionalSafeAreaInsets` — still compose on top of the zeroed base. - if self === testedView || testedView.isDescendant(of: self) { + // Pin the root during tile translation. Native getters on both sides + // of this boundary preserve controller insets and interior accessories. + if self === testedView { return _overrideSafeAreaInsets } return snapshotKitOverriddenSafeAreaInsets diff --git a/Shared/SnapshotKitTesting/Sources/SnapshotImageRendering.swift b/Shared/SnapshotKitTesting/Sources/SnapshotImageRendering.swift index a8990ec8e..983835926 100644 --- a/Shared/SnapshotKitTesting/Sources/SnapshotImageRendering.swift +++ b/Shared/SnapshotKitTesting/Sources/SnapshotImageRendering.swift @@ -269,6 +269,13 @@ func renderSnapshotCaptureLocked( settleTimeoutPolicy: SnapshotSettleTimeoutPolicy, timing: SnapshotCaptureTiming, ) async throws -> SnapshotCapture { + let initialContentFrame = viewController.view.frame + // Reparent before configuring the host so an existing hierarchy cannot apply + // the requested insets once before and once after capture hosting. + if viewController.parent != nil || viewController.view.superview != nil { + removeChildAfterCapture(viewController) + } + func capture() async throws -> SnapshotCapture { guard let hostRoot = window.rootViewController else { preconditionFailure( @@ -276,7 +283,6 @@ func renderSnapshotCaptureLocked( ) } - let initialContentFrame = viewController.view.frame let initialScene = window.windowScene let initialKeyWindow = initialScene?.keyWindow let initialWindowFrame = window.frame @@ -304,17 +310,23 @@ func renderSnapshotCaptureLocked( UIView.setAnimationsEnabled(animationsWereEnabled) } - // iOS 27.1 anchors native search chrome to the scene's physical display, - // even when the window and every child have a larger synthetic frame. - // Isolate the marked host window for this serialized capture, retaining - // its appeared root and restoring its scene on success and failure. - // A nil inset override requests native scene geometry instead. if let safeAreaInsets { - window.windowScene = nil - window.makeKeyAndVisible() - // UIKit containers propagate these insets through their controller - // hierarchy; a root UIView getter override alone covers SwiftUI only. - hostRoot.additionalSafeAreaInsets = safeAreaInsets + // Regular-width phone bars require a scene to keep their height stable. + // Other synthetic layouts detach so physical reserved regions cannot + // truncate their titles or move controls into overflow. + let retainsScene: Bool = if case .fixed = sizing { + viewController.traitCollection.horizontalSizeClass == .regular + && viewController.traitCollection.userInterfaceIdiom == .phone + } else { false } + if !retainsScene { + window.windowScene = nil + window.makeKeyAndVisible() + } + if case .fixed = sizing { + hostRoot.additionalSafeAreaInsets = .zero + } else { + hostRoot.additionalSafeAreaInsets = safeAreaInsets + } } // Set on the content controller itself (not a wrapper) so it survives @@ -325,6 +337,17 @@ func renderSnapshotCaptureLocked( if case .fixed = sizing { resizeHostWindow(window, root: hostRoot, to: initialContentFrame.size) + if let safeAreaInsets { + // The native controller can retain clearance even with no scene. + // Match its effective inset to the captured root's getter override. + let nativeInsets = hostRoot.view.safeAreaInsets + hostRoot.additionalSafeAreaInsets = UIEdgeInsets( + top: safeAreaInsets.top - nativeInsets.top, + left: safeAreaInsets.left - nativeInsets.left, + bottom: safeAreaInsets.bottom - nativeInsets.bottom, + right: safeAreaInsets.right - nativeInsets.right, + ) + } } try await resolveContentSize( diff --git a/Shared/SnapshotKitTesting/Tests/AccessibilitySnapshotViewControllerTests.swift b/Shared/SnapshotKitTesting/Tests/AccessibilitySnapshotViewControllerTests.swift index 4970b3e5a..0299e0c2a 100644 --- a/Shared/SnapshotKitTesting/Tests/AccessibilitySnapshotViewControllerTests.swift +++ b/Shared/SnapshotKitTesting/Tests/AccessibilitySnapshotViewControllerTests.swift @@ -1,10 +1,48 @@ @_spi(Testing) import SnapshotKitTesting +import SwiftUI import TestHostSupport import Testing import UIKit @MainActor struct AccessibilitySnapshotViewControllerTests { + @Test func annotationsStayAlignedWithCenteredNavigationContent() async throws { + let configuration = SnapshotConfiguration(device: .iPad) + let host = UIHostingController(rootView: CenteredAccessibilityFixture()) + configuration.applyTraits(to: host) + host.view.frame = CGRect(x: 0, y: 0, width: 834, height: 1194) + let image = try await renderSnapshotImage( + of: host, + named: "centered-accessibility-alignment", + sizing: .intrinsic(width: 834, minimumHeight: 1194), + safeAreaInsets: .zero, + isAccessibility: true, + settle: .settledAtLeast(minDuration: 0.25), + ) + + // Find the black card independently of the accessibility overlay. A shifted + // overlay tints the white space just above or below the actual card. + let x = (834.0 / 2 + 8) / image.size.width + let darkRows = (0 ..< Int(image.size.height)).filter { row in + let pixel = image.probePixel(atUnitPoint: CGPoint( + x: x, + y: CGFloat(row) / image.size.height, + )) + return max(pixel.red, pixel.green, pixel.blue) < 0.4 + } + #expect(darkRows.count >= 110) + let first = try #require(darkRows.first) + let last = try #require(darkRows.last) + for row in [first - 5, last + 5] { + let pixel = image.probePixel(atUnitPoint: CGPoint( + x: x, + y: CGFloat(row) / image.size.height, + )) + #expect(abs(pixel.red - pixel.blue) < 0.03) + #expect(min(pixel.red, pixel.green, pixel.blue) > 0.8) + } + } + @Test func reparsesAfterContentEntersTheWindow() async throws { try waitFor { hostKeyWindow() != nil } let content = WindowAttachmentProbeView(frame: CGRect(x: 0, y: 0, width: 100, height: 200)) @@ -54,3 +92,22 @@ private final class WindowAttachmentProbeView: UIView { } } } + +private struct CenteredAccessibilityFixture: View { + var body: some View { + NavigationStack { + ScrollView { + Button {} label: { + Color.black.frame(width: 300, height: 120) + } + .buttonStyle(.plain) + .accessibilityLabel("Centered card") + .padding(16) + .frame(maxWidth: .infinity) + } + .defaultScrollAnchor(.center, for: .alignment) + .background(.white) + .navigationBarTitleDisplayMode(.inline) + } + } +} diff --git a/Shared/SnapshotKitTesting/Tests/SafeAreaCompositionTests.swift b/Shared/SnapshotKitTesting/Tests/SafeAreaCompositionTests.swift index 5deafee1d..d1d90bb34 100644 --- a/Shared/SnapshotKitTesting/Tests/SafeAreaCompositionTests.swift +++ b/Shared/SnapshotKitTesting/Tests/SafeAreaCompositionTests.swift @@ -17,7 +17,7 @@ import UIKit /// such contributions; this pins that it doesn't. @MainActor struct SafeAreaCompositionTests { - @Test func nativeNavigationPropagatesIndependentContentInsets() async throws { + @Test func fullContentNavigationPropagatesIndependentContentInsets() async throws { try waitFor { hostKeyWindow() != nil } let screen = NavigationStack { List { Text("History") } @@ -33,6 +33,7 @@ struct SafeAreaCompositionTests { _ = try await renderSnapshotImage( of: host, named: "native-asymmetric-insets", + sizing: .intrinsic(width: 402, minimumHeight: 874), safeAreaInsets: insets, onReadyToSnapshot: { @MainActor func navigationControllers(in controller: UIViewController) diff --git a/Shared/SnapshotKitTesting/Tests/SnapshotImageRenderingTests.swift b/Shared/SnapshotKitTesting/Tests/SnapshotImageRenderingTests.swift index 995a0d7e2..2164438fe 100644 --- a/Shared/SnapshotKitTesting/Tests/SnapshotImageRenderingTests.swift +++ b/Shared/SnapshotKitTesting/Tests/SnapshotImageRenderingTests.swift @@ -1,4 +1,4 @@ -import SnapshotKitTesting +@_spi(Testing) import SnapshotKitTesting import SwiftUI import TestHostSupport import Testing @@ -6,6 +6,124 @@ import UIKit @MainActor struct SnapshotImageRenderingTests { + @Test func fixedViewportPreservesNativeTitleSpace() async throws { + let host = UIHostingController(rootView: NavigationStack { + Color.white + .navigationTitle("Calendar") + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .topBarTrailing) { + Button("Overview", systemImage: "square.grid.3x3", action: {}) + } + ToolbarItem(placement: .topBarTrailing) { + Button("Planning", systemImage: "calendar.badge.clock", action: {}) + } + } + }) + SnapshotConfiguration(device: .iPhone).applyTraits(to: host) + host.view.frame = CGRect(x: 0, y: 0, width: 402, height: 874) + _ = try await renderSnapshotImage( + of: host, + named: "native-title-space", + safeAreaInsets: .zero, + onReadyToSnapshot: { + Self.expectUntruncatedTitle(in: host.view) + }, + ) + } + + private static func expectUntruncatedTitle(in view: UIView) { + func labels(in view: UIView) -> [UILabel] { + (view as? UILabel).map { [$0] } ?? view.subviews.flatMap { labels(in: $0) } + } + let titles = labels(in: view).filter { $0.text == "Calendar" } + #expect(!titles.isEmpty) + for title in titles { + #expect(title.bounds.width >= title.intrinsicContentSize.width - 1) + } + } + + @Test func fixedViewportSettlementPreservesNativeBarGeometry() async throws { + let configuration = SnapshotConfiguration(device: .duoInnerPortrait) + let probe = NativeBarGeometryProbe() + let host = UIHostingController(rootView: NativeBarGeometryFixture(probe: probe) + .snapshotTraits(configuration)) + configuration.applyTraits(to: host) + guard case let .fixed(size) = configuration.device.size else { + Issue.record("The Duo viewport must use fixed sizing") + return + } + host.view.frame = CGRect(origin: .zero, size: size) + _ = try await renderSnapshotImage( + of: host, + named: "native-bar-geometry", + safeAreaInsets: configuration.device.safeAreaInsets.uiEdgeInsets, + settle: .settledAtLeast(minDuration: 1.5), + onReadyToSnapshot: { + probe.begin() + let outcome = await settleContent(host.view, named: "native-bar-geometry-proof") + probe.end() + #expect(outcome == .settled) + #expect(!probe.measurements.isEmpty) + #expect(probe.measurements.allSatisfy { $0 == probe.measurements.first }) + Self.expectUntruncatedTitle(in: host.view) + }, + ) + } + + @Test( + arguments: [UIEdgeInsets.zero, UIEdgeInsets(top: 5, left: 7, bottom: 9, right: 11)], + Attachment.allCases, + ) + func fixedViewportPropagatesInsetsToNativeChildren( + requestedInsets: UIEdgeInsets, + attachment: Attachment, + ) async throws { + for horizontalSizeClass in [UIUserInterfaceSizeClass.compact, .regular] { + try waitFor { hostKeyWindow() != nil } + let window = try #require(hostKeyWindow()) + let root = try #require(window.rootViewController) + let host = UIViewController() + host.traitOverrides.userInterfaceIdiom = .phone + host.traitOverrides.horizontalSizeClass = horizontalSizeClass + host.traitOverrides.verticalSizeClass = .regular + let originalFrame = CGRect(origin: CGPoint(x: 13, y: 17), size: window.bounds.size) + host.view.frame = originalFrame + let child = UIViewController() + host.addChild(child) + child.view.frame = host.view.bounds + child.view.autoresizingMask = [.flexibleWidth, .flexibleHeight] + host.view.addSubview(child.view) + child.didMove(toParent: host) + switch attachment { + case .none: break + case .controller: + root.addChild(host) + root.view.addSubview(host.view) + host.didMove(toParent: root) + case .view: + root.view.addSubview(host.view) + } + root.view.layoutIfNeeded() + _ = try await renderSnapshotImage( + of: host, + named: "native-child-insets", + safeAreaInsets: requestedInsets, + settle: .settled, + onReadyToSnapshot: { + #expect(child.view.safeAreaInsets == requestedInsets) + }, + ) + #expect(host.view.frame == originalFrame) + #expect(host.parent == nil) + #expect(host.view.superview == nil) + } + } + + enum Attachment: CaseIterable { + case none, controller, view + } + @Test func aNilInsetOverrideKeepsTheNativeScene() async throws { try waitFor { hostKeyWindow() != nil } let window = try #require(hostKeyWindow()) @@ -29,6 +147,25 @@ struct SnapshotImageRenderingTests { @Test(arguments: [false, true], [false, true]) func restoresTheMarkedWindowAfterCapture(fails: Bool, anotherWindowIsKey: Bool) async throws { + for layout in CaptureLayout.allCases { + try await verifyWindowRestoration( + fails: fails, + anotherWindowIsKey: anotherWindowIsKey, + layout: layout, + ) + } + } + + private enum CaptureLayout: CaseIterable { + case compactViewport, regularViewport, fullContent + } + + private func verifyWindowRestoration( + fails: Bool, + anotherWindowIsKey: Bool, + layout: CaptureLayout, + ) async throws { + let intrinsic = layout == .fullContent try waitFor { hostKeyWindow() != nil } let window = try #require(hostKeyWindow()) let scene = try #require(window.windowScene) @@ -52,19 +189,27 @@ struct SnapshotImageRenderingTests { let wasHidden = window.isHidden let animationsWereEnabled = UIView.areAnimationsEnabled let host = UIHostingController(rootView: Color.red) + host.traitOverrides.userInterfaceIdiom = .phone + host.traitOverrides.horizontalSizeClass = layout == .regularViewport ? .regular : .compact + host.traitOverrides.verticalSizeClass = .regular let additionalInsets = UIEdgeInsets(top: 5, left: 7, bottom: 9, right: 11) host.additionalSafeAreaInsets = additionalInsets let contentFrame = CGRect(x: 0, y: 0, width: 280, height: 400) host.view.frame = contentFrame + let readiness: (@MainActor @Sendable () async throws -> Void)? = if fails { + { throw WindowRestorationFailure.readiness } + } else { nil } do { _ = try await renderSnapshotImage( of: host, named: "window-restoration", - onReadyToMeasure: fails ? {} : nil, + sizing: intrinsic ? .intrinsic(width: 280, minimumHeight: 400) : .fixed, + onReadyToMeasure: readiness, settle: .immediate, onReadyToSnapshot: { - #expect(window.windowScene == nil) + if layout == .regularViewport { #expect(window.windowScene === scene) } + else { #expect(window.windowScene == nil) } #expect(host.view.window === window) #expect(window.bounds.size == contentFrame.size) }, @@ -72,9 +217,13 @@ struct SnapshotImageRenderingTests { #expect(!fails) } catch { #expect(fails) - #expect(error as? SnapshotRenderingError == .measurementHookRequiresIntrinsicSizing( - name: "window-restoration", - )) + if intrinsic { + #expect(error as? WindowRestorationFailure == .readiness) + } else { + #expect(error as? SnapshotRenderingError == .measurementHookRequiresIntrinsicSizing( + name: "window-restoration", + )) + } } #expect(hostKeyWindow() === window) @@ -93,3 +242,91 @@ struct SnapshotImageRenderingTests { #expect(root.children.isEmpty) } } + +@MainActor +private final class NativeBarGeometryProbe { + struct Measurement: Equatable { + let size: CGSize + let topInset: CGFloat + let bottomInset: CGFloat + } + + private var latest: Measurement? + private var isRecording = false + private(set) var measurements: [Measurement] = [] + + func record(_ measurement: Measurement) { + guard measurement.size.width > 0, measurement.size.height > 0 else { return } + latest = measurement + if isRecording { measurements.append(measurement) } + } + + func begin() { + measurements = latest.map { [$0] } ?? [] + isRecording = true + } + + func end() { + isRecording = false + } +} + +private struct NativeBarGeometryFixture: View { + let probe: NativeBarGeometryProbe + @State private var position = ScrollPosition(idType: Int.self) + + var body: some View { + TabView { + Tab("History", systemImage: "calendar") { + NavigationSplitView(columnVisibility: .constant(.all)) { + Text("Controls") + .navigationSplitViewColumnWidth(min: 280, ideal: 280) + } detail: { + NavigationStack { + ScrollView { + VStack { + ForEach(0 ..< 12, id: \.self) { month in + Text("Month \(month)") + .frame(maxWidth: .infinity) + .frame(height: 240) + .background(.blue.opacity(0.2)) + .id(month) + } + } + .scrollTargetLayout() + .padding() + } + .scrollPosition($position) + .task { position.scrollTo(id: 11, anchor: .bottom) } + .onScrollGeometryChange(for: NativeBarGeometryProbe.Measurement.self) { + .init( + size: $0.containerSize, + topInset: $0.contentInsets.top, + bottomInset: $0.contentInsets.bottom, + ) + } action: { _, measurement in + probe.record(measurement) + } + .navigationTitle("Calendar") + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .topBarTrailing) { + Button("Overview", systemImage: "square.grid.3x3", action: {}) + } + ToolbarItem(placement: .topBarTrailing) { + Button("Planning", systemImage: "calendar.badge.clock", action: {}) + } + } + } + } + .navigationSplitViewStyle(.balanced) + } + Tab("Other", systemImage: "gear") { Color.gray } + } + .tabBarMinimizeBehavior(.never) + } +} + +private enum WindowRestorationFailure: Error, Equatable { + case readiness +} diff --git a/Tools/README.md b/Tools/README.md index 3f015901f..0793c7c9d 100644 --- a/Tools/README.md +++ b/Tools/README.md @@ -99,3 +99,118 @@ Tests use the same module imports without changing Python's search path. The [Astro project](InstallerKit/Site/README.md) owns routes, components, and styles. [Where's distribution guide](../Where/DISTRIBUTION.md) owns its signing setup and device validation. +## Documentation-only CI + +[`ci_changes.py`](ci_changes.py) owns the shared documentation policy for GitHub Actions and CircleCI. +It compares the complete PR from its merge base to the event's head commit. +Regular `.md` and `.markdown` files qualify, including mixed-case extensions and nested paths. +The classifier excludes executable files, symlinks, and Markdown in directories that contain build inputs, rendered content, or fixtures. +`INPUT_DIRECTORIES` in the classifier owns those exclusions. + +The Git diff includes additions, edits, deletions, and both paths of a rename. +It has no API file-count limit. +A later documentation commit cannot hide an earlier code change in the PR. +An empty diff, unavailable history, or classification error selects full CI and prints the reason. +Main pushes and manual runs always select full CI. +The existing `NO-CI` title marker remains available for prototypes. + +GitHub runs one Linux classification job and skips the existing required jobs for documentation-only PRs. +If classification fails, those jobs run. +The workflow retains its triggers and required job names. +Workflow-level path filters can leave required checks pending, so selection uses job conditions. +See [GitHub's conditional-job behavior](https://docs.github.com/en/actions/how-tos/write-workflows/choose-when-workflows-run/control-jobs-with-conditions). + +CircleCI starts with [`.circleci/config.yml`](../.circleci/config.yml) on Linux. +[`ci_circleci.py`](ci_circleci.py) passes the decision to [`.circleci/continue.yml`](../.circleci/continue.yml) through the continuation API. +Documentation-only PRs complete the existing `iOS CI` workflow with a small Linux job. +Other PRs retain the existing macOS build and test graph. +Installer and Flyover publication retain their event gates, parameters, and signing boundaries. +If setup fails before publication starts, both controllers stop on the next poll and report failure. +The setup and continuation configurations declare the same original parameters. The continuation request passes only the new classification parameter. + +This flow requires CircleCI's dynamic configuration setting, which new projects enable by default. +After a setup failure, trigger a new pipeline. CircleCI does not permit continuation twice for the same pipeline. +See [CircleCI's dynamic configuration requirements](https://circleci.com/docs/guides/orchestrate/dynamic-config/). + +The focused regression command covers Git history, command output, continuation failures, and required-check wiring: + +```bash +python3 -m unittest Tools.Tests.test_ci_changes Tools.Tests.test_ci_circleci Tools.Tests.test_ci_workflows Tools.Tests.test_flyover_workflows +``` + +## Worktree cleanup + +`./worktree --cleanup` removes the current checkout's DerivedData and registered simulator. +It attempts both operations. If either operation fails, the command reports failure. +Add `--dry-run` to preview cache removal and the simulator command without changes. + +`./worktree --prune-derived-data` removes caches for absent Codex worktrees of this repository. +It recognizes `$CODEX_HOME/worktrees`, `~/.codex/worktrees`, and the older `~/.codex-workspaces/worktrees` location. +It requires an available worktree root and preserves existing checkouts, even when their generated workspace is absent. +Add `--dry-run` to preview removal. Both modes accept `--derived-data-root PATH` for a custom cache location. +The default location is `~/Library/Developer/Xcode/DerivedData`. + +`worktree_cleanup.py` reads each cache's `info.plist` and matches its absolute `WorkspacePath` to the checkout. +Root-level projects, workspaces, and workspaces embedded in root-level projects are supported. +Ownership paths with `..` components are rejected before normalization. +Cache names alone never establish ownership. Shared caches and caches without usable metadata remain untouched. +Before removal, the command checks the directory identity, metadata, and resolved checkout ownership again. +The orphan sweep also checks that the checkout is still absent. +It reports parse errors, skipped repository caches, and removal failures on stderr. + +Before cleanup, stop builds for the affected checkouts. +Keep checkout and cache paths stable until cleanup finishes. +Validation and deletion are separate operations. +The command does not coordinate concurrent builds, checkout restoration, or path changes. + +## Snapshot shard policy + +Suite discovery reads each target's literal source array in `Project.swift`. +Arrays can span lines and include shared support files. Only `SnapshotTests/**` +paths define suite roots. Unsupported declarations fail before shard selection. + +`snapshot_shards.py` keeps weekly assignments stable. Its bounded greedy search +places intake first, then stops existing-suite moves at a 5% reduction in the +slowest worker. If single-suite moves cannot reach that target, it discards them. +It does not search swaps or claim a globally minimal number of moves. +Explicit shard-count changes retain full longest-processing-time balancing. +The balance command emits a JSON report on stdout and diagnostics on stderr; +only version and assignments are persisted. Legacy plans containing timing +metadata remain readable. No-op writes preserve their original bytes. +The [rebalance skill](../.agents/skills/rebalance-snapshot-shards/SKILL.md) +owns sample selection and publication. + +## Testing + +Install the site dependencies before the retained installer tests or snapshot builds: + +```bash +mise exec -- npm ci +``` + +```bash +python3 -m unittest discover -s Tools/Tests -p 'test_*.py' +mise exec -- ruby -I Tools/Tests -e 'Dir["Tools/Tests/**/*_test.rb"].sort.each { |file| require File.expand_path(file) }' +``` + +These Python and Ruby tests must not require Xcode, Java/TLC, networking, or the developer's real +repository state. Add shared fixtures under `Tools/Tests/Fixtures`; otherwise +create the smallest useful input in the test's temporary directory. + +The install site's image tests run on the pinned iOS simulator: + +```bash +./test ToolsSnapshotTests --review +``` + +Each build runs [the fixture generator](Tests/Fixtures/installer_update_site_snapshots.py) +against the production Astro build. The bundle loads those pages in offline +`WKWebView` instances through `SnapshotKitTesting.assertHTMLSnapshots`. +The generator inlines the emitted CSS and artwork for offline capture. +References cover the main-build homepage, app PR pages, release details, unavailable commit history, +retired channels, an empty catalog, and missing artwork and metadata on iPhone and iPad in both appearances. +They use the existing LFS references, snapshot scheme, and CI shard discovery. + +[`ADVERSARIAL_TEST_PLAN.md`](ADVERSARIAL_TEST_PLAN.md) records the public +behavior contracts, portability matrix, destructive-operation boundaries, and +mutation review used to accept changes to these tools. From c6a6013f6394c132c5e0bfcc095c8f746d7eaaac Mon Sep 17 00:00:00 2001 From: Kyle Van Essen Date: Mon, 9 Nov 2026 14:56:03 -0500 Subject: [PATCH 06/12] Reconcile snapshot foundation with main tooling and complete documentation --- Shared/SnapshotKitTesting/README.md | 5 - .../Settings/DevicesSettingsView.swift | 48 ++ flaky | 213 +++++ profile | 321 ++++++++ simulator | 443 +++++++++++ test | 744 ++++++++++++++++++ 6 files changed, 1769 insertions(+), 5 deletions(-) diff --git a/Shared/SnapshotKitTesting/README.md b/Shared/SnapshotKitTesting/README.md index 1629712f2..b8c71a9fd 100644 --- a/Shared/SnapshotKitTesting/README.md +++ b/Shared/SnapshotKitTesting/README.md @@ -109,8 +109,6 @@ The fixed anchor detects cumulative motion that exceeds one unit within the quie It cannot distinguish slower motion inside that allowance from noise, or detect detail lost at the sample resolution. Readiness hooks and measured minimum durations remain necessary for asynchronous content and native glass adaptation. Final reference comparisons keep their existing tolerances and use the full capture after PNG encoding and decoding. -Ordinary assertions reuse those PNG bytes for comparison, diagnostics, and recording. -Comparison sheets encode a new PNG after composition to include their panel map. ## Quick start @@ -288,8 +286,6 @@ emits one timing line that includes time spent on failed attempts. `StuffTestHost`, reached via `TestHostSupport`). - Device/OS-pinned: reference images are captured on a fixed simulator (this repo's CI uses the defaults and runtime pins in `Project.swift` and `test`). -<<<<<<< HEAD -======= - Timezone-pinned: references bake wall-clock dates/times into pixels, so the snapshot scheme pins `TZ` (and the runner verifies it via `SNAPSHOT_EXPECTED_TIMEZONE`) — see `testScheme` in `Project.swift`. @@ -353,4 +349,3 @@ Capture hooks use their retained model or view references while the window is de A nil safe-area override retains native scene geometry. Synthetic captures validate composition and complete content. Native floating bars can retain system positioning despite custom content insets. Native Duo checks validate their clearance and reserved-region delivery. ->>>>>>> 02f3c090 (Stabilize synthetic capture geometry and accessibility outlines) diff --git a/Where/WhereUI/Sources/Settings/DevicesSettingsView.swift b/Where/WhereUI/Sources/Settings/DevicesSettingsView.swift index c18c38ce1..7bcc7abc6 100644 --- a/Where/WhereUI/Sources/Settings/DevicesSettingsView.swift +++ b/Where/WhereUI/Sources/Settings/DevicesSettingsView.swift @@ -152,3 +152,51 @@ extension DevicesSettingsView: SettingsSection { whereSnapshot( name: "Default", configurations: .fullContentScreenRepresentative, + onReadyToSnapshot: { await session.start() }, + ) { + NavigationStack { + DevicesSettingsView( + session: session, + configurations: PreviewSupport.recordingDeviceConfigurations(), + ) + } + .environment(session) + .task { await session.start() } + } + whereSnapshot( + name: "PermissionRequiredRecordingOff", + configurations: .fullContentPhoneLightDark, + onReadyToSnapshot: { await permissionRequiredSession.start() }, + ) { + NavigationStack { + DevicesSettingsView( + session: permissionRequiredSession, + configurations: PreviewSupport.recordingDeviceConfigurations( + automaticRecordingEnabled: false, + ), + ) + } + .environment(permissionRequiredSession) + .task { await permissionRequiredSession.start() } + } + } + } + + #Preview { + DevicesSettingsView.snapshotPreviews + } +#endif + +#if DEBUG + extension DevicesSettingsView: WhereFlyoverProviding { + static let flyoverData = WhereFlyoverData.hosted( + DevicesSettingsView.self, + title: "Devices", + ) { world in + DevicesSettingsView( + session: world.session, + configurations: PreviewSupport.recordingDeviceConfigurations(), + ) + } + } +#endif diff --git a/flaky b/flaky index ae03518e8..e07bbf8c3 100755 --- a/flaky +++ b/flaky @@ -32,3 +32,216 @@ set -euo pipefail SUITE_RUNS=10 # Phase 1: how many times to run the full suite ITERATIONS=50 # Phase 2: how many times to tight-loop each suspect +DEVICE="iPhone 17" +OS="27.2" +SCHEME="Stuff-iOS-Tests" +RELAUNCH="YES" # fresh process per tight-loop iteration (-test-repetition-relaunch-enabled) +UPDATE=true # write FLAKY_TESTS.md (disable with --no-update) +TOP=1000000 # cap on how many flaky tests to list in the report/doc + +usage() { + cat <<'USAGE' +Usage: ./flaky [options] + +Detects flaky tests by running the suite repeatedly, then tight-looping the +tests that ever failed. Writes the findings (with flake counts) to +FLAKY_TESTS.md. Report only — it never fails on flaky tests. + +Options: + --suite-runs N Times to run the whole suite in phase 1 (default: 10) + --iterations M Times to tight-loop each suspect in phase 2 (default: 50) + --device NAME Simulator device name (default: "iPhone 17") + --os VERSION Simulator iOS version (default: "27.2") + --scheme NAME Scheme to test (default: "Stuff-iOS-Tests") + --relaunch YES|NO New process per tight-loop iteration (default: YES) + --no-update Print the report but don't write FLAKY_TESTS.md + --top N List at most N flaky tests (default: all) + -h, --help Show this help + +Examples: + ./flaky + ./flaky --suite-runs 3 --iterations 20 + ./flaky --no-update --top 10 +USAGE +} + +while [ $# -gt 0 ]; do + case "$1" in + --suite-runs) shift; SUITE_RUNS="${1:?--suite-runs requires a value}" ;; + --iterations) shift; ITERATIONS="${1:?--iterations requires a value}" ;; + --device) shift; DEVICE="${1:?--device requires a value}" ;; + --os) shift; OS="${1:?--os requires a value}" ;; + --scheme) shift; SCHEME="${1:?--scheme requires a value}" ;; + --relaunch) shift; RELAUNCH="${1:?--relaunch requires YES or NO}" ;; + --no-update) UPDATE=false ;; + --top) shift; TOP="${1:?--top requires a value}" ;; + -h|--help) usage; exit 0 ;; + *) echo "error: unknown option '$1' (see ./flaky --help)" >&2; exit 1 ;; + esac + shift +done + +cd "$(dirname "$0")" + +WORKSPACE="Stuff.xcworkspace" +# Boot the target up front and address it by UDID. This matters most here: a +# name-based `simctl`/destination can hit a same-named device on another +# runtime, and a device shared with another checkout can be installed to or +# erased mid-run — either way the `Application failed preflight checks (Busy)` / +# `Mach error -308` launch failures look exactly like the flakes this script +# hunts. `./simulator` hands back this checkout's own device (creating it the +# first time), which rules both out. +DESTINATION="platform=iOS Simulator,id=$(./simulator --device "$DEVICE" --os "$OS")" + +# Under Xcode's DerivedData rather than `$TMPDIR`, because the warm rebuild +# below depends on this surviving between runs: macOS sweeps unread files from +# `/var/folders/…/T` after ~3 days, taking package manifests with them, so a +# "warm" re-run would go cold or fail outright. Not in the checkout either — +# the repo's tree-walking scripts would descend into the vendored package +# sources. Suffixed per checkout; nothing prunes it, so delete by hand. +WORKDIR="$HOME/Library/Developer/Xcode/DerivedData/where-flaky-$(basename "$PWD")" +DERIVED="$WORKDIR/DerivedData" +BUILD_LOG="$WORKDIR/build.log" +SUITE_DIR="$WORKDIR/suite" +TIGHT_DIR="$WORKDIR/tight" +SUSPECTS="$WORKDIR/suspects.txt" +SUITE_COUNTS="$WORKDIR/suite_counts.json" +# The suite/tight run outputs are per-invocation; clear them so a re-run never +# mixes in stale results. DerivedData is deliberately kept for a warm rebuild. +rm -rf "$SUITE_DIR" "$TIGHT_DIR" "$SUSPECTS" "$SUITE_COUNTS" +mkdir -p "$WORKDIR" "$SUITE_DIR" "$TIGHT_DIR" + +rule() { printf '%s\n' "============================================================"; } + +echo "==> Regenerating project (tuist generate --no-open)" +mise exec -- tuist generate --no-open >/dev/null + +# Xcode does not expand the scheme's $(BUILT_PRODUCTS_DIR) environment value +# for command-line test runs. Resolve the concrete package-resource location, +# matching ./test and ./profile, so Bundle.module works in every test process. +TEST_RUN_ENV=() +BUILT_PRODUCTS_DIR="$(xcodebuild -showBuildSettings \ + -workspace "$WORKSPACE" \ + -scheme "$SCHEME" \ + -destination "$DESTINATION" \ + -derivedDataPath "$DERIVED" 2>/dev/null \ + | awk -F' = ' '/ BUILT_PRODUCTS_DIR = /{print $2; exit}')" +if [ -n "$BUILT_PRODUCTS_DIR" ]; then + TEST_RUN_ENV+=("TEST_RUNNER_PACKAGE_RESOURCE_BUNDLE_PATH=$BUILT_PRODUCTS_DIR") +else + echo "warning: could not resolve BUILT_PRODUCTS_DIR; package resource" \ + "bundle lookups will fall back to the linker's placement" >&2 +fi + +echo "==> Building for testing ($SCHEME) on $DEVICE / iOS $OS" +set +e +xcodebuild build-for-testing \ + -workspace "$WORKSPACE" \ + -scheme "$SCHEME" \ + -destination "$DESTINATION" \ + -derivedDataPath "$DERIVED" \ + >"$BUILD_LOG" 2>&1 +build_status=$? +set -e +if [ "$build_status" -ne 0 ]; then + echo "error: build failed (exit $build_status). Tail of $BUILD_LOG:" >&2 + tail -n 40 "$BUILD_LOG" >&2 + exit "$build_status" +fi + +# --------------------------------------------------------------------------- +# Phase 1 — run the whole suite SUITE_RUNS times. +# --------------------------------------------------------------------------- +echo +echo "==> Phase 1: running the full suite $SUITE_RUNS time(s)" +for i in $(seq 1 "$SUITE_RUNS"); do + rb="$SUITE_DIR/run_$i.xcresult" + log="$SUITE_DIR/run_$i.log" + rm -rf "$rb" + echo " - suite run $i/$SUITE_RUNS" + # Test failures are the whole point here, so don't let a non-zero exit abort + # the loop — we read the truth out of the .xcresult regardless. + set +e + env ${TEST_RUN_ENV[@]+"${TEST_RUN_ENV[@]}"} \ + xcodebuild test-without-building \ + -workspace "$WORKSPACE" \ + -scheme "$SCHEME" \ + -destination "$DESTINATION" \ + -derivedDataPath "$DERIVED" \ + -resultBundlePath "$rb" \ + -collect-test-diagnostics never \ + >"$log" 2>&1 + set -e + xcrun xcresulttool get test-results tests --path "$rb" >"$SUITE_DIR/run_$i.json" 2>>"$log" \ + || echo " warning: could not read results for suite run $i (see $log)" >&2 +done + +echo +echo "==> Analyzing suite runs" +# Build the suspect set (tests that failed in >=1 suite run) and per-test suite +# counts. Best-effort parse: warn and continue if the xcresult schema shifts. +python3 Tools/flaky_results.py analyze-suite \ + --suite-dir "$SUITE_DIR" --suspects "$SUSPECTS" --counts "$SUITE_COUNTS" + +# `grep -c` prints 0 *and* exits non-zero on no match, which would trip the +# `|| ...` fallback into appending a second count; count non-blank lines with +# awk instead so an empty/absent suspects file cleanly yields 0. +SUSPECT_COUNT=$(awk 'NF' "$SUSPECTS" 2>/dev/null | wc -l | tr -d '[:space:]') +SUSPECT_COUNT=${SUSPECT_COUNT:-0} + +# --------------------------------------------------------------------------- +# Phase 2 — tight-loop each suspect in isolation. +# --------------------------------------------------------------------------- +if [ "$SUSPECT_COUNT" -gt 0 ]; then + echo + echo "==> Phase 2: tight-looping $SUSPECT_COUNT suspect(s) $ITERATIONS time(s) each" + i=0 + while IFS= read -r id; do + [ -z "$id" ] && continue + i=$((i + 1)) + rb="$TIGHT_DIR/tight_$i.xcresult" + log="$TIGHT_DIR/tight_$i.log" + rm -rf "$rb" + echo " - [$i/$SUSPECT_COUNT] $id" + printf '%s\n' "$id" >"$TIGHT_DIR/tight_$i.id" + set +e + env ${TEST_RUN_ENV[@]+"${TEST_RUN_ENV[@]}"} \ + xcodebuild test-without-building \ + -workspace "$WORKSPACE" \ + -scheme "$SCHEME" \ + -destination "$DESTINATION" \ + -derivedDataPath "$DERIVED" \ + -only-testing:"$id" \ + -test-iterations "$ITERATIONS" \ + -test-repetition-relaunch-enabled "$RELAUNCH" \ + -resultBundlePath "$rb" \ + -collect-test-diagnostics never \ + >"$log" 2>&1 + set -e + xcrun xcresulttool get test-results tests --path "$rb" \ + >"$TIGHT_DIR/tight_$i.tests.json" 2>>"$log" || true + xcrun xcresulttool get test-results summary --path "$rb" \ + >"$TIGHT_DIR/tight_$i.summary.json" 2>>"$log" || true + done <"$SUSPECTS" +else + echo + echo "==> Phase 2: skipped (no suspects from phase 1)" +fi + +# --------------------------------------------------------------------------- +# Aggregate + report + write FLAKY_TESTS.md. +# --------------------------------------------------------------------------- +echo +rule +echo "FLAKY TEST REPORT" +rule +report_args=() +[ "$UPDATE" = true ] && report_args+=(--update) +python3 Tools/flaky_results.py report \ + --counts "$SUITE_COUNTS" --tight-dir "$TIGHT_DIR" \ + --suite-runs "$SUITE_RUNS" --iterations "$ITERATIONS" --top "$TOP" \ + --device "$DEVICE" --os "$OS" --relaunch "$RELAUNCH" \ + ${report_args[@]+"${report_args[@]}"} + +echo +echo "Logs and result bundles: $WORKDIR" diff --git a/profile b/profile index a0863b3e7..9a1eb84ee 100755 --- a/profile +++ b/profile @@ -34,3 +34,324 @@ set -euo pipefail # formatter-independent source of per-test timings. We still let Tuist own # project generation so a run always reflects the current manifests. +DEVICE="iPhone 17" +OS="27.2" +TOP=15 +TEST_THRESHOLD="0.1" # seconds — tests at/over this are flagged as hot spots +TC_THRESHOLD=100 # milliseconds — slow type-check warn threshold +DO_BUILD=true +DO_TESTS=true +DO_SNAPSHOTS=true +CI_SHAPE=false + +usage() { + cat <<'USAGE' +Usage: ./profile [options] + +Profiles Where's clean build and its test run — the unit-test bundles via the +Stuff-iOS-Tests scheme plus the image-snapshot suite via its standalone +StuffSnapshotTests scheme — then prints the hot spots. + +Options: + --build-only Only profile the build + --tests-only Only profile the tests + --no-snapshots Skip the StuffSnapshotTests leg (saves ~10-15 min) + --ci-shape Use separate cold DerivedData for unit and snapshot + jobs, matching CI topology (default shares products) + --device NAME Simulator device name (default: "iPhone 17") + --os VERSION Simulator iOS version (default: "27.2") + --top N How many slowest tests to list (default: 15) + --test-threshold SECS Flag tests at/over this many seconds (default: 0.1) + --typecheck-threshold MS Warn on type-check work over this many ms (default: 100) + -h, --help Show this help + +Examples: + ./profile + ./profile --tests-only --no-snapshots --top 25 --test-threshold 0.2 + ./profile --ci-shape + ./profile --device 'iPhone 17 Pro' --os 27.2 +USAGE +} + +while [ $# -gt 0 ]; do + case "$1" in + --build-only) DO_TESTS=false ;; + --tests-only) DO_BUILD=false ;; + --no-snapshots) DO_SNAPSHOTS=false ;; + --ci-shape) CI_SHAPE=true ;; + --device) shift; DEVICE="${1:?--device requires a value}" ;; + --os) shift; OS="${1:?--os requires a value}" ;; + --top) shift; TOP="${1:?--top requires a value}" ;; + --test-threshold) shift; TEST_THRESHOLD="${1:?--test-threshold requires a value}" ;; + --typecheck-threshold) shift; TC_THRESHOLD="${1:?--typecheck-threshold requires a value}" ;; + -h|--help) usage; exit 0 ;; + *) echo "error: unknown option '$1' (see ./profile --help)" >&2; exit 1 ;; + esac + shift +done + +cd "$(dirname "$0")" + +WORKSPACE="Stuff.xcworkspace" +SCHEME="Stuff-iOS-Tests" +SNAPSHOT_SCHEME="StuffSnapshotTests" +# Boot the target up front and address it by UDID: a cold simulator otherwise +# lands in the timings as build/test cost, and a name-based destination can +# resolve to a same-named device on another runtime. `./simulator` hands back +# the device this checkout owns (creating it the first time), so a run in +# another checkout can't perturb these numbers by sharing it. +SECONDS=0 +SIMULATOR_UDID="$(./simulator --device "$DEVICE" --os "$OS")" +simulator_wall=$SECONDS +DESTINATION="platform=iOS Simulator,id=$SIMULATOR_UDID" + +CHECKOUT_HASH="$(printf '%s' "$(pwd -P)" | shasum -a 256 | cut -c1-12)" +# Keep profiling artifacts isolated just like the checkout-owned simulator: +# concurrent clones/worktrees must not replace one another's DerivedData, +# logs, or result bundles. PROFILE_WORKDIR remains an explicit CI override. +WORKDIR="${PROFILE_WORKDIR:-${TMPDIR:-/tmp}/where-profile-$CHECKOUT_HASH}" +DERIVED="$WORKDIR/DerivedData" +SNAPSHOT_DERIVED="$DERIVED" +[ "$CI_SHAPE" = true ] && SNAPSHOT_DERIVED="$WORKDIR/SnapshotDerivedData" +BUILD_LOG="$WORKDIR/build.log" +TEST_LOG="$WORKDIR/test.log" +RESULT_BUNDLE="$WORKDIR/tests.xcresult" +TESTS_JSON="$WORKDIR/tests.json" +SNAPSHOT_BUILD_LOG="$WORKDIR/snapshot-build.log" +SNAPSHOT_TEST_LOG="$WORKDIR/snapshot-test.log" +SNAPSHOT_RESULT_BUNDLE="$WORKDIR/snapshot-tests.xcresult" +SNAPSHOT_TESTS_JSON="$WORKDIR/snapshot-tests.json" +SNAPSHOT_TIMINGS="$WORKDIR/snapshot-timings.jsonl" +mkdir -p "$WORKDIR" && chmod 700 "$WORKDIR" + +rule() { printf '%s\n' "============================================================"; } + +# `$(inherited)` must reach xcodebuild literally; only $TC_THRESHOLD is ours. +# Shared by the clean unit build and the snapshot scheme's incremental +# build below — identical settings are what let the second build reuse the +# first instead of recompiling the world. +tc_flags="\$(inherited) -Xfrontend -warn-long-function-bodies=$TC_THRESHOLD -Xfrontend -warn-long-expression-type-checking=$TC_THRESHOLD" + +echo "==> Regenerating project (tuist generate --no-open)" +SECONDS=0 +mise exec -- tuist generate --no-open >/dev/null +generation_wall=$SECONDS + +# Xcode does not expand the scheme's $(BUILT_PRODUCTS_DIR) environment value +# for command-line test runs. Resolve the profiler's isolated build-products +# directory and hand it to SwiftPM's Bundle.module accessors through the same +# TEST_RUNNER_ override as ./test. See packageResourceEnvironment in +# Project.swift for the hosted-test linking bug this works around. +UNIT_TEST_RUN_ENV=() +SNAPSHOT_TEST_RUN_ENV=("TEST_RUNNER_SNAPSHOT_TIMING=1") +SECONDS=0 +BUILT_PRODUCTS_DIR="$(xcodebuild -showBuildSettings \ + -workspace "$WORKSPACE" \ + -scheme "$SCHEME" \ + -destination "$DESTINATION" \ + -derivedDataPath "$DERIVED" 2>/dev/null \ + | awk -F' = ' '/ BUILT_PRODUCTS_DIR = /{print $2; exit}')" +unit_build_settings_wall=$SECONDS +if [ -n "$BUILT_PRODUCTS_DIR" ]; then + UNIT_TEST_RUN_ENV+=("TEST_RUNNER_PACKAGE_RESOURCE_BUNDLE_PATH=$BUILT_PRODUCTS_DIR") +else + echo "warning: could not resolve BUILT_PRODUCTS_DIR; package resource" \ + "bundle lookups will fall back to the linker's placement" >&2 +fi + +snapshot_build_settings_wall=0 +if [ "$DO_TESTS" = true ] && [ "$DO_SNAPSHOTS" = true ]; then + SECONDS=0 + SNAPSHOT_BUILT_PRODUCTS_DIR="$(xcodebuild -showBuildSettings \ + -workspace "$WORKSPACE" \ + -scheme "$SNAPSHOT_SCHEME" \ + -destination "$DESTINATION" \ + -derivedDataPath "$SNAPSHOT_DERIVED" 2>/dev/null \ + | awk -F' = ' '/ BUILT_PRODUCTS_DIR = /{print $2; exit}')" + snapshot_build_settings_wall=$SECONDS + if [ -n "$SNAPSHOT_BUILT_PRODUCTS_DIR" ]; then + SNAPSHOT_TEST_RUN_ENV+=( + "TEST_RUNNER_PACKAGE_RESOURCE_BUNDLE_PATH=$SNAPSHOT_BUILT_PRODUCTS_DIR" + ) + else + echo "warning: could not resolve snapshot BUILT_PRODUCTS_DIR; package resource" \ + "bundle lookups will fall back to the linker's placement" >&2 + fi +fi + +if [ "$DO_BUILD" = true ]; then + echo "==> Clean build-for-testing on $DEVICE / iOS $OS (cold build)" + SECONDS=0 + set +e + xcodebuild clean build-for-testing \ + -workspace "$WORKSPACE" \ + -scheme "$SCHEME" \ + -destination "$DESTINATION" \ + -derivedDataPath "$DERIVED" \ + -showBuildTimingSummary \ + OTHER_SWIFT_FLAGS="$tc_flags" \ + >"$BUILD_LOG" 2>&1 + build_status=$? + set -e + build_wall=$SECONDS + if [ "$build_status" -ne 0 ]; then + echo "error: build failed (exit $build_status). Tail of $BUILD_LOG:" >&2 + tail -n 30 "$BUILD_LOG" >&2 + exit "$build_status" + fi + echo + rule + echo "BUILD HOT SPOTS — cold build wall: ${build_wall}s" + rule + # Parsing is best-effort: if xcodebuild's log format ever shifts, warn and + # keep going rather than aborting the run with a traceback. + set +e + python3 Tools/profile_results.py build \ + --log "$BUILD_LOG" --typecheck-threshold "$TC_THRESHOLD" + set -e + echo +fi + +if [ "$DO_TESTS" = true ]; then + if [ "$DO_BUILD" = true ]; then + TEST_ACTION="test-without-building" + TEST_WALL_LABEL="test-execution wall" + echo "==> Running unit tests (test-without-building, reuses the build above)" + else + # `test` builds then tests, so the wall below includes compilation + # (a full cold build on an empty DerivedData) — label it accordingly. + TEST_ACTION="test" + TEST_WALL_LABEL="build+test wall" + echo "==> Running unit tests (build + test) on $DEVICE / iOS $OS" + fi + rm -rf "$RESULT_BUNDLE" + SECONDS=0 + set +e + env ${UNIT_TEST_RUN_ENV[@]+"${UNIT_TEST_RUN_ENV[@]}"} \ + xcodebuild "$TEST_ACTION" \ + -workspace "$WORKSPACE" \ + -scheme "$SCHEME" \ + -destination "$DESTINATION" \ + -derivedDataPath "$DERIVED" \ + -resultBundlePath "$RESULT_BUNDLE" \ + >"$TEST_LOG" 2>&1 + test_status=$? + set -e + test_wall=$SECONDS + if [ "$test_status" -ne 0 ]; then + echo "error: unit-test leg ($SCHEME) failed (exit $test_status). Tail of $TEST_LOG:" >&2 + tail -n 40 "$TEST_LOG" >&2 + exit "$test_status" + fi + xcrun xcresulttool get test-results tests --path "$RESULT_BUNDLE" >"$TESTS_JSON" + TEST_JSON_PATHS="$TESTS_JSON" + WALL_SUMMARY="$TEST_WALL_LABEL: ${test_wall}s" + + if [ "$DO_SNAPSHOTS" = true ]; then + if [ "$DO_BUILD" = true ]; then + if [ "$CI_SHAPE" = true ]; then + SNAPSHOT_BUILD_ACTION=(clean build-for-testing) + SNAPSHOT_BUILD_LABEL="cold, separate DerivedData matching CI" + else + # Same DerivedData, destination, and flags as the clean unit + # build above, so this reuses shared products while adding the + # image bundles. + SNAPSHOT_BUILD_ACTION=(build-for-testing) + SNAPSHOT_BUILD_LABEL="incremental, reuses the unit build" + fi + echo "==> ${SNAPSHOT_BUILD_ACTION[*]} $SNAPSHOT_SCHEME ($SNAPSHOT_BUILD_LABEL)" + SECONDS=0 + set +e + xcodebuild "${SNAPSHOT_BUILD_ACTION[@]}" \ + -workspace "$WORKSPACE" \ + -scheme "$SNAPSHOT_SCHEME" \ + -destination "$DESTINATION" \ + -derivedDataPath "$SNAPSHOT_DERIVED" \ + OTHER_SWIFT_FLAGS="$tc_flags" \ + >"$SNAPSHOT_BUILD_LOG" 2>&1 + snapshot_build_status=$? + set -e + snapshot_build_wall=$SECONDS + if [ "$snapshot_build_status" -ne 0 ]; then + echo "error: snapshot build ($SNAPSHOT_SCHEME) failed (exit $snapshot_build_status). Tail of $SNAPSHOT_BUILD_LOG:" >&2 + tail -n 30 "$SNAPSHOT_BUILD_LOG" >&2 + exit "$snapshot_build_status" + fi + echo " snapshot build ($SNAPSHOT_BUILD_LABEL): ${snapshot_build_wall}s" + SNAPSHOT_TEST_ACTION="test-without-building" + echo "==> Running snapshot tests (test-without-building, $SNAPSHOT_SCHEME scheme — serial by design, ~10-15 min)" + else + SNAPSHOT_TEST_ACTION="test" + echo "==> Running snapshot tests (build + test, $SNAPSHOT_SCHEME scheme — serial by design, ~10-15 min)" + fi + rm -rf "$SNAPSHOT_RESULT_BUNDLE" + SECONDS=0 + set +e + env ${SNAPSHOT_TEST_RUN_ENV[@]+"${SNAPSHOT_TEST_RUN_ENV[@]}"} \ + xcodebuild "$SNAPSHOT_TEST_ACTION" \ + -workspace "$WORKSPACE" \ + -scheme "$SNAPSHOT_SCHEME" \ + -destination "$DESTINATION" \ + -derivedDataPath "$SNAPSHOT_DERIVED" \ + -resultBundlePath "$SNAPSHOT_RESULT_BUNDLE" \ + >"$SNAPSHOT_TEST_LOG" 2>&1 + snapshot_status=$? + set -e + snapshot_wall=$SECONDS + if [ "$snapshot_status" -ne 0 ]; then + echo "error: snapshot-test leg ($SNAPSHOT_SCHEME) failed (exit $snapshot_status). Tail of $SNAPSHOT_TEST_LOG:" >&2 + tail -n 40 "$SNAPSHOT_TEST_LOG" >&2 + echo "note: a red snapshot leg usually means failed image comparisons (e.g. stale references on this branch), not a profile bug — rerun with --no-snapshots to profile without it." >&2 + exit "$snapshot_status" + fi + xcrun xcresulttool get test-results tests --path "$SNAPSHOT_RESULT_BUNDLE" >"$SNAPSHOT_TESTS_JSON" + : >"$SNAPSHOT_TIMINGS" + grep -o 'SNAPSHOT_TIMING {.*}' "$SNAPSHOT_TEST_LOG" 2>/dev/null \ + | sed 's/^SNAPSHOT_TIMING //' >>"$SNAPSHOT_TIMINGS" || true + echo + rule + echo "SNAPSHOT CAPTURE PHASES" + rule + python3 Tools/snapshot_reports.py timings "$SNAPSHOT_TIMINGS" \ + --detailed --empty-message "no timing lines found" + TEST_JSON_PATHS="$TESTS_JSON:$SNAPSHOT_TESTS_JSON" + WALL_SUMMARY="$TEST_WALL_LABEL: ${test_wall}s (unit) + ${snapshot_wall}s (snapshot)" + fi + + echo + rule + echo "TEST HOT SPOTS — $WALL_SUMMARY" + rule + # Best-effort parse: warn and continue if the xcresult schema shifts. + set +e + python3 Tools/profile_results.py tests \ + --tests-json-paths "$TEST_JSON_PATHS" \ + --top "$TOP" --threshold "$TEST_THRESHOLD" + set -e + echo +fi + +rule +echo "PROFILE WALLS" +rule +echo " simulator resolve/boot: ${simulator_wall}s" +echo " project generation: ${generation_wall}s" +echo " unit build settings: ${unit_build_settings_wall}s" +if [ "$DO_TESTS" = true ] && [ "$DO_SNAPSHOTS" = true ]; then + echo " snapshot build settings: ${snapshot_build_settings_wall}s" +fi +if [ "$DO_BUILD" = true ]; then + echo " cold unit build: ${build_wall}s" +fi +if [ "$DO_TESTS" = true ]; then + echo " unit $TEST_WALL_LABEL: ${test_wall}s" + if [ "$DO_SNAPSHOTS" = true ]; then + if [ "$DO_BUILD" = true ]; then + echo " snapshot build ($SNAPSHOT_BUILD_LABEL): ${snapshot_build_wall}s" + fi + echo " snapshot execution wall: ${snapshot_wall}s" + fi +fi +echo + +echo "Logs and result bundles: $WORKDIR" diff --git a/simulator b/simulator index ee39e80e6..eaa0d51e1 100755 --- a/simulator +++ b/simulator @@ -32,3 +32,446 @@ set -euo pipefail # Registry-backed deletion requires an exact checkout, UDID, name, and runtime # match. A derived name without a registry claim is discoverable but unowned. +DEVICE="iPhone 17" +OS="27.2" +BOOT=true +SHARED=false +DRY_RUN=false +MODE=resolve + +usage() { + cat <<'USAGE' +Usage: ./simulator [options] + +Resolves this checkout's own iOS Simulator by UDID (never by name), creating it +if it doesn't exist yet, boots it, waits for the boot to finish, and prints the +UDID on stdout. + +Every checkout — clone or worktree — owns a separate device, so parallel work +on one machine can't collide booting, installing, or erasing the same one. + +Options: + --device NAME Simulator device name (default: "iPhone 17") + --os VERSION Simulator iOS version (default: "27.2") + --no-boot Only resolve (creating if needed) and print the UDID + --shared Target any existing device with that name instead of this + checkout's own — for throwaway machines (CI) that are already + isolated + --list List the per-checkout devices on this machine + --prune Delete devices whose checkout is gone, and forget devices + that no longer exist. Devices no checkout claims — a renamed + or moved checkout leaves one — are reported, never deleted + --dry-run With --prune: report what it would do and change nothing + --delete Delete this checkout's device + --recreate Delete this checkout's device, then create and boot a fresh one + -h, --help Show this help + +Renaming or moving a checkout changes the name it resolves to, so it gets a +fresh device and the old one turns up as unowned in --list. + +Examples: + ./simulator + ./simulator --device 'iPhone 17 Pro' --os 27.2 + ./simulator --list + ./simulator --prune --dry-run + xcodebuild test -destination "platform=iOS Simulator,id=$(./simulator)" … +USAGE +} + +while [ $# -gt 0 ]; do + case "$1" in + --device) shift; DEVICE="${1:?--device requires a value}" ;; + --os) shift; OS="${1:?--os requires a value}" ;; + --no-boot) BOOT=false ;; + --shared) SHARED=true ;; + --list) MODE=list ;; + --prune) MODE=prune ;; + --dry-run) DRY_RUN=true ;; + --delete) MODE=delete ;; + --recreate) MODE=recreate ;; + -h|--help) usage; exit 0 ;; + *) echo "error: unknown option '$1' (see ./simulator --help)" >&2; exit 1 ;; + esac + shift +done + +if [ "$SHARED" = true ] && [ "$MODE" != resolve ]; then + echo "error: --shared has no checkout of its own to $MODE (see ./simulator --help)" >&2 + exit 1 +fi + +if [ "$DRY_RUN" = true ] && [ "$MODE" != prune ]; then + echo "error: --dry-run only applies to --prune (see ./simulator --help)" >&2 + exit 1 +fi + +cd "$(dirname "$0")" + +# `jq` is deliberately unpinned: macOS ships it as an Apple-signed system binary +# (`/usr/bin/jq`, identifier com.apple.jq) on the macOS 26 baseline this repo +# requires, same as xcrun/simctl/plutil. The queries below are stable jq syntax +# and are exercised against both the OS build and the newer one on CI — so don't +# add it to .mise.toml or gate it behind an install check. + +runtime_key="com.apple.CoreSimulator.SimRuntime.iOS-${OS//./-}" + +# A worktree's toplevel is the worktree itself, so worktrees count as separate +# checkouts — which is the point. Outside a repo (a copied tree, an archive), +# the script's own directory is the checkout. +checkout="$(git rev-parse --show-toplevel 2>/dev/null || pwd -P)" + +slug() { printf '%s' "$1" | tr -cs 'A-Za-z0-9.' '-' | sed 's/^-//; s/-$//'; } + +# The prefix marks a device as one of ours, so --list and --prune can find the +# managed devices no index entry points at any more (a renamed or moved +# checkout hashes differently and leaves its old device behind). +name_prefix="Stuff-" +checkout_hash="$(printf '%s' "$checkout" | shasum -a 256 | cut -c1-8)" +owned_name="$name_prefix$(slug "$(basename "$checkout")")-$checkout_hash-$(slug "$DEVICE")-$(slug "$OS")" + +# The registry is the ownership authority; `simctl` remains the authority on +# whether that exact UDID exists on the recorded runtime. The derived name lets +# an unambiguous unclaimed device be recovered, but a name alone never permits +# deletion. +registry_dir="$HOME/Library/Application Support/Stuff/simulators" + +# `available` hides devices whose runtime has been uninstalled — right for +# resolving something to run on, wrong for --list/--prune, which must still see +# (and be able to delete) a device stranded on a removed runtime. +# +# Listing also nudges CoreSimulator into rebuilding its device cache, which a +# freshly provisioned machine (notably the xcode-27 CI image) needs before a +# destination will resolve at all. +available_devices_json() { xcrun simctl list devices available --json; } +all_devices_json() { xcrun simctl list devices --json; } + +udids_named() { # + printf '%s' "$1" \ + | jq -r --arg key "$runtime_key" --arg name "$2" \ + '.devices[$key][]? | select(.name == $name) | .udid' +} + +managed_devices() { # -> " " per line, every runtime + printf '%s' "$1" \ + | jq -r --arg prefix "$name_prefix" \ + '.devices | to_entries[] | .value[] + | select(.name | startswith($prefix)) | "\(.udid) \(.name)"' +} + +indexed_udids() { # every UDID the index knows, whatever checkout it belongs to + [ -d "$registry_dir" ] || return 0 + local entry + for entry in "$registry_dir"/*; do + [ -f "$entry" ] || continue + registry_field "$entry" udid + done +} + +registry_write() { # + mise exec -- ruby Tools/simulator_registry.rb record \ + --registry-dir "$registry_dir" --name "$1" \ + --checkout "$checkout" --udid "$2" --device "$DEVICE" --os "$OS" +} + +registry_forget() { # + mise exec -- ruby Tools/simulator_registry.rb forget \ + --registry-dir "$registry_dir" --name "$1" +} + +registry_field() { # + awk -v key="$2" 'index($0, key "=") == 1 { print substr($0, length(key) + 2); exit }' "$1" +} + +create_device() { # -> udid on stdout + local type_id runtime_available udid + type_id="$( + xcrun simctl list devicetypes --json \ + | jq -r --arg name "$DEVICE" '.devicetypes[] | select(.name == $name) | .identifier' \ + | head -1 + )" + if [ -z "$type_id" ]; then + echo "error: no '$DEVICE' device type is installed." >&2 + echo "Available device types:" >&2 + xcrun simctl list devicetypes >&2 + exit 1 + fi + + runtime_available="$( + xcrun simctl list runtimes --json \ + | jq -r --arg key "$runtime_key" \ + '.runtimes[] | select(.identifier == $key and .isAvailable == true) | .identifier' + )" + if [ -z "$runtime_available" ]; then + echo "error: the iOS $OS runtime ($runtime_key) isn't installed or isn't usable." >&2 + echo "Available runtimes:" >&2 + xcrun simctl list runtimes >&2 + exit 1 + fi + + echo "==> Creating $1 ($DEVICE / iOS $OS) for $checkout" >&2 + # Bash clears errexit in command substitutions. Preserve a failed create + # even when simctl writes its error description to stdout. + udid="$(xcrun simctl create "$1" "$type_id" "$runtime_key" | tr -d '[:space:]')" || return $? + if [ -z "$udid" ]; then + echo "error: simctl create returned no UDID for '$1'." >&2 + exit 1 + fi + printf '%s' "$udid" +} + +registry_resolution() { # exact ownership decision from all + available inventories + local devices_json available_json + devices_json="$(all_devices_json)" + available_json="$(available_devices_json)" + printf '{"all":%s,"available":%s}\n' "$devices_json" "$available_json" \ + | mise exec -- ruby Tools/simulator_registry.rb resolve \ + --registry-dir "$registry_dir" --name "$owned_name" \ + --checkout "$checkout" --device "$DEVICE" --os "$OS" \ + --runtime-key "$runtime_key" +} + +delete_owned_device() { # exact registry-owned target only + local devices_json decision action udid + devices_json="$(all_devices_json)" + decision="$(printf '%s' "$devices_json" \ + | mise exec -- ruby Tools/simulator_registry.rb delete-target \ + --registry-dir "$registry_dir" --name "$owned_name" \ + --checkout "$checkout" --device "$DEVICE" --os "$OS" \ + --runtime-key "$runtime_key")" + action="${decision%%$'\t'*}" + udid="" + [ "$decision" = "$action" ] || udid="${decision#*$'\t'}" + case "$action" in + delete) + echo "==> Deleting $owned_name ($udid)" >&2 + xcrun simctl delete "$udid" >&2 + registry_forget "$owned_name" + ;; + stale) + echo "warning: forgetting $owned_name — its registered device no longer exists" >&2 + registry_forget "$owned_name" + ;; + none) + echo "==> No device for this checkout to delete" >&2 + ;; + *) + echo "error: unknown registry deletion action '$action'" >&2 + exit 1 + ;; + esac +} + +# Two first runs in one checkout would otherwise each miss the lookup and create +# a device, leaving twins that share a name — the ambiguity this script exists +# to prevent. Serialize *resolve-or-create* per checkout, and only that: booting +# takes minutes on a device's first launch, and two callers waiting on one boot +# is fine, so the lock is released before it. The kernel releases this advisory +# lock after any process death; the persistent file itself carries no state. +lock_file="${TMPDIR:-/tmp}/stuff-simulator-$checkout_hash.lock" +lock_wait_limit=120 +lock_held=false + +acquire_lock() { + if [ "$lock_held" = true ]; then + return 0 + fi + exec 9>>"$lock_file" + if ! /usr/bin/lockf -t "$lock_wait_limit" 9; then + exec 9>&- + echo "error: timed out waiting for the ./simulator run holding $lock_file." >&2 + exit 1 + fi + lock_held=true + trap release_lock EXIT +} + +release_lock() { + if [ "$lock_held" = true ]; then + exec 9>&- + lock_held=false + fi +} + +case "$MODE" in + list) + devices_json="$(all_devices_json)" + states="$(printf '%s' "$devices_json" | jq -r '.devices | to_entries[] | .value[] | "\(.udid) \(.state)"')" + known_indexed="$(indexed_udids)" + rows="" + if [ -d "$registry_dir" ]; then + for entry in "$registry_dir"/*; do + [ -f "$entry" ] || continue + entry_udid="$(registry_field "$entry" udid)" + entry_checkout="$(registry_field "$entry" checkout)" + entry_device="$(registry_field "$entry" device) / iOS $(registry_field "$entry" os)" + entry_state="$(printf '%s\n' "$states" | awk -v u="$entry_udid" '$1 == u { print $2 }')" + [ -n "$entry_state" ] || entry_state="gone" + [ -d "$entry_checkout" ] || entry_checkout="$entry_checkout (missing)" + rows+="$(printf '%-10s %-36s %-22s %s' \ + "$entry_state" "$entry_udid" "$entry_device" "$entry_checkout")"$'\n' + done + fi + # Devices carrying our prefix that no index entry claims: a checkout that + # was renamed or moved (it now hashes to a different name), or an index + # that was cleared. Showing them is the only way they're ever noticed. + while read -r managed_udid managed_name; do + [ -n "$managed_udid" ] || continue + if printf '%s\n' "$known_indexed" | grep -Fqx "$managed_udid"; then + continue + fi + managed_state="$(printf '%s\n' "$states" | awk -v u="$managed_udid" '$1 == u { print $2 }')" + rows+="$(printf '%-10s %-36s %-22s %s' \ + "$managed_state" "$managed_udid" "$managed_name" "unowned — no index entry")"$'\n' + done <<<"$(managed_devices "$devices_json")" + if [ -z "$rows" ]; then + echo "No per-checkout simulators on this machine yet." >&2 + exit 0 + fi + printf '%-10s %-36s %-22s %s\n' STATE UDID DEVICE CHECKOUT + printf '%s' "$rows" + exit 0 + ;; + prune) + devices_json="$(all_devices_json)" + known_udids="$(printf '%s' "$devices_json" | jq -r '.devices | to_entries[] | .value[] | .udid')" + known_indexed="$(indexed_udids)" + pruned=0 + if [ "$DRY_RUN" = true ]; then + delete_verb="Would delete" + forget_verb="Would forget" + else + delete_verb="Deleting" + forget_verb="Forgetting" + fi + if [ -d "$registry_dir" ]; then + for entry in "$registry_dir"/*; do + [ -f "$entry" ] || continue + entry_udid="$(registry_field "$entry" udid)" + entry_checkout="$(registry_field "$entry" checkout)" + if [ -z "$entry_udid" ]; then + echo "==> $forget_verb $(basename "$entry") — the entry records no UDID" >&2 + [ "$DRY_RUN" = true ] || rm -f "$entry" + pruned=$((pruned + 1)) + elif ! printf '%s\n' "$known_udids" | grep -Fqx "$entry_udid"; then + echo "==> $forget_verb $(basename "$entry") — device $entry_udid no longer exists" >&2 + [ "$DRY_RUN" = true ] || rm -f "$entry" + pruned=$((pruned + 1)) + elif [ ! -d "$entry_checkout" ]; then + # A checkout on an unmounted volume looks exactly like a + # deleted one, and deleting a device throws away whatever is + # installed on it. Its parent still being there is what tells + # the two apart, so anything else is left for a human. + if [ ! -d "$(dirname "$entry_checkout")" ]; then + echo "==> Skipping $(basename "$entry") — $entry_checkout is missing, but so is its parent (unmounted volume?)" >&2 + else + entry_name="$(basename "$entry")" + entry_os="$(registry_field "$entry" os)" + entry_runtime_key="com.apple.CoreSimulator.SimRuntime.iOS-${entry_os//./-}" + if ! prune_decision="$(printf '%s' "$devices_json" \ + | mise exec -- ruby Tools/simulator_registry.rb prune-target \ + --registry-dir "$registry_dir" --name "$entry_name" \ + --runtime-key "$entry_runtime_key")" + then + echo "==> Skipping $entry_name — its ownership record does not match simctl" >&2 + continue + fi + prune_action="${prune_decision%%$'\t'*}" + prune_udid="${prune_decision#*$'\t'}" + if [ "$prune_action" != delete ] || [ "$prune_udid" != "$entry_udid" ]; then + echo "==> Skipping $entry_name — exact deletion target could not be proven" >&2 + continue + fi + echo "==> $delete_verb $entry_name ($entry_udid) — $entry_checkout is gone" >&2 + if [ "$DRY_RUN" != true ]; then + xcrun simctl delete "$entry_udid" >&2 + registry_forget "$entry_name" + fi + pruned=$((pruned + 1)) + fi + fi + done + fi + # Unowned devices are reported, never deleted: an index that was cleared + # leaves a live checkout's device looking exactly like an abandoned one, + # and that checkout reclaims it on its next run. + unowned=0 + while read -r managed_udid managed_name; do + [ -n "$managed_udid" ] || continue + if printf '%s\n' "$known_indexed" | grep -Fqx "$managed_udid"; then + continue + fi + echo "==> Unowned: $managed_name ($managed_udid) — no checkout claims it." >&2 + echo " A checkout that resolves to that name reclaims it on its next run;" >&2 + echo " otherwise remove it with: xcrun simctl delete $managed_udid" >&2 + unowned=$((unowned + 1)) + done <<<"$(managed_devices "$devices_json")" + if [ "$DRY_RUN" = true ] && [ "$pruned" -gt 0 ]; then + echo "Dry run — nothing was deleted." >&2 + elif [ "$pruned" -eq 0 ] && [ "$unowned" -eq 0 ]; then + echo "Nothing to prune." >&2 + elif [ "$pruned" -eq 0 ]; then + echo "Nothing to prune — the unowned devices above are left alone." >&2 + fi + exit 0 + ;; + delete) + acquire_lock + delete_owned_device + exit 0 + ;; + recreate) + acquire_lock + delete_owned_device + ;; + resolve) ;; +esac + +if [ "$SHARED" = true ]; then + # Every checkout that asks for it lands on the same device, so this is only + # safe where the machine itself is the isolation (a CI job's VM). + name="$DEVICE" + udids="$(udids_named "$(available_devices_json)" "$name")" + if [ -z "$udids" ]; then + echo "error: no available '$name' on the iOS $OS runtime." >&2 + echo "Available devices:" >&2 + xcrun simctl list devices available >&2 + exit 1 + fi +else + name="$owned_name" + acquire_lock + resolution="$(registry_resolution)" + resolution_action="${resolution%%$'\t'*}" + resolution_udid="" + [ "$resolution" = "$resolution_action" ] \ + || resolution_udid="${resolution#*$'\t'}" + case "$resolution_action" in + owned|claim) udids="$resolution_udid" ;; + create) udids="$(create_device "$name")" ;; + *) echo "error: unknown registry resolution action '$resolution_action'" >&2; exit 1 ;; + esac +fi + +udid="$(printf '%s\n' "$udids" | head -1)" + +# Same name *and* same runtime is a genuinely ambiguous setup — routine for +# `--shared` (a machine with two hand-made "iPhone 17"s), and a sign someone +# duplicated a managed device otherwise. Pick one deterministically, but say so: +# silently choosing is how you end up debugging the wrong device. +if [ "$(printf '%s\n' "$udids" | wc -l | tr -d ' ')" -gt 1 ]; then + echo "warning: several '$name' devices on iOS $OS; using $udid" >&2 +fi + +if [ "$SHARED" != true ]; then + registry_write "$name" "$udid" + release_lock +fi + +if [ "$BOOT" = true ]; then + echo "==> Booting $name ($DEVICE / iOS $OS, $udid)" >&2 + # `-b` boots the device if needed, then waits for boot to finish — a + # condition to wait on rather than a fixed sleep. + xcrun simctl bootstatus "$udid" -b >&2 +fi + +printf '%s\n' "$udid" diff --git a/test b/test index 3858edeb6..d6e379eb4 100755 --- a/test +++ b/test @@ -61,3 +61,747 @@ set -euo pipefail # # Exits non-zero when tests fail (./profile's posture, not ./flaky's). +DEVICE="iPhone 17" +OS="27.2" +SCOPE=changed # changed | all | snapshots | everything | bundles | only +BUNDLES=() +ONLY=() +ONLY_FILE="" +RECORD="" +DO_BUILD=true +DO_GENERATE=true +BUILD_ARTIFACTS="" +TEST_ARTIFACTS="" +ENUMERATE_SUITES="" +HEARTBEAT=15 +STATUS_FILE="" +TIMINGS=false +REVIEW=false +BASE_REF="origin/main" +SHARED=false +RUN_ARCHITECTURE=true +ARCHITECTURE_ONLY=false +HAS_TEST_ARGUMENTS=false +HOST_MACROS=false +RUN_HOST_TESTS=true + +usage() { + cat <<'USAGE' +Usage: ./test [options] [BundleName ...] + +Runs this repo's tests against the simulator this checkout owns, streaming +progress as it goes. With no arguments it runs only the bundles affected by the +working tree's changes. Every normal invocation first validates and tests the +Bumper Bowling rules, then enforces the architecture. Unit and affected scopes +also run the fast host-side backup-upgrader regression suite. Every normal +invocation runs the fast Flyover command regression suite. + +Scope: + (no arguments) Bundles affected by the diff against origin/main, including + uncommitted and untracked files + BundleName ... Named bundles only (e.g. ./test WhereCoreTests) + PeriscopeMacrosTests runs on the host without a simulator + --all The full unit suite plus host macro tests + --snapshots The image-snapshot suite (StuffSnapshotTests) + --everything All iOS unit and image bundles, plus default host/architecture checks + --only ID An xcodebuild test identifier, repeatable: + Bundle, Bundle/Suite, or 'Bundle/Suite/test()' + --only-file PATH Read newline-delimited Bundle/Suite identifiers from PATH + --base REF Compare against REF instead of origin/main + +Independent checks: + --architecture-only Run only the Bumper configuration, rule tests, and lint + --skip-architecture Skip Bumper checks because another CI job owns them + --skip-host-tests Skip attribution, backup-upgrader, and macro tests + because another CI job owns them + +Running: + --no-build Reuse the last build (test-without-building) + --no-generate Skip `tuist generate` (assumes the project is current) + --build-artifacts DIR + Build selected iOS schemes into DIR without running them + Host checks still run unless --skip-host-tests is set + --test-artifacts DIR + Run simulator tests from the manifest and .xctestrun files + in DIR. A separate invocation owns host-side checks + --enumerate-suites PATH + Write the selected artifact's Bundle/Suite identifiers + --record MODE Re-record snapshots: all | failed | missing | never + --device NAME Simulator device name (default: "iPhone 17") + --os VERSION Simulator iOS version (default: "27.2") + --shared Use any existing simulator with that name rather than this + checkout's own — for a throwaway machine (CI) that is + already isolated + +Reporting: + --timings Collect per-phase snapshot capture timings and print a + breakdown (sets SNAPSHOT_TIMING) + --review Report how each differing snapshot differs — pixel count, + max channel delta, changed region (sets SNAPSHOT_DIFF) + --heartbeat SECS Seconds between progress lines when not on a terminal + (default: 15) + --status-file P Keep only the latest progress line in P, for a watcher that + would rather read one small file than scan a log + -h, --help Show this help + +Examples: + ./test # just what your change affects + ./test WhereCoreTests WhereUITests + ./test --snapshots --review # snapshots, with the diffs described + ./test --snapshots --timings # where the capture time goes + ./test --everything # all iOS unit and image bundles + ./test --only 'WhereUITests/WhereStylesheetTests/resolvesTraitAwareTokens()' +USAGE +} + +while [ $# -gt 0 ]; do + case "$1" in + --all) SCOPE=all; HAS_TEST_ARGUMENTS=true ;; + --snapshots) SCOPE=snapshots; HAS_TEST_ARGUMENTS=true ;; + --everything) SCOPE=everything; HAS_TEST_ARGUMENTS=true ;; + --only) + HAS_TEST_ARGUMENTS=true + shift + ONLY+=("${1:?--only requires a test identifier}") + [ "$SCOPE" = changed ] && SCOPE=only + ;; + --only-file) + HAS_TEST_ARGUMENTS=true + shift + ONLY_FILE="${1:?--only-file requires a path}" + [ "$SCOPE" = changed ] && SCOPE=only + ;; + --base) HAS_TEST_ARGUMENTS=true; shift; BASE_REF="${1:?--base requires a git ref}" ;; + --no-build) DO_BUILD=false; HAS_TEST_ARGUMENTS=true ;; + --no-generate) DO_GENERATE=false; HAS_TEST_ARGUMENTS=true ;; + --build-artifacts) + HAS_TEST_ARGUMENTS=true + shift + BUILD_ARTIFACTS="${1:?--build-artifacts requires a directory}" + ;; + --test-artifacts) + HAS_TEST_ARGUMENTS=true + shift + TEST_ARTIFACTS="${1:?--test-artifacts requires a directory}" + DO_BUILD=false + DO_GENERATE=false + RUN_HOST_TESTS=false + ;; + --enumerate-suites) + HAS_TEST_ARGUMENTS=true + shift + ENUMERATE_SUITES="${1:?--enumerate-suites requires a path}" + ;; + --record) HAS_TEST_ARGUMENTS=true; shift; RECORD="${1:?--record requires a mode}" ;; + --device) HAS_TEST_ARGUMENTS=true; shift; DEVICE="${1:?--device requires a value}" ;; + --shared) SHARED=true; HAS_TEST_ARGUMENTS=true ;; + --os) HAS_TEST_ARGUMENTS=true; shift; OS="${1:?--os requires a value}" ;; + --timings) TIMINGS=true; HAS_TEST_ARGUMENTS=true ;; + --review) REVIEW=true; HAS_TEST_ARGUMENTS=true ;; + --heartbeat) HAS_TEST_ARGUMENTS=true; shift; HEARTBEAT="${1:?--heartbeat requires a value}" ;; + --status-file) HAS_TEST_ARGUMENTS=true; shift; STATUS_FILE="${1:?--status-file requires a path}" ;; + --architecture-only) ARCHITECTURE_ONLY=true ;; + --skip-architecture) RUN_ARCHITECTURE=false ;; + --skip-host-tests) RUN_HOST_TESTS=false; HAS_TEST_ARGUMENTS=true ;; + -h|--help) usage; exit 0 ;; + -*) echo "error: unknown option '$1' (see ./test --help)" >&2; exit 1 ;; + *) BUNDLES+=("$1"); SCOPE=bundles; HAS_TEST_ARGUMENTS=true ;; + esac + shift +done + +cd "$(dirname "$0")" + +if [ -n "$ONLY_FILE" ]; then + if [ ! -f "$ONLY_FILE" ]; then + echo "error: --only-file does not exist: $ONLY_FILE" >&2 + exit 1 + fi + while IFS= read -r identifier || [ -n "$identifier" ]; do + [ -n "$identifier" ] && ONLY+=("$identifier") + done <"$ONLY_FILE" + if [ "${#ONLY[@]}" -eq 0 ]; then + echo "error: --only-file contains no test identifiers: $ONLY_FILE" >&2 + exit 1 + fi +fi + +case "$RECORD" in + ""|all|failed|missing|never) ;; + *) echo "error: --record must be all, failed, missing or never (got '$RECORD')" >&2 + exit 1 ;; +esac + +if [ "$ARCHITECTURE_ONLY" = true ] && [ "$RUN_ARCHITECTURE" = false ]; then + echo "error: --architecture-only cannot be combined with --skip-architecture" >&2 + exit 1 +fi +if [ "$ARCHITECTURE_ONLY" = true ] && [ "$HAS_TEST_ARGUMENTS" = true ]; then + echo "error: --architecture-only cannot be combined with test options or bundles" >&2 + exit 1 +fi +if [ -n "$BUILD_ARTIFACTS" ] && [ -n "$TEST_ARTIFACTS" ]; then + echo "error: --build-artifacts cannot be combined with --test-artifacts" >&2 + exit 1 +fi +if [ -n "$BUILD_ARTIFACTS" ] && { [ "$DO_BUILD" = false ] || [ -n "$ONLY_FILE" ] || + [ "${#ONLY[@]}" -gt 0 ] || [ -n "$ENUMERATE_SUITES" ]; } +then + echo "error: --build-artifacts cannot be combined with test filters or test-only modes" >&2 + exit 1 +fi +if [ -n "$ENUMERATE_SUITES" ] && [ -z "$TEST_ARTIFACTS" ]; then + echo "error: --enumerate-suites requires --test-artifacts" >&2 + exit 1 +fi +if [ -n "$ENUMERATE_SUITES" ] && [ "$SCOPE" != snapshots ]; then + echo "error: --enumerate-suites requires --snapshots" >&2 + exit 1 +fi +if [ "$RUN_HOST_TESTS" = false ] && [ "$SCOPE" = bundles ]; then + for bundle in ${BUNDLES[@]+"${BUNDLES[@]}"}; do + if [ "$bundle" = PeriscopeMacrosTests ]; then + echo "error: PeriscopeMacrosTests requires host tests to be enabled" >&2 + exit 1 + fi + done +fi + +run_architecture_checks() { + export BUMPER_CACHE_DIR="${BUMPER_CACHE_DIR:-.build/bumper-cache}" + export BUMPER_RUNNER_BUILD_CONFIGURATION="${BUMPER_RUNNER_BUILD_CONFIGURATION:-debug}" + + echo "==> Validating Bumper Bowling configuration" + swift run bumper config . + echo "==> Testing Bumper Bowling rules" + swift run bumper test . + echo "==> Enforcing Where architecture" + swift run bumper lint . --timings +} + +if [ "$RUN_ARCHITECTURE" = true ]; then + run_architecture_checks +fi +if [ "$ARCHITECTURE_ONLY" = true ]; then + exit 0 +fi + +if [ "$RUN_HOST_TESTS" = true ]; then + if [ -f Shared/Flyover/Tools/Tests/flyover_test.sh ]; then + echo "==> Testing flyover command" + bash Shared/Flyover/Tools/Tests/flyover_test.sh + fi + echo "==> Testing attribution generator" + mise exec -- ruby Shared/CreditKit/Tools/Tests/generate_attribution_test.rb +fi + +WORKSPACE="Stuff.xcworkspace" +UNIT_SCHEME="Stuff-iOS-Tests" +SNAPSHOT_SCHEME="StuffSnapshotTests" +CHECKOUT_HASH="$(printf '%s' "$(pwd -P)" | shasum -a 256 | cut -c1-12)" +# Overridable so CI can collect the logs and result bundles from a known path +# rather than digging through DerivedData. Local runs include the canonical +# checkout path's hash so clones/worktrees cannot overwrite one another's +# logs, progress state, or result bundles while running concurrently. +WORKDIR="${TEST_WORKDIR:-${TMPDIR:-/tmp}/where-test-$CHECKOUT_HASH}" +# Test logs and result metadata can include developer paths and failure details. +# Keep the per-checkout work directory private while preserving its stable path. +mkdir -p "$WORKDIR" && chmod 700 "$WORKDIR" + +rule() { printf '%s\n' "============================================================"; } + +phase_started() { + python3 Tools/test_runner.py phase-started +} + +emit_phase_timing() { + python3 Tools/test_runner.py phase-timing "$1" "$2" "${3:-}" "${4:-0}" +} + +# The image bundles, read from the manifest rather than listed here: a bundle can +# only run from a scheme that contains it, and StuffSnapshotTests is the only one +# carrying the SNAPSHOT_EXPECTED_* / TZ pins the comparisons rely on. +snapshot_bundles() { + python3 Tools/test_runner.py snapshot-bundles +} + +# The backup upgrader is a host-side unit regression, not an image test. Keep it +# in affected and unit-capable runs, but do not make a snapshot-only invocation +# repeat work owned by the host CI job. +backup_upgrader_is_needed() { + local image_bundles bundle identifier + [ "$RUN_HOST_TESTS" = false ] && return 1 + image_bundles="$(snapshot_bundles)" + { [ -n "$BUILD_ARTIFACTS" ] || [ -n "$TEST_ARTIFACTS" ]; } && return 1 + + case "$SCOPE" in + changed|all|everything) return 0 ;; + snapshots|only) ;; + bundles) + for bundle in "${BUNDLES[@]}"; do + if ! printf '%s\n' "$image_bundles" | grep -qx "$bundle"; then + return 0 + fi + done + return 1 + ;; + esac + + for identifier in ${ONLY[@]+"${ONLY[@]}"}; do + bundle="${identifier%%/*}" + if ! printf '%s\n' "$image_bundles" | grep -qx "$bundle"; then + return 0 + fi + done + return 1 +} + +if backup_upgrader_is_needed; then + echo "==> Testing backup upgrader" + mise exec -- ruby Where/Tools/Tests/upgrade_backup_test.rb +fi + +# Which bundles a set of changed paths affects. +affected_bundles() { + printf '%s\n' "$1" | python3 Tools/test_runner.py affected-bundles +} + +# The importable progress filter reads xcodebuild output from stdin. Keeping it +# in Tools makes its terminal, heartbeat, cache, and zero-test behavior directly +# testable without launching Xcode. + +# Resolve the run plan: +SCHEMES=() +UNIT_FILTERS=() +SNAPSHOT_FILTERS=() + +add_scheme() { + local candidate="$1" existing + for existing in ${SCHEMES[@]+"${SCHEMES[@]}"}; do + [ "$existing" = "$candidate" ] && return 0 + done + SCHEMES+=("$candidate") +} + +case "$SCOPE" in + all) add_scheme "$UNIT_SCHEME"; HOST_MACROS=true ;; + snapshots) add_scheme "$SNAPSHOT_SCHEME" ;; + everything) add_scheme "$UNIT_SCHEME"; add_scheme "$SNAPSHOT_SCHEME"; HOST_MACROS=true ;; + bundles|changed) + if [ "$SCOPE" = changed ]; then + if git rev-parse --verify --quiet "$BASE_REF" >/dev/null; then + base="$(git merge-base HEAD "$BASE_REF")" + else + echo "warning: '$BASE_REF' not found; using uncommitted changes only" >&2 + base="HEAD" + fi + changed_files="$( { git diff --name-only "$base" + git diff --name-only + git ls-files --others --exclude-standard; } | sort -u )" + if [ -z "$changed_files" ]; then + echo "==> No changes against $BASE_REF — nothing to test." + exit 0 + fi + if printf '%s\n' "$changed_files" | grep -Eq \ + '^(Package\.swift|Package\.resolved|test|Shared/Periscope/PeriscopeMacros/)'; then + HOST_MACROS=true + fi + set +e + selection="$(affected_bundles "$changed_files")" + selection_status=$? + set -e + if [ "$selection_status" -ne 0 ]; then + echo "error: could not work out which bundles your changes affect." >&2 + echo " Run an explicit scope instead: ./test --all, ./test --snapshots," >&2 + echo " or ./test --everything." >&2 + exit 1 + fi + while IFS= read -r bundle; do + [ -n "$bundle" ] && BUNDLES+=("$bundle") + done < No test bundle covers these changes:" + printf '%s\n' "$changed_files" | sed 's/^/ /' + exit 0 + fi + if [ "${#BUNDLES[@]}" -gt 0 ]; then + echo "==> Affected bundles: ${BUNDLES[*]}" + fi + fi + image_bundles="$(snapshot_bundles)" + for bundle in "${BUNDLES[@]}"; do + if [ "$bundle" = PeriscopeMacrosTests ]; then + HOST_MACROS=true + elif printf '%s\n' "$image_bundles" | grep -qx "$bundle"; then + add_scheme "$SNAPSHOT_SCHEME" + SNAPSHOT_FILTERS+=("-only-testing:$bundle") + else + add_scheme "$UNIT_SCHEME" + UNIT_FILTERS+=("-only-testing:$bundle") + fi + done + ;; +esac + +if [ "${#ONLY[@]}" -gt 0 ]; then + # An identifier's first component is its bundle, which decides the scheme — + # so `./test --only 'WhereUISnapshotTests/…'` needs no `--snapshots`. Without + # this, an identifier copied from the failure report above would run against + # a scheme that doesn't contain its bundle and match nothing. + only_images="$(snapshot_bundles)" + for identifier in "${ONLY[@]}"; do + if printf '%s\n' "$only_images" | grep -qx "${identifier%%/*}"; then + add_scheme "$SNAPSHOT_SCHEME" + [ -z "$ONLY_FILE" ] && SNAPSHOT_FILTERS+=("-only-testing:$identifier") + else + add_scheme "$UNIT_SCHEME" + [ -z "$ONLY_FILE" ] && UNIT_FILTERS+=("-only-testing:$identifier") + fi + done +fi + +if [ -n "$ONLY_FILE" ]; then + if [ "${#SCHEMES[@]}" -ne 1 ]; then + echo "error: --only-file must contain identifiers for one test scheme" >&2 + exit 1 + fi + if [ "${SCHEMES[0]}" = "$SNAPSHOT_SCHEME" ]; then + SNAPSHOT_FILTERS=("-only-testing" "@$ONLY_FILE") + else + UNIT_FILTERS=("-only-testing" "@$ONLY_FILE") + fi +fi + +# Artifact consumers and explicit --skip-host-tests runs leave host checks to +# a separate invocation. Normal local runs keep the selected host checks. +if [ "$RUN_HOST_TESTS" = false ]; then + HOST_MACROS=false +fi + +if [ "${#SCHEMES[@]}" -eq 0 ] && [ "$HOST_MACROS" = false ]; then + echo "error: nothing to run (see ./test --help)" >&2 + exit 1 +fi + +for scheme in ${SCHEMES[@]+"${SCHEMES[@]}"}; do + [ "$scheme" = "$SNAPSHOT_SCHEME" ] || continue + + expected_xcode_version="$(< .xcode-version)" + xcode_version="$(xcodebuild -version | awk '/^Xcode /{print $2}')" + xcode_version="$(printf '%s\n' "$xcode_version" | cut -d. -f1,2)" + if [ "$xcode_version" != "$expected_xcode_version" ]; then + echo "error: snapshot tests require Xcode $expected_xcode_version; found $xcode_version" >&2 + echo " Install the pinned Xcode major.minor version. Then select it before capturing snapshots." >&2 + exit 1 + fi + break +done + +overall_status=0 +RESULTS=() +LOGS=() + +if [ "$HOST_MACROS" = true ]; then + echo "==> Building PeriscopeMacrosTests on the host" + macro_build_log="$WORKDIR/PeriscopeMacrosTests-build.log" + # A target build stops at the test module and does not link the .xctest bundle. + # The synthesized product links it without building the package's iOS-only targets. + if ! mise exec -- swift build --product PeriscopeMacrosTests >"$macro_build_log" 2>&1; then + echo "error: build failed for PeriscopeMacrosTests. Tail of $macro_build_log:" >&2 + tail -n 30 "$macro_build_log" >&2 + exit 1 + fi + macro_bin_dir="$(mise exec -- swift build --show-bin-path)" + macro_bundle="$macro_bin_dir/PeriscopeMacrosTests.xctest" + if [ ! -d "$macro_bundle" ]; then + echo "error: SwiftPM did not produce PeriscopeMacrosTests.xctest" >&2 + exit 1 + fi + echo "==> Testing PeriscopeMacrosTests on macOS" + macro_log="$WORKDIR/PeriscopeMacrosTests.log" + set +e + xcrun xctest "$macro_bundle" 2>&1 | tee "$macro_log" + macro_status="${PIPESTATUS[0]}" + set -e + LOGS+=("$macro_log") + [ "$macro_status" -ne 0 ] && overall_status="$macro_status" +fi + +if [ "${#SCHEMES[@]}" -eq 0 ]; then + echo + if [ "$overall_status" -eq 0 ]; then + echo "==> Passed. Logs and result bundles: $WORKDIR" + else + echo "==> Failed (exit $overall_status). Logs and result bundles: $WORKDIR" + fi + exit "$overall_status" +fi + +if [ "$DO_GENERATE" = true ]; then + echo "==> Regenerating project (tuist generate --no-open)" + started="$(phase_started)" + if mise exec -- tuist generate --no-open >"$WORKDIR/generate.log" 2>&1; then + emit_phase_timing generate "$started" + else + status=$? + emit_phase_timing generate "$started" "" "$status" + echo "error: tuist generate failed. Tail of $WORKDIR/generate.log:" >&2 + tail -n 20 "$WORKDIR/generate.log" >&2 + exit "$status" + fi +fi + +if [ -n "$TEST_ARTIFACTS" ]; then + ARTIFACT_SCHEME_ARGS=() + for scheme in "${SCHEMES[@]}"; do + ARTIFACT_SCHEME_ARGS+=(--scheme "$scheme") + done + python3 .circleci/test_artifacts.py resolve-all \ + --root "$TEST_ARTIFACTS" \ + "${ARTIFACT_SCHEME_ARGS[@]}" >/dev/null + echo "Validated test artifacts before simulator boot." +fi + +if [ -n "$BUILD_ARTIFACTS" ]; then + BUILD_ARTIFACTS="$(mkdir -p "$BUILD_ARTIFACTS" && cd "$BUILD_ARTIFACTS" && pwd -P)" + DESTINATION="generic/platform=iOS Simulator" + DERIVED_DATA_ARGS=(-derivedDataPath "$BUILD_ARTIFACTS/DerivedData") +else + SIMULATOR_FLAGS=(--device "$DEVICE" --os "$OS") + [ "$SHARED" = true ] && SIMULATOR_FLAGS+=(--shared) + started="$(phase_started)" + if UDID="$(./simulator "${SIMULATOR_FLAGS[@]}")"; then + emit_phase_timing simulator "$started" + else + status=$? + emit_phase_timing simulator "$started" "" "$status" + exit "$status" + fi + DESTINATION="platform=iOS Simulator,id=$UDID" + DERIVED_DATA_ARGS=() +fi + +# xcodebuild strips the TEST_RUNNER_ prefix on the way in, which is why the +# pipeline reads SNAPSHOT_* rather than these names. +RUN_ENV=() +[ -n "$RECORD" ] && RUN_ENV+=("TEST_RUNNER_SNAPSHOT_RECORD=$RECORD") +[ "$TIMINGS" = true ] && RUN_ENV+=("TEST_RUNNER_SNAPSHOT_TIMING=1") +[ "$REVIEW" = true ] && RUN_ENV+=("TEST_RUNNER_SNAPSHOT_DIFF=1") +[ -n "${SNAPSHOT_SETTLE_TIMEOUT_MULTIPLIER:-}" ] \ + && RUN_ENV+=("TEST_RUNNER_SNAPSHOT_SETTLE_TIMEOUT_MULTIPLIER=$SNAPSHOT_SETTLE_TIMEOUT_MULTIPLIER") +for flyover_name in DIRECTORY PROFILES COMMIT DIRTY BRANCH GENERATED_AT XCODE_VERSION SIMULATOR_DEVICE SIMULATOR_OS; do + flyover_variable="FLYOVER_EXPORT_$flyover_name" + if [ -n "${!flyover_variable:-}" ]; then + RUN_ENV+=("TEST_RUNNER_$flyover_variable=${!flyover_variable}") + fi +done + +# SwiftPM's generated `Bundle.module` accessors honor +# PACKAGE_RESOURCE_BUNDLE_PATH as their first lookup candidate (DEBUG-only, +# which test builds are). The schemes set it to $(BUILT_PRODUCTS_DIR) for +# Xcode-IDE runs, but xcodebuild does not expand build-setting macros in +# scheme environment variables, so this script resolves the concrete path +# and delivers it via TEST_RUNNER_ like the pins above. See +# `packageResourceEnvironment` in Project.swift for why the lookup needs an +# override at all (Xcode 27 beta 4's package linking orphans the resource +# bundles copied into each .xctest). +if [ -n "$TEST_ARTIFACTS" ]; then + BUILT_PRODUCTS_DIR="$(python3 .circleci/test_artifacts.py resolve \ + --root "$TEST_ARTIFACTS" --scheme "${SCHEMES[0]}" --field products)" +elif [ -n "$BUILD_ARTIFACTS" ]; then + BUILT_PRODUCTS_DIR="" +else + BUILT_PRODUCTS_DIR="$(xcodebuild -showBuildSettings \ + -workspace "$WORKSPACE" \ + -scheme "${SCHEMES[0]}" \ + -destination "$DESTINATION" 2>/dev/null \ + | awk -F' = ' '/ BUILT_PRODUCTS_DIR = /{print $2; exit}')" +fi +if [ -n "$BUILT_PRODUCTS_DIR" ]; then + RUN_ENV+=("TEST_RUNNER_PACKAGE_RESOURCE_BUNDLE_PATH=$BUILT_PRODUCTS_DIR") +elif [ -z "$BUILD_ARTIFACTS" ]; then + echo "warning: could not resolve BUILT_PRODUCTS_DIR; package resource" \ + "bundle lookups will fall back to the linker's placement" >&2 +fi + +for scheme in "${SCHEMES[@]}"; do + filters=() + if [ "$scheme" = "$SNAPSHOT_SCHEME" ]; then + filters=(${SNAPSHOT_FILTERS[@]+"${SNAPSHOT_FILTERS[@]}"}) + else + filters=(${UNIT_FILTERS[@]+"${UNIT_FILTERS[@]}"}) + fi + log="$WORKDIR/$scheme.log" + result="$WORKDIR/$scheme.xcresult" + rm -rf "$result" + + if [ "$DO_BUILD" = true ]; then + echo "==> Building $scheme for testing" + started="$(phase_started)" + if xcodebuild build-for-testing \ + -workspace "$WORKSPACE" \ + -scheme "$scheme" \ + -configuration Debug \ + -destination "$DESTINATION" \ + ${DERIVED_DATA_ARGS[@]+"${DERIVED_DATA_ARGS[@]}"} \ + ${BUILD_ARTIFACTS:+ARCHS=arm64} \ + ${BUILD_ARTIFACTS:+ONLY_ACTIVE_ARCH=YES} \ + >"$WORKDIR/$scheme-build.log" 2>&1 + then + emit_phase_timing build "$started" "$scheme" + else + status=$? + emit_phase_timing build "$started" "$scheme" "$status" + echo "error: build failed for $scheme. Tail of $WORKDIR/$scheme-build.log:" >&2 + tail -n 30 "$WORKDIR/$scheme-build.log" >&2 + exit "$status" + fi + fi + + [ -n "$BUILD_ARTIFACTS" ] && continue + + if [ -n "$TEST_ARTIFACTS" ]; then + XCTESTRUN="$(python3 .circleci/test_artifacts.py resolve \ + --root "$TEST_ARTIFACTS" --scheme "$scheme" --field xctestrun)" + TEST_LOCATION=(-xctestrun "$XCTESTRUN") + else + TEST_LOCATION=(-workspace "$WORKSPACE" -scheme "$scheme") + fi + + if [ -n "$ENUMERATE_SUITES" ]; then + raw_enumeration="$WORKDIR/$scheme-enumeration.json" + started="$(phase_started)" + if xcodebuild test-without-building \ + ${TEST_LOCATION[@]+"${TEST_LOCATION[@]}"} \ + -destination "$DESTINATION" \ + -enumerate-tests \ + -test-enumeration-style hierarchical \ + -test-enumeration-format json \ + -test-enumeration-output-path "$raw_enumeration" \ + >"$WORKDIR/$scheme-enumeration.log" 2>&1 + then + python3 .circleci/test_artifacts.py suites \ + --input "$raw_enumeration" --output "$ENUMERATE_SUITES" + emit_phase_timing enumerate "$started" "$scheme" + exit 0 + else + status=$? + emit_phase_timing enumerate "$started" "$scheme" "$status" + tail -n 30 "$WORKDIR/$scheme-enumeration.log" >&2 + exit "$status" + fi + fi + + # One cache entry per scheme + filter set: a run of three bundles and a run + # of the whole scheme have different totals, and mixing them is what made the + # progress line read "368/38". + scope_key="$(printf '%s\n' "$scheme" ${filters[@]+"${filters[@]}"} \ + | shasum | cut -c1-12)" + counts="$WORKDIR/counts-$scheme-$scope_key.json" + progress_args=( + --heartbeat "$HEARTBEAT" + --counts-file "$counts" + --scheme "$scheme" + ) + [ -n "$STATUS_FILE" ] && progress_args+=(--status-file "$STATUS_FILE") + [ "$TIMINGS" = true ] && progress_args+=(--count-images) + + echo "==> Testing $scheme on $DEVICE / iOS $OS" + started="$(phase_started)" + set +e + env ${RUN_ENV[@]+"${RUN_ENV[@]}"} \ + xcodebuild test-without-building \ + ${TEST_LOCATION[@]+"${TEST_LOCATION[@]}"} \ + -destination "$DESTINATION" \ + -resultBundlePath "$result" \ + -collect-test-diagnostics never \ + ${filters[@]+"${filters[@]}"} \ + 2>&1 \ + | tee "$log" \ + | python3 -u Tools/test_runner.py progress "${progress_args[@]}" + # [0] is xcodebuild; [1] is tee and [2] the progress filter. Prefer the + # authoritative test status, then surface a logging/reporting failure when + # Xcode itself succeeded. No pipeline stage may turn a broken run green. + pipeline_statuses=("${PIPESTATUS[@]}") + status="${pipeline_statuses[0]}" + [ "$status" -eq 0 ] && [ "${pipeline_statuses[1]}" -ne 0 ] \ + && status="${pipeline_statuses[1]}" + [ "$status" -eq 0 ] && [ "${pipeline_statuses[2]}" -ne 0 ] \ + && status="${pipeline_statuses[2]}" + set -e + emit_phase_timing test "$started" "$scheme" "$status" + RESULTS+=("$result") + LOGS+=("$log") + [ "$status" -ne 0 ] && overall_status="$status" + if [ -f "$counts.empty" ]; then + rm -f "$counts.empty" + [ "$overall_status" -eq 0 ] && overall_status=1 + fi +done + +if [ -n "$BUILD_ARTIFACTS" ]; then + manifest_args=() + for scheme in "${SCHEMES[@]}"; do + manifest_args+=(--scheme "$scheme") + done + python3 .circleci/test_artifacts.py create \ + --root "$BUILD_ARTIFACTS" "${manifest_args[@]}" + artifact_bytes="$(du -sk "$BUILD_ARTIFACTS/DerivedData/Build/Products" | awk '{print $1 * 1024}')" + printf 'CI_ARTIFACT {"bytes":%s,"schemes":%s}\n' \ + "$artifact_bytes" "${#SCHEMES[@]}" + exit "$overall_status" +fi + +# Failures, reprinted with the identifier that re-runs each one. +if [ "$overall_status" -ne 0 ]; then + echo + rule + echo "FAILURES" + rule + for result in "${RESULTS[@]}"; do + [ -d "$result" ] || continue + xcrun xcresulttool get test-results tests --path "$result" \ + >"$WORKDIR/failures.json" 2>/dev/null || true + python3 Tools/test_runner.py failures \ + --result "$result" --tests-json "$WORKDIR/failures.json" + done +fi + +if [ "$TIMINGS" = true ]; then + echo + rule + echo "SNAPSHOT CAPTURE PHASES" + rule + : >"$WORKDIR/timings.jsonl" + for log in "${LOGS[@]}"; do + grep -o 'SNAPSHOT_TIMING {.*}' "$log" 2>/dev/null \ + | sed 's/^SNAPSHOT_TIMING //' >>"$WORKDIR/timings.jsonl" || true + done + python3 Tools/snapshot_reports.py timings "$WORKDIR/timings.jsonl" +fi + +if [ "$REVIEW" = true ]; then + echo + rule + echo "SNAPSHOT DIFFERENCES" + rule + : >"$WORKDIR/diffs.jsonl" + for log in "${LOGS[@]}"; do + grep -o 'SNAPSHOT_DIFF {.*}' "$log" 2>/dev/null \ + | sed 's/^SNAPSHOT_DIFF //' >>"$WORKDIR/diffs.jsonl" || true + done + difference_args=() + [ -n "$RECORD" ] && [ "$RECORD" != never ] && difference_args+=(--recording) + python3 Tools/snapshot_reports.py differences \ + "$WORKDIR/diffs.jsonl" ${difference_args[@]+"${difference_args[@]}"} +fi + +echo +if [ "$overall_status" -eq 0 ]; then + echo "==> Passed. Logs and result bundles: $WORKDIR" +else + echo "==> Failed (exit $overall_status). Logs and result bundles: $WORKDIR" +fi +exit "$overall_status" From bf59295248f61c91011665ee660b9fe7ba1bdb8e Mon Sep 17 00:00:00 2001 From: Kyle Van Essen Date: Mon, 9 Nov 2026 15:14:03 -0500 Subject: [PATCH 07/12] Reconcile capture insets after UIKit containment and preserve native layout propagation --- Shared/SnapshotKitTesting/AGENTS.md | 4 +- Shared/SnapshotKitTesting/README.md | 5 +- .../Sources/SnapshotImageRendering.swift | 99 ++++++++++++------- 3 files changed, 67 insertions(+), 41 deletions(-) diff --git a/Shared/SnapshotKitTesting/AGENTS.md b/Shared/SnapshotKitTesting/AGENTS.md index 62a64080d..533e20d93 100644 --- a/Shared/SnapshotKitTesting/AGENTS.md +++ b/Shared/SnapshotKitTesting/AGENTS.md @@ -62,8 +62,8 @@ Read the root [`AGENTS.md`](../../AGENTS.md) first. - **Five invented captures also landed in `--timings`.** Then a run that captured nothing reported "5 captures, 0.024s per image". - **Read display bounds and scale from the marked test-host window.** Never select a process-global main screen. - **Keep the scene only for fixed, regular-width phone captures with inset overrides.** Resolve the predicate from the content controller’s traits before hosting. -- **Detach already-mounted subjects before configuring the capture host.** For fixed captures, subtract the resized host controller’s native insets from the requested clearance. -- **Override only the captured root’s safe-area getter.** Native controller insets own ancestor propagation; root pinning preserves translated tile geometry. +- **Detach already-mounted subjects before configuring the capture host.** Reconcile host insets after containment and settlement, when UIKit has updated its native geometry. +- **Override only the captured root’s safe-area getter, during pixel rendering.** Keep native getters during containment, measurement, and settling so inset changes propagate to children. Root pinning preserves translated tile geometry. - **Detach other synthetic captures, including compact phones, tablets, and full content.** Resize the marked window with the content. - **Restore the scene, frames, insets, visibility, and key state after every capture.** Guard: `SnapshotImageRenderingTests`. - **Keep native geometry when the inset override is nil.** Synthetic captures do not validate Duo system bars or reserved-region delivery. diff --git a/Shared/SnapshotKitTesting/README.md b/Shared/SnapshotKitTesting/README.md index b8c71a9fd..94d705eff 100644 --- a/Shared/SnapshotKitTesting/README.md +++ b/Shared/SnapshotKitTesting/README.md @@ -336,9 +336,10 @@ See [SnapshotKit's adaptive container contract](../SnapshotKit/README.md#adaptiv Fixed, regular-width phone captures retain their scene so native bar heights stay stable during settlement. The pipeline selects this path from the content controller’s layout traits before hosting. Other synthetic captures detach the marked window. This prevents physical reserved regions from truncating compact titles and keeps full-content search anchored to expanded content. -For fixed captures, the pipeline subtracts the resized host controller’s native insets from the requested clearance. +The pipeline reconciles the host controller’s effective insets after containment and settlement. It detaches already-mounted subjects before configuring the capture host. -Only the captured root overrides its safe-area getter. Native controller insets supply ancestor clearance; root pinning preserves translated tile geometry. +Native safe-area getters remain active during layout so inset changes reach child controllers. +Only pixel rendering overrides the captured root’s getter to preserve translated tile geometry. Annotation padding has zero safe-area insets so image content and accessibility outlines share the same layout. The host controller propagates the configured content insets through native navigation containers. diff --git a/Shared/SnapshotKitTesting/Sources/SnapshotImageRendering.swift b/Shared/SnapshotKitTesting/Sources/SnapshotImageRendering.swift index 983835926..e1699689d 100644 --- a/Shared/SnapshotKitTesting/Sources/SnapshotImageRendering.swift +++ b/Shared/SnapshotKitTesting/Sources/SnapshotImageRendering.swift @@ -322,11 +322,7 @@ func renderSnapshotCaptureLocked( window.windowScene = nil window.makeKeyAndVisible() } - if case .fixed = sizing { - hostRoot.additionalSafeAreaInsets = .zero - } else { - hostRoot.additionalSafeAreaInsets = safeAreaInsets - } + hostRoot.additionalSafeAreaInsets = safeAreaInsets } // Set on the content controller itself (not a wrapper) so it survives @@ -337,17 +333,6 @@ func renderSnapshotCaptureLocked( if case .fixed = sizing { resizeHostWindow(window, root: hostRoot, to: initialContentFrame.size) - if let safeAreaInsets { - // The native controller can retain clearance even with no scene. - // Match its effective inset to the captured root's getter override. - let nativeInsets = hostRoot.view.safeAreaInsets - hostRoot.additionalSafeAreaInsets = UIEdgeInsets( - top: safeAreaInsets.top - nativeInsets.top, - left: safeAreaInsets.left - nativeInsets.left, - bottom: safeAreaInsets.bottom - nativeInsets.bottom, - right: safeAreaInsets.right - nativeInsets.right, - ) - } } try await resolveContentSize( @@ -359,6 +344,7 @@ func renderSnapshotCaptureLocked( measurementHookMaximumDuration: measurementHookTimeout .map { $0 * settleTimeoutPolicy.multiplier } ?? settleTimeoutPolicy.maximumDuration(for: settle), + safeAreaInsets: safeAreaInsets, hostedIn: hostRoot, window: window, timing: timing, @@ -379,6 +365,7 @@ func renderSnapshotCaptureLocked( hostChildForCapture(wrappingViewController, in: hostRoot) wrappingViewController.view.setNeedsLayout() CATransaction.performWithoutAnimation(wrappingViewController.view.layoutIfNeeded) + reconcileCaptureInsets(safeAreaInsets, in: hostRoot) } defer { removeChildAfterCapture(viewController) @@ -403,6 +390,23 @@ func renderSnapshotCaptureLocked( named: name, ) + if reconcileCaptureInsets(safeAreaInsets, in: hostRoot) { + try await throwIfUnsettled( + timing.measure(.settle) { + await settleForCapture( + wrappingViewController.view, + named: name, + settle: settle, + timing: timing, + timeoutPolicy: settleTimeoutPolicy, + ) + }, + phase: "native inset reconciliation", + of: viewController, + named: name, + ) + } + // The pre-capture hook sees fully settled content, then its own // effects (a focused field, a presented state) are settled before the // accessibility parse and capture below reflect them. @@ -505,30 +509,30 @@ func renderSnapshotCaptureLocked( viewController.view.hideTextInputCursors() timing.measure(.drain) { drainInFlightAnimations() } - // Drain rendering intermediates before returning to the async caller. - // Only the normalized image and PNG bytes escape this synchronous pool. - return try autoreleasepool { - let image = timing.measure(.tileStitch) { - tileAndStitchImage(of: wrappingViewController, timing: timing) - } - // Preserve scale so comparison sees the same pixels as the disk artifact. - return try timing.measure(.pngRoundTrip) { - guard let pngData = image.pngData(), - let decoded = UIImage(data: pngData, scale: image.scale) - else { - throw SnapshotRenderingError.pngEncodingFailed(name: name) + /// Drain rendering intermediates before returning to the async caller. + /// Only the normalized image and PNG bytes escape this synchronous pool. + func render() throws -> SnapshotCapture { + try autoreleasepool { + let image = timing.measure(.tileStitch) { + tileAndStitchImage(of: wrappingViewController, timing: timing) + } + // Preserve scale so comparison sees the same pixels as the disk artifact. + return try timing.measure(.pngRoundTrip) { + guard let pngData = image.pngData(), + let decoded = UIImage(data: pngData, scale: image.scale) + else { + throw SnapshotRenderingError.pngEncodingFailed(name: name) + } + return SnapshotCapture(image: decoded, pngData: pngData) } - return SnapshotCapture(image: decoded, pngData: pngData) } } - } - - if let safeAreaInsets { - return try await swizzle( - safeAreaInsets: safeAreaInsets, - for: viewController, - operation: capture, - ) + if let safeAreaInsets { + return try await swizzle(safeAreaInsets: safeAreaInsets, for: viewController) { + try render() + } + } + return try render() } return try await capture() } @@ -565,6 +569,25 @@ private func removeChildAfterCapture(_ child: UIViewController) { child.removeFromParent() } +/// Reconciles native ancestor clearance after containment has updated scene geometry. +@MainActor +@discardableResult +private func reconcileCaptureInsets(_ requested: UIEdgeInsets?, in root: UIViewController) -> Bool { + guard let requested else { return false } + let actual = root.view.safeAreaInsets + guard actual != requested else { return false } + let additional = root.additionalSafeAreaInsets + root.additionalSafeAreaInsets = UIEdgeInsets( + top: additional.top + requested.top - actual.top, + left: additional.left + requested.left - actual.left, + bottom: additional.bottom + requested.bottom - actual.bottom, + right: additional.right + requested.right - actual.right, + ) + root.view.setNeedsLayout() + CATransaction.performWithoutAnimation(root.view.layoutIfNeeded) + return true +} + /// Keeps native chrome aligned with the synthetic viewport after scene isolation. @MainActor private func resizeHostWindow(_ window: UIWindow, root: UIViewController, to size: CGSize) { @@ -608,6 +631,7 @@ private func resolveContentSize( settle: SnapshotSettle, onReadyToMeasure: (@MainActor () async throws -> Void)?, measurementHookMaximumDuration: TimeInterval, + safeAreaInsets: UIEdgeInsets?, hostedIn hostRoot: UIViewController, window: UIWindow, timing: SnapshotCaptureTiming, @@ -637,6 +661,7 @@ private func resolveContentSize( hostChildForCapture(wrapper, in: hostRoot) wrapper.view.setNeedsLayout() CATransaction.performWithoutAnimation(wrapper.view.layoutIfNeeded) + reconcileCaptureInsets(safeAreaInsets, in: hostRoot) return wrapper } defer { From c563a12fce5861f70cf911fce95c6ee9f8a0200f Mon Sep 17 00:00:00 2001 From: Kyle Van Essen Date: Mon, 9 Nov 2026 16:52:53 -0500 Subject: [PATCH 08/12] Preserve scene-backed capture chrome with explicit frame policy --- .github/workflows/ci.yml | 1 - README.md | 2 +- .../PeriscopeViewerSnapshotTests.swift | 7 +++- Shared/SnapshotKit/AGENTS.md | 1 + Shared/SnapshotKit/README.md | 7 +++- .../Sources/SnapshotConfiguration.swift | 19 +++++++++ .../Sources/SnapshotDuoFrames.swift | 2 +- .../Tests/SnapshotConfigurationTests.swift | 10 +++++ Shared/SnapshotKitTesting/AGENTS.md | 4 +- Shared/SnapshotKitTesting/README.md | 8 +++- .../Sources/CaptureConfiguredSnapshot.swift | 1 + .../Sources/SnapshotImageRendering.swift | 15 +++++-- .../Sources/SnapshotPNG.swift | 1 + .../Tests/SnapshotImageRenderingTests.swift | 39 ++++++++++++++----- .../Tests/SnapshotPNGTests.swift | 33 +++++++++++++--- .../Sources/Shared/WhereThemePicker.swift | 2 +- 16 files changed, 124 insertions(+), 28 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4eb7665c0..2aa0f971e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,6 @@ permissions: contents: read env: - # The runner label carries several Xcodes. Select the pinned minor explicitly. # CI installs tools only. Agent skills are local-development inputs, and mise # otherwise runs the postinstall hook even when every tool is already cached. MISE_NO_HOOKS: "1" diff --git a/README.md b/README.md index f9859196b..a3145d7b8 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Random apps and stuff. - Xcode 27.2 (major.minor version pinned in `.xcode-version`; a full Xcode.app, not the Command Line Tools) - iOS 27.2 Simulator runtime for development and tests -- iOS 27.0+ +- iOS 27.1+ ## Getting started diff --git a/Shared/Periscope/PeriscopeTools/SnapshotTests/PeriscopeViewerSnapshotTests.swift b/Shared/Periscope/PeriscopeTools/SnapshotTests/PeriscopeViewerSnapshotTests.swift index 351953ff3..be0420a54 100644 --- a/Shared/Periscope/PeriscopeTools/SnapshotTests/PeriscopeViewerSnapshotTests.swift +++ b/Shared/Periscope/PeriscopeTools/SnapshotTests/PeriscopeViewerSnapshotTests.swift @@ -18,7 +18,12 @@ struct PeriscopeViewerSnapshotTests { await assertSnapshots( of: viewer, named: "PeriscopeViewer", - configurations: .fullContentPhoneLightDark, + // Native segmented glass loses its selected appearance without a scene. + configurations: [ColorScheme.light, .dark].map { + var frame = SnapshotConfiguration.Frame.iPhoneFullContent + frame.scenePolicy = .retained + return SnapshotConfiguration(colorScheme: $0, device: frame) + }, ) } diff --git a/Shared/SnapshotKit/AGENTS.md b/Shared/SnapshotKit/AGENTS.md index 9b62ef54c..51ca18371 100644 --- a/Shared/SnapshotKit/AGENTS.md +++ b/Shared/SnapshotKit/AGENTS.md @@ -49,6 +49,7 @@ Read the root [`AGENTS.md`](../../AGENTS.md) first. - **If a container is intentionally bounded or greedy, snapshot its shared scrolling child directly.** Never add snapshot-only production layout. - **Fixed device frames are for non-scrolling subjects.** Use explicit `Frame.viewport` captures for bounded adaptive shells only with full-content pane coverage. - **Keep frame names stable when setting layout traits.** Presets carry truthful size classes and idioms; component frames inherit. +- **Keep scene retention explicit.** Use `Frame.scenePolicy = .retained` only for subjects that require native scene-backed chrome. Preserve truthful traits, configured insets, and full-content sizing. This policy keeps identifiers unchanged; name variants explicitly if both policies appear in one matrix. Preview rendering does not guarantee retained-scene fidelity. - **Source Duo frames from native measurements.** Re-measure `Documentation/DuoMeasurements.json` when the runtime pin changes. Synthetic frames do not change native pose or bar arrangement. - **Create a separate case and model for each new adaptive configuration.** Readiness hooks must target that configuration's model. - **Use two-axis full-content frames only for spatial canvases.** Choose `.iPhoneFullContent2D`, `.iPadFullContent2D`, or an explicit `.fullContent2D` when the production subject intentionally scrolls in both dimensions. diff --git a/Shared/SnapshotKit/README.md b/Shared/SnapshotKit/README.md index 4f0f6927b..0dff576f4 100644 --- a/Shared/SnapshotKit/README.md +++ b/Shared/SnapshotKit/README.md @@ -215,8 +215,13 @@ Use `Frame.viewport` to capture bounded adaptive shells. Pair these images with Create independent models and readiness hooks for each configuration. Keep one mounted model only in deliberate resize tests. Device-specific profiles require measured runtime bounds, scale, insets, and reserved regions. Synthetic windows test layout policy; they do not validate native folding or system bars. +`Frame.scenePolicy` defaults to `.automatic`. Opt into `.retained` only when a subject needs scene-backed native chrome. +Retention preserves the frame’s size, traits, and insets, but physical reserved regions can affect native chrome. +It does not change reference identifiers; name variants explicitly when comparing both policies. Previews remain an approximation. -The Duo presets use [native simulator measurements](Documentation/DuoMeasurements.json) from Xcode build `27A9275`, runtime `24A94232`. +The Duo presets retain [native iOS 27.1 measurements](Documentation/DuoMeasurements.json) from Xcode build `27A9275`, runtime `24A94232`. +Re-measurement on the native 27.2 Duo runtime remains pending in the [release validation item](../../TODOs.md). +Synthetic captures on the current runtime verify layout against these recorded profiles, not current native geometry. All four profiles use 3× scale and the phone idiom. | Frame | Bounds (points) | Horizontal / vertical size class | Insets (top, left, bottom, right) | diff --git a/Shared/SnapshotKit/Sources/SnapshotConfiguration.swift b/Shared/SnapshotKit/Sources/SnapshotConfiguration.swift index 888340b51..a82766e57 100644 --- a/Shared/SnapshotKit/Sources/SnapshotConfiguration.swift +++ b/Shared/SnapshotKit/Sources/SnapshotConfiguration.swift @@ -156,16 +156,31 @@ extension SnapshotConfiguration { /// unchanged. public var layoutTraits: LayoutTraits? + /// Preserve the host scene only for subjects whose native chrome needs it. + /// This can expose physical reserved regions; it does not simulate a Duo pose. + /// Previews remain an approximation. This policy does not change identifiers. + public var scenePolicy: ScenePolicy + + public enum ScenePolicy: Hashable, Sendable { + /// Keep the scene for fixed regular-width phone captures; detach other + /// synthetic captures so physical geometry cannot affect their layout. + case automatic + /// Keep the scene while applying the configured size, traits, and insets. + case retained + } + public init( name: String, size: SizeStrategy, safeAreaInsets: Insets = .zero, layoutTraits: LayoutTraits? = nil, + scenePolicy: ScenePolicy = .automatic, ) { self.name = name self.size = size self.safeAreaInsets = safeAreaInsets self.layoutTraits = layoutTraits + self.scenePolicy = scenePolicy } /// Safe-area insets in points. A minimal `Hashable` value type so @@ -195,12 +210,14 @@ extension SnapshotConfiguration { size: CGSize, safeAreaInsets: Insets = .zero, layoutTraits: LayoutTraits, + scenePolicy: ScenePolicy = .automatic, ) -> Frame { Frame( name: name, size: .fixed(size), safeAreaInsets: safeAreaInsets, layoutTraits: layoutTraits, + scenePolicy: scenePolicy, ) } @@ -234,11 +251,13 @@ extension SnapshotConfiguration { width: CGFloat, minimumHeight: CGFloat? = nil, layoutTraits: LayoutTraits? = nil, + scenePolicy: ScenePolicy = .automatic, ) -> Frame { Frame( name: name, size: .fullContent(width: width, minimumHeight: minimumHeight), layoutTraits: layoutTraits, + scenePolicy: scenePolicy, ) } diff --git a/Shared/SnapshotKit/Sources/SnapshotDuoFrames.swift b/Shared/SnapshotKit/Sources/SnapshotDuoFrames.swift index aa3113ee9..30e4a445d 100644 --- a/Shared/SnapshotKit/Sources/SnapshotDuoFrames.swift +++ b/Shared/SnapshotKit/Sources/SnapshotDuoFrames.swift @@ -1,7 +1,7 @@ import CoreGraphics extension SnapshotConfiguration.Frame { - /// Duo outer portrait bounds and insets measured on the pinned simulator. + /// Duo outer portrait bounds and insets from the recorded native measurements. /// These synthetic viewports do not change the host simulator's physical pose. /// See `Documentation/DuoMeasurements.json` for the native measurements. public static let duoOuterPortrait = viewport( diff --git a/Shared/SnapshotKit/Tests/SnapshotConfigurationTests.swift b/Shared/SnapshotKit/Tests/SnapshotConfigurationTests.swift index 31b26ca62..c686e159e 100644 --- a/Shared/SnapshotKit/Tests/SnapshotConfigurationTests.swift +++ b/Shared/SnapshotKit/Tests/SnapshotConfigurationTests.swift @@ -5,6 +5,16 @@ import Testing /// Pure-logic tests for the ``SnapshotConfiguration`` matrix: combination counts, /// preset shapes, and the identifier omission rules that name reference images. struct SnapshotConfigurationTests { + @Test func retainedScenePreservesFrameIdentity() { + let original = SnapshotConfiguration(device: .iPhoneFullContent) + var retained = original + retained.device.scenePolicy = .retained + #expect(original.device.scenePolicy == .automatic) + #expect(original.identifier == retained.identifier) + #expect(original != retained) + #expect(Set([original, retained]).count == 2) + } + @Test func adaptiveLayoutTraitsHaveStableDistinctIdentifierTokens() { let phonePortrait = SnapshotConfiguration(layoutTraits: .phonePortrait) let phoneLandscape = SnapshotConfiguration(layoutTraits: .phoneLandscape) diff --git a/Shared/SnapshotKitTesting/AGENTS.md b/Shared/SnapshotKitTesting/AGENTS.md index 533e20d93..673956bae 100644 --- a/Shared/SnapshotKitTesting/AGENTS.md +++ b/Shared/SnapshotKitTesting/AGENTS.md @@ -61,10 +61,10 @@ Read the root [`AGENTS.md`](../../AGENTS.md) first. - **When they were one function, this module's own tests put a fabricated reference at the top of `./test --review`.** Its numbers were borrowed from a real regression. - **Five invented captures also landed in `--timings`.** Then a run that captured nothing reported "5 captures, 0.024s per image". - **Read display bounds and scale from the marked test-host window.** Never select a process-global main screen. -- **Keep the scene only for fixed, regular-width phone captures with inset overrides.** Resolve the predicate from the content controller’s traits before hosting. +- **By default, keep the scene only for fixed, regular-width phone captures with inset overrides.** Resolve the predicate from the content controller’s traits before hosting. - **Detach already-mounted subjects before configuring the capture host.** Reconcile host insets after containment and settlement, when UIKit has updated its native geometry. - **Override only the captured root’s safe-area getter, during pixel rendering.** Keep native getters during containment, measurement, and settling so inset changes propagate to children. Root pinning preserves translated tile geometry. -- **Detach other synthetic captures, including compact phones, tablets, and full content.** Resize the marked window with the content. +- **Detach other synthetic captures unless the frame explicitly requests `.retained` scene policy.** Retention preserves configured traits and insets but can expose physical reserved regions. Keep it off general presets; review chrome and full-content completeness at each opt-in. Resize the marked window with the content. - **Restore the scene, frames, insets, visibility, and key state after every capture.** Guard: `SnapshotImageRenderingTests`. - **Keep native geometry when the inset override is nil.** Synthetic captures do not validate Duo system bars or reserved-region delivery. - **Inset overrides describe content clearance.** Propagate them through the host controller. Native floating bars can retain system positioning; validate their reserved-region clearance on the native runtime. diff --git a/Shared/SnapshotKitTesting/README.md b/Shared/SnapshotKitTesting/README.md index 94d705eff..1fad9703c 100644 --- a/Shared/SnapshotKitTesting/README.md +++ b/Shared/SnapshotKitTesting/README.md @@ -109,6 +109,8 @@ The fixed anchor detects cumulative motion that exceeds one unit within the quie It cannot distinguish slower motion inside that allowance from noise, or detect detail lost at the sample resolution. Readiness hooks and measured minimum durations remain necessary for asynchronous content and native glass adaptation. Final reference comparisons keep their existing tolerances and use the full capture after PNG encoding and decoding. +Ordinary assertions reuse those PNG bytes for comparison, diagnostics, and recording. +Comparison sheets encode a new PNG after composition to include their panel map. ## Quick start @@ -335,7 +337,7 @@ See [SnapshotKit's adaptive container contract](../SnapshotKit/README.md#adaptiv Fixed, regular-width phone captures retain their scene so native bar heights stay stable during settlement. The pipeline selects this path from the content controller’s layout traits before hosting. -Other synthetic captures detach the marked window. This prevents physical reserved regions from truncating compact titles and keeps full-content search anchored to expanded content. +Other synthetic captures detach the marked window by default. This prevents physical reserved regions from truncating compact titles and keeps full-content search anchored to expanded content. The pipeline reconciles the host controller’s effective insets after containment and settlement. It detaches already-mounted subjects before configuring the capture host. Native safe-area getters remain active during layout so inset changes reach child controllers. @@ -343,6 +345,10 @@ Only pixel rendering overrides the captured root’s getter to preserve translat Annotation padding has zero safe-area insets so image content and accessibility outlines share the same layout. The host controller propagates the configured content insets through native navigation containers. +A frame can opt into `scenePolicy: .retained` when native chrome requires a scene. +The lab preview and Periscope segmented toolbar use this option. +It preserves the configured size, traits, insets, and full-content measurement, but physical reserved regions can still affect native chrome. +Keep it off general presets and review each opt-in. The pipeline restores the scene, frames, additional insets, visibility, and key state after success or failure. Window discovery, environment checks, and content preparation run under the same capture lock. Capture hooks use their retained model or view references while the window is detached. diff --git a/Shared/SnapshotKitTesting/Sources/CaptureConfiguredSnapshot.swift b/Shared/SnapshotKitTesting/Sources/CaptureConfiguredSnapshot.swift index d993bf794..c67176b80 100644 --- a/Shared/SnapshotKitTesting/Sources/CaptureConfiguredSnapshot.swift +++ b/Shared/SnapshotKitTesting/Sources/CaptureConfiguredSnapshot.swift @@ -57,6 +57,7 @@ func captureConfiguredSnapshot( named: name, sizing: sizing, safeAreaInsets: configuration.device.safeAreaInsets.uiEdgeInsets, + scenePolicy: configuration.device.scenePolicy, isAccessibility: configuration.snapshotType == .accessibility, measurementReadiness: measurementReadiness, onReadyToMeasure: onReadyToMeasure, diff --git a/Shared/SnapshotKitTesting/Sources/SnapshotImageRendering.swift b/Shared/SnapshotKitTesting/Sources/SnapshotImageRendering.swift index e1699689d..8b574fa8c 100644 --- a/Shared/SnapshotKitTesting/Sources/SnapshotImageRendering.swift +++ b/Shared/SnapshotKitTesting/Sources/SnapshotImageRendering.swift @@ -178,6 +178,7 @@ public func renderSnapshotImage( named name: String, sizing: SnapshotSizing = .fixed, safeAreaInsets: UIEdgeInsets? = .zero, + scenePolicy: SnapshotConfiguration.Frame.ScenePolicy = .automatic, isAccessibility: Bool = false, measurementReadiness: SnapshotMeasurementReadiness = .sameAsCapture, onReadyToMeasure: (@MainActor () async throws -> Void)? = nil, @@ -191,6 +192,7 @@ public func renderSnapshotImage( named: name, sizing: sizing, safeAreaInsets: safeAreaInsets, + scenePolicy: scenePolicy, isAccessibility: isAccessibility, measurementReadiness: measurementReadiness, onReadyToMeasure: onReadyToMeasure, @@ -212,7 +214,7 @@ public func renderSnapshotImage( public let pngData: Data } -/// ``renderSnapshotImage(of:named:sizing:safeAreaInsets:isAccessibility:measurementReadiness:onReadyToMeasure:measurementHookTimeout:settle:onReadyToSnapshot:)`` +/// ``renderSnapshotImage(of:named:sizing:safeAreaInsets:scenePolicy:isAccessibility:measurementReadiness:onReadyToMeasure:measurementHookTimeout:settle:onReadyToSnapshot:)`` /// with a caller-supplied phase recorder, so `assertSnapshots` can attribute the /// capture *and* the comparison that follows it to one line of output, and can /// compare the captured bytes against the reference without re-encoding. @@ -222,6 +224,7 @@ public func renderSnapshotImage( named name: String, sizing: SnapshotSizing, safeAreaInsets: UIEdgeInsets?, + scenePolicy: SnapshotConfiguration.Frame.ScenePolicy = .automatic, isAccessibility: Bool, measurementReadiness: SnapshotMeasurementReadiness, onReadyToMeasure: (@MainActor () async throws -> Void)?, @@ -238,6 +241,7 @@ public func renderSnapshotImage( named: name, sizing: sizing, safeAreaInsets: safeAreaInsets, + scenePolicy: scenePolicy, isAccessibility: isAccessibility, measurementReadiness: measurementReadiness, onReadyToMeasure: onReadyToMeasure, @@ -251,7 +255,7 @@ public func renderSnapshotImage( } /// The capture body of -/// ``renderSnapshotImage(of:named:sizing:safeAreaInsets:isAccessibility:measurementReadiness:onReadyToMeasure:measurementHookTimeout:settle:onReadyToSnapshot:)``, +/// ``renderSnapshotImage(of:named:sizing:safeAreaInsets:scenePolicy:isAccessibility:measurementReadiness:onReadyToMeasure:measurementHookTimeout:settle:onReadyToSnapshot:)``, /// run while holding ``SnapshotCaptureLock``. @MainActor func renderSnapshotCaptureLocked( @@ -260,6 +264,7 @@ func renderSnapshotCaptureLocked( named name: String, sizing: SnapshotSizing, safeAreaInsets: UIEdgeInsets?, + scenePolicy: SnapshotConfiguration.Frame.ScenePolicy = .automatic, isAccessibility: Bool, measurementReadiness: SnapshotMeasurementReadiness, onReadyToMeasure: (@MainActor () async throws -> Void)?, @@ -312,9 +317,11 @@ func renderSnapshotCaptureLocked( if let safeAreaInsets { // Regular-width phone bars require a scene to keep their height stable. - // Other synthetic layouts detach so physical reserved regions cannot + // Other synthetic layouts detach unless explicitly retained, so physical regions cannot // truncate their titles or move controls into overflow. - let retainsScene: Bool = if case .fixed = sizing { + let retainsScene: Bool = if scenePolicy == .retained { + true + } else if case .fixed = sizing { viewController.traitCollection.horizontalSizeClass == .regular && viewController.traitCollection.userInterfaceIdiom == .phone } else { false } diff --git a/Shared/SnapshotKitTesting/Sources/SnapshotPNG.swift b/Shared/SnapshotKitTesting/Sources/SnapshotPNG.swift index 55b2be613..4ff1bac71 100644 --- a/Shared/SnapshotKitTesting/Sources/SnapshotPNG.swift +++ b/Shared/SnapshotKitTesting/Sources/SnapshotPNG.swift @@ -46,6 +46,7 @@ public func captureSnapshotPNG( named: name, sizing: sizing, safeAreaInsets: safeAreaInsets, + scenePolicy: configuration.device.scenePolicy, isAccessibility: configuration.snapshotType == .accessibility, measurementReadiness: measurementReadiness, onReadyToMeasure: onReadyToMeasure, diff --git a/Shared/SnapshotKitTesting/Tests/SnapshotImageRenderingTests.swift b/Shared/SnapshotKitTesting/Tests/SnapshotImageRenderingTests.swift index 2164438fe..546897af3 100644 --- a/Shared/SnapshotKitTesting/Tests/SnapshotImageRenderingTests.swift +++ b/Shared/SnapshotKitTesting/Tests/SnapshotImageRenderingTests.swift @@ -157,7 +157,8 @@ struct SnapshotImageRenderingTests { } private enum CaptureLayout: CaseIterable { - case compactViewport, regularViewport, fullContent + case compactViewport, regularViewport, fullContent, retainedTabletViewport, + retainedFullContent } private func verifyWindowRestoration( @@ -165,7 +166,9 @@ struct SnapshotImageRenderingTests { anotherWindowIsKey: Bool, layout: CaptureLayout, ) async throws { - let intrinsic = layout == .fullContent + let intrinsic = layout == .fullContent || layout == .retainedFullContent + let explicitlyRetained = layout == .retainedTabletViewport || layout == .retainedFullContent + let expectsScene = explicitlyRetained || layout == .regularViewport try waitFor { hostKeyWindow() != nil } let window = try #require(hostKeyWindow()) let scene = try #require(window.windowScene) @@ -189,15 +192,32 @@ struct SnapshotImageRenderingTests { let wasHidden = window.isHidden let animationsWereEnabled = UIView.areAnimationsEnabled let host = UIHostingController(rootView: Color.red) - host.traitOverrides.userInterfaceIdiom = .phone - host.traitOverrides.horizontalSizeClass = layout == .regularViewport ? .regular : .compact + host.traitOverrides.userInterfaceIdiom = layout == .retainedTabletViewport ? .pad : .phone + host.traitOverrides + .horizontalSizeClass = layout == .regularViewport || layout == .retainedTabletViewport ? + .regular : .compact host.traitOverrides.verticalSizeClass = .regular let additionalInsets = UIEdgeInsets(top: 5, left: 7, bottom: 9, right: 11) host.additionalSafeAreaInsets = additionalInsets let contentFrame = CGRect(x: 0, y: 0, width: 280, height: 400) host.view.frame = contentFrame - let readiness: (@MainActor @Sendable () async throws -> Void)? = if fails { - { throw WindowRestorationFailure.readiness } + let requestedInsets = UIEdgeInsets(top: 13, left: 0, bottom: 17, right: 0) + let verifyHost: @MainActor @Sendable () -> Void = { + if expectsScene { #expect(window.windowScene === scene) } + else { #expect(window.windowScene == nil) } + #expect(host.view.window === window) + #expect(host.traitCollection + .userInterfaceIdiom == (layout == .retainedTabletViewport ? .pad : .phone)) + #expect(host.traitCollection + .horizontalSizeClass == + (layout == .regularViewport || layout == .retainedTabletViewport ? .regular : + .compact)) + } + let readiness: (@MainActor @Sendable () async throws -> Void)? = if intrinsic || fails { + { + verifyHost() + if fails { throw WindowRestorationFailure.readiness } + } } else { nil } do { @@ -205,12 +225,13 @@ struct SnapshotImageRenderingTests { of: host, named: "window-restoration", sizing: intrinsic ? .intrinsic(width: 280, minimumHeight: 400) : .fixed, + safeAreaInsets: requestedInsets, + scenePolicy: explicitlyRetained ? .retained : .automatic, onReadyToMeasure: readiness, settle: .immediate, onReadyToSnapshot: { - if layout == .regularViewport { #expect(window.windowScene === scene) } - else { #expect(window.windowScene == nil) } - #expect(host.view.window === window) + verifyHost() + #expect(root.view.safeAreaInsets == requestedInsets) #expect(window.bounds.size == contentFrame.size) }, ) diff --git a/Shared/SnapshotKitTesting/Tests/SnapshotPNGTests.swift b/Shared/SnapshotKitTesting/Tests/SnapshotPNGTests.swift index 1f57acc10..2da9e3c2b 100644 --- a/Shared/SnapshotKitTesting/Tests/SnapshotPNGTests.swift +++ b/Shared/SnapshotKitTesting/Tests/SnapshotPNGTests.swift @@ -82,15 +82,27 @@ struct SnapshotPNGTests { #expect(finalHookRan) } - @Test func capturesFullHeightContent() async throws { + @Test(arguments: [SnapshotConfiguration.Frame.ScenePolicy.automatic, .retained]) + func capturesFullHeightContent(scenePolicy: SnapshotConfiguration.Frame + .ScenePolicy) async throws + { + try waitFor { hostKeyWindow() != nil } + let window = try #require(hostKeyWindow()) + let scene = try #require(window.windowScene) + let blueHeight = window.bounds.height + 100 let content = ScrollView { VStack(spacing: 0) { Color.red.frame(height: 100) - Color.blue.frame(height: 100) + Color.blue.frame(height: blueHeight) } } let configuration = SnapshotConfiguration( - device: .fullContent(name: "full-height-probe", width: 100, minimumHeight: 60), + device: .fullContent( + name: "full-height-probe", + width: 100, + minimumHeight: 60, + scenePolicy: scenePolicy, + ), ) let png = try await captureSnapshotPNG( @@ -100,12 +112,21 @@ struct SnapshotPNGTests { sizing: .intrinsic(width: 100, minimumHeight: 60), safeAreaInsets: .zero, measurementReadiness: .immediate, - onReadyToMeasure: nil, + onReadyToMeasure: { + if scenePolicy == .retained { #expect(window.windowScene === scene) } + else { #expect(window.windowScene == nil) } + }, settle: .immediate, - onReadyToSnapshot: nil, + onReadyToSnapshot: { + if scenePolicy == .retained { #expect(window.windowScene === scene) } + else { #expect(window.windowScene == nil) } + }, ) - #expect(png.pointSize == CGSize(width: 100, height: 200)) + #expect(png.pointSize == CGSize(width: 100, height: blueHeight + 100)) + let image = try #require(UIImage(data: png.data, scale: png.scale)) + #expect(image.probePixel(atUnitPoint: CGPoint(x: 0.5, y: 0.9)).blue > 0.9) + #expect(window.windowScene === scene) } @Test func capturesTwoAxisFullContent() async throws { diff --git a/Where/WhereUI/Sources/Shared/WhereThemePicker.swift b/Where/WhereUI/Sources/Shared/WhereThemePicker.swift index 53d64c333..0b94df7f9 100644 --- a/Where/WhereUI/Sources/Shared/WhereThemePicker.swift +++ b/Where/WhereUI/Sources/Shared/WhereThemePicker.swift @@ -84,7 +84,7 @@ private struct WhereThemeOption: View { .font(.caption) .foregroundStyle(.secondary) .fixedSize(horizontal: false, vertical: true) - .lineLimit(3, reservesSpace: true) + .lineLimit(3...) } } .padding(stylesheet.spacing.medium) From 9e759fc8b0ac8db6569bfb03d49cdafd54c7ad2c Mon Sep 17 00:00:00 2001 From: Kyle Van Essen Date: Mon, 9 Nov 2026 17:28:46 -0500 Subject: [PATCH 09/12] Link pending native validation after the backlog migration --- Shared/SnapshotKit/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Shared/SnapshotKit/README.md b/Shared/SnapshotKit/README.md index 0dff576f4..c576504b5 100644 --- a/Shared/SnapshotKit/README.md +++ b/Shared/SnapshotKit/README.md @@ -220,7 +220,7 @@ Retention preserves the frame’s size, traits, and insets, but physical reserve It does not change reference identifiers; name variants explicitly when comparing both policies. Previews remain an approximation. The Duo presets retain [native iOS 27.1 measurements](Documentation/DuoMeasurements.json) from Xcode build `27A9275`, runtime `24A94232`. -Re-measurement on the native 27.2 Duo runtime remains pending in the [release validation item](../../TODOs.md). +Re-measurement on the native 27.2 Duo runtime remains pending; see [native release validation in PR #466](https://github.com/kyleve/Stuff/pull/466). Synthetic captures on the current runtime verify layout against these recorded profiles, not current native geometry. All four profiles use 3× scale and the phone idiom. From f05ca62400c415631e21c5e649ce655700d9f18a Mon Sep 17 00:00:00 2001 From: Kyle Van Essen Date: Wed, 11 Nov 2026 13:17:52 -0500 Subject: [PATCH 10/12] Make the snapshot foundation independently verifiable Move generic accessibility capture fixes and reviewed references into the renderer layer. Measure Timeline rows eagerly, settle Settings sizing, and retain the scene for Developer Overlay glass. Preserve layer-specific navigation and accessibility semantics. Validation: 2,922 iOS unit tests, then 679 affected WhereUI tests; 71 snapshot tests covered by the full run and focused assertions; all six overlay captures repeat byte-for-byte. Architecture, host checks, and SwiftFormat pass. --- .../canvasAndList.FlyoverCanvas_iPad_dark.png | 4 +- .../canvasAndList.FlyoverList_iPad.png | 4 +- .../inspectorSurfaces.Root_iPhone.png | 4 +- .../inspectorSurfaces.Root_iPhone_dark.png | 4 +- .../inspectorSurfaces.SwiftData_iPhone.png | 4 +- .../other/updates.Available_iPad_ax5.png | 4 +- .../other/updates.Available_iPad_contrast.png | 4 +- .../other/updates.Available_iPhone_ax5.png | 4 +- .../updates.Available_iPhone_contrast.png | 4 +- .../other/updates.Local_iPad_ax5.png | 4 +- .../other/updates.Local_iPhone_ax5.png | 4 +- .../updates.Available_iPad.png | 4 +- .../updates.Available_iPad_accessibility.png | 4 +- .../updates.Available_iPad_dark.png | 4 +- .../updates.Available_iPhone.png | 4 +- ...updates.Available_iPhone_accessibility.png | 4 +- .../updates.Available_iPhone_dark.png | 4 +- .../updates.LocalOffline_iPhone.png | 4 +- .../updates.LocalOffline_iPhone_dark.png | 4 +- .../updates.Local_iPad_accessibility.png | 4 +- .../updates.Local_iPhone_accessibility.png | 4 +- .../updates.MissingDetails_iPhone.png | 4 +- .../updates.MissingDetails_iPhone_dark.png | 4 +- .../updates.MissingFeed_iPhone.png | 4 +- .../updates.MissingFeed_iPhone_dark.png | 4 +- .../updates.MissingHistory_iPhone.png | 4 +- .../updates.MissingHistory_iPhone_dark.png | 4 +- .../updates.Offline_iPhone.png | 4 +- .../updates.Offline_iPhone_dark.png | 4 +- .../updates.Retired_iPhone.png | 4 +- .../updates.Retired_iPhone_dark.png | 4 +- .../updates.RewrittenHistory_iPhone.png | 4 +- .../updates.RewrittenHistory_iPhone_dark.png | 4 +- .../browser.Available_iPad.png | 4 +- .../browser.Available_iPad_dark.png | 4 +- .../browser.Available_iPhone.png | 4 +- ...browser.Available_iPhone_accessibility.png | 4 +- .../browser.Available_iPhone_dark.png | 4 +- .../browser.Local_iPhone.png | 4 +- .../browser.Local_iPhone_dark.png | 4 +- .../browser.Offline_iPhone.png | 4 +- .../browser.Offline_iPhone_dark.png | 4 +- .../other/browser.Available_iPad_ax5.png | 4 +- .../other/browser.Available_iPad_contrast.png | 4 +- .../other/browser.Available_iPhone_ax5.png | 4 +- .../browser.Available_iPhone_contrast.png | 4 +- .../build.Installed_iPhone.png | 4 +- .../build.Installed_iPhone_dark.png | 4 +- .../build.MissingDetails_iPhone.png | 4 +- .../build.MissingDetails_iPhone_dark.png | 4 +- .../build.OlderBuild_iPhone.png | 4 +- .../build.OlderBuild_iPhone_dark.png | 4 +- .../build.OtherChannel_iPad.png | 4 +- .../build.OtherChannel_iPad_dark.png | 4 +- .../build.OtherChannel_iPhone.png | 4 +- ...uild.OtherChannel_iPhone_accessibility.png | 4 +- .../build.OtherChannel_iPhone_dark.png | 4 +- .../build.RewrittenHistory_iPhone.png | 4 +- .../build.RewrittenHistory_iPhone_dark.png | 4 +- .../other/build.OtherChannel_iPad_ax5.png | 4 +- .../build.OtherChannel_iPad_contrast.png | 4 +- .../other/build.OtherChannel_iPhone_ax5.png | 4 +- .../build.OtherChannel_iPhone_contrast.png | 4 +- .../history.History_iPad.png | 4 +- .../history.History_iPad_dark.png | 4 +- .../history.History_iPhone.png | 4 +- .../history.History_iPhone_accessibility.png | 4 +- .../history.History_iPhone_dark.png | 4 +- .../other/history.History_iPad_ax5.png | 4 +- .../other/history.History_iPad_contrast.png | 4 +- .../other/history.History_iPhone_ax5.png | 4 +- .../other/history.History_iPhone_contrast.png | 4 +- ...periscopeViewer.PeriscopeViewer_iPhone.png | 4 +- ...copeViewer.PeriscopeViewer_iPhone_dark.png | 4 +- Shared/SnapshotKitTesting/AGENTS.md | 4 +- Shared/SnapshotKitTesting/README.md | 7 + .../AccessibilitySnapshotViewController.swift | 40 ++-- .../SnapshotAccessibilityViewport.swift | 82 ++++++++ .../Sources/SnapshotImageRendering.swift | 7 +- ...ssibilitySnapshotViewControllerTests.swift | 73 ++++++- .../SnapshotAccessibilityViewportTests.swift | 196 ++++++++++++++++++ .../Tests/SnapshotImageRenderingTests.swift | 8 +- Where/WhereUI/AGENTS.md | 4 +- Where/WhereUI/README.md | 9 +- .../about.Default_iPad.png | 4 +- .../about.Default_iPad_accessibility.png | 4 +- .../about.Default_iPad_dark.png | 4 +- .../about.Default_iPhone.png | 4 +- .../about.Default_iPhone_accessibility.png | 4 +- .../about.Default_iPhone_dark.png | 4 +- .../about.DirtyTree_iPhone.png | 4 +- .../about.DirtyTree_iPhone_dark.png | 4 +- .../about.LibrariesOnly_iPhone.png | 4 +- .../about.LibrariesOnly_iPhone_dark.png | 4 +- .../about.Unattributed_iPhone.png | 4 +- .../about.Unattributed_iPhone_dark.png | 4 +- .../other/about.Default_iPad_ax5.png | 4 +- .../other/about.Default_iPad_contrast.png | 4 +- .../other/about.Default_iPhone_ax5.png | 4 +- .../other/about.Default_iPhone_contrast.png | 4 +- .../appIcon.Default_iPad.png | 4 +- .../appIcon.Default_iPad_dark.png | 4 +- .../appIcon.Default_iPhone.png | 4 +- .../appIcon.Default_iPhone_accessibility.png | 4 +- .../other/appIcon.Default_iPad_ax5.png | 4 +- .../other/appIcon.Default_iPad_contrast.png | 4 +- .../appearance.Default_iPad.png | 4 +- .../appearance.Default_iPad_dark.png | 4 +- .../appearance.Default_iPhone.png | 4 +- ...ppearance.Default_iPhone_accessibility.png | 4 +- .../appearance.Default_iPhone_dark.png | 4 +- .../flat/appearance.FlatSelected_iPhone.png | 4 +- .../appearance.FlatSelected_iPhone_dark.png | 4 +- .../other/appearance.Default_iPad_ax5.png | 4 +- .../appearance.Default_iPad_contrast.png | 4 +- .../other/appearance.Default_iPhone_ax5.png | 4 +- .../appearance.Default_iPhone_contrast.png | 4 +- .../calendarContent.Empty_iPhone.png | 4 +- .../calendarContent.Empty_iPhone_dark.png | 4 +- .../calendarContent.Flights_iPhone.png | 4 +- .../calendarContent.Flights_iPhone_dark.png | 4 +- ...endarContent.FocusedPlannedStay_iPhone.png | 4 +- ...Content.FocusedPlannedStay_iPhone_dark.png | 4 +- .../calendarContent.Focused_iPhone.png | 4 +- .../calendarContent.Focused_iPhone_dark.png | 4 +- ...endarContent.FutureWithoutPlans_iPhone.png | 4 +- ...Content.FutureWithoutPlans_iPhone_dark.png | 4 +- ...calendarContent.InitialPosition_iPhone.png | 4 +- ...darContent.InitialPosition_iPhone_dark.png | 4 +- .../calendarContent.Itinerary_iPhone.png | 4 +- .../calendarContent.Itinerary_iPhone_dark.png | 4 +- .../calendarContent.MissingDays_iPhone.png | 4 +- ...alendarContent.MissingDays_iPhone_dark.png | 4 +- ...rContent.MultiRegionPlannedStay_iPhone.png | 4 +- ...ent.MultiRegionPlannedStay_iPhone_dark.png | 4 +- ...lendarContent.PlannedStayHidden_iPhone.png | 4 +- ...rContent.PlannedStayHidden_iPhone_dark.png | 4 +- .../calendarContent.WithData_iPad.png | 4 +- ...darContent.WithData_iPad_accessibility.png | 4 +- .../calendarContent.WithData_iPad_dark.png | 4 +- .../calendarContent.WithData_iPhone.png | 4 +- ...rContent.WithData_iPhone_accessibility.png | 4 +- .../calendarContent.WithData_iPhone_dark.png | 4 +- ...ndarContent.YearOverviewFocused_iPhone.png | 4 +- ...ontent.YearOverviewFocused_iPhone_dark.png | 4 +- .../calendarContent.YearOverview_iPad.png | 4 +- ...calendarContent.YearOverview_iPad_dark.png | 4 +- .../calendarContent.YearOverview_iPhone.png | 4 +- ...tent.YearOverview_iPhone_accessibility.png | 4 +- ...lendarContent.YearOverview_iPhone_dark.png | 4 +- .../calendarContent.WithData_iPad_ax5.png | 4 +- ...calendarContent.WithData_iPad_contrast.png | 4 +- .../calendarContent.WithData_iPhone_ax5.png | 4 +- ...lendarContent.WithData_iPhone_contrast.png | 4 +- .../calendarContent.YearOverview_iPad_ax5.png | 4 +- ...ndarContent.YearOverview_iPad_contrast.png | 4 +- ...alendarContent.YearOverview_iPhone_ax5.png | 4 +- ...arContent.YearOverview_iPhone_contrast.png | 4 +- ...ontent.YearOverviewPlannedStays_iPhone.png | 4 +- ...t.YearOverviewPlannedStays_iPhone_dark.png | 4 +- .../cardDesignerStudio.Default_iPhone.png | 4 +- ...cardDesignerStudio.Default_iPhone_dark.png | 4 +- .../data.Default_iPhone.png | 4 +- .../data.Default_iPhone_accessibility.png | 4 +- .../data.Default_iPhone_dark.png | 4 +- .../other/data.Default_iPad_ax5.png | 4 +- .../other/data.Default_iPhone_ax5.png | 4 +- .../other/data.Default_iPhone_contrast.png | 4 +- .../dayRelabel.Default_iPad.png | 4 +- .../dayRelabel.Default_iPad_accessibility.png | 4 +- .../dayRelabel.Default_iPad_dark.png | 4 +- .../dayRelabel.Default_iPhone.png | 4 +- ...ayRelabel.Default_iPhone_accessibility.png | 4 +- .../dayRelabel.Default_iPhone_dark.png | 4 +- .../dayRelabel.WithAudit_iPhone.png | 4 +- .../dayRelabel.WithAudit_iPhone_dark.png | 4 +- .../other/dayRelabel.Default_iPad_ax5.png | 4 +- .../dayRelabel.Default_iPad_contrast.png | 4 +- .../other/dayRelabel.Default_iPhone_ax5.png | 4 +- .../dayRelabel.Default_iPhone_contrast.png | 4 +- ...veloperCrashTestingView.Default_iPhone.png | 4 +- ...erCrashTestingView.Default_iPhone_dark.png | 4 +- ...eloperDemoLaunchSheet.AllIssues_iPhone.png | 4 +- ...rDemoLaunchSheet.AllIssues_iPhone_dark.png | 4 +- ...loperOverlay.MenuBottomTrailing_iPhone.png | 4 +- ...Overlay.MenuBottomTrailing_iPhone_dark.png | 4 +- ...developerOverlay.MenuTopLeading_iPhone.png | 4 +- .../other/updates.Available_iPhone_ax5.png | 4 +- .../updates.Available_iPad.png | 4 +- .../updates.Available_iPhone.png | 4 +- ...updates.Available_iPhone_accessibility.png | 4 +- .../updates.Available_iPhone_dark.png | 4 +- .../devices.Default_iPhone.png | 4 +- .../devices.Default_iPhone_dark.png | 4 +- ....PermissionRequiredRecordingOff_iPhone.png | 4 +- ...issionRequiredRecordingOff_iPhone_dark.png | 4 +- .../other/devices.Default_iPad_ax5.png | 4 +- .../other/devices.Default_iPhone_ax5.png | 4 +- .../other/devices.Default_iPhone_contrast.png | 4 +- .../elsewhere.DotsHidden_iPhone.png | 4 +- .../elsewhere.DotsHidden_iPhone_dark.png | 4 +- .../elsewhere.Empty_iPhone.png | 4 +- .../elsewhere.Empty_iPhone_dark.png | 4 +- .../elsewhere.Failure_iPhone.png | 4 +- .../elsewhere.Failure_iPhone_dark.png | 4 +- .../elsewhere.Loaded_iPad.png | 4 +- .../elsewhere.Loaded_iPad_dark.png | 4 +- .../elsewhere.Loaded_iPhone.png | 4 +- .../elsewhere.Loaded_iPhone_dark.png | 4 +- .../flat/elsewhere.FlatLoaded_iPhone.png | 4 +- .../flat/elsewhere.FlatLoaded_iPhone_dark.png | 4 +- .../other/elsewhere.Loaded_iPad_ax5.png | 4 +- .../other/elsewhere.Loaded_iPad_contrast.png | 4 +- .../other/elsewhere.Loaded_iPhone_ax5.png | 4 +- .../elsewhere.Loaded_iPhone_contrast.png | 4 +- .../snapshots.Disabled_iPhone_dark.png | 4 +- .../snapshots.Live_iPhone_dark.png | 4 +- .../snapshots.Unavailable_iPhone_dark.png | 4 +- .../flightDayDetail.Completed_iPhone.png | 4 +- .../flightDayDetail.Completed_iPhone_dark.png | 4 +- .../flightDayDetail.Default_iPad.png | 4 +- ...htDayDetail.Default_iPad_accessibility.png | 4 +- .../flightDayDetail.Default_iPad_dark.png | 4 +- .../flightDayDetail.Default_iPhone.png | 4 +- ...DayDetail.Default_iPhone_accessibility.png | 4 +- .../flightDayDetail.Default_iPhone_dark.png | 4 +- .../flightDayDetail.FlightLikely_iPhone.png | 4 +- ...ightDayDetail.FlightLikely_iPhone_dark.png | 4 +- ...DayDetail.MixedFlightsDismissed_iPhone.png | 4 +- ...tail.MixedFlightsDismissed_iPhone_dark.png | 4 +- .../flightDayDetail.MixedFlights_iPad.png | 4 +- ...Detail.MixedFlights_iPad_accessibility.png | 4 +- ...flightDayDetail.MixedFlights_iPad_dark.png | 4 +- .../flightDayDetail.MixedFlights_iPhone.png | 4 +- ...tail.MixedFlights_iPhone_accessibility.png | 4 +- ...ightDayDetail.MixedFlights_iPhone_dark.png | 4 +- .../flightDayDetail.NoPresence_iPhone.png | 4 +- ...flightDayDetail.NoPresence_iPhone_dark.png | 4 +- .../flightDayDetail.Stale_iPhone.png | 4 +- .../flightDayDetail.Stale_iPhone_dark.png | 4 +- ...lightDayDetail.UncertainArrival_iPhone.png | 4 +- ....UncertainArrival_iPhone_accessibility.png | 4 +- ...DayDetail.UncertainArrival_iPhone_dark.png | 4 +- .../flightDayDetail.Waiting_iPhone.png | 4 +- .../flightDayDetail.Waiting_iPhone_dark.png | 4 +- .../flightDayDetail.Default_iPad_ax5.png | 4 +- .../flightDayDetail.Default_iPad_contrast.png | 4 +- .../flightDayDetail.Default_iPhone_ax5.png | 4 +- ...lightDayDetail.Default_iPhone_contrast.png | 4 +- .../flightDayDetail.MixedFlights_iPad_ax5.png | 4 +- ...htDayDetail.MixedFlights_iPad_contrast.png | 4 +- ...lightDayDetail.MixedFlights_iPhone_ax5.png | 4 +- ...DayDetail.MixedFlights_iPhone_contrast.png | 4 +- ...tDayDetail.UncertainArrival_iPhone_ax5.png | 4 +- ...tReviewPointRow.Gap_iPad_accessibility.png | 4 +- ...eviewPointRow.Gap_iPhone_accessibility.png | 4 +- .../flightReviewPointRow.Gap_iPhone_dark.png | 4 +- ...lightReviewPointRow.Ground_iPhone_dark.png | 4 +- ...ightReviewPointRow.Restore_iPhone_dark.png | 4 +- ...tsAccuracyFeatures.Default_iPhone_dark.png | 4 +- ...sAccuracyFeatures.NoIssues_iPhone_dark.png | 4 +- .../license.Default_iPad_accessibility.png | 4 +- .../license.Default_iPhone_accessibility.png | 4 +- .../other/license.Default_iPhone_ax5.png | 4 +- .../flat/locations.FlatLoaded_iPad.png | 4 +- .../flat/locations.FlatLoaded_iPad_dark.png | 4 +- .../flat/locations.FlatLoaded_iPhone.png | 4 +- .../flat/locations.FlatLoaded_iPhone_dark.png | 4 +- ...ocations.FlatReduceTransparency_iPhone.png | 4 +- ...ons.FlatReduceTransparency_iPhone_dark.png | 4 +- .../other/locations.FlatLoaded_iPad_ax5.png | 4 +- .../locations.FlatLoaded_iPad_contrast.png | 4 +- .../other/locations.FlatLoaded_iPhone_ax5.png | 4 +- .../locations.FlatLoaded_iPhone_contrast.png | 4 +- .../locations.DotsHidden_iPhone.png | 4 +- .../locations.DotsHidden_iPhone_dark.png | 4 +- .../locations.ElsewhereWithHome_iPhone.png | 4 +- ...ocations.ElsewhereWithHome_iPhone_dark.png | 4 +- .../locations.Flight-Completed_iPhone.png | 4 +- ...locations.Flight-Completed_iPhone_dark.png | 4 +- .../locations.Flight-FlightLikely_iPhone.png | 4 +- ...ations.Flight-FlightLikely_iPhone_dark.png | 4 +- .../locations.Flight-Ready_iPhone.png | 4 +- .../locations.Flight-Ready_iPhone_dark.png | 4 +- .../locations.Flight-Stale_iPhone.png | 4 +- .../locations.Flight-Stale_iPhone_dark.png | 4 +- .../locations.ForecastsHidden_iPhone.png | 4 +- .../locations.ForecastsHidden_iPhone_dark.png | 4 +- .../locations.Itinerary_iPhone.png | 4 +- .../locations.Itinerary_iPhone_dark.png | 4 +- .../locations.Loaded_iPad.png | 4 +- .../locations.Loaded_iPad_dark.png | 4 +- .../locations.Loaded_iPhone.png | 4 +- .../locations.Loaded_iPhone_dark.png | 4 +- .../locations.MissingDays_iPhone.png | 4 +- .../locations.MissingDays_iPhone_dark.png | 4 +- .../locations.PlannedStay_iPhone.png | 4 +- .../locations.PlannedStay_iPhone_dark.png | 4 +- .../locations.ThreePrimaryRegions_iPad.png | 4 +- .../locations.ThreePrimaryRegions_iPhone.png | 4 +- ...ations.ThreePrimaryRegions_iPhone_dark.png | 4 +- .../other/locations.Loaded_iPad_ax5.png | 4 +- .../other/locations.Loaded_iPad_contrast.png | 4 +- .../other/locations.Loaded_iPhone_ax5.png | 4 +- .../locations.Loaded_iPhone_contrast.png | 4 +- ...locations.ThreePrimaryRegions_iPad_ax5.png | 4 +- .../loggedDays.Loaded_iPad.png | 4 +- .../loggedDays.Loaded_iPad_accessibility.png | 4 +- .../loggedDays.Loaded_iPad_dark.png | 4 +- ...loggedDays.Loaded_iPhone_accessibility.png | 4 +- .../other/loggedDays.Loaded_iPad_ax5.png | 4 +- .../other/loggedDays.Loaded_iPad_contrast.png | 4 +- .../other/loggedDays.Loaded_iPhone_ax5.png | 4 +- .../flat/mainTabs.FlatElsewhere_iPhone.png | 4 +- .../mainTabs.FlatElsewhere_iPhone_dark.png | 4 +- .../mainTabs.Elsewhere_iPad.png | 4 +- .../mainTabs.Elsewhere_iPad_accessibility.png | 4 +- .../mainTabs.Elsewhere_iPad_dark.png | 4 +- .../mainTabs.Elsewhere_iPhone.png | 4 +- .../mainTabs.Elsewhere_iPhone_dark.png | 4 +- .../mainTabs.UpdateAvailable_iPhone.png | 4 +- .../mainTabs.UpdateAvailable_iPhone_dark.png | 4 +- .../mainTabs.WelcomeActionRequired_iPhone.png | 4 +- ...Tabs.WelcomeActionRequired_iPhone_dark.png | 4 +- .../mainTabs.WelcomeLocating_iPhone.png | 4 +- .../mainTabs.WelcomeLocating_iPhone_dark.png | 4 +- .../mainTabs.WelcomeLocations_iPhone.png | 4 +- ....WelcomeLocations_iPhone_accessibility.png | 4 +- .../mainTabs.WelcomeLocations_iPhone_dark.png | 4 +- .../mainTabs.WelcomeYear_iPhone.png | 4 +- ...nTabs.WelcomeYear_iPhone_accessibility.png | 4 +- .../mainTabs.WelcomeYear_iPhone_dark.png | 4 +- .../other/mainTabs.Elsewhere_iPad_ax5.png | 4 +- .../mainTabs.Elsewhere_iPad_contrast.png | 4 +- .../other/mainTabs.Elsewhere_iPhone_ax5.png | 4 +- .../mainTabs.Elsewhere_iPhone_contrast.png | 4 +- .../mainTabs.UpdateAvailable_iPhone_ax5.png | 4 +- .../mainTabs.WelcomeLocations_iPhone_ax5.png | 4 +- .../other/mainTabs.WelcomeYear_iPhone_ax5.png | 4 +- .../manualDay.AddWithCancel_iPhone.png | 4 +- .../manualDay.AddWithCancel_iPhone_dark.png | 4 +- .../manualDay.Add_iPad.png | 4 +- .../manualDay.Add_iPad_dark.png | 4 +- .../manualDay.Add_iPhone.png | 4 +- .../manualDay.Add_iPhone_accessibility.png | 4 +- .../manualDay.Add_iPhone_dark.png | 4 +- .../manualDay.EditAuthoritative_iPhone.png | 4 +- ...anualDay.EditAuthoritative_iPhone_dark.png | 4 +- .../manualDay.EditPlain_iPhone.png | 4 +- .../manualDay.EditPlain_iPhone_dark.png | 4 +- .../other/manualDay.Add_iPad_ax5.png | 4 +- .../other/manualDay.Add_iPad_contrast.png | 4 +- .../other/manualDay.Add_iPhone_ax5.png | 4 +- .../other/manualDay.Add_iPhone_contrast.png | 4 +- .../flat/themeSelection.Alternate_iPhone.png | 4 +- .../themeSelection.Alternate_iPhone_dark.png | 4 +- ...hemeSelection.Standard_iPhone_contrast.png | 4 +- .../themeSelection.Standard_iPhone_rtl.png | 4 +- .../themeSelection.Standard_iPad_dark.png | 4 +- .../themeSelection.Standard_iPhone.png | 4 +- ...election.Standard_iPhone_accessibility.png | 4 +- .../themeSelection.Standard_iPhone_dark.png | 4 +- ...nalizationFeatures.Default_iPhone_dark.png | 4 +- .../gallery.Demo_iPhone_dark.png | 4 +- .../gallery.Empty_iPhone_dark.png | 4 +- .../gallery.Loaded_iPhone_dark.png | 4 +- .../gallery.Unavailable_iPhone_dark.png | 4 +- ...lannedStayEditor.FlexibleStay_iPad_ax5.png | 4 +- ...dStayEditor.FlexibleStay_iPad_contrast.png | 4 +- ...nnedStayEditor.FlexibleStay_iPhone_ax5.png | 4 +- ...tayEditor.FlexibleStay_iPhone_contrast.png | 4 +- .../plannedStayEditor.NewStay_iPad_ax5.png | 4 +- ...lannedStayEditor.NewStay_iPad_contrast.png | 4 +- .../plannedStayEditor.NewStay_iPhone_ax5.png | 4 +- ...nnedStayEditor.NewStay_iPhone_contrast.png | 4 +- .../plannedStayEditor.AnyRegion_iPhone.png | 4 +- ...lannedStayEditor.AnyRegion_iPhone_dark.png | 4 +- ...annedStayEditor.DefiniteOverlap_iPhone.png | 4 +- ...StayEditor.DefiniteOverlap_iPhone_dark.png | 4 +- ...dStayEditor.DeletedWhileEditing_iPhone.png | 4 +- ...letedWhileEditing_iPhone_accessibility.png | 4 +- ...Editor.DeletedWhileEditing_iPhone_dark.png | 4 +- .../plannedStayEditor.FlexibleStay_iPad.png | 4 +- ...Editor.FlexibleStay_iPad_accessibility.png | 4 +- ...annedStayEditor.FlexibleStay_iPad_dark.png | 4 +- .../plannedStayEditor.FlexibleStay_iPhone.png | 4 +- ...itor.FlexibleStay_iPhone_accessibility.png | 4 +- ...nedStayEditor.FlexibleStay_iPhone_dark.png | 4 +- .../plannedStayEditor.NewStay_iPad.png | 4 +- .../plannedStayEditor.NewStay_iPad_dark.png | 4 +- .../plannedStayEditor.NewStay_iPhone.png | 4 +- .../plannedStayEditor.NewStay_iPhone_dark.png | 4 +- .../other/plannedStays.Itinerary_iPad_ax5.png | 4 +- .../plannedStays.Itinerary_iPad_contrast.png | 4 +- .../plannedStays.Itinerary_iPhone_ax5.png | 4 +- ...plannedStays.Itinerary_iPhone_contrast.png | 4 +- .../plannedStays.Empty_iPhone.png | 4 +- .../plannedStays.Empty_iPhone_dark.png | 4 +- .../plannedStays.Itinerary_iPad.png | 4 +- .../plannedStays.Itinerary_iPad_dark.png | 4 +- .../plannedStays.Itinerary_iPhone.png | 4 +- ...edStays.Itinerary_iPhone_accessibility.png | 4 +- .../plannedStays.Itinerary_iPhone_dark.png | 4 +- .../plannedStays.PastExpanded_iPhone.png | 4 +- ...tays.PastExpanded_iPhone_accessibility.png | 4 +- .../plannedStays.PastExpanded_iPhone_dark.png | 4 +- .../plannedStays.PastTravelPattern_iPhone.png | 4 +- ...nedStays.PastTravelPattern_iPhone_dark.png | 4 +- .../planningRegionPicker.Home_iPhone_ax5.png | 4 +- ...nningRegionPicker.Home_iPhone_contrast.png | 4 +- .../planningRegionPicker.Home_iPhone.png | 4 +- ...RegionPicker.Home_iPhone_accessibility.png | 4 +- .../planningRegionPicker.Home_iPhone_dark.png | 4 +- .../planningRegionPicker.Search_iPhone.png | 4 +- ...lanningRegionPicker.Search_iPhone_dark.png | 4 +- .../presenceTimeline.Flights_iPad_ax5.png | 4 +- ...presenceTimeline.Flights_iPad_contrast.png | 4 +- .../presenceTimeline.Flights_iPhone_ax5.png | 4 +- ...esenceTimeline.Flights_iPhone_contrast.png | 4 +- ...ceTimeline.UncertainArrival_iPhone_ax5.png | 4 +- .../presenceTimeline.WithData_iPad_ax5.png | 4 +- ...resenceTimeline.WithData_iPad_contrast.png | 4 +- .../presenceTimeline.WithData_iPhone_ax5.png | 4 +- ...senceTimeline.WithData_iPhone_contrast.png | 4 +- ...ntiateWithoutColorInitialBottom_iPhone.png | 4 +- ...eWithoutColorInitialBottom_iPhone_dark.png | 4 +- ...eline.DifferentiateWithoutColor_iPhone.png | 4 +- ....DifferentiateWithoutColor_iPhone_dark.png | 4 +- .../presenceTimeline.Flights_iPad.png | 4 +- ...nceTimeline.Flights_iPad_accessibility.png | 4 +- .../presenceTimeline.Flights_iPad_dark.png | 4 +- .../presenceTimeline.Flights_iPhone.png | 4 +- ...eTimeline.Flights_iPhone_accessibility.png | 4 +- .../presenceTimeline.Flights_iPhone_dark.png | 4 +- .../presenceTimeline.InitialBottom_iPhone.png | 4 +- ...enceTimeline.InitialBottom_iPhone_dark.png | 4 +- ...resenceTimeline.InterruptedStay_iPhone.png | 4 +- ...ceTimeline.InterruptedStay_iPhone_dark.png | 4 +- .../presenceTimeline.Itinerary_iPhone.png | 4 +- ...presenceTimeline.Itinerary_iPhone_dark.png | 4 +- ...ne.PlannedStayAfterRecordingGap_iPhone.png | 4 +- ...annedStayAfterRecordingGap_iPhone_dark.png | 4 +- ...line.PlannedStayDifferentRegion_iPhone.png | 4 +- ...PlannedStayDifferentRegion_iPhone_dark.png | 4 +- ...senceTimeline.PlannedStayHidden_iPhone.png | 4 +- ...Timeline.PlannedStayHidden_iPhone_dark.png | 4 +- .../presenceTimeline.PlannedStay_iPhone.png | 4 +- ...eline.PlannedStay_iPhone_accessibility.png | 4 +- ...esenceTimeline.PlannedStay_iPhone_dark.png | 4 +- ...esenceTimeline.ShortPlannedStay_iPhone.png | 4 +- ...eTimeline.ShortPlannedStay_iPhone_dark.png | 4 +- ...esenceTimeline.UncertainArrival_iPhone.png | 4 +- ....UncertainArrival_iPhone_accessibility.png | 4 +- ...eTimeline.UncertainArrival_iPhone_dark.png | 4 +- .../presenceTimeline.WithData_iPad.png | 4 +- ...ceTimeline.WithData_iPad_accessibility.png | 4 +- .../presenceTimeline.WithData_iPad_dark.png | 4 +- .../presenceTimeline.WithData_iPhone.png | 4 +- ...Timeline.WithData_iPhone_accessibility.png | 4 +- .../presenceTimeline.WithData_iPhone_dark.png | 4 +- .../gallery.Default_iPhone_dark.png | 4 +- .../gallery.Demo_iPhone_dark.png | 4 +- .../gallery.DiagnosticsOff_iPhone_dark.png | 4 +- .../privacyDiagnostics.AllOff_iPhone.png | 4 +- .../privacyDiagnostics.AllOff_iPhone_dark.png | 4 +- ...privacyDiagnostics.DebugDefault_iPhone.png | 4 +- ...cyDiagnostics.DebugDefault_iPhone_dark.png | 4 +- ...Diagnostics.FullMetadataWarning_iPhone.png | 4 +- ...ostics.FullMetadataWarning_iPhone_dark.png | 4 +- ...vacyDiagnostics.PendingRelaunch_iPhone.png | 4 +- ...iagnostics.PendingRelaunch_iPhone_dark.png | 4 +- ...vacyDiagnostics.ShippingDefault_iPhone.png | 4 +- ...iagnostics.ShippingDefault_iPhone_dark.png | 4 +- .../rankingAnimationLab.Default_iPhone.png | 4 +- ...ankingAnimationLab.Default_iPhone_dark.png | 4 +- .../gallery.Denied_iPhone_dark.png | 4 +- .../gallery.Paused_iPhone_dark.png | 4 +- .../gallery.Recording_iPhone_dark.png | 4 +- .../regionCustomize.Editor_iPhone.png | 4 +- .../regionCustomize.Editor_iPhone_dark.png | 4 +- .../regionCustomize.NeutralEditor_iPhone.png | 4 +- ...ionCustomize.NeutralEditor_iPhone_dark.png | 4 +- .../other/regionDays.WithData_iPhone_ax5.png | 4 +- .../regionDays.WithData_iPhone_contrast.png | 4 +- ...regionDays.WithData_iPad_accessibility.png | 4 +- .../regionDays.WithData_iPhone.png | 4 +- .../regionDays.WithData_iPhone_dark.png | 4 +- .../regionMap.Default_iPhone_dark.png | 4 +- .../regionsSettings.Overview_iPad_ax5.png | 4 +- ...regionsSettings.Overview_iPad_contrast.png | 4 +- .../regionsSettings.Overview_iPhone_ax5.png | 4 +- ...gionsSettings.Overview_iPhone_contrast.png | 4 +- .../regionsSettings.Overview_iPad.png | 4 +- .../regionsSettings.Overview_iPad_dark.png | 4 +- .../regionsSettings.Overview_iPhone.png | 4 +- .../regionsSettings.Overview_iPhone_dark.png | 4 +- .../other/resolution.WithIssues_iPad_ax5.png | 4 +- .../resolution.WithIssues_iPad_contrast.png | 4 +- .../resolution.WithIssues_iPhone_ax5.png | 4 +- .../resolution.WithIssues_iPhone_contrast.png | 4 +- .../resolution.Completed_iPhone.png | 4 +- .../resolution.Completed_iPhone_dark.png | 4 +- .../resolution.Ready_iPhone.png | 4 +- .../resolution.Ready_iPhone_dark.png | 4 +- .../resolution.Waiting_iPhone.png | 4 +- .../resolution.Waiting_iPhone_dark.png | 4 +- .../resolution.WithIssues_iPad.png | 4 +- .../resolution.WithIssues_iPad_dark.png | 4 +- .../resolution.WithIssues_iPhone.png | 4 +- .../resolution.WithIssues_iPhone_dark.png | 4 +- .../other/settings.Default_iPad_ax5.png | 4 +- .../other/settings.Default_iPad_contrast.png | 4 +- .../other/settings.Default_iPhone_ax5.png | 4 +- .../settings.Default_iPhone_contrast.png | 4 +- .../other/settings.Default_iPhone_rtl.png | 4 +- .../settings.Default_iPad.png | 4 +- .../settings.Default_iPad_accessibility.png | 4 +- .../settings.Default_iPad_dark.png | 4 +- .../settings.Default_iPhone.png | 4 +- .../settings.Default_iPhone_accessibility.png | 4 +- .../settings.Default_iPhone_dark.png | 4 +- .../settings.DemoMode_iPhone.png | 4 +- .../settings.DemoMode_iPhone_dark.png | 4 +- .../settings.LocalBuild_iPhone.png | 4 +- .../settings.LocalBuild_iPhone_dark.png | 4 +- ...s.RecordingConfigurationWarning_iPhone.png | 4 +- ...ordingConfigurationWarning_iPhone_dark.png | 4 +- .../settings.UpdateAvailable_iPhone.png | 4 +- .../settings.UpdateAvailable_iPhone_dark.png | 4 +- ...reEvidenceFeatures.Default_iPhone_dark.png | 4 +- .../siriFeatures.Default_iPhone_dark.png | 4 +- ...getFeatures.Default_iPad_accessibility.png | 4 +- ...tFeatures.Default_iPhone_accessibility.png | 4 +- .../widgetFeatures.Default_iPhone_dark.png | 4 +- .../widgetFeatures.TwoRegions_iPhone_dark.png | 4 +- .../other/year.Loaded_iPad_ax5.png | 4 +- .../other/year.Loaded_iPad_contrast.png | 4 +- .../other/year.Loaded_iPhone_ax5.png | 4 +- .../other/year.Loaded_iPhone_contrast.png | 4 +- .../year.Empty_iPhone.png | 4 +- .../year.Empty_iPhone_dark.png | 4 +- .../year.Loaded_iPad.png | 4 +- .../year.Loaded_iPad_accessibility.png | 4 +- .../year.Loaded_iPad_dark.png | 4 +- .../year.Loaded_iPhone.png | 4 +- .../year.Loaded_iPhone_accessibility.png | 4 +- .../year.Loaded_iPhone_dark.png | 4 +- .../year.RestoredOverview_iPhone.png | 4 +- .../year.RestoredOverview_iPhone_dark.png | 4 +- .../Sources/Developer/DeveloperOverlay.swift | 22 +- .../Primary/PresenceTimelineList.swift | 6 +- .../Sources/Settings/SettingsView.swift | 5 - 552 files changed, 1509 insertions(+), 1110 deletions(-) create mode 100644 Shared/SnapshotKitTesting/Sources/SnapshotAccessibilityViewport.swift create mode 100644 Shared/SnapshotKitTesting/Tests/SnapshotAccessibilityViewportTests.swift diff --git a/Shared/Flyover/SnapshotTests/__Snapshots__/FlyoverSnapshotTests/canvasAndList.FlyoverCanvas_iPad_dark.png b/Shared/Flyover/SnapshotTests/__Snapshots__/FlyoverSnapshotTests/canvasAndList.FlyoverCanvas_iPad_dark.png index 1dc339b27..772c64d8a 100644 --- a/Shared/Flyover/SnapshotTests/__Snapshots__/FlyoverSnapshotTests/canvasAndList.FlyoverCanvas_iPad_dark.png +++ b/Shared/Flyover/SnapshotTests/__Snapshots__/FlyoverSnapshotTests/canvasAndList.FlyoverCanvas_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:df05857423d586ad4ef473b570c121ec12fbaad76b275482beb6603c11b62981 -size 582275 +oid sha256:9fc95a0e96c66ba32efca49e5fb1b8618522e536889b2f179035860dd3f851bc +size 421584 diff --git a/Shared/Flyover/SnapshotTests/__Snapshots__/FlyoverSnapshotTests/canvasAndList.FlyoverList_iPad.png b/Shared/Flyover/SnapshotTests/__Snapshots__/FlyoverSnapshotTests/canvasAndList.FlyoverList_iPad.png index 574462a94..ef6daeede 100644 --- a/Shared/Flyover/SnapshotTests/__Snapshots__/FlyoverSnapshotTests/canvasAndList.FlyoverList_iPad.png +++ b/Shared/Flyover/SnapshotTests/__Snapshots__/FlyoverSnapshotTests/canvasAndList.FlyoverList_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ac09f0d37280828cade08ac703c5a795efea11213289dbc341c98183eb97912a -size 2568923 +oid sha256:2486bb3f7a7e889ee842bddd2e985cd220f356758b241a77f14566467355a31e +size 2517821 diff --git a/Shared/Inspector/SnapshotTests/__Snapshots__/InspectorSnapshotTests/inspectorSurfaces.Root_iPhone.png b/Shared/Inspector/SnapshotTests/__Snapshots__/InspectorSnapshotTests/inspectorSurfaces.Root_iPhone.png index d38bfbf12..20ed42f4a 100644 --- a/Shared/Inspector/SnapshotTests/__Snapshots__/InspectorSnapshotTests/inspectorSurfaces.Root_iPhone.png +++ b/Shared/Inspector/SnapshotTests/__Snapshots__/InspectorSnapshotTests/inspectorSurfaces.Root_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:557e848cf06366642192d36ae32d6138fd69ac388336fa4025e230af3530d84b -size 150866 +oid sha256:376f2104c2f0e52b60823fd25dd70099344e2aae3994110b38859ab064e94963 +size 150590 diff --git a/Shared/Inspector/SnapshotTests/__Snapshots__/InspectorSnapshotTests/inspectorSurfaces.Root_iPhone_dark.png b/Shared/Inspector/SnapshotTests/__Snapshots__/InspectorSnapshotTests/inspectorSurfaces.Root_iPhone_dark.png index 092e27f1b..a48daa698 100644 --- a/Shared/Inspector/SnapshotTests/__Snapshots__/InspectorSnapshotTests/inspectorSurfaces.Root_iPhone_dark.png +++ b/Shared/Inspector/SnapshotTests/__Snapshots__/InspectorSnapshotTests/inspectorSurfaces.Root_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:12f470937c7c56c9f0ff1f5575228bf13502877b914d4a847e65a92d6f591a9d -size 154206 +oid sha256:97cc87673bf14569fd8b7c1ce8cc6e20a1f410eb7ba48f1c1d10481e41ca4657 +size 154107 diff --git a/Shared/Inspector/SnapshotTests/__Snapshots__/InspectorSnapshotTests/inspectorSurfaces.SwiftData_iPhone.png b/Shared/Inspector/SnapshotTests/__Snapshots__/InspectorSnapshotTests/inspectorSurfaces.SwiftData_iPhone.png index 1b82382c5..01b58bc3e 100644 --- a/Shared/Inspector/SnapshotTests/__Snapshots__/InspectorSnapshotTests/inspectorSurfaces.SwiftData_iPhone.png +++ b/Shared/Inspector/SnapshotTests/__Snapshots__/InspectorSnapshotTests/inspectorSurfaces.SwiftData_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:877791e3518e7786e87e6af46d4a81c7f18c741f3b3cd82327b6d09d871292ea -size 184973 +oid sha256:aabcb90863bddacdb7b1f749cf8f967ee73f58d121dc8eb158dbf65e6aa5a11d +size 142534 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPad_ax5.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPad_ax5.png index 355f4c34a..3bfa461e9 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPad_ax5.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6bd08293fc6d38cf3d31f70802df091d7fdebf3fb65150b17f0dda2d5c9ba0f7 -size 1411570 +oid sha256:73853e1d2b45474e588fb01c7929018eb769ac312affff47fefe2a8a711f34f6 +size 1410943 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPad_contrast.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPad_contrast.png index bc351754b..08acaf2b5 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPad_contrast.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:98fcd2350ae7c4cae2cf40e8983aa892b551e277481590eef745b8adba304686 -size 465476 +oid sha256:110e7380fd15236ce3f0db09a4e065d7fe81868b6ba5c96106e843fd1fcce0fd +size 464804 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPhone_ax5.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPhone_ax5.png index 8e319ef2f..0bb5a0359 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPhone_ax5.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:61c912dd491f51196ed2bafa3930cfafe3e55ba8ff0ea258066af9c0915a64b5 -size 1243754 +oid sha256:28557d25e7e921818edf6934bf6626b28a6824d96a6b00d85df0ff632b30cd00 +size 1243316 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPhone_contrast.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPhone_contrast.png index cb644e630..ad6a738f9 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPhone_contrast.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Available_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:27336cffa329686dcd9e78ccec7fbcd758253332f9f2572f62f71c7103470d6b -size 364971 +oid sha256:6abd0ca7029d3a6a7ac1b48d4640444d01678a7995bcef4b4a091cb34c674d18 +size 364863 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Local_iPad_ax5.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Local_iPad_ax5.png index 0648c308b..fb9cf2cf6 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Local_iPad_ax5.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Local_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b9fc9c3fcee2d0db30de0d56282e7465cdd66df61743ae7ab57f77a31c5c1359 -size 688468 +oid sha256:af4994f456815ddf819fd011808538148238a5b4db1f8134632daa506bc07e29 +size 687647 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Local_iPhone_ax5.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Local_iPhone_ax5.png index 28ffee0ca..ec0797f67 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Local_iPhone_ax5.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/other/updates.Local_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4613680e499ef8623c47618cba2ea94cff61149739164be388646893322a4fb2 -size 623656 +oid sha256:f2429f13870d76ce2158d51cd90102fa05abd3ed23f192cf655f6b49f5eb4e40 +size 623305 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPad.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPad.png index 50f01bfc6..1ad0328cf 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPad.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:290ff9cb211f64aee982c130e76b41558672b1d82a728d942466e6695b4ff8af -size 457894 +oid sha256:984227f8840ba235e97979920bafafaf359e176c1abba578ad25560359d551bd +size 457199 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPad_accessibility.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPad_accessibility.png index d50011ab1..9ed0b2f59 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPad_accessibility.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a3a8ccc1356120c765cb834252be991945ac7977e2c4c36c95d4ddb0bd51638a -size 999758 +oid sha256:7086fd6032e9f98061877542d01207d8c39c26667fb5d791f596e2b12480e81f +size 991310 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPad_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPad_dark.png index 2d25eddc3..468207e5b 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPad_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1ad6f5ed1256a25cf19864c53b79d9e8b7cd19562d0b8820d38296648925ffa2 -size 483526 +oid sha256:6b1ef3da63792ee3da42bb8f4008991b80df48af3bdf6fddfd1b7fa5a7457e74 +size 482825 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPhone.png index 4e30c92ae..04e76c964 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fb07f3b3f84cb9a693bae6c14e8120c89eb9257a35aab2b9d6306ca0bc40f090 -size 362275 +oid sha256:f567964b545d0bf6a969fe544ab351da929e1746a5932a2ba28e52a0b8ecba91 +size 361601 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPhone_accessibility.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPhone_accessibility.png index 500e0f669..693bd4838 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPhone_accessibility.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:923259d803061c0bb957a73b0ee156ec785fe15f68aebfcc94db9ae02aa3e174 -size 898743 +oid sha256:24eb6c3529f1054a80900f7c259b54d2a7c58c7792521c492073b43e6c95eda7 +size 893208 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPhone_dark.png index 52cdab75f..c37c30b36 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Available_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b8f90bae3cde1f35fb0edd949f00a1e409d1189a65dfe2463bd6df77975411ee -size 374546 +oid sha256:b1c7eacc05b4c7faf8a14ef972b5d0e552e56fcf7dc02f38dd6a0a56fadabe13 +size 374235 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalOffline_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalOffline_iPhone.png index 7fcd317d7..375cd8c2e 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalOffline_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalOffline_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3f64e9e724d6f43e3179c87e2b790a9d43348dc4953b18d97e823f5c3db5f0e5 -size 254943 +oid sha256:8b34c84040d3630ca78f19f02bbc94ae61f3eca4efc9d9bc31f74a2dabd335dd +size 255822 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalOffline_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalOffline_iPhone_dark.png index f87156769..01578248c 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalOffline_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.LocalOffline_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:050fe2bdc94e690bbc15571574883f5a8814856d7dc5794c3e00173bffff20fe -size 264336 +oid sha256:d7f6a211ba8be26c14e94af604a56b244a47cc248a2bfdff8b3c462d46441555 +size 264060 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPad_accessibility.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPad_accessibility.png index 50b7246a2..280a06d12 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPad_accessibility.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ad4b05e9a09684b995a67d60b1eb6961b48269765ae609e0bb1a8554a55f0e4a -size 598566 +oid sha256:8a4437a3a6523d617ed9707e8d6d377b87efdab45ed62e881fcd080401c68004 +size 594556 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPhone_accessibility.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPhone_accessibility.png index 8801a779c..8e20ba35f 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPhone_accessibility.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Local_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b3422c7b03bdd8117269718dfe0795ee740a52baff32ce28d0aa5927c7838720 -size 446210 +oid sha256:5604071c77446bfa616ec451aacc5c53ccf396c6935d598883e8afdf9e15c00c +size 442719 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingDetails_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingDetails_iPhone.png index b0f35ae14..41fd4550d 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingDetails_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingDetails_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:759e178d4a1d414deaec2a65b1d4ccbfd625f3431dbfe4fb2a826fe8bfba8365 -size 363973 +oid sha256:29fa19e25ca55c61a4ce4f8fbcc768b2fd05a1eee088e23e588a4391dbe5827e +size 363315 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingDetails_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingDetails_iPhone_dark.png index 2a770da9d..7b20bf438 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingDetails_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingDetails_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ff87be41da7daa69bdc8616bdc81d6b5d0444ef440a6fc163aeb1cd126d91114 -size 376248 +oid sha256:fb538121e0f43664e790f3a7d1b1f61230ed717c816c611c8a7109fe6f240d7e +size 375950 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingFeed_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingFeed_iPhone.png index e944b09a1..5f2c6fee1 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingFeed_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingFeed_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eda90c7e6b97e0819e1e2829847b2058634f292b61a1c2309526ab48b8879720 -size 235399 +oid sha256:43c225dd3b05bd3c3296185c6f42138ac4e51513e08138f35aed14e7a2cf417e +size 235025 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingFeed_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingFeed_iPhone_dark.png index 001f0ce50..8459d75a3 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingFeed_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingFeed_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:771bb467295fd3cdfcc7dd7b45e4a97b94c469bbeb2776c65af2ebfe9fb8cb0b -size 243041 +oid sha256:905183661bca5718dc2ccd6c55903c88199b4de512c4d847b1a9c36e7cb99748 +size 242702 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingHistory_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingHistory_iPhone.png index b62cca279..d5711f22f 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingHistory_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingHistory_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:939362cc56aa6ebabb5cce95e597804ff6b06e27ec2f385826563fbfb9d38a9a -size 331932 +oid sha256:8be7df74be91e2c274a56bbfccf08c957c7f0abf33cd55b7c3a8d4822ee9cfb1 +size 331510 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingHistory_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingHistory_iPhone_dark.png index 1b86805c5..78250cc1d 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingHistory_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.MissingHistory_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:44b4ac45ee37d99957cfc3998b1adb3171e21fa48ccaddf467f9bd69ea091ed8 -size 343391 +oid sha256:90ad2b6aa0f4931db1efdee8df6edadaac054129ae56e9b07b959648f67cbbac +size 343019 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Offline_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Offline_iPhone.png index 201bae91b..be1f7334d 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Offline_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Offline_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bcdbec56e23539ad051dadd4756288f2b6ab2bbe08c79ec8cc8bfe24188321eb -size 426712 +oid sha256:268e011b9c5899f0a90c12add6088070fba8e995430a6b84f6de7b44d3e54d1a +size 426678 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Offline_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Offline_iPhone_dark.png index a61fe0d16..46a44bbc4 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Offline_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Offline_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:81a36c7cc616e1029d8f02d07dc76ae7972765fd834e63622d08cf79f6afbf9c -size 440988 +oid sha256:3fcbf733298b9290e3cb73f6edb7825bd275622826195033a5599f4f97439d7e +size 440896 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Retired_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Retired_iPhone.png index 591c5afbb..d2bda03e4 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Retired_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Retired_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:93925de20c1b54c7371a6e28f383a58ddf7f6418db29169251f106a6a6683772 -size 329118 +oid sha256:bce84ed5f49baa693efc46d82af30a828c04bfae3b94aefbdfda87afc7014ad4 +size 328798 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Retired_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Retired_iPhone_dark.png index 794aa13e8..68c07a9c6 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Retired_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.Retired_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f9e7dc3f09a0b2dc14965a4fc552bdd403be47a2c3b59882291871d325efadc8 -size 340574 +oid sha256:9c9954b7f1ccd03909a15c6e55a2bc02c67949e552bb8b6e951e3c24a346edf3 +size 340275 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.RewrittenHistory_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.RewrittenHistory_iPhone.png index a00666670..c7803f4db 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.RewrittenHistory_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.RewrittenHistory_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cdcb625833e3b5e531c92e051ac9f4c3b11f900472f097456a20c9a15da5687d -size 334131 +oid sha256:faf09431728a6c8de0ec3e3c842a8aa3c2be0a2513a9f5e292746fcb618001a9 +size 333702 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.RewrittenHistory_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.RewrittenHistory_iPhone_dark.png index b5ef6a598..d9be0c527 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.RewrittenHistory_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/AppUpdatesViewSnapshotTests/updates.RewrittenHistory_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:716589832ace062e4d3eea2abef1c1a20b960e292a013a7b1cfd6f02c1aa57a6 -size 345631 +oid sha256:8b6d4adec3ba51c626edd4b82cbab6b7bada1798eb6c9e5a1dc9a8792f40cc8c +size 345251 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPad.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPad.png index b3b366c53..ca98c8623 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPad.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:52d57fd2cbf2a0a5d456616f0f27b17aab9018addce25b8cabb314d0605796c4 -size 361149 +oid sha256:fa4a272b333b948ab6a21273be0aca5053c04a3c982ff6fa3136df5f0532580d +size 360416 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPad_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPad_dark.png index 0ed4455c2..1a040cc65 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPad_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:39eef4b24c317b1225190a6af68fba216901acf1fdc31dbcde3bcfab3407f2e7 -size 368969 +oid sha256:ca5a446f3cc8b21dbff77d69c9b666cef4cd3a0205c45dfcb11343fff1ccdb67 +size 368426 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPhone.png index 83e73a2e8..5a7d569f2 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:59d8708c55ec817e8cac4c54acefba6ecc16e0498bee2400e25598fd5ce68dee -size 271677 +oid sha256:7d75404afa8cbb8b7eb8ace88dc3d24e10f02585258131400989507d2a6900aa +size 252534 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPhone_accessibility.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPhone_accessibility.png index 1d627e8b1..eef5ee8c6 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPhone_accessibility.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f28b3385403e3d66db7414ce06127e9d4a43c6bf8353e2b2a32b46e66a01acd9 -size 546307 +oid sha256:68cb62d523d500e80e24bccf21bd011f746dfaddef67fc57aa7718ac2638088c +size 540540 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPhone_dark.png index d930fe8ed..fd4034d72 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Available_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:48a7d75f51e97278c24a7589ee43f7a848abbefb013991b67c30669a5b60d3b3 -size 254350 +oid sha256:8871d895d301770aa9f28d27dbe49d5cfcd0fc6831670f7f12de8b447fef5fe5 +size 254020 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Local_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Local_iPhone.png index 0a5a139ac..2f0daeb39 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Local_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Local_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f1978f8fa01cf949ba495640a3a6d35edff7d4dfd6f97788b6981f8255360910 -size 252306 +oid sha256:4f4ce4bc314d65c953caa4a8a083fbc57a0ac30559795417c23a153031c79296 +size 252002 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Local_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Local_iPhone_dark.png index 2d1681010..5554b7313 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Local_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Local_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ac044cd7d51e9ecdd71ffdda6dc8b604daadbba5538a0d0d6e360930a0dd1b35 -size 254096 +oid sha256:9bbf4dfc9c13d17f044b18f76e98123fe7800c7543144d5afe35058ee97e259d +size 253768 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Offline_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Offline_iPhone.png index 155d2fd1c..d248a4783 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Offline_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Offline_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:00f2c708e72d05d99769b8d84d43cff34fb9a446ac3011d11a95afe4a9f6cb25 -size 317314 +oid sha256:e1d9b39b565641f7122cbe46217eead3f1a8a33c31e5e58ccff482c77e84813b +size 316929 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Offline_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Offline_iPhone_dark.png index c901d83d9..58b50a45c 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Offline_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/browser.Offline_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:abd3a978678bb5f7b1dfc1e0648aba0880eb9883b53b6867470e622a35cd49b8 -size 320669 +oid sha256:c7870fc05f053c0cbc505aeeb6b2d5352ec204f590cf940588a95dfbca91e748 +size 320367 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/other/browser.Available_iPad_ax5.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/other/browser.Available_iPad_ax5.png index fafb42c90..6533b2130 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/other/browser.Available_iPad_ax5.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/other/browser.Available_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:341a044a9caa6d764b2b0cb68e36cf79f4e0adb98f029a6bbee1963469fee410 -size 895541 +oid sha256:b40ce03559097056b94b46e36876ac92d00a2495772b8f4719abab8d407a2773 +size 881614 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/other/browser.Available_iPad_contrast.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/other/browser.Available_iPad_contrast.png index 96ec36868..d773b1e46 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/other/browser.Available_iPad_contrast.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/other/browser.Available_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2ac5e053ea58109591c4e29260c6d587d699706e94e5ea2b42f1814197f42556 -size 362901 +oid sha256:c9529d0a8beb2c75213df8f478ccbe9113b78a1bac45eaf4edd193731910eda4 +size 362790 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/other/browser.Available_iPhone_ax5.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/other/browser.Available_iPhone_ax5.png index a0e071879..227386f69 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/other/browser.Available_iPhone_ax5.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/other/browser.Available_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b7b31c13f638f1aabfe7c7da1c8ceac2348744e060deef448ae83dde33d77be8 -size 806993 +oid sha256:3dadd0354ed263629b70edd5a9e328eb0d20026a37cf1e850b80b73780d53143 +size 806438 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/other/browser.Available_iPhone_contrast.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/other/browser.Available_iPhone_contrast.png index dc8da58e6..112b770e8 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/other/browser.Available_iPhone_contrast.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBrowserViewSnapshotTests/other/browser.Available_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bfe898147be5b8238224492e8e3e46782b03873feccf8bade24a4a5983109791 -size 253652 +oid sha256:5112ab94e24e8a8c9684c3185021d4291d5a9b920d97a05b09ccbec4f00c4b18 +size 253329 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.Installed_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.Installed_iPhone.png index c6f9d7117..0ac8629c0 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.Installed_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.Installed_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:31cedfeac7de9eb595963fb856a951bf18bd907a0e80b8918ed51e1832c32479 -size 286698 +oid sha256:b8614086e97ede45bd8e36d1be2a6fef0a80e6f03480bd6f7e507954fda24bb7 +size 286380 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.Installed_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.Installed_iPhone_dark.png index cb067da66..fddc2c105 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.Installed_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.Installed_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a80b539a753e5973c55e4110df9620e4d5e8fc3caf7cabe750817763d8faf070 -size 291987 +oid sha256:5641a5e2fffe3e81c3254302f302649206abeb74286a1e328de2092c3f30e4f1 +size 291637 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.MissingDetails_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.MissingDetails_iPhone.png index 6d7e86ca4..e6cdc1222 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.MissingDetails_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.MissingDetails_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4cc0afdaa48fba2b71a8ec843dcc950489696a27f2c9bc46c632cf9ab97bde87 -size 306009 +oid sha256:923c94f3e08125a2e2e2a4533da4aa717eaa9f6deb52755519436c2e77916ca2 +size 305622 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.MissingDetails_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.MissingDetails_iPhone_dark.png index 8a7a331d5..1bb5f3e97 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.MissingDetails_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.MissingDetails_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a4ef18f4b89ca577b9be0101f3a3083c359a02a5d0612662211f910de0109d7e -size 309920 +oid sha256:01277794f5e3b59d4a915127a01494cbd6b4cd39330cdb1677fc52b737231b62 +size 309567 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OlderBuild_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OlderBuild_iPhone.png index f1bb3a766..315a69143 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OlderBuild_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OlderBuild_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6e98b3a35bb131dd8de186f828d8ae4b9d3de8cbfff3fef1a672a27175509ac1 -size 300613 +oid sha256:7c7c78527fc16fc1dd0856c2c7b69d3ca0a810186db4e8f4c9d33f0a759a6276 +size 300073 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OlderBuild_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OlderBuild_iPhone_dark.png index 2aa6eee04..9bed0eee2 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OlderBuild_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OlderBuild_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e7095d4e87309edadd379712612125667e979955a3d136e97ea70d4b3a15b620 -size 304271 +oid sha256:1bf4c2fdc1a9daa95c91fc56f863a67a30047390af8df07b219bd751735d7c9f +size 303913 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPad.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPad.png index 6b3e0680d..4054ccca5 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPad.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d76aba39a79a21c58a777cf0a6dc3df35945c42f143ff03a93bc3dbdc8ea61b1 -size 395202 +oid sha256:710b840de34577861e6fd17305bad29e0f954a2ca12b4b540d4831cba4b5c475 +size 387725 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPad_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPad_dark.png index 78d8d622e..b9ce44bf8 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPad_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c8571c375b872844b701d73148a5a5736d3954c08735178ab75d7469be9bc3d9 -size 402104 +oid sha256:942ff9692834eab2f2688fe00810db38ec9cc3cd448fab584a0417f0ec686443 +size 395670 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPhone.png index 871a45fd8..3b5b2a8ec 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fa9e5b1ec0f31a5737c131ebfab0949a388e2a4c74dd1d05395904aabdf78e8f -size 293022 +oid sha256:a676a8b1cf9ffefb7482bee0c1c1b66ce1af0f9f60833f9ce5bf119f670ccdb6 +size 292702 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPhone_accessibility.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPhone_accessibility.png index f11d4b0c7..de42a222e 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPhone_accessibility.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1ef8ebf99dd7550b005c15eef7ba0592763b0e080605ed1095824b109ba4d86c -size 717652 +oid sha256:3ccd4af5c31aea1c4c16757f01ae795d8f4c6552d72c2cae38bf087c0b79f55b +size 707990 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPhone_dark.png index 05d519666..7d45d2dd9 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.OtherChannel_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dc8f42a4a88206182401406e86cc9572efc62172dba5e6bf84020e11114e2583 -size 297059 +oid sha256:401cc8b59a2997565e78886c43859fe5998e7eddabf4053f69abebf1426bbb4f +size 296841 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.RewrittenHistory_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.RewrittenHistory_iPhone.png index 79dcc588f..440ee684b 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.RewrittenHistory_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.RewrittenHistory_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ce545e62e72659bdcbd29b1f2e43f42675299322d641e0ba732678f05f4e945 -size 308406 +oid sha256:1c5858e185893f47e206e986402b37d7d7e28b33681721e1bbd084f666185cd9 +size 308235 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.RewrittenHistory_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.RewrittenHistory_iPhone_dark.png index efb9b04c2..7e977306e 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.RewrittenHistory_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/build.RewrittenHistory_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7804be1f3bd20ee2433dd4b2839e8cb5f9aa760d54682e5a341aef2088b6f9ae -size 312487 +oid sha256:f813198509d5494bbf25e43eef2ef28ceb8b6ce38a116fe554ed5e030afa3cba +size 312171 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/other/build.OtherChannel_iPad_ax5.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/other/build.OtherChannel_iPad_ax5.png index 32d77c774..59a6a07ee 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/other/build.OtherChannel_iPad_ax5.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/other/build.OtherChannel_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:04f059f1425ab78cfba52d7598ccdaeb612076c8b5432cec1c54024caef63d82 -size 1106360 +oid sha256:2bee258e81c865e5a212e27752c0f90a39f8a10416d9e96e6f6d66320208654f +size 1086046 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/other/build.OtherChannel_iPad_contrast.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/other/build.OtherChannel_iPad_contrast.png index 962bdbcd4..4d8c421be 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/other/build.OtherChannel_iPad_contrast.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/other/build.OtherChannel_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b9fcaf7daafc211fe2a98099c2c53e5304c70be8ad49468f41c27f1aef0fe3bc -size 393607 +oid sha256:2988482d72a913e6ebabc86aeb38fb36442515cc1aafaec5b036e9f7e5da38c8 +size 390050 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/other/build.OtherChannel_iPhone_ax5.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/other/build.OtherChannel_iPhone_ax5.png index 4cf19e161..9e7a4ae22 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/other/build.OtherChannel_iPhone_ax5.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/other/build.OtherChannel_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1c36b996c411ec2aea9d4710d758870e2b000cbd13881cb15df5401d832e38dd -size 994994 +oid sha256:bc95ed443f64205ce226fcf79ecda02f283945acad1ab4e8cb1e498d81370f10 +size 994629 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/other/build.OtherChannel_iPhone_contrast.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/other/build.OtherChannel_iPhone_contrast.png index 16977ace0..4cbb5d85d 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/other/build.OtherChannel_iPhone_contrast.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateBuildViewSnapshotTests/other/build.OtherChannel_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6db1d2c8a352f32c5344533ce07d14cf5ca46d4b76aac74f3626034bc24edbf5 -size 294525 +oid sha256:c417ff7e94d4514f2ab3902f9fbd56fa0569205a5e65a26f74066b001c3574c8 +size 294207 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPad.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPad.png index e5d1f3ea3..72021aa78 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPad.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:40cbdd1bb2368bb417b2f8061f6be8e9e45b06cbe70f9af6d4c079006f06ea57 -size 335468 +oid sha256:2ab855dcd66268c0caf861ce6ae61410f512217d44dbb3b6416c03e4bf7fb8e7 +size 328600 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPad_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPad_dark.png index c904b645f..42fdd144a 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPad_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0951c0dcff3420f24f6493faf4a1a4181b1497b18822f3a43f5c023abc8f7268 -size 340787 +oid sha256:024734dfed52ddf085b263d31d232827cdfa0f16e6b1e09f35a0201c08a31f4f +size 334568 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPhone.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPhone.png index 528aef4de..eb4dae9f9 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPhone.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a04cd63f6e03a5ba91af2024af9f24a838ea0f3d49294d1bb206f60865b77829 -size 208461 +oid sha256:50eee22298f5e65a29abe241fd130d8a772faccde33778dfa0f91db11d3cf03b +size 208101 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPhone_accessibility.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPhone_accessibility.png index e4b276ea0..9b696de67 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPhone_accessibility.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c7e0a43282c64a390f3fc36fe3976ba6d2a7d584925a0edf8159ca9098acbf66 -size 478052 +oid sha256:ea473ee6a945190f8e66eee5373ab6dfd3dd901f86c3d48cf3797e2db8677e2c +size 472543 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPhone_dark.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPhone_dark.png index c894cccfc..6d5049bd7 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPhone_dark.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/history.History_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e935c911cb2c6d6035bcaa4279a8f32f916e65428556b5398d1efd49bbd78751 -size 209126 +oid sha256:6342bc52926bb3c4c404e98cd39644bf51f1b3ea0cbab172c43e6a2bfbae751c +size 208761 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/other/history.History_iPad_ax5.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/other/history.History_iPad_ax5.png index 59c4b7ad4..5b5531081 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/other/history.History_iPad_ax5.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/other/history.History_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ec38b6a60edee241b3a491703f8da9e6c9e1b43c3d90b052610cb7ba8f5ad4d5 -size 694113 +oid sha256:957846fc058d0e98de6ded2918a9f1a60825ec9e5c9a282bb8a231c113420d9e +size 670394 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/other/history.History_iPad_contrast.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/other/history.History_iPad_contrast.png index 14a0d4117..d702dcf11 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/other/history.History_iPad_contrast.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/other/history.History_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f5be77817c06838293dbe82e9e973c1df2963906f5e705fb8db860f73010283 -size 333613 +oid sha256:3810a9e2eadd06c40f13183c80d2b9dee77de377e27dc67b2975107b8b514f45 +size 330888 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/other/history.History_iPhone_ax5.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/other/history.History_iPhone_ax5.png index 91df9df39..8a182cfc5 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/other/history.History_iPhone_ax5.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/other/history.History_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:49b80005f5f320c08001f7e8f92c5626eba1f2fcbd5bd53bb417470917843a70 -size 570151 +oid sha256:79e23c09fa34703cbb98ac2474b8b4f3275be568fee23b8263db6d1154b639c8 +size 569776 diff --git a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/other/history.History_iPhone_contrast.png b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/other/history.History_iPhone_contrast.png index 2ea5b58ad..7518f8a4d 100644 --- a/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/other/history.History_iPhone_contrast.png +++ b/Shared/InstallerKitUI/SnapshotTests/__Snapshots__/UpdateHistoryViewSnapshotTests/other/history.History_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f5453c45992da110fcac01685fce56ab60e0e045b9cfd53ba47ccf82b43cd2e3 -size 208644 +oid sha256:46fe1228a146dbc0a8b37a5619326496df50eea2abd5dde253ed0f2e69c4465d +size 208268 diff --git a/Shared/Periscope/PeriscopeTools/SnapshotTests/__Snapshots__/PeriscopeViewerSnapshotTests/periscopeViewer.PeriscopeViewer_iPhone.png b/Shared/Periscope/PeriscopeTools/SnapshotTests/__Snapshots__/PeriscopeViewerSnapshotTests/periscopeViewer.PeriscopeViewer_iPhone.png index 984801f6f..bb45e7b7f 100644 --- a/Shared/Periscope/PeriscopeTools/SnapshotTests/__Snapshots__/PeriscopeViewerSnapshotTests/periscopeViewer.PeriscopeViewer_iPhone.png +++ b/Shared/Periscope/PeriscopeTools/SnapshotTests/__Snapshots__/PeriscopeViewerSnapshotTests/periscopeViewer.PeriscopeViewer_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:69ede4ea292650118a9fb4f3abc11576da6892dabd81e88f385eda7380622b87 -size 240122 +oid sha256:a4a265fb37519c1d95c9b0a5540cddf9ae07f92fbed01329b5569c4619f3698c +size 272956 diff --git a/Shared/Periscope/PeriscopeTools/SnapshotTests/__Snapshots__/PeriscopeViewerSnapshotTests/periscopeViewer.PeriscopeViewer_iPhone_dark.png b/Shared/Periscope/PeriscopeTools/SnapshotTests/__Snapshots__/PeriscopeViewerSnapshotTests/periscopeViewer.PeriscopeViewer_iPhone_dark.png index be82bf969..12486880d 100644 --- a/Shared/Periscope/PeriscopeTools/SnapshotTests/__Snapshots__/PeriscopeViewerSnapshotTests/periscopeViewer.PeriscopeViewer_iPhone_dark.png +++ b/Shared/Periscope/PeriscopeTools/SnapshotTests/__Snapshots__/PeriscopeViewerSnapshotTests/periscopeViewer.PeriscopeViewer_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aa5f48b3afee4991618374d0d935f131673c0a1044746aa87eafc67e021c1977 -size 275072 +oid sha256:984c9c3c787ce6c5b48f565ba452e899f71d4e36ab6cfdc149e2fc59eaf06d2f +size 273999 diff --git a/Shared/SnapshotKitTesting/AGENTS.md b/Shared/SnapshotKitTesting/AGENTS.md index 673956bae..a579b5b78 100644 --- a/Shared/SnapshotKitTesting/AGENTS.md +++ b/Shared/SnapshotKitTesting/AGENTS.md @@ -32,8 +32,10 @@ Read the root [`AGENTS.md`](../../AGENTS.md) first. - **Keep PNG export hosted.** `captureSnapshotPNG` requires `StuffTestHost`'s key window and must not gain a headless renderer. - **Its `async` is load-bearing.** A synchronous `Snapshotting` pullback could never settle `.task`-driven content. - **Accessibility annotations use AccessibilitySnapshot's SwiftUI renderer.** Keep the focused `AccessibilitySnapshotCore` + `AccessibilitySnapshotPreviews` products. +- **Mount accessibility subjects before readiness and settling.** Preserve their controller parent during parsing unless upstream tiling requires temporary detachment. Guard: `AccessibilitySnapshotViewControllerTests`. +- **Keep native bar metadata sampling synchronous and instance-scoped.** Restore window geometry before rendering or parsing paths. Restore native getters on every exit; never assign a stored `accessibilityElements` list. Guard: `SnapshotAccessibilityViewportTests`. - **Keep annotation padding’s safe-area insets at zero.** Subject clearance belongs to the captured root; guard centered-content outline alignment. -- **Raised-floor accessibility captures parse twice.** Settle between passes and keep only the second render (`AccessibilitySnapshotViewControllerTests`). +- **Raised-floor accessibility captures parse twice.** Settle between passes at the original capture size; expand for annotations only after the final parse (`AccessibilitySnapshotViewControllerTests`). - **The umbrella also links the upstream SnapshotTesting integration that this module replaces.** - **The compare sees on-disk bytes.** Every capture round-trips through PNG encoding before comparison. - **Reuse the capture's PNG bytes for ordinary reference assertions and recording.** Only composed cutsheets need a new PNG encoding. diff --git a/Shared/SnapshotKitTesting/README.md b/Shared/SnapshotKitTesting/README.md index 1fad9703c..efed93785 100644 --- a/Shared/SnapshotKitTesting/README.md +++ b/Shared/SnapshotKitTesting/README.md @@ -84,6 +84,13 @@ re-exports `SnapshotKit` and `SnapshotTesting`, so a test author needs a single - **Accessibility captures** — for `.accessibility` configurations, content is wrapped in AccessibilitySnapshot's SwiftUI renderer so the image is annotated with the VoiceOver reading order, labels, traits, and activation points. + The subject stays mounted during readiness and settling. Ordinary captures keep + their controller parent during parsing. Only oversized tiled captures temporarily + detach the subject for the upstream renderer. + Native bars filter accessible controls against the simulator's physical screen. + For larger viewports, `SnapshotAccessibilityViewport` samples native bar lists with the window fitted to that screen. + It restores window geometry before capture and supplies those lists only during the synchronous parse. + Native getters are restored afterward, including when parsing fails. AccessibilitySnapshot temporarily moves the content while it renders. A case that uses `.settledAtLeast` discards the first accessibility render, applies its settle policy, and parses again. This prevents a transient native-material diff --git a/Shared/SnapshotKitTesting/Sources/AccessibilitySnapshotViewController.swift b/Shared/SnapshotKitTesting/Sources/AccessibilitySnapshotViewController.swift index 7bde7f7b3..af28306fd 100644 --- a/Shared/SnapshotKitTesting/Sources/AccessibilitySnapshotViewController.swift +++ b/Shared/SnapshotKitTesting/Sources/AccessibilitySnapshotViewController.swift @@ -8,7 +8,10 @@ import UIKit /// all-element view's region border isn't clipped, and the wrapper is sized to /// fit the annotations. final class AccessibilitySnapshotViewController: UIViewController { + /// Upstream UIView+ImageRendering's tile limit, in points. Re-check on upgrades. + private static let upstreamTileSideLength: CGFloat = 2000 private let content: UIViewController + private let insetView: InsetView private var snapshotView: SwiftUIAccessibilitySnapshotContainerView { guard let snapshotView = view as? SwiftUIAccessibilitySnapshotContainerView else { @@ -21,6 +24,7 @@ final class AccessibilitySnapshotViewController: UIViewController { init(wrapping content: UIViewController) { self.content = content + insetView = InsetView(content: content.view) super.init(nibName: nil, bundle: nil) addChild(content) content.didMove(toParent: self) @@ -32,30 +36,38 @@ final class AccessibilitySnapshotViewController: UIViewController { } override func loadView() { - view = SwiftUIAccessibilitySnapshotContainerView( - containedView: InsetView(content: content.view), + let container = SwiftUIAccessibilitySnapshotContainerView( + containedView: insetView, snapshotConfiguration: AccessibilitySnapshotConfiguration( viewRenderingMode: .drawHierarchyInRect, colorRenderingMode: .monochrome, ), ) + container.addSubview(insetView) + view = container } - /// Parses the content's accessibility and sizes the view to fit the resulting - /// annotations. Must be called while the view is in the hierarchy. Rendering + /// Parses accessibility without expanding the capture viewport. + /// Must be called while the view is in the hierarchy. Rendering /// failures surface loudly rather than producing a blank image. func parseAccessibility() { - // AccessibilitySnapshot temporarily moves the contained view into its - // renderer. Suspend controller containment around that move, then - // restore it before the annotated wrapper is captured. - content.willMove(toParent: nil) - content.removeFromParent() + // The upstream tiled renderer temporarily adopts the padding view. + let requiresTiling = insetView.bounds.width > Self.upstreamTileSideLength + || insetView.bounds.height > Self.upstreamTileSideLength + if requiresTiling { + content.willMove(toParent: nil) + content.removeFromParent() + } defer { - addChild(content) - content.didMove(toParent: self) + if requiresTiling { + addChild(content) + content.didMove(toParent: self) + } } do { - try snapshotView.parseAccessibility() + try SnapshotAccessibilityViewport.withUnclippedNavigationBars(in: insetView) { + try snapshotView.parseAccessibility() + } } catch let ImageRenderingError.containedViewExceedsMaximumSize(viewSize, maximumSize) { preconditionFailure( "Accessibility snapshot content \(viewSize) exceeds the maximum renderable size \(maximumSize); " @@ -72,6 +84,10 @@ final class AccessibilitySnapshotViewController: UIViewController { } catch { preconditionFailure("Failed to render accessibility snapshot image: \(error)") } + } + + /// Expand after the final parse, keeping preparation at the subject's size. + func sizeToFitAnnotations() { snapshotView.sizeToFit() } } diff --git a/Shared/SnapshotKitTesting/Sources/SnapshotAccessibilityViewport.swift b/Shared/SnapshotKitTesting/Sources/SnapshotAccessibilityViewport.swift new file mode 100644 index 000000000..7ff80448d --- /dev/null +++ b/Shared/SnapshotKitTesting/Sources/SnapshotAccessibilityViewport.swift @@ -0,0 +1,82 @@ +import ObjectiveC +import UIKit + +/// Preserves native bar elements outside the simulator's physical screen while +/// capturing a larger synthetic viewport. Layout and annotation coordinates stay unscaled. +@MainActor +enum SnapshotAccessibilityViewport { + static func withUnclippedNavigationBars( + in root: UIView, + operation: () throws -> Result, + ) rethrows -> Result { + guard let window = root.window, let scene = window.windowScene else { + return try operation() + } + let available = scene.effectiveGeometry.coordinateSpace.bounds + let extent = window.convert(window.bounds, to: scene.effectiveGeometry.coordinateSpace) + let scale = min(1, available.width / extent.width, available.height / extent.height) + guard scale < 1 else { return try operation() } + + let bars = navigationBars(in: root) + let originalTransform = window.transform + let originalCenter = window.center + window.transform = originalTransform.concatenating(CGAffineTransform( + scaleX: scale, + y: scale, + )) + window.center = CGPoint(x: available.midX, y: available.midY) + var elements: [ObjectIdentifier: NSArray] = [:] + for bar in bars { + if let nativeElements = bar.accessibilityElements { + elements[ObjectIdentifier(bar)] = nativeElements as NSArray + } + } + window.transform = originalTransform + window.center = originalCenter + + // Do not assign accessibilityElements: that would replace UIKit's automatic + // behavior with a stored list after capture. Intercept only these instances + // for this synchronous parse, then restore the original getter implementations. + let selector = #selector(UIView.accessibilityElements) + var overrides: [GetterOverride] = [] + var methods: Set = [] + for bar in bars { + guard let method = class_getInstanceMethod(type(of: bar), selector), + methods.insert(method).inserted + else { continue } + let original = method_getImplementation(method) + let getter = unsafeBitCast(original, to: Getter.self) + let capturedElements = elements + let block: @convention(block) (AnyObject) -> NSArray? = { object in + if let captured = capturedElements[ObjectIdentifier(object)] { return captured } + return getter(object, selector) + } + let replacement = imp_implementationWithBlock(block) + method_setImplementation(method, replacement) + overrides.append(GetterOverride( + method: method, + original: original, + replacement: replacement, + )) + } + defer { + for override in overrides.reversed() { + method_setImplementation(override.method, override.original) + imp_removeBlock(override.replacement) + } + } + return try operation() + } + + private typealias Getter = @convention(c) (AnyObject, Selector) -> NSArray? + + private struct GetterOverride { + let method: Method + let original: IMP + let replacement: IMP + } + + private static func navigationBars(in view: UIView) -> [UINavigationBar] { + (view as? UINavigationBar).map { [$0] } ?? view.subviews.flatMap { navigationBars(in: $0) } + } +} diff --git a/Shared/SnapshotKitTesting/Sources/SnapshotImageRendering.swift b/Shared/SnapshotKitTesting/Sources/SnapshotImageRendering.swift index 8b574fa8c..0d5fb64fe 100644 --- a/Shared/SnapshotKitTesting/Sources/SnapshotImageRendering.swift +++ b/Shared/SnapshotKitTesting/Sources/SnapshotImageRendering.swift @@ -483,9 +483,6 @@ func renderSnapshotCaptureLocked( { func parseAccessibility() { accessibilityViewController.parseAccessibility() - wrappingViewController.view.frame.size = accessibilityViewController.view.frame.size - wrappingViewController.view.setNeedsLayout() - CATransaction.performWithoutAnimation(wrappingViewController.view.layoutIfNeeded) } if case .settledAtLeast = settle { @@ -509,6 +506,10 @@ func renderSnapshotCaptureLocked( } timing.measure(.accessibilityParse) { parseAccessibility() + accessibilityViewController.sizeToFitAnnotations() + wrappingViewController.view.frame.size = accessibilityViewController.view.frame.size + wrappingViewController.view.setNeedsLayout() + CATransaction.performWithoutAnimation(wrappingViewController.view.layoutIfNeeded) } } diff --git a/Shared/SnapshotKitTesting/Tests/AccessibilitySnapshotViewControllerTests.swift b/Shared/SnapshotKitTesting/Tests/AccessibilitySnapshotViewControllerTests.swift index 0299e0c2a..054dbb939 100644 --- a/Shared/SnapshotKitTesting/Tests/AccessibilitySnapshotViewControllerTests.swift +++ b/Shared/SnapshotKitTesting/Tests/AccessibilitySnapshotViewControllerTests.swift @@ -1,4 +1,4 @@ -@_spi(Testing) import SnapshotKitTesting +@_spi(Testing) @testable import SnapshotKitTesting import SwiftUI import TestHostSupport import Testing @@ -6,6 +6,61 @@ import UIKit @MainActor struct AccessibilitySnapshotViewControllerTests { + @Test func preparationKeepsTheCaptureSizeUntilAnnotationsAreFinal() throws { + let subject = ContainmentProbeController() + subject.view.frame = CGRect(x: 0, y: 0, width: 100, height: 200) + let capture = AccessibilitySnapshotViewController(wrapping: subject) + let originalSize = capture.view.bounds.size + try show(capture) { controller in + controller.view.frame.size = originalSize + controller.view.layoutIfNeeded() + for _ in 0 ..< 2 { + controller.parseAccessibility() + #expect(controller.view.bounds.size == originalSize) + #expect(subject.parent === controller) + } + controller.sizeToFitAnnotations() + #expect(controller.view.bounds.width > originalSize.width + || controller.view.bounds.height > originalSize.height) + } + } + + @Test(arguments: [ + CGSize(width: 100, height: 200), + CGSize(width: 1984, height: 100), + CGSize(width: 100, height: 1984), + ]) + func untiledParsingKeepsTheSubjectParent(size: CGSize) async throws { + // Annotation padding adds 16 points: equality at 2,000 does not tile. + try await verifyContainment(size: size, expectedRemovals: 1) + } + + @Test(arguments: [CGSize(width: 1985, height: 100), CGSize(width: 100, height: 1985)]) + func tiledParsingRestoresTheSubjectParent(size: CGSize) async throws { + // At 2,001 padded points the upstream renderer adopts a temporary controller. + try await verifyContainment(size: size, expectedRemovals: 3) + } + + private func verifyContainment(size: CGSize, expectedRemovals: Int) async throws { + let host = ContainmentProbeController() + host.view.frame = CGRect(origin: .zero, size: size) + _ = try await renderSnapshotImage( + of: host, + named: "accessibility-containment", + safeAreaInsets: .zero, + isAccessibility: true, + settle: .settledAtLeast(minDuration: 0.01), + onReadyToSnapshot: { + #expect(host.view.window != nil) + #expect(host.removals == 0) + }, + ) + // Cleanup removes the subject once; tiling adds one removal per parse. + #expect(host.removals == expectedRemovals) + #expect(host.parent == nil) + #expect(host.view.superview == nil) + } + @Test func annotationsStayAlignedWithCenteredNavigationContent() async throws { let configuration = SnapshotConfiguration(device: .iPad) let host = UIHostingController(rootView: CenteredAccessibilityFixture()) @@ -64,6 +119,22 @@ struct AccessibilitySnapshotViewControllerTests { } } +@MainActor +private final class ContainmentProbeController: UIViewController { + var removals = 0 + + override func loadView() { + let button = UIButton(type: .system) + button.setTitle("Action", for: .normal) + view = button + } + + override func willMove(toParent parent: UIViewController?) { + super.willMove(toParent: parent) + if parent == nil { removals += 1 } + } +} + @MainActor private final class WindowAttachmentProbeView: UIView { private var scheduledUpdate = false diff --git a/Shared/SnapshotKitTesting/Tests/SnapshotAccessibilityViewportTests.swift b/Shared/SnapshotKitTesting/Tests/SnapshotAccessibilityViewportTests.swift new file mode 100644 index 000000000..1fb41086c --- /dev/null +++ b/Shared/SnapshotKitTesting/Tests/SnapshotAccessibilityViewportTests.swift @@ -0,0 +1,196 @@ +@testable import SnapshotKitTesting +import TestHostSupport +import Testing +import UIKit + +@MainActor +struct SnapshotAccessibilityViewportTests { + @Test(arguments: [false, true]) + func unclippingRecoversOnlyCapturedBarElements(throwsDuringCapture: Bool) async throws { + try await show(UIViewController()) { controller in + let window = try #require(controller.view.window) + let scene = try #require(window.windowScene) + let originalFrame = window.frame + defer { window.frame = originalFrame } + let available = scene.effectiveGeometry.coordinateSpace.bounds + window.frame.size.width = available.width + 300 + controller.view.frame = window.bounds + + let subject = UIView(frame: controller.view.bounds) + controller.view.addSubview(subject) + let barFrame = CGRect(x: available.width + 30, y: 100, width: 100, height: 44) + let capturedBar = ScreenClippedNavigationBar(frame: barFrame) + subject.addSubview(capturedBar) + let unrelatedBar = ScreenClippedNavigationBar(frame: barFrame.offsetBy(dx: 0, dy: 100)) + controller.view.addSubview(unrelatedBar) + + #expect(labels(in: capturedBar).isEmpty) + #expect(labels(in: unrelatedBar).isEmpty) + do { + try SnapshotAccessibilityViewport.withUnclippedNavigationBars(in: subject) { + #expect(labels(in: capturedBar) == ["Offscreen action"]) + #expect(labels(in: unrelatedBar).isEmpty) + if throwsDuringCapture { throw CaptureFailure.expected } + } + #expect(!throwsDuringCapture) + } catch CaptureFailure.expected { + #expect(throwsDuringCapture) + } + #expect(labels(in: capturedBar).isEmpty) + #expect(labels(in: unrelatedBar).isEmpty) + + // The restored getter follows live geometry rather than a saved list. + capturedBar.frame.origin.x = 10 + #expect(labels(in: capturedBar) == ["Offscreen action"]) + } + } + + @Test(arguments: [false, true]) + func nativeBarListsRestoreAfterCapture(throwsDuringCapture: Bool) async throws { + let host = UIViewController() + try await show(host) { controller in + let window = try #require(controller.view.window) + let scene = try #require(window.windowScene) + let originalFrame = window.frame + defer { window.frame = originalFrame } + let size = CGSize( + width: scene.effectiveGeometry.coordinateSpace.bounds.width + 300, + height: scene.effectiveGeometry.coordinateSpace.bounds.height, + ) + window.frame.size = size + controller.view.frame = CGRect(origin: .zero, size: size) + + let subject = UIViewController() + subject.view.frame = controller.view.bounds + controller.addChild(subject) + controller.view.addSubview(subject.view) + subject.didMove(toParent: controller) + for (index, title) in ["Sidebar", "Calendar"].enumerated() { + let navigation = navigationController(title: title) + navigation.view.frame = CGRect( + x: CGFloat(index) * size.width / 2, + y: 0, + width: size.width / 2, + height: size.height, + ) + subject.addChild(navigation) + subject.view.addSubview(navigation.view) + navigation.didMove(toParent: subject) + } + let unrelated = navigationController(title: "Unrelated") + unrelated.view.frame = CGRect(x: 0, y: 300, width: size.width, height: 300) + controller.addChild(unrelated) + controller.view.addSubview(unrelated.view) + unrelated.didMove(toParent: controller) + let pathView = ScreenPathView(frame: CGRect(x: 30, y: 200, width: 90, height: 60)) + controller.view.addSubview(pathView) + try await waitForAsync { + navigationBars(in: subject.view).count == 2 + && navigationBars(in: unrelated.view).count == 1 + && navigationBars(in: subject.view) + .contains { labels(in: $0).contains("Planning") } + && navigationBars(in: unrelated.view) + .contains { labels(in: $0).contains("Unrelated") } + } + let bars = navigationBars(in: subject.view) + let unrelatedBar = try #require(navigationBars(in: unrelated.view).first) + let before = bars.map { labels(in: $0) } + // UIKit versions differ in whether off-screen bar items are filtered. + // Both paths must restore automatic getters and preserve coordinates. + #expect(before.contains { $0.contains("Planning") }) + let unrelatedBefore = labels(in: unrelatedBar) + let frames = bars.map(\.frame) + let transform = window.transform + let center = window.center + let path = try #require(pathView.accessibilityPath).bounds + + do { + try SnapshotAccessibilityViewport.withUnclippedNavigationBars(in: subject.view) { + for bar in bars { + #expect(labels(in: bar).contains("Planning")) + #expect(labels(in: bar).contains("Overview")) + } + #expect(labels(in: unrelatedBar) == unrelatedBefore) + #expect(bars.map(\.frame) == frames) + #expect(window.transform == transform) + #expect(window.center == center) + #expect(pathView.accessibilityPath?.bounds == path) + if throwsDuringCapture { throw CaptureFailure.expected } + } + #expect(!throwsDuringCapture) + } catch CaptureFailure.expected { + #expect(throwsDuringCapture) + } + #expect(bars.map { labels(in: $0) } == before) + #expect(window.transform == transform) + #expect(window.center == center) + #expect(bars.map(\.frame) == frames) + + // A restored stored list would pass the equality above but fail this: + // UIKit must recompute its elements after the real item changes. + let bar = try #require(bars.first { labels(in: $0).contains("Planning") }) + bar.topItem?.rightBarButtonItems = [UIBarButtonItem( + title: "Replacement", + style: .plain, + target: nil, + action: nil, + )] + bar.frame.size.width = scene.effectiveGeometry.coordinateSpace.bounds.width + bar.setNeedsLayout() + bar.layoutIfNeeded() + #expect(labels(in: bar).contains("Replacement")) + #expect(!labels(in: bar).contains("Planning")) + } + } + + private func navigationController(title: String) -> UINavigationController { + let content = UIViewController() + content.view.backgroundColor = .white + content.navigationItem.title = title + content.navigationItem.rightBarButtonItems = ["Planning", "Overview"].map { + UIBarButtonItem(title: $0, style: .plain, target: nil, action: nil) + } + return UINavigationController(rootViewController: content) + } + + private func navigationBars(in view: UIView) -> [UINavigationBar] { + (view as? UINavigationBar).map { [$0] } ?? view.subviews.flatMap { navigationBars(in: $0) } + } + + private func labels(in bar: UINavigationBar) -> [String] { + (bar.accessibilityElements as? [NSObject] ?? []).compactMap(\.accessibilityLabel) + } + + private enum CaptureFailure: Error { case expected } +} + +/// Reproduces native off-screen element filtering independently of UIKit's +/// current navigation-bar accessibility implementation. +@MainActor +private final class ScreenClippedNavigationBar: UINavigationBar { + private lazy var actionElement: UIAccessibilityElement = { + let element = UIAccessibilityElement(accessibilityContainer: self) + element.accessibilityLabel = "Offscreen action" + return element + }() + + override var accessibilityElements: [Any]? { + get { + guard let window, let scene = window.windowScene else { return [] } + let coordinates = scene.effectiveGeometry.coordinateSpace + let frameInWindow = convert(bounds, to: window) + let frameInScene = window.convert(frameInWindow, to: coordinates) + guard coordinates.bounds.contains(frameInScene) else { return [] } + return [actionElement] + } + set { super.accessibilityElements = newValue } + } +} + +@MainActor +private final class ScreenPathView: UIView { + override var accessibilityPath: UIBezierPath? { + get { UIBezierPath(rect: convert(bounds, to: nil)) } + set { super.accessibilityPath = newValue } + } +} diff --git a/Shared/SnapshotKitTesting/Tests/SnapshotImageRenderingTests.swift b/Shared/SnapshotKitTesting/Tests/SnapshotImageRenderingTests.swift index 546897af3..5d1477685 100644 --- a/Shared/SnapshotKitTesting/Tests/SnapshotImageRenderingTests.swift +++ b/Shared/SnapshotKitTesting/Tests/SnapshotImageRenderingTests.swift @@ -43,7 +43,8 @@ struct SnapshotImageRenderingTests { } } - @Test func fixedViewportSettlementPreservesNativeBarGeometry() async throws { + @Test(arguments: [false, true]) + func fixedViewportSettlementPreservesNativeBarGeometry(isAccessibility: Bool) async throws { let configuration = SnapshotConfiguration(device: .duoInnerPortrait) let probe = NativeBarGeometryProbe() let host = UIHostingController(rootView: NativeBarGeometryFixture(probe: probe) @@ -58,8 +59,13 @@ struct SnapshotImageRenderingTests { of: host, named: "native-bar-geometry", safeAreaInsets: configuration.device.safeAreaInsets.uiEdgeInsets, + isAccessibility: isAccessibility, settle: .settledAtLeast(minDuration: 1.5), onReadyToSnapshot: { + guard host.view.window != nil else { + Issue.record("The native content must be mounted during readiness and settling") + return + } probe.begin() let outcome = await settleContent(host.view, named: "native-bar-geometry-proof") probe.end() diff --git a/Where/WhereUI/AGENTS.md b/Where/WhereUI/AGENTS.md index 3c8bc3cf6..2e878a22c 100644 --- a/Where/WhereUI/AGENTS.md +++ b/Where/WhereUI/AGENTS.md @@ -159,7 +159,7 @@ Layering, localization, preview, and testing conventions live in the feature minimum and active-scene visibility: the first foreground-visible `MainTabs` reveal stays covered when headless promotion coalesces or the first hold is interrupted, while warm resumes never replay it. -- Measure calendar month sections and day rows eagerly so full-content measurement and scroll restoration use their actual heights. Guard: `CalendarContentViewSnapshotTests`. +- Measure calendar month sections, day rows, and Timeline rows eagerly so full-content measurement and scroll restoration use their actual heights. Guards: `CalendarContentViewSnapshotTests`, `PresenceTimelineListSnapshotTests`. - Keep itinerary persistence, forecast bounds, overlaps, and Home projections in WhereCore. `LocationForecastModel` mirrors one planning snapshot through store-change refreshes. Complete the latest started read when its requesting sheet disappears; keep older results from replacing it. @@ -286,6 +286,8 @@ Use the [`update-explore-features`](../../.agents/skills/update-explore-features ## Testing +Keep Developer Overlay snapshots scene-backed so native glass retains its scene geometry. Guard: `DeveloperOverlaySnapshotTests`. + Hosted tests that traverse SwiftUI accessibility must link and import `AccessibilitySnapshotParser` so a fresh simulator initializes its accessibility runtime. Guard: `CalendarContentViewTests`. diff --git a/Where/WhereUI/README.md b/Where/WhereUI/README.md index 31316d859..08a20bbed 100644 --- a/Where/WhereUI/README.md +++ b/Where/WhereUI/README.md @@ -692,5 +692,10 @@ Flat screen references use `flat/`, and comparison sheets use `themes/`. Special traits nest under the group's `other/` directory. Review sheet PNGs before recording. Their embedded panel maps are part of the reference; preserve PNG metadata when copying them. -Calendar month sections and day rows measure eagerly. This gives full-content -snapshots their complete height before capture on the pinned Duo runtime. +Calendar month sections, day rows, and Timeline rows measure eagerly. This gives +full-content snapshots their complete height before capture. Timeline measurement +also avoids blank trailing space from lazy estimates in its bottom-anchored scroll view. + +Developer Overlay snapshots retain their scene for native glass rendering. Detached +windows produce material bands and clipping in the menu. The retained-scene +cases keep their device traits, content clearance, and full-content sizing. diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPad.png index 09ccedf85..babdd74d5 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b284bdbbe0e248a0474dcf08fe346e77d6d8478286c6d4e17524d29dd1b4e109 -size 3473131 +oid sha256:dcd50e3da5e5d870455286bc3d38f3acd11902b76b9cdf0d5af54017bb9b157f +size 3472384 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPad_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPad_accessibility.png index f1b2b64ad..68cebd60a 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPad_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5c421b8feae740daad2aa4df509bc5553f08534cc5c95ebd0dce9d8002292e6a -size 2425080 +oid sha256:4f17d8a36e5516858a82bbeadd82e361bea2738080d4472cfe4eeaa8b7e077c9 +size 2424487 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPad_dark.png index 41e4531c8..0b8ef63f1 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:61cac64b224722c29a0a224393cc454dffa8f13a514f48cb7a5fe766d95bb892 -size 3487248 +oid sha256:eb5efc6fc79c5a4852b125b1947a86de28fed6b8f6608593235630e9742c8149 +size 3486589 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPhone.png index aa6909493..e49a21d8d 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:120de16c885c596a97de8c7bea90f2a97a8ebe47d2730d041961217d3e2552c9 -size 2186656 +oid sha256:269535a4c2f7712dae8b1188380f3fa4c9a51d91e481d531bfa071f8d903299a +size 2178807 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPhone_accessibility.png index 4d58928b9..24cdf5cb5 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9a8176162478058b198a9b74f779360d323dc8a402caf7530b78f82b4cd6152c -size 1806945 +oid sha256:0fb8ba7739839daa573b206fb94cd0647a90f38028b4237ede4c20f0e9ccea11 +size 1793972 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPhone_dark.png index 82e4c0cc8..1eaa13591 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Default_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0741fe1f556485cac2045d4b63f206bb9835373ed7f63d2306f5abb7b8189c86 -size 2196806 +oid sha256:2b64e93c52d579d35b43e85f97c3d3239608f9bc8241ff8855f6959ca49ada88 +size 2189370 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.DirtyTree_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.DirtyTree_iPhone.png index f36feb0a5..134236f2a 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.DirtyTree_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.DirtyTree_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9cc1293eabb733725fe9282f5348f016a70b6846d976b5ab576eccec3b0aa1ae -size 2189487 +oid sha256:3cef9bdc918e83cd8d89a3a55e741973014d028c4b707ac66d2aa74c550ac878 +size 2181927 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.DirtyTree_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.DirtyTree_iPhone_dark.png index 83ad0ea66..5057fae40 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.DirtyTree_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.DirtyTree_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6472159f0a66be8738788f1bc58d7dc2ee44cca84e06debe195cd0e2ac07a4c1 -size 2199711 +oid sha256:f78e66d0bc15c42f6b833215db32a886f35d378ca0dd8ad4ba4ae3f044fc6d16 +size 2192498 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.LibrariesOnly_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.LibrariesOnly_iPhone.png index 53a46f3ad..13d93c6f5 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.LibrariesOnly_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.LibrariesOnly_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f406650e1049739952cf4eaceb06b183a3f78cfb99525d2c943ba8a1023bceea -size 2182492 +oid sha256:6198d7bd121bf3ee364e200365bf962baa172e56d1370dba456e01288830e9a7 +size 2175207 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.LibrariesOnly_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.LibrariesOnly_iPhone_dark.png index 2a4318888..4e0499359 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.LibrariesOnly_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.LibrariesOnly_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d1f21c95f1bedfd4a476f6e3e887734523a88fb7d38b73d9ae9b3cac50d3651e -size 2193324 +oid sha256:e53e52bb57a760256b2c45b7b33821105831538a2b8078aeb9a6f47715b707d4 +size 2185650 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Unattributed_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Unattributed_iPhone.png index 029ac9868..4239bdca0 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Unattributed_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Unattributed_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4713ca0d47123eca96d1513e710280681e46c55243bfab470ed841e4659a0f2a -size 2185810 +oid sha256:544230443af0a3269fa3e1bb9cd65a9abf7d81fa13c2f737055a7ba95392b14b +size 2177879 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Unattributed_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Unattributed_iPhone_dark.png index 3f96fef00..09bacdeae 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Unattributed_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/about.Unattributed_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7a7e36b6523dfd8b9f5b8ab6526d83d548d4de11e1b85b3ea6c45e9ee5261f61 -size 2196239 +oid sha256:482113b71d6fccd55f63471d528a0654372e53d732c3ff4168aac528ea173336 +size 2187905 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/other/about.Default_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/other/about.Default_iPad_ax5.png index c635e8241..40a8f0ae9 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/other/about.Default_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/other/about.Default_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b8ebfb186728011e4948f5ee2731e1c9ea718467fbe2a55205dae3fc4c60481f -size 11149617 +oid sha256:8383c981f0ce687286ae099f553f739373a973af8b165e8856cc450c12a74d02 +size 11148764 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/other/about.Default_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/other/about.Default_iPad_contrast.png index fb8f1c228..958323d1b 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/other/about.Default_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/other/about.Default_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0c733c8db986ec22dcbf79fe354471d3c05b628a04c30abe0556ae80fe1989cc -size 3481111 +oid sha256:41e122431abec5fc912a9a3362a9e19af7ab7286c1265407c392e5ed41c23186 +size 3480196 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/other/about.Default_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/other/about.Default_iPhone_ax5.png index db15486fc..15b292b2c 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/other/about.Default_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/other/about.Default_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ccf1c52adaf6e5fb2edeccab3fd0e364da04ab657e22a8169dc08ca337a94848 -size 8669534 +oid sha256:37fcb4763bcdc7c2276403582da0b6a480f612f8d0623bfdb086cc127b706557 +size 8661393 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/other/about.Default_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/other/about.Default_iPhone_contrast.png index 2393201c1..8e84e07f6 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/other/about.Default_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AboutSettingsViewSnapshotTests/other/about.Default_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ca71030268771200f80e7ab7a4a7acef42fd987978aaf2e0f0cddd14cdd77c9c -size 2197159 +oid sha256:fb54e2c49810dfee9e9b3c16961ba7fe9e4e76954156eafbce54896a5eb4202b +size 2190543 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/appIcon.Default_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/appIcon.Default_iPad.png index 89b5a7441..f0e431352 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/appIcon.Default_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/appIcon.Default_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:54e92bb2aa3ca98d4893f8c64871ea70612c194f051d7495feeeb62038e12eec -size 1179083 +oid sha256:79b1323ce1254fa367c66b7c523f06c5884991ca951037a5cbec23ab9ad8c6c5 +size 1178577 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/appIcon.Default_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/appIcon.Default_iPad_dark.png index 33a261531..2fc34b173 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/appIcon.Default_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/appIcon.Default_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:31df45a20425ea1be8e675202a58a01e701a7a83fa625af7da5221210ca058c8 -size 944137 +oid sha256:1865d999b4c457b103cbaf02ae160da404d1c15d8a84cd3e588f3114c07eac94 +size 942676 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/appIcon.Default_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/appIcon.Default_iPhone.png index 52b95478d..640a26a78 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/appIcon.Default_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/appIcon.Default_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:84aa685db009ee4bfb91983aa2c22e824fae9c476462039f74598aac2d495b09 -size 1217889 +oid sha256:d5b828a35a793b562e49062f9182f31fca18a2f8d79376639cc6da5d95442123 +size 1214298 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/appIcon.Default_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/appIcon.Default_iPhone_accessibility.png index d022a1997..5a1585cc4 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/appIcon.Default_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/appIcon.Default_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:32b4f1f2375d5b7d3b1945549965cbef9a44656396860f0e7a494eef14137d00 -size 918224 +oid sha256:d1050b34506aa3712d53743ac41328767906a62916847d73a1750a632a8c8a2c +size 919732 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/other/appIcon.Default_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/other/appIcon.Default_iPad_ax5.png index b26b250ac..d4658d983 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/other/appIcon.Default_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/other/appIcon.Default_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:baac4e11db157921b46278bf3568328e8bd6edf61764a706581b6d8e01d3ae13 -size 1400515 +oid sha256:1e306d77a7969481cd591054f5c23e230afac6bfd7d10456b3e6638d5af8a250 +size 1399765 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/other/appIcon.Default_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/other/appIcon.Default_iPad_contrast.png index 2eb2333e7..5a3ac7d91 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/other/appIcon.Default_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AppIconViewSnapshotTests/other/appIcon.Default_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7f7aa74dc41fa94a8cb7516926c3ca02f9b1fb5bc92526c76011d6c767a0623f -size 1178489 +oid sha256:d547782dfe296bcdaf002e17699b6461faa29bc7048001e33bed19132300c44c +size 1177902 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/appearance.Default_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/appearance.Default_iPad.png index d3e955ea6..bf75670a4 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/appearance.Default_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/appearance.Default_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:25cdb74828a588c61f355b06722a0b388a23dbb9a37d03767c861709b2e910ee -size 1233738 +oid sha256:230fc3cdede17064b7ac71c441cc30711bcd66c0404c9b69891c6dbfc90cb991 +size 1161579 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/appearance.Default_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/appearance.Default_iPad_dark.png index ca1ede1c0..a00d08342 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/appearance.Default_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/appearance.Default_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:daf0eacabc5c9e1fa931899c5eb00b37eafc7f096eaa659e705faeed5bcfd383 -size 1291227 +oid sha256:e0e65f9da857c2fa709b9d24bc981f2f6b64f23eacd6443e8e04a62fe39a0af1 +size 1235865 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/appearance.Default_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/appearance.Default_iPhone.png index c4cdad5da..b7f0087f1 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/appearance.Default_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/appearance.Default_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:38287500b61effb2213f6923250ceefb13d63fa8a7d55c4db03835cb37bac8a5 -size 792778 +oid sha256:8770089a246bc323f747ff5d405d7f3cf412beeecf2bfca6638a87f2845a76d0 +size 1008398 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/appearance.Default_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/appearance.Default_iPhone_accessibility.png index bb0d7dfc6..158876d07 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/appearance.Default_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/appearance.Default_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9b45126009cffc0e5f7a871466af6825cefff8a36a325c9fda171ace8418e75f -size 1079574 +oid sha256:0e79de35b139b96ee8e1abc1daaed41d57bd795436666cff132573c87cd474ca +size 1252581 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/appearance.Default_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/appearance.Default_iPhone_dark.png index b49292bdc..9d22259c8 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/appearance.Default_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/appearance.Default_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a19bd10e987a68185f926712b63ba14a4f1e56ba1d808784c7b0b0bc08f666c5 -size 795721 +oid sha256:4ddbd60f7f2eedba25a6b6fae07581e00be1181f9e3f91a2bd8186fda5f48923 +size 1064294 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/flat/appearance.FlatSelected_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/flat/appearance.FlatSelected_iPhone.png index 0630d600f..7d9736b58 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/flat/appearance.FlatSelected_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/flat/appearance.FlatSelected_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ff2a25f425530806ae4edd60b25332ec45fcfc78a4d3f84904afd72bb774eef1 -size 778079 +oid sha256:00dd705ea16f24b7b6c2f3268581114e45046c287e958695f13a09e9c8d11f05 +size 1002146 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/flat/appearance.FlatSelected_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/flat/appearance.FlatSelected_iPhone_dark.png index c0261593f..54a207fd1 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/flat/appearance.FlatSelected_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/flat/appearance.FlatSelected_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:20b5debce5abf1937455c9d2008d504ad73d4bea03f6685e644f9fec98e05541 -size 792065 +oid sha256:843366af3962a055d738fb2194fdc7b1ae9682bcb8ff9ababc4bbf26256fba61 +size 1065911 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/other/appearance.Default_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/other/appearance.Default_iPad_ax5.png index fec92c92c..757cd23ed 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/other/appearance.Default_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/other/appearance.Default_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:79bdfec5c74fc15c593c069789e7b65303bcdc587cab6e4a4790038a5e2b3422 -size 3335802 +oid sha256:c8ca00aa4b820779f02e2cd01800f634962824ce89ecfa0c49f6e112f179984e +size 3121925 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/other/appearance.Default_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/other/appearance.Default_iPad_contrast.png index 56f73de4b..5639d365b 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/other/appearance.Default_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/other/appearance.Default_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f56bdcd7c37205354e2fa775ba0814108e03d2681ed7619b164427eaad1fc56f -size 1268053 +oid sha256:c60de67cca4c7c7d1679b175a9c2ccbf47331adc96b5a79c4936fb41a188437e +size 1223337 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/other/appearance.Default_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/other/appearance.Default_iPhone_ax5.png index 802753551..9f6c07bf9 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/other/appearance.Default_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/other/appearance.Default_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:49a553f088493f64732747c33ac5426c9524da6cb192ef21f1ac95b01bdff06d -size 2395350 +oid sha256:84ddeeb346704676023ef25bc4757a3380edd41ea0bc761b6bede23db724c641 +size 2316996 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/other/appearance.Default_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/other/appearance.Default_iPhone_contrast.png index 5216e556e..d4bc926be 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/other/appearance.Default_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/AppearanceSettingsViewSnapshotTests/other/appearance.Default_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e5723a708a547278ed4874a5b6cabd0cb28df6dba2e6d2fc573f37cc01f935fd -size 818719 +oid sha256:a390a547fbfdfc67b1b56cab8240507b5e6783174ea1c383a41ad92fe5c99418 +size 1063721 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Empty_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Empty_iPhone.png index b3e61081b..f504e0023 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Empty_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Empty_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e1cdcd1a8c19cc31b398a11f00524f1f0a59dae2d889f48331cc6fe130f1bf87 -size 663188 +oid sha256:9ca557d17659ecbaa48596c2b71183f5a9309a7c6877d23dfcba42423a3b3128 +size 650755 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Empty_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Empty_iPhone_dark.png index 505a47027..a8b1ea8bc 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Empty_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Empty_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f77b49b631da8cae0cacf942e56be720f051b2825af0c54d5b7bf3e22f3bb163 -size 702541 +oid sha256:108af552c66624d69092dac074a7673752c28ff2cf7c50aef877e7de2d66ef34 +size 686623 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Flights_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Flights_iPhone.png index 4480adda9..9e31c5698 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Flights_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Flights_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e81511b8e669422bbee126e9ff105ed67d8a8592f9d78d8b5317e821b3c7114a -size 2098593 +oid sha256:6c6b6427318f4b48141e2bf8d6a73291777cd8e9558e85d7d0195573720d47d8 +size 2079284 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Flights_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Flights_iPhone_dark.png index 8a8d2f753..04a2a84b2 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Flights_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Flights_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:574270517ef83a8978d0f197f6a97b7ee27b95afc4a836a9001da8ec82f9a5f0 -size 1430219 +oid sha256:c4bc581430684e9c0ab23711794cd11106f1bc148993c222cc1f7074e9da5bd8 +size 1413211 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.FocusedPlannedStay_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.FocusedPlannedStay_iPhone.png index 422f96265..4e988ffcb 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.FocusedPlannedStay_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.FocusedPlannedStay_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c67cda1937afcad968b09edcc7c142c111513e87b39167c698db4ef8c01c12cc -size 1808011 +oid sha256:06f3a876566bc064abe1708da9500d156dbae837abf9eaac237d94e84fb99016 +size 1795645 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.FocusedPlannedStay_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.FocusedPlannedStay_iPhone_dark.png index 31572e8b4..f69fff211 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.FocusedPlannedStay_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.FocusedPlannedStay_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7123b1eedf915095764147c1c86d9d2c5129d1c6dd19b64f1114b1c2f119ca12 -size 1380743 +oid sha256:1e28284ccb40c8b221335206fc7ade89407467c064a55d28b6209d5074a440ba +size 1366072 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Focused_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Focused_iPhone.png index e4b63d42d..49804c2f7 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Focused_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Focused_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aebda08d9ff12b8a2bc4a51913d50d208f24d888c701fe1696e1d0e7d9e58e11 -size 1628456 +oid sha256:7710238b6f1a4992b5b458a4060447f1aad47bcc920f90636ab3594cafc9ec63 +size 1609729 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Focused_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Focused_iPhone_dark.png index 1be9e3bde..109a1f8b4 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Focused_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Focused_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6815c53acb3111139c553c885b53442a6f4484d6d633eab96ce12ecd99f784d3 -size 1203651 +oid sha256:be4b991b22f9bccda3810e17742866f4860829e563e7eca3ccbdf14f13aac866 +size 1188711 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.FutureWithoutPlans_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.FutureWithoutPlans_iPhone.png index 37c8fd927..1e2affc4c 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.FutureWithoutPlans_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.FutureWithoutPlans_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:46e8a464497158925b672404aed6f2dbf667d2e18cbd4e490023519fa3abd10b -size 982635 +oid sha256:6aecd8fae0e37f5d4ac5113eb156a4ef74d52926a5f69b7f091cc0ecbb4bbe83 +size 971016 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.FutureWithoutPlans_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.FutureWithoutPlans_iPhone_dark.png index fe6285810..06f07d975 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.FutureWithoutPlans_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.FutureWithoutPlans_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7a0c456a426a78e51bde36c7a1b1a99a45ad126754f401514573c76659d4ad1b -size 1060994 +oid sha256:9b7ca7ce26d4b71750b8588bde88e2eeab30e33feb1a5f6fd0011a753e3b7591 +size 1045751 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.InitialPosition_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.InitialPosition_iPhone.png index d6ff94fb8..011d5fc71 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.InitialPosition_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.InitialPosition_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d74fc931c919cb49be8df7140dd7946bcb223db3acd680cf842393232db35ed7 -size 1646352 +oid sha256:8676a4eda054b1cef3f8f40c8679498bc00d63037d8454a719382428a4defdff +size 1437121 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.InitialPosition_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.InitialPosition_iPhone_dark.png index 66833a168..d4a79f854 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.InitialPosition_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.InitialPosition_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cf3bf36691ca3578f9ae3b5010183b766f5f21c3296c9196d292e15a82ce0b09 -size 927636 +oid sha256:fcc9aa2915b5b86d343afe0aecc5a1e13d6562ad8808a29b82115208682c610a +size 780376 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Itinerary_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Itinerary_iPhone.png index f098ba434..fd3d51b7f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Itinerary_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Itinerary_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f71cb891ba5a73e0e06c5ae2ab452f2d9de3804109e01466d2c50fb3bab35ce8 -size 3362594 +oid sha256:1a9b4042c4ac482c9bc1f47e52f0e281c8ee199050e8400c48751800042072d9 +size 3352965 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Itinerary_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Itinerary_iPhone_dark.png index bcf5c89a5..ec6985ed8 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Itinerary_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.Itinerary_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e640abfda33b1b9b30be665e382decd426c30915ddba1d4e4b16a1f24f3b7e21 -size 2522592 +oid sha256:a855b0f23114e25d9eb59de34a445d7e76058cf724933f04f88e54f2dd27a79a +size 2507161 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.MissingDays_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.MissingDays_iPhone.png index fbcf30694..e346774d9 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.MissingDays_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.MissingDays_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f85075ab516f0f17545a0caf160c901f59b28053e7f569d5f0b32f83107bb5b -size 221813 +oid sha256:5de64e944df7d9b59ab6c3249af6763b3148e9ca766bab0588d3e64417b949b7 +size 216992 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.MissingDays_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.MissingDays_iPhone_dark.png index 94a317ee7..14f9d4080 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.MissingDays_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.MissingDays_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:74390807efe11ccaf21de72df62d3f8dac8991ee4d2b0cce67f2d7a5cc0aa9d1 -size 235601 +oid sha256:9ff2c49e5e512033d3987fbdf72f1f9bc8ea40d8d4711cd28f2489847197c050 +size 227501 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.MultiRegionPlannedStay_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.MultiRegionPlannedStay_iPhone.png index bb7e100ec..ed7f71f2f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.MultiRegionPlannedStay_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.MultiRegionPlannedStay_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4f14c57c7c0d61a6b2805f11716280b0ace2d2fd6f4f874efa1de2e5dec5dd04 -size 2307848 +oid sha256:be03baf1931ea98c9fb41ec3a4a18f7335d5948ed3648fdafef54099f0c78c33 +size 2297951 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.MultiRegionPlannedStay_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.MultiRegionPlannedStay_iPhone_dark.png index d50c8a114..ecbd7a2a8 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.MultiRegionPlannedStay_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.MultiRegionPlannedStay_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e18ce200fce460b272bc59779c1eb7e022f0822d219eadbbf719043bb1a5086 -size 1620473 +oid sha256:cb5c53a2cc2f4b6118f61308a2045276cf235524f1dbd0add86508a908237532 +size 1604982 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.PlannedStayHidden_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.PlannedStayHidden_iPhone.png index af2e7b059..03eb4da8e 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.PlannedStayHidden_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.PlannedStayHidden_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e9a32abb04e3d6d6ca089a742b74db201cac1f852eb2ee6c3a593babcd6312f0 -size 759845 +oid sha256:f8bb047796c7304c33aae14f63a698da6015886e06b8c300afdc4ec912f1f8a4 +size 751574 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.PlannedStayHidden_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.PlannedStayHidden_iPhone_dark.png index 0c62716c9..a48901068 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.PlannedStayHidden_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.PlannedStayHidden_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f183999d4f4287ccadad39e6a8e2021cec5277bf11b014ab4dfc0284c9ed8a23 -size 785105 +oid sha256:cabb3d8ee94fea56793f84398439c6555083b6c00382cf77e89f01c5453b5e4c +size 771848 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.WithData_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.WithData_iPad.png index 7b5baa689..7f269d338 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.WithData_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.WithData_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fdb3610a72dd3d7c12bc7a65063179d1f60eba2aaa57f6ddf8ece12d183b8e3b -size 3592241 +oid sha256:d85320131304290e1fa83b656f72da651a1e650058230ab4c93353065b8c7ad5 +size 3562400 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.WithData_iPad_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.WithData_iPad_accessibility.png index c11234902..260cd904f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.WithData_iPad_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.WithData_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e99b28f08884447cebbee3524bc29e907caf0c8ef052f8b2ed58c44545de73ba -size 4127136 +oid sha256:953fa786511461cfff783527b49dd7f593953bfd2759e173a59f8d726bd91d3f +size 4089506 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.WithData_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.WithData_iPad_dark.png index 92e12e3a7..5738e0131 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.WithData_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.WithData_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d73e4eaeeecf5bbac5c1638a0a018831b0824de64f979c49654459d27b84871f -size 2346516 +oid sha256:6ab2030b89bf4ee0d0eb0d9afbe07c9a55a96b148bde4c145a116b27b924c3f0 +size 2332974 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.WithData_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.WithData_iPhone.png index 546bf146b..596288d3f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.WithData_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.WithData_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:32facca3a0b7697eff906681b23fba24cd4e445a8ac3b7e0efec469fe368241c -size 2096607 +oid sha256:781646e6be160eeb218c96196b5dbf13a8b5ac18a8e0544b18cc0f2f63c86b58 +size 2077288 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.WithData_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.WithData_iPhone_accessibility.png index 5a76e5b4f..33231260e 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.WithData_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.WithData_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2b141e3370af586ed2dd41f78b8be27644e6e5fa0a19e829ffacec0c36ca7533 -size 2672864 +oid sha256:a2024aee9bdf80be1a8157a539c054a15d24d8ea0cbf2c4825e40c356b8c592a +size 2647061 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.WithData_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.WithData_iPhone_dark.png index 2f94a36c7..7bf822380 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.WithData_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.WithData_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c35e6421cd050f131e8f39905994b7c3aabdf0a469aa8d896a2cc564dd3674a1 -size 1428234 +oid sha256:5d857529620a7b87cbe7c7ebeda1ea9f63ee62f0c39dc48685db68aaee6d10a2 +size 1411017 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewFocused_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewFocused_iPhone.png index 6009ff811..39eacb918 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewFocused_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewFocused_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cd38c923a272d7eec61b2ff7499ba2951970910ef524892cdc59f3c246e21b8f -size 1071423 +oid sha256:a35d1fe41b757bd33df454e64d5fcba4668c8f306fcac1219e169f9fc76c93bd +size 1061759 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewFocused_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewFocused_iPhone_dark.png index afe77abb6..42963d421 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewFocused_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverviewFocused_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2c3e2547082d459bb40a74a0703c5a12da10f970c77cf2944ef60e8e7cce3f94 -size 686064 +oid sha256:ab7e2ff9dfcf2f2bfc4c3ecf5a5f8b8c9548f7ef4309283a1ce8ac239809711d +size 672240 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverview_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverview_iPad.png index 723d25062..6ae4d45ed 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverview_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverview_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:18d31e4f8b0242f3a0c55fc7e69d25187a1ee9f6b511b71abf160a9ad84d0991 -size 2630485 +oid sha256:417b9a917ef50cf61cfcb92366481fe825fb4096317e29defd84b06a74f2cb6d +size 2628231 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverview_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverview_iPad_dark.png index 82e4507ac..26da9ceaa 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverview_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverview_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:96ad90184a2d068e65725ff44463dd9ed1cc71afb847cc9b54712d8b2be3c6c8 -size 1522167 +oid sha256:b1b7c0d989311f2a3e13c64ec54f54fa8e36b3e18b9a7cb760661de821657def +size 1519464 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverview_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverview_iPhone.png index a3ffa1ca9..d738d6ff9 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverview_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverview_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5595d33cc32a52cfd481582030bf9ca261da79807f69b8e2d0a01a1f829abaf6 -size 1449349 +oid sha256:bb9e8b766cb62a4cbec41ce94de9df910435192705a2c8b5742bcee08d07ab53 +size 1427064 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverview_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverview_iPhone_accessibility.png index a6a59f937..f0c065279 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverview_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverview_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae3ad343c75cb8ce6a25ee6dd7202a86edf91ebd2e993daa9ad0dcca9a75e202 -size 2222426 +oid sha256:1ed01d3341b68d3fb187a239fb8f2cac55b926869f01a66b943cdb35faa83459 +size 2193990 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverview_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverview_iPhone_dark.png index 59edf8fa7..3539c3b79 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverview_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/calendarContent.YearOverview_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4cf464a74511655a6d7bc8c2d6a1b3f2911fcb72dbf65c56ee28881270998c57 -size 853057 +oid sha256:41651ecf0e0847c997f0fadd64a59e5cbef7a047f4b523a15f4bca16e19aae8b +size 837167 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.WithData_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.WithData_iPad_ax5.png index ac1c34da3..a60ff7de9 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.WithData_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.WithData_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5204d8f598929be657aafbcd4ca1aeb80dd36562ad0751535f21bb0ce9585a08 -size 7327858 +oid sha256:0a12d2fc4b1e774f95f6a866d6961ed05ad1f859331a1ed4c0a36a251187e340 +size 7276103 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.WithData_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.WithData_iPad_contrast.png index cd453ba91..216e6c285 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.WithData_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.WithData_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:980ea8b21042e3752be045b392dee95d3af90d354d288c09a552c75d4a3eced8 -size 3622704 +oid sha256:da0afacf094e5f68f8697a01f729fc1d2a79f33a0843d73477afb16d09c4cefd +size 3591515 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.WithData_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.WithData_iPhone_ax5.png index 18f3d0981..32310574f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.WithData_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.WithData_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a56d662c25e5528582bf44673eed73a7547143fb1e5c561aa99760dc4aa2c88b -size 5144877 +oid sha256:4a534d848f87221f483b52cfa908383276c576b12c35aa8092cef45381a37235 +size 5111389 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.WithData_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.WithData_iPhone_contrast.png index bc0308173..8b9ff256b 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.WithData_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.WithData_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e12e771d2facd874bec7f3e01a0d04e9f92a45e64bf9f6c5e3014a918d347d84 -size 2108157 +oid sha256:f9824a1f0d962a249b518e2c4bdddfd59940ed0c8e32e7440c990e6fe4fcf4bd +size 2092403 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.YearOverview_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.YearOverview_iPad_ax5.png index 584b0684a..68954168c 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.YearOverview_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.YearOverview_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e98ed89ace9d10deebbb4bea6ad85bd0af7154b2c344bd7fadf684d53abcbb35 -size 6435549 +oid sha256:a66a80f2b5d681443c974463d3d46067c4bf3585df1b37851e0503820f49b358 +size 6410995 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.YearOverview_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.YearOverview_iPad_contrast.png index b34dd68b8..48bb3eefb 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.YearOverview_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.YearOverview_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:67f26cd89f6af79d5e184a21695f0537c058919ab10950e1f18cdad52d1d63d5 -size 2655510 +oid sha256:9d02a431f4f39830c68283659b27901b4757d7d2f0d47543d79c49f0b326b6f4 +size 2653533 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.YearOverview_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.YearOverview_iPhone_ax5.png index ee771ce6e..5e951c4a7 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.YearOverview_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.YearOverview_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b92598c7d47e6e5c9f6c1b191d5544a10be71f35e443870b973bf4db70ed39c9 -size 4456519 +oid sha256:3b5a66529c58d841b55419ad276248b159d49d5fb06baf7187da341e7c8c28aa +size 4439677 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.YearOverview_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.YearOverview_iPhone_contrast.png index 21aeba1ee..ec8c31f19 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.YearOverview_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/other/calendarContent.YearOverview_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:903a4980e8f58952e51787a5c2f9c4b7d47f0e4bfcd41fa81ca74dda5b173e06 -size 1458467 +oid sha256:37e64a40cae64ef62b186094f13d5c563bfc4ec9101dabfd8d6cc4b53027559d +size 1439710 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/themes/calendarContent.YearOverviewPlannedStays_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/themes/calendarContent.YearOverviewPlannedStays_iPhone.png index 5dee753e6..455aee72e 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/themes/calendarContent.YearOverviewPlannedStays_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/themes/calendarContent.YearOverviewPlannedStays_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ff430ced5d5947f4fd893097be8a7037a5149f93277d77b3272366c0ae31894 -size 3400490 +oid sha256:5b82dba7ed0fae9c587dba09de0609609f29662cc65fa541b15fc61be5f4b78c +size 3362210 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/themes/calendarContent.YearOverviewPlannedStays_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/themes/calendarContent.YearOverviewPlannedStays_iPhone_dark.png index 0afbfc69a..8340ba540 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/themes/calendarContent.YearOverviewPlannedStays_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CalendarContentViewSnapshotTests/themes/calendarContent.YearOverviewPlannedStays_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c41f7d0490ed8aaf0384dd3c42cd571f789f629e2e2aa352c0286a94cbad6295 -size 1796596 +oid sha256:d712b54d486eae8a17da25d73f5fba580e7571e31d24fb55de14643baa363781 +size 1772120 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CardDesignerStudioViewSnapshotTests/cardDesignerStudio.Default_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CardDesignerStudioViewSnapshotTests/cardDesignerStudio.Default_iPhone.png index c19b99717..8ba5f1442 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CardDesignerStudioViewSnapshotTests/cardDesignerStudio.Default_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CardDesignerStudioViewSnapshotTests/cardDesignerStudio.Default_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f9e8748e72eac2a6c6aa66020762e800a7d4e3fe40510ae5377bcda5cd6b1b50 -size 2291197 +oid sha256:29a8031afcd7d4e4d2b19c4f52a069e8351f4f513b8daa42ae01326de6709c5b +size 2104937 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/CardDesignerStudioViewSnapshotTests/cardDesignerStudio.Default_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/CardDesignerStudioViewSnapshotTests/cardDesignerStudio.Default_iPhone_dark.png index dfad280a0..116cbdba9 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/CardDesignerStudioViewSnapshotTests/cardDesignerStudio.Default_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/CardDesignerStudioViewSnapshotTests/cardDesignerStudio.Default_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f07dd0015fa060678de6cd6cede42cda9c313445e1cdf7837948a62a0dfd9ddf -size 2186793 +oid sha256:8f4310407573fdc1eef5ea1e843f4592af01804831732bd550e7533db0d86f92 +size 1908062 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/data.Default_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/data.Default_iPhone.png index 9b0ec1562..c07ade606 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/data.Default_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/data.Default_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:67870a9f8cea34965dd82fc2d56ba36b11b69f7d040695a2a2ab0b6884886ec4 -size 1886144 +oid sha256:558a3118ab2fa2cd874cc7cca79b9753f457eb4aa852e40e62fd29f23f518a82 +size 1880450 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/data.Default_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/data.Default_iPhone_accessibility.png index ad4a553de..1de39d1c8 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/data.Default_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/data.Default_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:699ba21ac59ca180934e0e091907949cca82b55df0ba4476a69f80c60e126d67 -size 1231120 +oid sha256:2950b68568233ebdc4faa160d0aff54741fc9127ef91846c40fef7ee271384c1 +size 1222644 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/data.Default_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/data.Default_iPhone_dark.png index 5cc3107c2..866feabd1 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/data.Default_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/data.Default_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9bc41330f8335f029fe92f16ee590217006b24ac880656aa0328284a7099c53e -size 1888894 +oid sha256:1aa33821a19b6cb24bc01cdb4e8404cac0ad008ac628bee9de295a36d79bc93c +size 1883178 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/other/data.Default_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/other/data.Default_iPad_ax5.png index fb48c0379..009c080db 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/other/data.Default_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/other/data.Default_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c3365e3204ecf48f99530414f33c16eacc5a7be686e45ae31418b6b2b67a38e5 -size 9825412 +oid sha256:53d672ad2ad88b9c0b0128c0d69df1a6a4f25ae4e12798b06f8f21a4e320c3cd +size 9823472 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/other/data.Default_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/other/data.Default_iPhone_ax5.png index 1cf5a5448..846b30481 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/other/data.Default_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/other/data.Default_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a958dc229022b278d965cfd74e4bcd05b25b0e5e3030a7542f5884b754915e0d -size 7387876 +oid sha256:e5275f383b2f6387e4a3238748e176ba01d65ae168078d77c429e538a026b153 +size 7379037 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/other/data.Default_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/other/data.Default_iPhone_contrast.png index 257c7f83a..bbeaa765f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/other/data.Default_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DataSettingsViewSnapshotTests/other/data.Default_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:491ee74af02f736e4b904b4d6d1c111b03207a7f58cd04676b234cdc515a6acc -size 1892669 +oid sha256:23475c44b5c37fd9141e11f54bf83ba36b8a75c2c2b5585f274947f98b9855b0 +size 1889090 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.Default_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.Default_iPad.png index 3e991cfa9..b3a7dcdad 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.Default_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.Default_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:820aa05967d94a933dc744fb080f7b4606bb3d1dd20aa0a056ba425f8d180224 -size 1360165 +oid sha256:294033dd5a386746b4bf222004a6da46cd933789f9b61a28a95735432441cc37 +size 1344222 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.Default_iPad_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.Default_iPad_accessibility.png index 9e24be65b..a36a2701c 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.Default_iPad_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.Default_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3275f595b566850cf0656b989d59e8415018fe2f656bcefc61fda8b61f11d561 -size 2670929 +oid sha256:a7a1bb11daca6a6a84d2c7027b920d0101f312073370946da380e975b01b36f7 +size 2653015 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.Default_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.Default_iPad_dark.png index 8621589a9..9f43636e8 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.Default_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.Default_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:93668d767a74894c1825a93c2d405c6ef8458ddee3b204b13dbac748bbf20bb0 -size 1396921 +oid sha256:f27941d5df32f548130f9cb2a0ade85b69dece6e671d384a9db1e860da603cec +size 1384054 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.Default_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.Default_iPhone.png index 6d1ea02c7..502560696 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.Default_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.Default_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0e7c41db1ba829530877e810b9366a63d466a073e3b55c8bd584fe1253f81963 -size 1098540 +oid sha256:bac5c4942c7b6cf69bce6ebfa5a31b7880d7ac1e0b0d4c8e8564171010693615 +size 1078893 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.Default_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.Default_iPhone_accessibility.png index 6e7e3c2ab..fcb330953 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.Default_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.Default_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5724ab3920f604fb5cd91c984526c73ce6dd2ce74f0a600423d47b8001cb9596 -size 2359006 +oid sha256:bee8866c6e317f72a77f0139d992c2d06c3a8300530a745bed72b879ad1d41e3 +size 2341297 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.Default_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.Default_iPhone_dark.png index 27274a251..53644c879 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.Default_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.Default_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b86d2e18c804e13216466e3d566f1a55fc663cfd818d85244b9fb33ac32b80c9 -size 1117575 +oid sha256:a163de9eb1aceaad6b117f9452cb453f83e0c04d11c8c63e9fdd1c44afeb6ac9 +size 1101798 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.WithAudit_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.WithAudit_iPhone.png index 7009a8ef8..261570626 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.WithAudit_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.WithAudit_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e9e40d119595cf13f601c657fdc8584d23e09725ea443c74fb399bd4230931eb -size 1225050 +oid sha256:844ef52d390d4b50309fb8b8cce57ddc58b338e3fbdd9c502c6a4077bb333b09 +size 1204080 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.WithAudit_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.WithAudit_iPhone_dark.png index af15b8357..799eaa1d9 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.WithAudit_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/dayRelabel.WithAudit_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e6f95b8575000221ceea47056d73f606706b60256a256126395d7a90176c390a -size 1262856 +oid sha256:fd224c4667cea32f78f252de386cdfeac0e6d9a266ce74b654a96a994193149a +size 1246176 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/other/dayRelabel.Default_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/other/dayRelabel.Default_iPad_ax5.png index 98797cf12..e08334119 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/other/dayRelabel.Default_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/other/dayRelabel.Default_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6817467c1a436ca452104426e8a5ae08824bf83559be2246a77d718c02318821 -size 3652350 +oid sha256:eb1943141cc50bcf1a592a85075499f40b99bc92300cae542e07cd6c7dd9764e +size 3626171 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/other/dayRelabel.Default_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/other/dayRelabel.Default_iPad_contrast.png index dcaf14e91..e61bb7061 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/other/dayRelabel.Default_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/other/dayRelabel.Default_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cf6dd6d24423476ded9056fff23350ac2135c56ed81d2b56e0062712c15c3b3e -size 1378546 +oid sha256:add6e0686df549240a9aab4ff61747fcd3220eb3a8cb35ce4cd69a66b1c931dd +size 1363231 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/other/dayRelabel.Default_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/other/dayRelabel.Default_iPhone_ax5.png index 2064f1181..d05e89716 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/other/dayRelabel.Default_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/other/dayRelabel.Default_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b59b3e6ab4fe51f3330a6970a6c2e14d3e0583a813f97ef5943605769188b9a7 -size 3524772 +oid sha256:abe835823cf4ea5952be6923fb1a8b32b4a2d2177c741a41201dfae20a7a7eb1 +size 3500766 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/other/dayRelabel.Default_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/other/dayRelabel.Default_iPhone_contrast.png index bf7d6791c..3cc8a1aeb 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/other/dayRelabel.Default_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DayRelabelViewSnapshotTests/other/dayRelabel.Default_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9daab908941a914ba447dbc9b5c3a45640eeb1009a18f676fb05fdebf812ea49 -size 1123593 +oid sha256:2caebbdd1db04a742cbb1b92e23e958b74ec569232bf024a9176eec06bc8ba00 +size 1109983 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperCrashTestingViewSnapshotTests/developerCrashTestingView.Default_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperCrashTestingViewSnapshotTests/developerCrashTestingView.Default_iPhone.png index 351f2c00c..14e0f7d56 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperCrashTestingViewSnapshotTests/developerCrashTestingView.Default_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperCrashTestingViewSnapshotTests/developerCrashTestingView.Default_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:11bffc81a9984f580118636c50c0ddf6ac7733a7ca256fda6458b5fe40311720 -size 228411 +oid sha256:8d64707563ccb354232ced4a5b7ce5fac8cff04c21d2e1264959f71953f4a00e +size 229972 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperCrashTestingViewSnapshotTests/developerCrashTestingView.Default_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperCrashTestingViewSnapshotTests/developerCrashTestingView.Default_iPhone_dark.png index f7b774418..624df0ff0 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperCrashTestingViewSnapshotTests/developerCrashTestingView.Default_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperCrashTestingViewSnapshotTests/developerCrashTestingView.Default_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d665d9fd86be6301d92bde4cb974af710eee7f5af010d3403017186cc264fa82 -size 236734 +oid sha256:0c45b324bb78d9d312ad28e53295184c78992afeb73d1debcc255698a0ae1a95 +size 237788 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperDemoLaunchSheetSnapshotTests/developerDemoLaunchSheet.AllIssues_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperDemoLaunchSheetSnapshotTests/developerDemoLaunchSheet.AllIssues_iPhone.png index 9654a5b3b..bacf425bf 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperDemoLaunchSheetSnapshotTests/developerDemoLaunchSheet.AllIssues_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperDemoLaunchSheetSnapshotTests/developerDemoLaunchSheet.AllIssues_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:47b44033bdd88f1aa132424008e9a7b1ba983a7019f7dbce3e65b75e3fc1ec49 -size 190927 +oid sha256:f9612a05c62adf6d690dcde97e2a0dacf22abdf18483ab2796a2817a6e74eec7 +size 167209 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperDemoLaunchSheetSnapshotTests/developerDemoLaunchSheet.AllIssues_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperDemoLaunchSheetSnapshotTests/developerDemoLaunchSheet.AllIssues_iPhone_dark.png index 315416c9a..91c1a01d7 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperDemoLaunchSheetSnapshotTests/developerDemoLaunchSheet.AllIssues_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperDemoLaunchSheetSnapshotTests/developerDemoLaunchSheet.AllIssues_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d855950a2afe8530132f03d5abfa8bf135f1b3494a9e2ab86c751f35d055cb47 -size 170664 +oid sha256:43f0b7e8fdaa58d462445aa7ff619f5f7bb2e935da54aec3a77057618e4ed901 +size 155934 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperOverlaySnapshotTests/developerOverlay.MenuBottomTrailing_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperOverlaySnapshotTests/developerOverlay.MenuBottomTrailing_iPhone.png index 9fd91fd1e..b74268d0c 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperOverlaySnapshotTests/developerOverlay.MenuBottomTrailing_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperOverlaySnapshotTests/developerOverlay.MenuBottomTrailing_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a37a6a7fdbae8e8285b1a50ed3f1afcf80f2e3fea9401bb5942769866e7534be -size 439920 +oid sha256:6a2e64e94bc70d3c3dc81b0c14a2cc5f101faace8ef7792c993e3b85670d678b +size 430194 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperOverlaySnapshotTests/developerOverlay.MenuBottomTrailing_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperOverlaySnapshotTests/developerOverlay.MenuBottomTrailing_iPhone_dark.png index 8e2297191..13e15ffe7 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperOverlaySnapshotTests/developerOverlay.MenuBottomTrailing_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperOverlaySnapshotTests/developerOverlay.MenuBottomTrailing_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:51cf5ba3e95362afef2b666a4f4355dc1cfd41c9a5709f999004cd6e694cb5b5 -size 354175 +oid sha256:2e574d2318939c58669917d565a1e78d0d8cf59d89d61f5d7fe998d6067645a7 +size 339077 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperOverlaySnapshotTests/developerOverlay.MenuTopLeading_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperOverlaySnapshotTests/developerOverlay.MenuTopLeading_iPhone.png index 0e2852238..355f50682 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperOverlaySnapshotTests/developerOverlay.MenuTopLeading_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DeveloperOverlaySnapshotTests/developerOverlay.MenuTopLeading_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:815b6fe79e620beb554d063df6ed771d68649328919264747abcf7d5e1c51ce4 -size 434138 +oid sha256:a49087f387a62dd51d76ba837b7f07c10dd01f6f99cbfd2c7460d26fbc4d1362 +size 431882 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/other/updates.Available_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/other/updates.Available_iPhone_ax5.png index d017e09b3..1cfb5bd7f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/other/updates.Available_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/other/updates.Available_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c4c7b65eae4df8ebe9bb84a3ea9de78fd8811224a756337e4271fdcb1d66bd6a -size 1852580 +oid sha256:488f253fc885a0481c6a1283ab9f928347a632c9118f4723c059a110663f5d85 +size 1852196 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPad.png index 8fbecaeb0..8336819f1 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:594646a98255db19e9252a79d69d7283be13c56fe3fbe426cd939f7ac9322abd -size 592446 +oid sha256:d6a579ec28cd902a1415606ba1cdfac9028cbfdaf099b9efe666f95c2ac3a552 +size 591751 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPhone.png index 72c03ce68..4f68a9100 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:49496ff572d8ad966c86847d31d9415fa29ec496a25e413cffe4041fd3226e86 -size 492624 +oid sha256:43bd76d87467119d96ca890e9b8f0ae75f89d94a7bcbeb5feda992b5dd689591 +size 491943 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPhone_accessibility.png index 99a7f5c36..ec982e13f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ea84583ca25b36b74285499e6d575dcf7216266f84274fe30c5ed5d8dae66820 -size 979714 +oid sha256:07e321f10bf230fe06e21990e6a81643848d25cc70197d54792ae38709ba303e +size 974102 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPhone_dark.png index e7a315ec1..dae44640f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DevelopmentUpdatesViewSnapshotTests/updates.Available_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ba4f7e0d68c01c472042039926c2dd6aaee4a596c40bb3c7722a149ae4f12825 -size 480857 +oid sha256:d7b85fcf0ba9b08302389ff7d7635ac475da1cc8d65bd0bf1c1e54b8faa1821e +size 480552 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/devices.Default_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/devices.Default_iPhone.png index f5c9be3c9..699a279f5 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/devices.Default_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/devices.Default_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:22303d2a1611810cb1634738fa76ef63de9a020196bab7e3c7ce65157644c347 -size 219551 +oid sha256:a1c18a58a95659f11a4213206cfdab65b7d5128e0fb2f612e9a2f21e85010812 +size 219706 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/devices.Default_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/devices.Default_iPhone_dark.png index c56375f9e..d3aa34eb2 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/devices.Default_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/devices.Default_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6b926a7fdd026f4e3cbb1594e941902ed535783c02d2a1edc2082b818262e29d -size 223024 +oid sha256:316f0b5426d4956da6716b67635305b1d4e85d509a7203ed7b6e67e0aa7c9f29 +size 222542 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/devices.PermissionRequiredRecordingOff_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/devices.PermissionRequiredRecordingOff_iPhone.png index 0df7e6db5..c160ed189 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/devices.PermissionRequiredRecordingOff_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/devices.PermissionRequiredRecordingOff_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a1af69280c643f738288734e62db52f90a8723dde551d3421a5df5c9ecbf8e2 -size 228044 +oid sha256:7f479240ecf233e1a875cb91a1dd1a4ae7ee11440e06b46f9c348ff61af79b46 +size 229686 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/devices.PermissionRequiredRecordingOff_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/devices.PermissionRequiredRecordingOff_iPhone_dark.png index 0c341c750..f85abf4ee 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/devices.PermissionRequiredRecordingOff_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/devices.PermissionRequiredRecordingOff_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:91c7fbbd42521d0c0c08656e81b55a96be813ee312c926a54e02a5ca7e93ef3c -size 232436 +oid sha256:70dfc2f2e04d14ae66e50991e18b99e7f5f36c4d9f641417cfd7c74a11745c96 +size 234055 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/other/devices.Default_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/other/devices.Default_iPad_ax5.png index c68b5d700..389751fa0 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/other/devices.Default_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/other/devices.Default_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a35d1b806fb67e9525299a053808d07ec11036646a7039b39e9141da1e843836 -size 780143 +oid sha256:522a16d8a23d2bd600381ec9536538970f89a0294573dc35ede5c33fb4ea2ee7 +size 741925 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/other/devices.Default_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/other/devices.Default_iPhone_ax5.png index d53416ce7..09e332839 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/other/devices.Default_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/other/devices.Default_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:541282757761316b8652d74768cf7ae620d519cc98842a07967b9c883947bef8 -size 778893 +oid sha256:353d5ffd77e764946304d705eaa8dda13ce7f176a01f9531fc4185ab8ad682b8 +size 770671 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/other/devices.Default_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/other/devices.Default_iPhone_contrast.png index 47b12b64d..7b2077152 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/other/devices.Default_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/DevicesSettingsViewSnapshotTests/other/devices.Default_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:819a1e453eda6e33f336891ca7eb257512cb549196b9b6470099feb74b2f6200 -size 223104 +oid sha256:17f14ff7857d61b5465397cc757d2c81085f36d0661df799d8d79deaeb090457 +size 221077 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.DotsHidden_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.DotsHidden_iPhone.png index 472780363..c9b408623 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.DotsHidden_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.DotsHidden_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9a8f69d0b9810a07a86f97a046b6b72a6a20495831ef18661b251abcf322b2e2 -size 1327674 +oid sha256:e7b607c59bfa9c829e7653f41e1ac512368571dbfdf1bacea7c1ec7787fd6cc8 +size 1333532 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.DotsHidden_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.DotsHidden_iPhone_dark.png index 251cd787a..13ad359f3 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.DotsHidden_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.DotsHidden_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5a2fc02867a9613346c0e5666f7451dbdbc93710584c45f976ec7de4fe445e32 -size 1007196 +oid sha256:a25d4baf5b2c31c1d5bc5f8c2f7c15791108ca7b216dc3d6de142d90000a030f +size 1007945 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Empty_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Empty_iPhone.png index 601df508a..0be8c9842 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Empty_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Empty_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:42c522e315b301292f2cea809f31fa4926d254fd817ba7a754224704e49262d1 -size 413605 +oid sha256:073fc1551d9a2e8862d0991fde775619c3804e99d05d39258cb214647130b6e9 +size 413636 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Empty_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Empty_iPhone_dark.png index 706e42ae9..2b1b5fe69 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Empty_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Empty_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:665ec1926f73aa10d967b00ee08756a100d0700bf275e81a84585398234a304e -size 433259 +oid sha256:a9053e4f864c333f7db5d9262685c65c3413152af2ad898d27c33ab0cbc0c9f0 +size 433339 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Failure_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Failure_iPhone.png index 88ae87477..f5952b160 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Failure_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Failure_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a43705199ac9d9299328ad89b16389f4066bfaa1daf4cc6f96b3c14beb028763 -size 396206 +oid sha256:fb9cd2918e2e9b3bb73de47070838e8f8906fb9f6e3858d0678bd5e1020d84eb +size 396239 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Failure_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Failure_iPhone_dark.png index 5def0d55c..a93e33fa6 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Failure_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Failure_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bb0dba9a98aa1cf9aa998f0c725db0413d5b84ebf4d8acb6972c360bb8f1678a -size 415582 +oid sha256:3d8af5ffeb3bd63baf22cfef9c07e7993a4a1adb70d2f383d8861400cab8b435 +size 415496 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Loaded_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Loaded_iPad.png index 3289d3e0d..ecaf9e034 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Loaded_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Loaded_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b0e987338283fecad98a8eb5f702747a368199b03e822b899c866052348e3ce3 -size 2879395 +oid sha256:7feafd969a375fa51ad8d4ee325b5a8834b2c13b3f4f03955c53319c2c82c26c +size 2894092 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Loaded_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Loaded_iPad_dark.png index 7d1047690..e045771c0 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Loaded_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Loaded_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:803913cda778133a26fe8531819634afc9ec5c4be3fc8d79f4516b8b4e33c3f0 -size 2364357 +oid sha256:2af8c35be9646a7039c45886ebeda8bc433796172fd55e27fbd9bdf301f8d3a9 +size 2369085 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Loaded_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Loaded_iPhone.png index c8b0a685a..302921db9 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Loaded_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Loaded_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:86757e634615cd0911d08249fd454bbe06850efabe46dd8dc993ea7f5bc12f23 -size 1329244 +oid sha256:162e4c89707b0185859992c2d11f2d40b15d0ea4fac0a54ad86ca6e7d561d3e5 +size 1335024 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Loaded_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Loaded_iPhone_dark.png index 6535f3a52..0fedd6571 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Loaded_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/elsewhere.Loaded_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3173af4b16af2d45980c037d893b8b36d7d57e94935f4b6e836b535b49d61418 -size 1008894 +oid sha256:520b3e5554bf5fffb4913d59cc240841ec7f0416ff8ef45b19bd44a2342b9fe6 +size 1009781 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/flat/elsewhere.FlatLoaded_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/flat/elsewhere.FlatLoaded_iPhone.png index 1707ff155..6e19c302d 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/flat/elsewhere.FlatLoaded_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/flat/elsewhere.FlatLoaded_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d5dcff84de77a704886fba1b71fb948848adf147274a43a79e4fd194472594d7 -size 1415736 +oid sha256:4bdfd6a69daaffa69158142b0f7aa8f2a96aafeb7a21ef81b2afb8a91e1e0971 +size 1416365 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/flat/elsewhere.FlatLoaded_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/flat/elsewhere.FlatLoaded_iPhone_dark.png index ccba53fc7..1ca861871 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/flat/elsewhere.FlatLoaded_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/flat/elsewhere.FlatLoaded_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43a25c7a2381cb42d481a93e54fe0225cb0972179f20f532e36c3ed7789d51f9 -size 1015359 +oid sha256:e1ac8cdadce72e51d2fdaf62862992dcd35e578ed6d94d2f2db1a22fd62fb773 +size 1017023 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/other/elsewhere.Loaded_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/other/elsewhere.Loaded_iPad_ax5.png index 889be56a5..da0d4b1a7 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/other/elsewhere.Loaded_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/other/elsewhere.Loaded_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d48dc5813d837397504d4aa889b7b4c9192e69981994d6eada69f6f404b192e8 -size 3458214 +oid sha256:9654d65772d46bbc31d4fa826f855c2b6b9a0f0fc04ef56b2f0733f08c599c27 +size 3461454 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/other/elsewhere.Loaded_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/other/elsewhere.Loaded_iPad_contrast.png index 33509c2da..ff7e7c5a0 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/other/elsewhere.Loaded_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/other/elsewhere.Loaded_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5abb1de0a465e0555a22d00d23a188a4499c1a14abd12717059366aa127fe3d3 -size 2910068 +oid sha256:53b3b45bc9bbcc336c28b72f38658fb76815c1d11ded23ee461155c6d6d4a292 +size 2924522 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/other/elsewhere.Loaded_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/other/elsewhere.Loaded_iPhone_ax5.png index b63cd5746..52d9c41c0 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/other/elsewhere.Loaded_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/other/elsewhere.Loaded_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bac589a0f4d87aee7102a3ed377490ff4da14b710ecc007b969b05569faa7ccd -size 2024242 +oid sha256:134af9a900d0759320c5961d92d73d769dad5bd7dd1327a184d94a8b3ef3d40b +size 1970112 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/other/elsewhere.Loaded_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/other/elsewhere.Loaded_iPhone_contrast.png index 73113fd88..b19138f2b 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/other/elsewhere.Loaded_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ElsewhereViewSnapshotTests/other/elsewhere.Loaded_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fa1c2379edc1b26e9ae9fbd3680e0962be0d73e758511855e375479d1e5fa9fe -size 1345916 +oid sha256:46fd4ab6973ca508fdbc012789b2561257002eccce3837e73d8150524c7da44f +size 1351893 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/EstimatedTimeFeaturesViewSnapshotTests/snapshots.Disabled_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/EstimatedTimeFeaturesViewSnapshotTests/snapshots.Disabled_iPhone_dark.png index e112aacea..027717995 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/EstimatedTimeFeaturesViewSnapshotTests/snapshots.Disabled_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/EstimatedTimeFeaturesViewSnapshotTests/snapshots.Disabled_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3e9722f59a6c92c85fb30dbbf9cf7968a8987039e2b00e5c7c84aa623ef42c52 -size 1413337 +oid sha256:533f793abcdfea27f7bc9925e680d4ddfd3ad0ad233432f2455b9c38ec3de293 +size 1312935 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/EstimatedTimeFeaturesViewSnapshotTests/snapshots.Live_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/EstimatedTimeFeaturesViewSnapshotTests/snapshots.Live_iPhone_dark.png index 8148a0fc5..9740dbe2f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/EstimatedTimeFeaturesViewSnapshotTests/snapshots.Live_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/EstimatedTimeFeaturesViewSnapshotTests/snapshots.Live_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:03d2a08c4bdd67d7598ff087ac75dad0e704369fd4dac12721736742993c2326 -size 1511213 +oid sha256:7a59812c41212f571500267355a9e53f79ba353cdee39d5bcfb366e93e615f24 +size 1402400 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/EstimatedTimeFeaturesViewSnapshotTests/snapshots.Unavailable_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/EstimatedTimeFeaturesViewSnapshotTests/snapshots.Unavailable_iPhone_dark.png index 4a07e7c8b..593e640f7 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/EstimatedTimeFeaturesViewSnapshotTests/snapshots.Unavailable_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/EstimatedTimeFeaturesViewSnapshotTests/snapshots.Unavailable_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3e4be1267432c022bbb54fc7dd8fbf82d705ee1e4eb504e7e7bd373b7a33e10d -size 868583 +oid sha256:d672e45de4f6b80279df28a8fc71aedf60ffce7d6351a9cf62762e387e21a6d0 +size 756928 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Completed_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Completed_iPhone.png index 4fe0ca91a..4ce3fa827 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Completed_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Completed_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4309da324c497f2c2680fdf3207932e95a26bacf5085df3e8e45746d216787ee -size 301298 +oid sha256:fe88ec5a6ee2ab7e18bc79017ea1984c1cb0e2e1f805a219c13799dd674ffe1d +size 292257 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Completed_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Completed_iPhone_dark.png index 60f475f27..cd83d17fb 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Completed_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Completed_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3e1fdee6717cf8ec68a140d123856b2ee217466a7c6aff0e15d927852381560a -size 324753 +oid sha256:e752a28f5843f5b5ae54e0754b1b59140e7455926856f2260dd23a7013cc4596 +size 315192 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPad.png index d76507617..3ad7cae1d 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8cfb3d339888d2e2c9096486ddaff398a9801765034c6667dccf462395ea51e3 -size 448638 +oid sha256:06228fab786419dff9b76c204a5d76f740f1bd381f57736de14df98c249f2e3a +size 447489 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPad_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPad_accessibility.png index 8ca201932..be2065e60 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPad_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ba9096204e9543daa712bd475fdb8a528ed617bb610407cce46d1f12b8b8620f -size 876045 +oid sha256:4879d8655108f1a44c4b11112c67e68736c03925a8c4cd818e38c4281f6cf8d4 +size 875735 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPad_dark.png index 3a03c04f0..25ee7974e 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:caf76b3e6d7ae9a53797979061e329c73709729ddc0c85fe1107abf8770adf07 -size 464386 +oid sha256:0620a5823ea82065bbd8afdcc1dadde58ec4d94704d7fba6068a7d063c26503a +size 463161 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPhone.png index 20c4a2286..59e2a041b 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fceb10ee649fb0c06516c28ad58608fcfeb91b301472be622453e2eee6e4d052 -size 379617 +oid sha256:c4179b31acbf39171c5606cebf6100826acd8047af28111fb2a9301537da634e +size 371737 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPhone_accessibility.png index 95c7c0a9a..f67461c61 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2fc82b9604dabdf62dd75c6b03163604f1c4fa3c8a26f2e3e5639563e7f67955 -size 824269 +oid sha256:ecb62d1a61d09746b5113b073e7e677f8dbae020d022d78e51554f828a7fc5c4 +size 809864 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPhone_dark.png index 909ce764a..602b74250 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Default_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5455a4bd73412b1b0d75677ff93e43b11b323db1b387a2a766caa30eae62e38a -size 395382 +oid sha256:4dbd9bfaaab5babcf7fae338e1dfdf22881201c42e9dd8a6606e870256bfdb57 +size 387613 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.FlightLikely_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.FlightLikely_iPhone.png index 337427b1b..27b46f659 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.FlightLikely_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.FlightLikely_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5aef006a7e210c45044d02cff9dfac1b7a9d126341ca5f7b7d6fc4f0c4d34e5b -size 305679 +oid sha256:2de601c6f4d834ab964c7122ba2ab8e80b1598297cbb3ec95046764404b8b304 +size 297338 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.FlightLikely_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.FlightLikely_iPhone_dark.png index 9892c845f..cf690bb8e 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.FlightLikely_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.FlightLikely_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a23062b09852da792e65f4503d70fadfb40f80b925f4af375a323738d5587e7a -size 329649 +oid sha256:c145da05a5110197bafc9012b9fa2a110f4e7a1693d9415422c4cfa1b32d5433 +size 320248 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlightsDismissed_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlightsDismissed_iPhone.png index c6ff2e1c1..eb96d73fb 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlightsDismissed_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlightsDismissed_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ac6cfdcf1f8e7c4b1a5adb4bb3777562a08de9c6ef6def282cc56645b4efed61 -size 380622 +oid sha256:9bd4f0662794455c6cd8f4a2dcb4c32a59edf3331a6c85aafc516797b33c3ce2 +size 370944 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlightsDismissed_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlightsDismissed_iPhone_dark.png index 8b15997b3..bf0241f02 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlightsDismissed_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlightsDismissed_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f882ed88fe344e3cb1d144922ce648d0be6cccbec668e3c80b6066745b514483 -size 410320 +oid sha256:9eacd6bb8a5dd488a690f73423613336a5e6cd22171a46de9a1876dd8adbc72f +size 401265 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPad.png index 24cd29c99..e18ddaa5c 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:80bf69298ed4023f930edd2f2cafa148d6f383127718174fcfc39928cb17ad34 -size 517441 +oid sha256:2e7c0432159d70d82966e28585712986b93faef0419d93657120e869c3abc335 +size 516520 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPad_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPad_accessibility.png index 53a3859f4..0c39eba5a 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPad_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f25a24a53fb14119bcd4b773efce0127ccc2fbfc1ecf9477eaf68c85a0a4a077 -size 1003030 +oid sha256:d87ff3fa8caf098a1bfe27f1a40831ae2d9e09c6cbed51cbe1fce9f696012b07 +size 1001592 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPad_dark.png index 215f5324a..ea3e15ee9 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0bc7f33754c9738cca61ad0c19b68f914a0a6aa44e17e4f802c7538107cee3f8 -size 534354 +oid sha256:4816f6e374d18cd6850a43b758a04e4d42e58bdd8bfc5c9a329ae885516be4dc +size 533552 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPhone.png index 22de790e4..6431360c4 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a92caaf932c2032c24a014f902e227f9871d5762f6c9920d8fd72f5e91454700 -size 441760 +oid sha256:70222a17a76c37e1863e746cb22de65fa6fb92ebed515c81e4cc9ac416047a58 +size 434394 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPhone_accessibility.png index a252f6818..bbd5f54a8 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:74a5e6701b04c7c34d58f38b2ade6a59191469d93cd60e7d1544f3e89126509b -size 945432 +oid sha256:6dfb16a5e395aa7b855582e94dfb630212167e26cff0903dd850f45ab7019fa9 +size 931147 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPhone_dark.png index 5f4fb41ec..6c195747d 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.MixedFlights_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:41dbdcaefcd73a4b5f282e806ed87127c7c0b8911c6b45c5499e74d25dab6651 -size 457285 +oid sha256:a064e6033a83784f1a4ecbfe4f19e3a3e7a1202547cb3c7188cb417ea9fb2b24 +size 449936 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.NoPresence_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.NoPresence_iPhone.png index ce79410f3..bc5fe8355 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.NoPresence_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.NoPresence_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:897be75601cf58274f705a338b058159cb23bdcd7b2c734e601fa8079306f129 -size 380890 +oid sha256:5eacb987e72b843a3f8003a4a70628452366c750f0ed314845714e9970c5f381 +size 373187 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.NoPresence_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.NoPresence_iPhone_dark.png index e0edce66c..513f70cdd 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.NoPresence_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.NoPresence_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4bf29d4ec2a345d12ead26c5b27e00dd23b0c9eca7226caabd5aad0eaf3387fb -size 394955 +oid sha256:9037368f70d64b70851b947061b8c20e1ba3ce6626ea095e94016752ca650d66 +size 387274 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Stale_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Stale_iPhone.png index 2706d47ec..bb139d540 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Stale_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Stale_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c86f9472d86add2b852898ecc4ce87d74a2507433a534e088c7bacd5165045fa -size 315441 +oid sha256:2b7e253f1cf64f1c8f338a7a4dcbd889561b47ac50e33eded76fa2d9bdf0df1c +size 307449 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Stale_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Stale_iPhone_dark.png index 6eab691aa..76786ace9 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Stale_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Stale_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5cfd15931ae14009db118666457f48f215d1c9f0fa1135b8fe34b49fa3f5d5b7 -size 339651 +oid sha256:aaaadb37ba0c7e0abb8aab4d15ecb8e6fabedcafe6460ef5fff541f357e9e4b6 +size 330484 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.UncertainArrival_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.UncertainArrival_iPhone.png index 582aa87cb..c53babf97 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.UncertainArrival_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.UncertainArrival_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:318bf29985aa03ec514eceaf62fce94b29770cdc0ffeb5cc56b6312a1f507423 -size 390953 +oid sha256:f2aae844e44b2f246c57695fb6fbf66e3b968380ff3c17efbefb16348f6b13a8 +size 383903 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.UncertainArrival_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.UncertainArrival_iPhone_accessibility.png index be21ae256..6ade427bd 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.UncertainArrival_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.UncertainArrival_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:adb0906dd70f4d689cf354cae37b25dc630171989f54ee1cd4e76cf84c1dc323 -size 849313 +oid sha256:ee4a50b4e05e7ecc13a5a3e30bec31493f818511daa996a73dc477ffb7da8d10 +size 834281 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.UncertainArrival_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.UncertainArrival_iPhone_dark.png index cf7ff7ba1..7b445b30c 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.UncertainArrival_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.UncertainArrival_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:70ddb5e9e57c11da18f224823ea6158c84c5f28d0018380c87fbddafdf2edef8 -size 407267 +oid sha256:4fafc8ce1e7321f284434a28f5c0568fb597f95ab916624ea6dd04b88cde97cb +size 399397 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Waiting_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Waiting_iPhone.png index 337e5d332..5cbc0e271 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Waiting_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Waiting_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:00d7014964f2deeca099c7d53822a0323c08d1ee8d20fe74a02ce2289351fec2 -size 315428 +oid sha256:31b3394d3a8702862ca8be4fe62816a115cae9b088f2b4cfce9272a34bba9f19 +size 307438 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Waiting_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Waiting_iPhone_dark.png index c5e7ef206..a0704a26b 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Waiting_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/flightDayDetail.Waiting_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:45ecfd07379154214e5070ab5256f1ed515f1d2ab13e6e80509a3da992e49721 -size 339633 +oid sha256:c1dd63f0abfd5a5f18a3d3f6c7414b21b2c755e1d9f7bfff2221df6f7ae3114a +size 330476 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.Default_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.Default_iPad_ax5.png index b5ac2761f..3f84253c6 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.Default_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.Default_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e22cbe072de3f1b2df9514d726c51ad75850a6c9bb61f2b744ffca69a9f4e28e -size 1261434 +oid sha256:3379d264590ea17c33ba0ddf73a605072664dd02cc0580eb05a60eb47fadc627 +size 1261018 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.Default_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.Default_iPad_contrast.png index 134b537ec..b55615d71 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.Default_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.Default_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ce0b589b6ccd4b7d07a224581dc4b594190d1927270865dc0b3748afd9bd11d5 -size 451435 +oid sha256:2a8718585b58344d7e9e6b4ed4b621ae675a52015b912025b4d2486dc0bb21ea +size 450651 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.Default_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.Default_iPhone_ax5.png index 38afbdf6e..7333b22d5 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.Default_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.Default_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3ecf21e95ff2cb29329d8e09d5a5795da46a5fc0bd5575aec0f5a052bc5f3ccf -size 1343523 +oid sha256:89d93bbf199dd9aa752c32ee9a55dd2c1921fd93d0a600d3c88bba665f37e312 +size 1335250 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.Default_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.Default_iPhone_contrast.png index e2393b781..123c939d9 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.Default_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.Default_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7d935f8a01e0df845ad2c809e47a9a764fa5f327cca87559a43d0a532438b325 -size 383745 +oid sha256:d90362bb638a471cc1183d2a71e7c8e229df923dc53a7686fcf5fbe0a3fbbaf8 +size 376446 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.MixedFlights_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.MixedFlights_iPad_ax5.png index ec3d54e5a..08f654288 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.MixedFlights_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.MixedFlights_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f463f4c2d76f9a4eede78ca199e5f6cc4c2bad8481c578fc8744ea7eedb3adbe -size 1539001 +oid sha256:2af7f632e536e068fdf53b741b3b400532fbea429f1a385e47d496b16ccfd11e +size 1538302 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.MixedFlights_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.MixedFlights_iPad_contrast.png index fc494bc4c..3c91dd4c6 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.MixedFlights_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.MixedFlights_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:533d343470573c16e9ddcc4ebb355ad00fce9e9f0464514ca331320740e7527c -size 521924 +oid sha256:d458cda3dbb0969141f4754084c62aa80a7a3cd49da007002eddd898edf006a8 +size 520568 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.MixedFlights_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.MixedFlights_iPhone_ax5.png index f6fccbf07..41e0f76e3 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.MixedFlights_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.MixedFlights_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c34241e8b1ff3a33b0a814a492bd711b051623aaae5f55f0fb1009f12471ceb -size 1641140 +oid sha256:8edae4b34111ed6c2853fcabd940350a7bb34378d126c34e1bb08b3c9e83dab7 +size 1634739 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.MixedFlights_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.MixedFlights_iPhone_contrast.png index 1c97deee5..7d65788a0 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.MixedFlights_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.MixedFlights_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e42ec4b16f3a644868b59ce12cfb6a8841df02b97af1b17de1ec2d14b4077b71 -size 445093 +oid sha256:8b8a284117a6f3053af0326c8f40e9b0720b5ac9225f9d600923a5be40616444 +size 437904 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.UncertainArrival_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.UncertainArrival_iPhone_ax5.png index 226ae6266..6265fb40d 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.UncertainArrival_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightDayDetailViewSnapshotTests/other/flightDayDetail.UncertainArrival_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8281c63317b264d9fdafb9aad243670db9d3ad6b9a70d99328ec7bd93a0a83a0 -size 1423729 +oid sha256:50707da8b48fad70c04054b5945943eeb92025e6d9bf02382a5b079ed660eea0 +size 1416232 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightReviewPointRowSnapshotTests/flightReviewPointRow.Gap_iPad_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightReviewPointRowSnapshotTests/flightReviewPointRow.Gap_iPad_accessibility.png index 6bb8bb944..b72fb9f0b 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightReviewPointRowSnapshotTests/flightReviewPointRow.Gap_iPad_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightReviewPointRowSnapshotTests/flightReviewPointRow.Gap_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e278d956f47a3e18382abcd99919b1fdaca1a075ae4301835b071cf7e7728f4d -size 557931 +oid sha256:91961a90d8d4a47e1d8ed8beca389f540d916a21c5e4bf27f1b48b7deb2b2951 +size 386069 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightReviewPointRowSnapshotTests/flightReviewPointRow.Gap_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightReviewPointRowSnapshotTests/flightReviewPointRow.Gap_iPhone_accessibility.png index cea768af7..be71cf43a 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightReviewPointRowSnapshotTests/flightReviewPointRow.Gap_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightReviewPointRowSnapshotTests/flightReviewPointRow.Gap_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:de7c8720aed1ce30f46030f7d4b3c33b211466c5fc2c1a2638868a911cc256e1 -size 341002 +oid sha256:5ca16d60fea1a3805a6b088b54690c07c223fbfcb55e415e7544f3341dd6cbce +size 242951 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightReviewPointRowSnapshotTests/flightReviewPointRow.Gap_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightReviewPointRowSnapshotTests/flightReviewPointRow.Gap_iPhone_dark.png index c09c98384..44c44cc05 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightReviewPointRowSnapshotTests/flightReviewPointRow.Gap_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightReviewPointRowSnapshotTests/flightReviewPointRow.Gap_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4f5837fd2da3d11cc99a2f4e74966ac148d6019a4f0b6421bb90890b86159e74 -size 287329 +oid sha256:3c5dd6db3e1f379cd1dd7b0416bd55f0185eb8dd6977b4b191a67531c57fe2df +size 112943 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightReviewPointRowSnapshotTests/flightReviewPointRow.Ground_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightReviewPointRowSnapshotTests/flightReviewPointRow.Ground_iPhone_dark.png index a85e30c18..18fd12f54 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightReviewPointRowSnapshotTests/flightReviewPointRow.Ground_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightReviewPointRowSnapshotTests/flightReviewPointRow.Ground_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8bfd920f5b779bb1f49040bde0b5eab4245ca755103c6b4e5b1663f5f073f70a -size 275313 +oid sha256:17cddb76c80a0a95d876fa9364a774b51af9130c612d838fd8110291d87bf706 +size 99532 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightReviewPointRowSnapshotTests/flightReviewPointRow.Restore_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightReviewPointRowSnapshotTests/flightReviewPointRow.Restore_iPhone_dark.png index 523ccf936..577139a92 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/FlightReviewPointRowSnapshotTests/flightReviewPointRow.Restore_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/FlightReviewPointRowSnapshotTests/flightReviewPointRow.Restore_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b5f060af1925afe8158ee98289219cb30e9e1ba3d301f567c7e00ff71833ee3e -size 288047 +oid sha256:808acc216feaa5a84397e3d8939784203a6d86344cc85544651209815cf852d1 +size 113998 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/InsightsAccuracyFeaturesViewSnapshotTests/insightsAccuracyFeatures.Default_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/InsightsAccuracyFeaturesViewSnapshotTests/insightsAccuracyFeatures.Default_iPhone_dark.png index 6a3513b5a..2c1fe26b7 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/InsightsAccuracyFeaturesViewSnapshotTests/insightsAccuracyFeatures.Default_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/InsightsAccuracyFeaturesViewSnapshotTests/insightsAccuracyFeatures.Default_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4fcdfb442840a8c677d9e14595a69f1e3645e8ae5426a9e37384bb120737d1b1 -size 576948 +oid sha256:7dc0d0b456c6e64dfdc7878ddee602031d8a1c7dbe11270300ecd80872b84323 +size 465771 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/InsightsAccuracyFeaturesViewSnapshotTests/insightsAccuracyFeatures.NoIssues_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/InsightsAccuracyFeaturesViewSnapshotTests/insightsAccuracyFeatures.NoIssues_iPhone_dark.png index 66dc0c63c..22e4dddff 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/InsightsAccuracyFeaturesViewSnapshotTests/insightsAccuracyFeatures.NoIssues_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/InsightsAccuracyFeaturesViewSnapshotTests/insightsAccuracyFeatures.NoIssues_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b47614c45c4ea44621aa5e1235cedfd9f53ea247f6e0f6ad011213bd371c1417 -size 547265 +oid sha256:3bfd4ba6071c8d4864204f5e78b7b9fa0b2dce6c5ece896ba168e8e214a81f53 +size 448817 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPad_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPad_accessibility.png index 7eb6eb27a..0fa5c2f96 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPad_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:27d9fc4c657ff8db4a7fb099d55b041c88b814c00af0f9aa712299861811f54a -size 424150 +oid sha256:26e79d00c2b0af61214f8ee29901517ba51651a28864e1fd0d89cc46f2100d5c +size 426122 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPhone_accessibility.png index 990f330fe..b9a85c9c4 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/license.Default_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3f6616bfdfbf5dd61b4a7396047032f07edbbe787ebd5ca88039459fdaf5421e -size 293761 +oid sha256:6a050c6c8f7c29b2b74fe1d9f44f266e3969062628d4f95e2037f12973a5f73f +size 294392 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/other/license.Default_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/other/license.Default_iPhone_ax5.png index 817ba3575..3125e4180 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/other/license.Default_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LicenseViewSnapshotTests/other/license.Default_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a937745ac745951229c2188820d39991c037b824f11a3815499e1ff139cbf156 -size 391903 +oid sha256:232a7b56999c8feddbb7eca0acc08170abdbf4f8b89deb64b04f77b2277fdde9 +size 391512 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/locations.FlatLoaded_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/locations.FlatLoaded_iPad.png index 4abf5710e..4b02114a4 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/locations.FlatLoaded_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/locations.FlatLoaded_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:313e9895b39290ac4ba7393abac80e6a0320a2b8a41673a06f976baf762f2870 -size 3177159 +oid sha256:f2efaf3637bc4008ebb4dcf6065c879f13cde6abff6be42d5ff8c768f205c6c0 +size 3169447 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/locations.FlatLoaded_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/locations.FlatLoaded_iPad_dark.png index 7565d6f40..10f613b40 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/locations.FlatLoaded_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/locations.FlatLoaded_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed2ac94806f501f2d20dda85c66ff0ac73cbb7fa2a67cd2b2c23b395e538e07e -size 2852913 +oid sha256:f4bbb0384d9f6b17111012a700ed463f663f91ea82c046e4a2450b5026c139d4 +size 2846918 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/locations.FlatLoaded_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/locations.FlatLoaded_iPhone.png index 732b2faa6..e6489e497 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/locations.FlatLoaded_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/locations.FlatLoaded_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d1e5a2b4203cd1a70fe6d9227f0dcd275d279e0d3283cd0a255bfd320bdde422 -size 1555694 +oid sha256:e4ffaa238605908e81dcaa44871fe02bd24b6da058a7f6aa13daf7f2ac947930 +size 1548196 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/locations.FlatLoaded_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/locations.FlatLoaded_iPhone_dark.png index e53a3498a..d0c3beac7 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/locations.FlatLoaded_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/locations.FlatLoaded_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1318e60c809b9b81e3ae122693ef55a05f5b2d6dc8fa03b9342b0b57c1558444 -size 1312771 +oid sha256:4b65b8383385979cc0319126d70c70888554e911f12bd15a53ca477fa2b4613f +size 1304326 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/locations.FlatReduceTransparency_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/locations.FlatReduceTransparency_iPhone.png index 801d1f3e5..5e67cb9cf 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/locations.FlatReduceTransparency_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/locations.FlatReduceTransparency_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:047c9aa742b40c623a40410a8e3cafa64e06db1469e8b535ff0f9093471f1dcb -size 1370924 +oid sha256:3451839a6743cf26e922006373d0a7393b644672322f3342f048e3c641b85123 +size 1368087 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/locations.FlatReduceTransparency_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/locations.FlatReduceTransparency_iPhone_dark.png index b35c3c932..f51b825f6 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/locations.FlatReduceTransparency_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/locations.FlatReduceTransparency_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4fc9f4760da9d9aa4a2c28f24ee087a4d307a3226c4a3e3f968df2a5063aab78 -size 1101022 +oid sha256:c7e0b6621d55f0af52bf5dbb039f5cf303dc64efd7a8e9bcf3b2ff51e4dac6c9 +size 1095866 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/other/locations.FlatLoaded_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/other/locations.FlatLoaded_iPad_ax5.png index 8e5cc03a4..45e5e03f5 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/other/locations.FlatLoaded_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/other/locations.FlatLoaded_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:20c1b4d48a90b3b04771883f8e8d588bb9ec10edf59dfa8ffafaf8953cdb73ac -size 3678235 +oid sha256:d03c6cc8b983d895f8b41f7564d849f69fddde52af8895317478b6307f4c8f56 +size 3673722 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/other/locations.FlatLoaded_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/other/locations.FlatLoaded_iPad_contrast.png index 7f923feb3..c26feba1a 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/other/locations.FlatLoaded_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/other/locations.FlatLoaded_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aa7715a7f229b00dd154af33bce5eb10793ca783bd19d2b76d2682494d5a0282 -size 3205716 +oid sha256:dc14aaa0bb7310fbd78d64541cb35d6d11a9cb2e6ded773a57d900a46c842b26 +size 3195507 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/other/locations.FlatLoaded_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/other/locations.FlatLoaded_iPhone_ax5.png index bcc069845..d1f407cb1 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/other/locations.FlatLoaded_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/other/locations.FlatLoaded_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d7f964bfe6fc6119d501561bd54e64b2eeaf575ccb306f7862f395d81613f83d -size 2335674 +oid sha256:a4342bd2aa97e49edb9d9910a581120dce44cb232217312bee3e1b1a859169e6 +size 2279750 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/other/locations.FlatLoaded_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/other/locations.FlatLoaded_iPhone_contrast.png index 16a4c3eb9..d528eb817 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/other/locations.FlatLoaded_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/flat/other/locations.FlatLoaded_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:00c635aad357ab2f90503198f8352a9462d11004a85571cfe5a0bc26f5e10d5b -size 1561600 +oid sha256:9bd35b8093b6114bdd3d63b95e2a0b4c325d6b5101198f98db0bbeca1c28221a +size 1555839 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.DotsHidden_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.DotsHidden_iPhone.png index 32601e743..f67d40db8 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.DotsHidden_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.DotsHidden_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6348f15c5c13d49670de77493060fcb3329504a59908e30206fe4ab04482b6f1 -size 2636526 +oid sha256:d529ddb14f2e20bbdc9f8fbe434779db39521e0fb6ce8c6ba381291976d9de67 +size 2258745 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.DotsHidden_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.DotsHidden_iPhone_dark.png index ca0af03b5..c93cda6c9 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.DotsHidden_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.DotsHidden_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f1eb77f5cc017b2a623808efbb83a82b2d5397952342c3c51d1eae956d65f507 -size 2738108 +oid sha256:298fda3c712d065279fcee347ef35012a0ab162312b83a7bb741f0c900464eb3 +size 2183112 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ElsewhereWithHome_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ElsewhereWithHome_iPhone.png index 742782952..dd0ace5fb 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ElsewhereWithHome_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ElsewhereWithHome_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d00e24843078f188924137e519042e9adc8b1ca5118371d87b8a7453177b279c -size 653957 +oid sha256:50bc3d438b2c4eb7422005552845a12fc01934facd97f434af404467bf35107e +size 577167 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ElsewhereWithHome_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ElsewhereWithHome_iPhone_dark.png index bc86d438a..026d7f77e 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ElsewhereWithHome_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ElsewhereWithHome_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7bff4616dda81edc6c939866c3981d57080590520d698a13be7a61cc91104daf -size 580127 +oid sha256:5030a23751340b706653d2d23b62f8dfd2ea0693e880f5c7688b779368f25e06 +size 513935 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-Completed_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-Completed_iPhone.png index a3700ca28..b4053e038 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-Completed_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-Completed_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:37576c18256dddefa600bd2891118c24ee9d813a051a6c0f63a205eba2904ba6 -size 2630117 +oid sha256:3d4e2d41e1219a513034f30736687735a11aec81cd850b88623c339c0b564aa8 +size 2224702 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-Completed_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-Completed_iPhone_dark.png index 5ee52a2db..517b9de2e 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-Completed_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-Completed_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ab42cf2589d40538574257b50aab5e016b85733e5d3eaef14be45ec1bb68e045 -size 2755404 +oid sha256:1b34359552730fbf0228eaa60451e87b55622c7ab4c03e922763056bc5ab699a +size 2166109 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-FlightLikely_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-FlightLikely_iPhone.png index b5abba72d..9205e5905 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-FlightLikely_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-FlightLikely_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d0e0acc1d29ec7c4b0020b15d516100b12e272a6293bcf299ff3863e07415904 -size 2634157 +oid sha256:1cf1053ade7381225fd68ef543ed8785541d80ca98b9147b64a2c7f1d1d548f0 +size 2228119 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-FlightLikely_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-FlightLikely_iPhone_dark.png index f29e58af5..d7216698f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-FlightLikely_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-FlightLikely_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0cb62fde9299ff7871ee45d136ead700de6d823062e7e2877f7471bd5f095463 -size 2759605 +oid sha256:93fb475296064a2c7cf9d5aaec119ad5d0398acbc39622ba61f1262dcb4a94d0 +size 2169736 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-Ready_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-Ready_iPhone.png index 88690d497..1f45fecaf 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-Ready_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-Ready_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c7131db31b0887a7ed1f886fe368bc117d0e801fbf13aa78ef0de803e1dfa387 -size 2632108 +oid sha256:afe1562f97d5b1e7e52a3552a71e4082a7c62eb776c2c9baf4e5fba864b827d5 +size 2226499 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-Ready_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-Ready_iPhone_dark.png index 1932926cc..88302ebf3 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-Ready_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-Ready_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8091f373da46909c0acfe853aaf28cbc62626700e29f4fb2053d3540fdc41f92 -size 2757364 +oid sha256:b6c5f2a8bc07322c4fc1175918fbdda1650d379e712bd4d87491a31f5701c936 +size 2167359 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-Stale_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-Stale_iPhone.png index f837323f7..1f4a5a364 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-Stale_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-Stale_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1a3b71d31bdf5ea2f32928a549c630c4ab183dfb4e82f05d7225b880be830bc5 -size 2635406 +oid sha256:19e18eb1ca2af9692f71b2d46532fcea8d803e1203519f13f9a306d58e5f5349 +size 2226382 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-Stale_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-Stale_iPhone_dark.png index 543111476..e0fb8537d 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-Stale_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Flight-Stale_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b0674f8983809d472ac61351faaddd026e9ce19a42b65e6ccd07ce4b864c5f56 -size 2759158 +oid sha256:280e21d6ba4484e2b8ac10615e48cd19a387748af673ebbecba15eb836c069c1 +size 2158475 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ForecastsHidden_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ForecastsHidden_iPhone.png index 17de90f0c..b2ef76ba9 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ForecastsHidden_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ForecastsHidden_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5a021ba87e88e19c08c774f47f415b9d74ccebd56f5670d261d9b0b46f433032 -size 2498417 +oid sha256:73e383d8380e043b5e7256ad667ad06f3f01304f0846aa4de42649d4d8c8dbf6 +size 2213420 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ForecastsHidden_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ForecastsHidden_iPhone_dark.png index 64e511e60..6f39c0147 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ForecastsHidden_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ForecastsHidden_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f0be070c36e49caf7f18b22360649a8931e7903a71dc7f7ee004ac8a2718515 -size 2546233 +oid sha256:aa02bd58f2498f402a3d38ba41ef1cfa169b2be6f37ae6e2dd7ac34d2e60435b +size 2123562 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Itinerary_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Itinerary_iPhone.png index cf2512b85..1a1b87323 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Itinerary_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Itinerary_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d4b21afca98bec6468b216f479d70056cd8dac8faafa3c9cd4aaa61a9fdaa88d -size 2636132 +oid sha256:c7216cf18e2dcbcac17c02ce1246ed320ed1373839140ba88865d1916e8e4a69 +size 2262403 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Itinerary_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Itinerary_iPhone_dark.png index 7c3733315..85faa2148 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Itinerary_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Itinerary_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e6f4df38d80d83cd0adeabdbff20518e7bfd1de949e3e8760401f366a0b7d745 -size 2741073 +oid sha256:358b96b8eb7e3fa59799fbd0e89b0fbf342fa9e664e6eb5ee00b8fab51d390b0 +size 2188671 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Loaded_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Loaded_iPad.png index a3d1dd5f2..5e35d7949 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Loaded_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Loaded_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2fe881fa10512a01e1cd7b6ef6b7f7b6fc104c511fb8280abae4dc55eb88b461 -size 4801153 +oid sha256:ad54bbc61c1984aaf97d1981f073047624c495a31922a97fb6a4ac37dd9d555d +size 4364198 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Loaded_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Loaded_iPad_dark.png index 805657ab7..1ce3f7f84 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Loaded_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Loaded_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:262691eabcc6f40542609254f5dd6e45353ef38f93bc76c507a792977f2ee002 -size 5018011 +oid sha256:a655cf8b90c4b898dc57165542e24dc9d945ca23b67f204c58ec6b512f61b617 +size 4303879 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Loaded_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Loaded_iPhone.png index 0edd0d3a4..733d767ab 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Loaded_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Loaded_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:29f9ac72d301170df506afabc4aee71ed3440bd55cfd7dd7c0fc9c4e5931a7e8 -size 2644264 +oid sha256:f7bae1dd023ca4821e4da4e25b18a5777f95bc1ce8d4705023c0a1d419a26fb9 +size 2267858 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Loaded_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Loaded_iPhone_dark.png index 3554e5d62..75e2c1f4f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Loaded_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.Loaded_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e3005858348bdbb424a83fdd23f5fa9f33ce0bc4496bff86bbbd73744f2488c -size 2746521 +oid sha256:c819e25cadbeede5c9e0397c018b147137bcfbf7d109c45a244d75ef426fe27d +size 2194571 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.MissingDays_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.MissingDays_iPhone.png index eaf1fb280..c942e1caf 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.MissingDays_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.MissingDays_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:92ae3164a00f5f1e0157e5b817a29999355abc5cf89c6710524f4d1502006a8e -size 1623173 +oid sha256:758e1ddf24c8994e7e2912a4bcdbf7690a13f31fedfa4e2f1b51389f673928e3 +size 1450016 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.MissingDays_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.MissingDays_iPhone_dark.png index 4cbcc92ef..3ddc68f79 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.MissingDays_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.MissingDays_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1e5870d0feee491feb279c5389b21fe1b392b7a4c175494c9ff9ebcedbaf05e8 -size 1611830 +oid sha256:e0d4848336711d15266d39e6026675653e84ce2706f4f7c8f3736d693134ec66 +size 1376230 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.PlannedStay_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.PlannedStay_iPhone.png index 84c1b53d7..3287e68f9 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.PlannedStay_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.PlannedStay_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d558636c819bfe23ebac17542bc72bbf5546c42c593711eefc07a09a3934cb0 -size 2634576 +oid sha256:9942a556ccb3ac2989e2338ae78021bbc81f7e4fdd21b54357696d12b77ecf29 +size 2259512 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.PlannedStay_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.PlannedStay_iPhone_dark.png index b0211d95d..317e85030 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.PlannedStay_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.PlannedStay_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d2a331161ba1758246f7d86880ebf6b6631de1057187f5986282066fe68f8ec7 -size 2740022 +oid sha256:66bf0890521ad9c5a7138d4e74de0bf042415528b10116caceefcc9f38a43911 +size 2185215 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ThreePrimaryRegions_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ThreePrimaryRegions_iPad.png index 2f081faf5..08f9735fa 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ThreePrimaryRegions_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ThreePrimaryRegions_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7c0ee18f250ccb46187c57d915bb5a68e9e501eaf5c4e22f5270f2b124ecb1b2 -size 5863513 +oid sha256:c23db3a9e8d36b668792d6938ca2a579615f08c88f8a2a5f3564fcb1cef0c55b +size 5544181 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ThreePrimaryRegions_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ThreePrimaryRegions_iPhone.png index 71cbd89d5..20124645c 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ThreePrimaryRegions_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ThreePrimaryRegions_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f4c64993fc35d948c378bf703a879a707f0b946f70c385315595d3ce3d9684cb -size 3293499 +oid sha256:f1d4040e6e288c8ad966580c7569de1bb6eb21e107c51595272d0ddccc30f9f2 +size 2882380 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ThreePrimaryRegions_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ThreePrimaryRegions_iPhone_dark.png index c2a2339f1..8c24b24eb 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ThreePrimaryRegions_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/locations.ThreePrimaryRegions_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f6874079e9d888ecba0620a8898db098fb321e68c66e9e7a4495e9336f6a73c6 -size 3531590 +oid sha256:b50b316a60ec7af7f6c9af1e79cc8b5dc9fbc16db24d9240f1f67b459828649b +size 2959226 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/other/locations.Loaded_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/other/locations.Loaded_iPad_ax5.png index 935c10313..5f707102c 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/other/locations.Loaded_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/other/locations.Loaded_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5aec4839120b3ec209ae88b27c13f3f33b998bdec1d5422249af2300c748041e -size 5953191 +oid sha256:99124da51044cc6de58434ce8d1d3fabfd200058b18c0655f665d7adcc2ba0a8 +size 5057652 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/other/locations.Loaded_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/other/locations.Loaded_iPad_contrast.png index 5774d54bd..7cc9cf352 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/other/locations.Loaded_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/other/locations.Loaded_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b1a23a401946e9ac5a8e71dc95ecde9ff845386cd1944623157426e9beb526f3 -size 4748198 +oid sha256:85d0a53dfc6450e81903bfea31163b41a2c14bfbcee2bca6981f244fd93cadd1 +size 4226958 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/other/locations.Loaded_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/other/locations.Loaded_iPhone_ax5.png index 4c1d5d61d..7894b1323 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/other/locations.Loaded_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/other/locations.Loaded_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0dcdff647ce615fb0d85ee274145d94ef53cafcf06d8880eb70a0373a8559b94 -size 4198713 +oid sha256:389f44b6f53290000244adc8778778815ed39398d236ff0bc03fb1f661ff990e +size 3221664 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/other/locations.Loaded_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/other/locations.Loaded_iPhone_contrast.png index 86b8aa856..c844ab62c 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/other/locations.Loaded_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/other/locations.Loaded_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cb63eb93f374ba44ac84d56a5cce9f562e0c37db92902bc7ceaea6ecbac521cd -size 2539012 +oid sha256:4516130d4ec9ca9926bced7969718df5a1e23b0766023cedc0077f34ee0e8362 +size 2196997 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/other/locations.ThreePrimaryRegions_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/other/locations.ThreePrimaryRegions_iPad_ax5.png index 58d5a017b..6229bd86d 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/other/locations.ThreePrimaryRegions_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LocationsViewSnapshotTests/other/locations.ThreePrimaryRegions_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7d4f31ade483a9cad1c5dfee702b79895f9e045bef239dbe3734bfcbbb8edd14 -size 6274528 +oid sha256:e88c6cabc0bb6cb31f5f52110a8c68dc8e81e91c5d10b86b1c9f52a9b2680874 +size 5770141 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Loaded_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Loaded_iPad.png index bd81f4014..f7a5fa626 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Loaded_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Loaded_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:989aea674e02bd7f32df7b4e837f16dcf3edcea648c0a15bea2fe3de004dad3e -size 262580 +oid sha256:cf129754a61ae238ed557180696cdf10d071bf870bf9d2624b440a3c2051c9bb +size 262852 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Loaded_iPad_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Loaded_iPad_accessibility.png index 007a98d44..9e9e37f57 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Loaded_iPad_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Loaded_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:78efab48cd2090f0e9436a130e2f6845faa1e3f4e71c5c846149ac692681b82e -size 483096 +oid sha256:e672e509a08c5047fa5dd04ef028a6c2697e1b231dd806b900cde0a70a5cf096 +size 483332 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Loaded_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Loaded_iPad_dark.png index 5ed5e343d..984d57faa 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Loaded_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Loaded_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:92a51d92af2456dcde0b5114d0a1f41ad7a5a11f7ca1122fd5ddd80c25ede696 -size 279055 +oid sha256:85ef6f96d84959f6a17556d20911620a4d22af9d54a0fd731b0f4f1c29820f54 +size 279149 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Loaded_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Loaded_iPhone_accessibility.png index c2a7ad5fa..eebf44d9b 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Loaded_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/loggedDays.Loaded_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:147fb7901d995ae03a2fa388959b9c99c15aca0a971549d1f6a8f8ee5f966476 -size 352532 +oid sha256:5c688868cc7da18a46918f7b33615e1f72874505073709adc7f12b9d437b4d0a +size 352294 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/other/loggedDays.Loaded_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/other/loggedDays.Loaded_iPad_ax5.png index 8382d896a..b8a204a3a 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/other/loggedDays.Loaded_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/other/loggedDays.Loaded_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:05eb498533bbcbc1db84b8d113fd8e57a06f940ed3ab8f7a9fedf8be2b13b58c -size 427908 +oid sha256:70fe742f043cbcf272175d613424851f0b20764bf9dab793d00a26fd5259ba42 +size 425746 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/other/loggedDays.Loaded_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/other/loggedDays.Loaded_iPad_contrast.png index f6c1d6746..78c46af6d 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/other/loggedDays.Loaded_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/other/loggedDays.Loaded_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:569d0e670d2e180785e718033d688d3c89f799b55d93601fa22427bcdf5ff1f9 -size 263284 +oid sha256:bf7ea39e213ecbf8ef4408a7ea1d4fc8eb271c239cd4a74557fb9f66222fd0cc +size 263516 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/other/loggedDays.Loaded_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/other/loggedDays.Loaded_iPhone_ax5.png index 460d20092..078a11b88 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/other/loggedDays.Loaded_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/LoggedDaysViewSnapshotTests/other/loggedDays.Loaded_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9180170681ea0c3924ca1e2364e7a4bd90022e399fef412ad428ebed104af6b2 -size 354327 +oid sha256:2b0ae4f5300eabe19e0a5ff025439ff2afc2079bdf16d1014c1c0c1f56bc1ea5 +size 354038 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/flat/mainTabs.FlatElsewhere_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/flat/mainTabs.FlatElsewhere_iPhone.png index 034256e0f..90572f602 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/flat/mainTabs.FlatElsewhere_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/flat/mainTabs.FlatElsewhere_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8fee4bae9cf2ddea82e7eb1a77c1969fb40444a856bd82daf2b6068162607199 -size 1007592 +oid sha256:f2b0b8385e90b17e46b3ac346d17029b612b7156e9ebe727b73627af5712283e +size 973321 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/flat/mainTabs.FlatElsewhere_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/flat/mainTabs.FlatElsewhere_iPhone_dark.png index 792785259..e070ef8af 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/flat/mainTabs.FlatElsewhere_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/flat/mainTabs.FlatElsewhere_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:421e5376dc8bdbb085528403c70f17229f747bdf4f6d8daa8be2be79f7025422 -size 807449 +oid sha256:fb277bd77938c4531ccf02840f3131eaaa689b3f48071ce7925392df810def74 +size 754462 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.Elsewhere_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.Elsewhere_iPad.png index 437acbd6f..b229a7d2f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.Elsewhere_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.Elsewhere_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8b31202c9183c0ec2bd8dc9323c2c803cdfb3e085b6acea36fe713e4c09970f6 -size 2132747 +oid sha256:4762e6a9af3a60a5f2c819e1ea52360bb0363e04151790f05d8ae9a7cd278ac7 +size 2168483 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.Elsewhere_iPad_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.Elsewhere_iPad_accessibility.png index 4a79bc58d..1b5148da3 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.Elsewhere_iPad_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.Elsewhere_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:88cd17a7baca7f719860a154b23adbfac225e43f9a076ce1aec95347de6bdc30 -size 2325715 +oid sha256:6ee06c47a716616ddfe195650539bf219bd684a88adbf64049c9e63696b7c0fb +size 2363122 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.Elsewhere_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.Elsewhere_iPad_dark.png index edb269c8c..1931dee0f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.Elsewhere_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.Elsewhere_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:292283bc8a4e714846107242c5e46092117f0d945c28a28f7e82c7731d71c66f -size 1867768 +oid sha256:0ccaeb6ec41d9a12411d43ec972f215f84732b22476bdf0aad2e617fbe96e2ae +size 1885162 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.Elsewhere_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.Elsewhere_iPhone.png index 69af04d29..64fafba3d 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.Elsewhere_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.Elsewhere_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b07d6eab0ded14addaa5e88c4b9421d01c6d484acdc6810d0f4821c20634a843 -size 962300 +oid sha256:3de8937027c934c60bb345f3a4e24e70e0aadfcc41204dfaf7cdbd2d779ac213 +size 928217 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.Elsewhere_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.Elsewhere_iPhone_dark.png index 30e9c5852..0653060ad 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.Elsewhere_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.Elsewhere_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7d053dba455d718ea3eb7e00e8f574530e9a53bdff7da48df89a80c830f616e4 -size 802048 +oid sha256:e1f6f70233919cc1136ffc7ac0f6ecde3179d747ebc47781d980ed460b6973c7 +size 748894 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.UpdateAvailable_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.UpdateAvailable_iPhone.png index 98d521c8c..c31f98e43 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.UpdateAvailable_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.UpdateAvailable_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6fa62bd34af5e8be82c34006cc8748ba83225919bbcbf9c35028a9e06f7624e0 -size 223407 +oid sha256:76765729601f4e942a9a594c4bea3d9fa51b4f22f9ed8d670dabf1211d016025 +size 183308 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.UpdateAvailable_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.UpdateAvailable_iPhone_dark.png index 3860a0a5e..e8524b8c0 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.UpdateAvailable_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.UpdateAvailable_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2a2bfa425647efc59ada045b22047892ba6c7e6c9434f23b22f6c720113f963e -size 230423 +oid sha256:cbcbd9d32d3325306a5ec258c54f299ae19f9d6b4d6d2745f9efc031890cf983 +size 189719 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeActionRequired_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeActionRequired_iPhone.png index 9060238fc..a944071b0 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeActionRequired_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeActionRequired_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6bb64ced1c1b9e0c00a314449aa3523571ceb624b22acd04f79cb64db9dcb644 -size 255599 +oid sha256:69bbb0c28c810f17359b75113ccb175cbd293fb414f9db687fe552b1a2e8bc19 +size 192789 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeActionRequired_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeActionRequired_iPhone_dark.png index 7f8f9c256..ac1afa3d6 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeActionRequired_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeActionRequired_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0c3611842f087fcd95aa2821542174982666fae642fd70bc202a041da218a196 -size 255209 +oid sha256:89cf04dfd36a379384b67da9a7d60aa319dc736f79bff981136c4982314d310c +size 198864 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeLocating_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeLocating_iPhone.png index 3ca273118..00b70bf1f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeLocating_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeLocating_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0456eaa909eccbdb7bb28f8644b1e07e727935e073af13295d69ff0d83c51ed8 -size 254029 +oid sha256:020456093a7f675a02d2d8d320e009c9fb3d701d63737f45e06cb69627454836 +size 191345 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeLocating_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeLocating_iPhone_dark.png index 00e7e32d8..d3db15a35 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeLocating_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeLocating_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:af853fd8861fb8990e44c730969ec73a2ca4c7e0e2ef8fcdf8ba225ed4937d50 -size 253732 +oid sha256:6db112511ef27ce2fa763d8a47f2c7eb0d8255e876cc1d65fc6bc425ea803776 +size 197304 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeLocations_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeLocations_iPhone.png index d88a60a2d..78e6ac651 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeLocations_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeLocations_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b0323dca236f57c7c2e7d67cbb63a2e44896c9fd9f79eace86e8b688a1d8ea5d -size 1253529 +oid sha256:086a587aacae4dc12ecafbb92c6d1dca51b8e32859d8f6b9fccc298e7816c440 +size 1096907 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeLocations_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeLocations_iPhone_accessibility.png index 6f5cb1c68..84bb2fcae 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeLocations_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeLocations_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7ff81fa681527a7170b949527e98b8766ee7d9229234258994b604595de7ff76 -size 1115375 +oid sha256:91c414fb598e9ef009cd43d12387eef7081c50daf8d7c524b5b3c1467d0a235d +size 1048730 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeLocations_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeLocations_iPhone_dark.png index 9337059cd..1522e89e7 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeLocations_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeLocations_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9fda208ee2764641471b6d3f23b032bcdef12925230d75253f48835db5a27d22 -size 1027642 +oid sha256:e8784dc34466c5e9c598ab665efd244e1b4ecd3203533eeb6671da28f7561856 +size 913515 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeYear_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeYear_iPhone.png index 8e52fa889..9a8a856d5 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeYear_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeYear_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a2ecd66fb7a3fab734a16045ba2583bac3330508962a61636f8dcfefd6c99af4 -size 1102693 +oid sha256:adb33b697978b17c200eba32586644f8f1817bb04f74bf4139b5a6e1a58fc1c5 +size 951284 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeYear_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeYear_iPhone_accessibility.png index 1459e5f27..32558a8ab 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeYear_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeYear_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2081354c5e04e70deb0c08549e8f645a4d21451db81ecd7e07d93703ec67ec7b -size 998631 +oid sha256:26da30bb28353985b6d6a2a16e4d97063723ff9781f9151591a721cd8e474828 +size 902346 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeYear_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeYear_iPhone_dark.png index 28c35170a..80779ee4b 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeYear_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/mainTabs.WelcomeYear_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8e38b656c6e974556e030777f132dac491b742ada93041ae3b7d6f260b07cf08 -size 864701 +oid sha256:c6a9df171589550876493dfbae20f303f51b8d932eaed4152ace58fe9e774683 +size 754330 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.Elsewhere_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.Elsewhere_iPad_ax5.png index a30b081bc..99dfb789a 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.Elsewhere_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.Elsewhere_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bf891e2109d9ed6f68124a5e26f8ea87ed06ce76c3f61d0876b503c2e938b1e1 -size 2313510 +oid sha256:ecdc7c1da5595806557dadb12739bce4a36aa0e46b9515b53e4f414710b4f2a5 +size 2350147 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.Elsewhere_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.Elsewhere_iPad_contrast.png index 8fc45dc3d..4f0d13ddd 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.Elsewhere_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.Elsewhere_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2d25133751072efe96c187fc3df8399f190ffa1ecb018f399a2a791a70bd73e0 -size 2157798 +oid sha256:ab09fccba05ad308393dfddb484ea925e153e35b6d54531141db4a3c7537d18c +size 2180730 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.Elsewhere_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.Elsewhere_iPhone_ax5.png index b97dd8d74..fadc048d9 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.Elsewhere_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.Elsewhere_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8176e92ab740d685aed45efd27700fa374cfaf604250843c3d410c9b8ab41e26 -size 1069473 +oid sha256:72b8c1d5e14d57a2012138bfbb04ab0806fa77bf3490d8e1436daf644a83df81 +size 1031921 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.Elsewhere_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.Elsewhere_iPhone_contrast.png index 85dddc48e..74ee5a915 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.Elsewhere_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.Elsewhere_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aeb95cc48a354a0d4620281209726915de705199b2b899010fb4d911a2ae7592 -size 952756 +oid sha256:14addb588edf3633b528060d3ae287077ff9d64a00407998e4bdd9a471a96e37 +size 935838 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.UpdateAvailable_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.UpdateAvailable_iPhone_ax5.png index 835876f05..74b8398c4 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.UpdateAvailable_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.UpdateAvailable_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:842db4c7c4e674f52ece43687ee06915aaba74f28d30fe434dc734697b7019dd -size 376035 +oid sha256:fecf6de2d3dfe3939caad6d5a6e49b4177f6fae3f43be8b9b31501648b8b67d5 +size 293024 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.WelcomeLocations_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.WelcomeLocations_iPhone_ax5.png index 82df6115a..11fa446c0 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.WelcomeLocations_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.WelcomeLocations_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b3575d478e5958dc451381c3db4f940c4b92f88fe29cba4c6222200cb471947d -size 2469296 +oid sha256:0e805da995345d57cc7f1792a831cc53fc9de6f15dbc1cb03e310cc41000b28d +size 2039471 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.WelcomeYear_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.WelcomeYear_iPhone_ax5.png index afade0369..35855caa3 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.WelcomeYear_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/MainTabsSnapshotTests/other/mainTabs.WelcomeYear_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:507cb4e2718947b41deef1e0a9dc3395bf97f285d4d37324ca38ad524d3e3ac6 -size 2426226 +oid sha256:1bde11b50c2741ff1f967c007f443d828e80fbb5943d3e440b6b6e397d72a17b +size 1965215 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.AddWithCancel_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.AddWithCancel_iPhone.png index 1e6bcd1f4..a22440482 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.AddWithCancel_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.AddWithCancel_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a41003b184e770c1eca0ab0b567e7e6c03ea737b72838732bff72594f2d96934 -size 274588 +oid sha256:09522f6864fd14d134da59feea8b4caad6106269e7e3e03de0d6cf6be6212354 +size 247407 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.AddWithCancel_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.AddWithCancel_iPhone_dark.png index 208c990d1..1d7c00d39 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.AddWithCancel_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.AddWithCancel_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0bd8b069a4dc44013c13988d6f4986a570ab7dd190f7135b01a890b87b52ad61 -size 261454 +oid sha256:73638e0e01fa407a5b18b8b7f6afb62632f1e9dc10670423f667bbb68093729d +size 243828 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.Add_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.Add_iPad.png index f6766ec64..0db396652 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.Add_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.Add_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:445a9bb70ba4d1539b96a6c34934efd56b6d2b6359f3bc494b97eee2987761b7 -size 361749 +oid sha256:5de1cd4834dd190b93a5eb3ba4efc104f767405a8d5e889b15e391d5a090fe1b +size 359376 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.Add_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.Add_iPad_dark.png index 4509faa28..a39dbf53d 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.Add_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.Add_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d5453eca7b95e4043b2d172bcca674807ce047b04cd4d97c2d5517d76a37b7d2 -size 359137 +oid sha256:d431c5d8662fbce1f142916e5e9b0ec67d6af5138e7e86b27012af726b9a485e +size 359672 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.Add_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.Add_iPhone.png index b27d16e9f..3c4ea6531 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.Add_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.Add_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a5831d35781655ac7cda02a274c49cb30eae114e3611847483f0851729ae5928 -size 254003 +oid sha256:a281aaa21338ffab664c43c27e95b125a8d071d5ab15dc05e395f14183baa050 +size 240347 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.Add_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.Add_iPhone_accessibility.png index 091f3fa57..3c43f9085 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.Add_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.Add_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1e952bd60c42efd26cd1d195141d3c1ad00641d0e9b60bf7fc659cacb8016f62 -size 550528 +oid sha256:356ee54c249486ecaf35b8f5ca1579749996ea270549a96b4c69cbd952292080 +size 543022 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.Add_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.Add_iPhone_dark.png index c88befa05..4f62a128d 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.Add_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.Add_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9abe235587cec9d0634e2515fc958290f95af74f12539ae3e21c28b48de5ffcc -size 248794 +oid sha256:f7661587f7ee888dafe59ecf0ab118e65a35c0555a2724af9aed7927d909ae01 +size 239691 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.EditAuthoritative_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.EditAuthoritative_iPhone.png index dacfd4c9e..f1f050863 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.EditAuthoritative_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.EditAuthoritative_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aa2f0c344fa5ca823b5355af60abf6a08c0d066c053f70cd6f4b6fb6c7c64676 -size 338287 +oid sha256:62754a38c8397e60d58a05cccb143d1b7dad86cd3d9f49e510614175cdfa5bfb +size 304722 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.EditAuthoritative_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.EditAuthoritative_iPhone_dark.png index a12127cf0..903d21f72 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.EditAuthoritative_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.EditAuthoritative_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d845de269f1bde6cd6a916de58d1fcf70549ba5229d3755974834f0ff73751e8 -size 325985 +oid sha256:e6525512e1741d6446e07b75dac868c99b8a576de135f9ddadf6be7ffa8cf516 +size 302880 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.EditPlain_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.EditPlain_iPhone.png index 24f29c144..ed2da9829 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.EditPlain_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.EditPlain_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eae3bc03659ed7e37af3731ec2e38135b6dbd058de62a7ab312a948cd6ac9252 -size 282890 +oid sha256:701cc40db1b4052dcbd84105fa2b593476e7ea3c2c435748e171258ed0df6b66 +size 252565 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.EditPlain_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.EditPlain_iPhone_dark.png index 72b96cc2d..ae2b4f787 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.EditPlain_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/manualDay.EditPlain_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c7d1ff0287e690635ee1aff503d410e73272acc032e465c53efc0cc6549ea51a -size 269465 +oid sha256:06877c139a992bc40452fddd07176f58b3d6b6129c8c3e646f301c9dbad7da3d +size 248639 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/other/manualDay.Add_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/other/manualDay.Add_iPad_ax5.png index fab91804b..0771020a8 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/other/manualDay.Add_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/other/manualDay.Add_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6463388a12a93964af2515d2f5966c2e8e67eebcdc3cff5c357731fc1f2f60c6 -size 765871 +oid sha256:36bc32e197f9290923a65bfd3c0c8002326c57052ff1a020a52e6a51404dc231 +size 739792 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/other/manualDay.Add_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/other/manualDay.Add_iPad_contrast.png index 7e96a3834..cebde3155 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/other/manualDay.Add_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/other/manualDay.Add_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d5fbb76f8bf55a1486c28bcc167429e4f91b80cf24d1804ad700858afb37829d -size 365208 +oid sha256:da0293313d41e2684e0047e372b9cfb0742e3754d7f4477db0c415606bf51e23 +size 363063 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/other/manualDay.Add_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/other/manualDay.Add_iPhone_ax5.png index 8bae06903..1c63fed38 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/other/manualDay.Add_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/other/manualDay.Add_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:95e5bea610d78cc6888dc2825006579b9385760f03eac9a8a31befde2d037cdf -size 737678 +oid sha256:d45f656ca17d1aeb31ae46f0bfa0a81013be283cdd3dcb18dd84392a41df2dd7 +size 718008 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/other/manualDay.Add_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/other/manualDay.Add_iPhone_contrast.png index 7d0ed1860..ee87d31e1 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/other/manualDay.Add_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ManualDayViewSnapshotTests/other/manualDay.Add_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:50450bd3a2af9e4e0149df0ab3e4978c30a995f178f1e006285225adb14b1de2 -size 252312 +oid sha256:0e29f011a1dda66a8b4a3b40b85a3ef7eacf50325e08c2e7c3707cc71a3d8172 +size 244858 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/flat/themeSelection.Alternate_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/flat/themeSelection.Alternate_iPhone.png index 44eb3c998..7c23127a1 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/flat/themeSelection.Alternate_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/flat/themeSelection.Alternate_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:74fc66f1dd7e5021c83a9ba629173ab6eb03ba60b850c82e2d0d816b0fe3aab3 -size 1257540 +oid sha256:ff73167daf3f441d307fb389143443d3a4071e64f1a3aed6a8c0b34c6f2a59cd +size 1292554 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/flat/themeSelection.Alternate_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/flat/themeSelection.Alternate_iPhone_dark.png index f8d9133dc..0060ef4f3 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/flat/themeSelection.Alternate_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/flat/themeSelection.Alternate_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:be9446911a9525c32b6fa86bf85ae1215533fe236946333930fd5a518a71a129 -size 1193946 +oid sha256:996a513d5df44fbc6cb8cbc4df1c0041653c8e2f9670faabd75f1ff17f9909e3 +size 1376668 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/other/themeSelection.Standard_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/other/themeSelection.Standard_iPhone_contrast.png index 5561e42cb..3a0b7bdf0 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/other/themeSelection.Standard_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/other/themeSelection.Standard_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:58fd74e1222771a589f0e40a5ba3b541881f5cf57bb304ce39eb8c0c0f35d2cf -size 1232108 +oid sha256:acd61db8e389ce0bd8488dd1a4f7aa7f55ca1c682dc5e08934fbc7b4a3e794eb +size 1324788 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/other/themeSelection.Standard_iPhone_rtl.png b/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/other/themeSelection.Standard_iPhone_rtl.png index 388e1f848..780c0fc8f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/other/themeSelection.Standard_iPhone_rtl.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/other/themeSelection.Standard_iPhone_rtl.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:315397c32cc9f3f5d394a7ef06f134306e3e5a7bab01a11ee80dbf0e2061f133 -size 1251284 +oid sha256:9fdf6f126b40ca0f3994ca85c6525da4875b715d2804e7acad88d1df6110e33c +size 1284712 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/themeSelection.Standard_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/themeSelection.Standard_iPad_dark.png index 3a6fa6af2..8ce88645a 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/themeSelection.Standard_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/themeSelection.Standard_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:28d75ffca768baaf1cedab7453f760beee847cb6d431b7a9c7a7fc0920675fd1 -size 2099753 +oid sha256:9bd70356e38cea4c75a6050475fdd00d8490365e89bd67697de7ea97810280f0 +size 2002116 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/themeSelection.Standard_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/themeSelection.Standard_iPhone.png index 9b2f502d8..e872d9e60 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/themeSelection.Standard_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/themeSelection.Standard_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7017f506737e031aaae37f90c107366e7ffed1d3460dee0ee11933da22ca0637 -size 1254226 +oid sha256:9d90c6accc2b4149dce12ef2d5f25e61bae73a44d371a526ae3a932def8d8c67 +size 1285229 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/themeSelection.Standard_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/themeSelection.Standard_iPhone_accessibility.png index 50605b374..d3b30d0d0 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/themeSelection.Standard_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/themeSelection.Standard_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a2c304077474aad92aa5cb2698ec48c64b64bfd126d02ceb04a79f2adf61104 -size 1166031 +oid sha256:5238b1a8ff50a010e2f327644a318082edb4213c4111a57d6113da2e577231fc +size 1175167 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/themeSelection.Standard_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/themeSelection.Standard_iPhone_dark.png index 07d5bed74..aa8535d15 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/themeSelection.Standard_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/OnboardingThemeSelectionViewSnapshotTests/themeSelection.Standard_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8108784791b54b80bea76842c5043fe1930c9f31d50f55b0340a7ad518718949 -size 1189475 +oid sha256:2bbd4060842f82a6da8fa74add94b2540f77235bc3709ad6452a3879026a9dca +size 1377556 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PersonalizationFeaturesViewSnapshotTests/personalizationFeatures.Default_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PersonalizationFeaturesViewSnapshotTests/personalizationFeatures.Default_iPhone_dark.png index 02f1eaa90..8a8ebec68 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PersonalizationFeaturesViewSnapshotTests/personalizationFeatures.Default_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PersonalizationFeaturesViewSnapshotTests/personalizationFeatures.Default_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6bf6792d7548788c6d31ebe4cf9aaa87f6f9cac7947bdc932dd778fedc5c5218 -size 671131 +oid sha256:442317661266cdeef8b56e1131a15e07cbfcdf738697dd4c9864d4a9d5bbbac2 +size 554295 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlacesYearFeaturesViewSnapshotTests/gallery.Demo_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlacesYearFeaturesViewSnapshotTests/gallery.Demo_iPhone_dark.png index 04f4d7f7c..c54388822 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlacesYearFeaturesViewSnapshotTests/gallery.Demo_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlacesYearFeaturesViewSnapshotTests/gallery.Demo_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3e296a178cb28da5f63f14d24327e66ecf43d87c5216b5dbe8e28ee221bcb2d8 -size 1587037 +oid sha256:7b4b155723ba3a8c5044e134e7ed1e5ec87b66d20296e0c097df87dc1401c8b8 +size 1381133 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlacesYearFeaturesViewSnapshotTests/gallery.Empty_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlacesYearFeaturesViewSnapshotTests/gallery.Empty_iPhone_dark.png index 6764befc1..0e3c66073 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlacesYearFeaturesViewSnapshotTests/gallery.Empty_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlacesYearFeaturesViewSnapshotTests/gallery.Empty_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:baa965d7b720bfb3f96a26f544a374251bd8dbb33bfc1295489dee11056d1142 -size 667516 +oid sha256:93f37a24487a1f3659d13d4790377f4a0a57fdf5549f048ce71c1b0d471f77cb +size 541609 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlacesYearFeaturesViewSnapshotTests/gallery.Loaded_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlacesYearFeaturesViewSnapshotTests/gallery.Loaded_iPhone_dark.png index d2ab02f33..74bd2f60f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlacesYearFeaturesViewSnapshotTests/gallery.Loaded_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlacesYearFeaturesViewSnapshotTests/gallery.Loaded_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:40b062c5ba7846dd67328aee6ed992871c5233928ad2a7080c8f7829f4fe37ee -size 1473202 +oid sha256:da7a91521ea3411ae95913baa52e615d7da9dff5b2a2987fcef52288a083bdee +size 1266724 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlacesYearFeaturesViewSnapshotTests/gallery.Unavailable_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlacesYearFeaturesViewSnapshotTests/gallery.Unavailable_iPhone_dark.png index a6cea3405..bc0a56872 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlacesYearFeaturesViewSnapshotTests/gallery.Unavailable_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlacesYearFeaturesViewSnapshotTests/gallery.Unavailable_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:201cebf54c5fbb19a847caa300455c278572d9145752d832d06ad080679a0584 -size 623765 +oid sha256:2a41796c031c893208d19095ae563ca50b4e1ac576c883fcc76e97ba445db89c +size 496120 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.FlexibleStay_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.FlexibleStay_iPad_ax5.png index d08178a90..671fdb750 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.FlexibleStay_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.FlexibleStay_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d0551100c8cf9d7aff256e9e6d4688bfb5eb2866aa31dc5ec7c63ab8283c9661 -size 867766 +oid sha256:8b9df42ed9439a821b71555f4f2cb5d10f1151740f9198bfa48e627a0430ba63 +size 846758 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.FlexibleStay_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.FlexibleStay_iPad_contrast.png index 9a74fa340..fce6974ed 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.FlexibleStay_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.FlexibleStay_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:47ff56f86f2b5f25377d7363978022e5e7a6bd629ed24769d99332060f1d3a88 -size 388218 +oid sha256:edb3fcae6b1b858f346d20a930c8de0699a0b238dc89a4a502d8f7f33ad3cff0 +size 370557 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.FlexibleStay_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.FlexibleStay_iPhone_ax5.png index 1fcf66b5b..275709265 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.FlexibleStay_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.FlexibleStay_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9ddb93e363c8ac1edb54bdb2f9a34c71195256805d3ffe0fb118ee63af6218ba -size 816191 +oid sha256:58ef467ece8286235769910608c7a61015f65e35221fa67ea1db797bcd15185c +size 781896 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.FlexibleStay_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.FlexibleStay_iPhone_contrast.png index a989c4a3d..04829729c 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.FlexibleStay_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.FlexibleStay_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d07d32c3c4549663dadb3fed078e1a74c765afc4781810815e52441b8a93b40f -size 317511 +oid sha256:7c097eaeedfe626c4e09e23789e951490673579091ba09626f33a5a34f1585bb +size 295458 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.NewStay_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.NewStay_iPad_ax5.png index a6869ae45..4b34c985b 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.NewStay_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.NewStay_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d9e1e452bb969d2a135e2fa7b4279aee30af2343ccbbec028064aabbe303e456 -size 711513 +oid sha256:edae5938979b9d585cb288071982e0142874aba9a22e910df644acee23b1d9e4 +size 623279 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.NewStay_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.NewStay_iPad_contrast.png index 64af0c0ac..af5ea18e7 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.NewStay_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.NewStay_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:305b8365548106931adf79faa75a37e96803e216c50e574de70e3e0d0cfc2b4e -size 343343 +oid sha256:18908eb3656756cc66cd00e43227745bea1f6239401544034a78c7afbbb94161 +size 324776 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.NewStay_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.NewStay_iPhone_ax5.png index e68074157..6bf5bb356 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.NewStay_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.NewStay_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cdce603edd209328ea64e21bb46cfe494ce1082a73e3b46c9eb8b22b706a0a8d -size 598896 +oid sha256:f679d0ba3ab930a7994ff3a5c54896b739c2a31dcf1670e42435165feac1da23 +size 635313 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.NewStay_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.NewStay_iPhone_contrast.png index 6469e2f25..bfad8c7fc 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.NewStay_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/other/plannedStayEditor.NewStay_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:641e04b51c3b56335fdea659132fd698f20c5c3af032d7b239519cf1f0e3e2c6 -size 228074 +oid sha256:8edc6cc6b1f4fa41bf9f0ea181eb4aec2685d9af18cfaeefb8aefad0425b0f69 +size 212659 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.AnyRegion_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.AnyRegion_iPhone.png index aa332c899..5cdade6a8 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.AnyRegion_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.AnyRegion_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cf5cca470c002bfdf27129ac785c5819655f822ebe7605e9659e303eb3461c52 -size 246557 +oid sha256:c65e6026622f0ca11d05d2e6a9a054ef4c088a91e9dc91e4fbb63c27c1c08946 +size 221630 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.AnyRegion_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.AnyRegion_iPhone_dark.png index 409750e77..064d086ab 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.AnyRegion_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.AnyRegion_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:91d5e3b16184e8af8182384766018b34e776bb340713778cdcd0c31882883433 -size 232446 +oid sha256:fe393d2175c1a7455b0a291392bad03a3a1a59c1f112c375eb3b1f4b4130db51 +size 216316 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.DefiniteOverlap_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.DefiniteOverlap_iPhone.png index c2fd14d1d..c40e753df 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.DefiniteOverlap_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.DefiniteOverlap_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f48ea6a07808c3989ea396f868bf0a6b6f808942aa51ec5ba3d58a39eca757a7 -size 320415 +oid sha256:cb5f006d994a5f0368b9f0724590eece62f3dde8279ab39e27378916ce90e347 +size 287881 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.DefiniteOverlap_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.DefiniteOverlap_iPhone_dark.png index aa5bbc16f..524c30a56 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.DefiniteOverlap_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.DefiniteOverlap_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c0e08492ec012eca06f4fe348e3e25348cb57ac25ee576601c265bde41368a02 -size 312911 +oid sha256:978f8efd4c19a4bb24a2d690219f8bfc8fc69d3ef27d3bd04380623ad92c4632 +size 289705 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.DeletedWhileEditing_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.DeletedWhileEditing_iPhone.png index efaa7dcb2..8a8de23bc 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.DeletedWhileEditing_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.DeletedWhileEditing_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:61aa6e806ab1dfbb5c56e17cea77cfc5797adb36a0378cf8ccd67c11031cddca -size 355698 +oid sha256:46ee780f968c4dd7615f630fc1ca53dda238dc0b80fa2f61f7ef39de253f2829 +size 321812 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.DeletedWhileEditing_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.DeletedWhileEditing_iPhone_accessibility.png index 84cf430ad..d93e9832b 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.DeletedWhileEditing_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.DeletedWhileEditing_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:091becf5fe241cbbd3aa7a9e9d5eea391c4a4e889a988c1419246a751ef250f2 -size 690786 +oid sha256:7a8d95adad9a8d2c82ef2b895d8b1ee9596ae259160b98e5326462ed2ff04a41 +size 670046 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.DeletedWhileEditing_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.DeletedWhileEditing_iPhone_dark.png index 88380587b..bb77b4fb3 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.DeletedWhileEditing_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.DeletedWhileEditing_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a22892ee8fc7e2dcf59bf30ecd2a5b742c5f7bc250a6d24c20191648bd695bea -size 351333 +oid sha256:b7319e194dc75bd6c818e81621a8a7da41c840c9da5ce19d52724fe122df4a9c +size 325155 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.FlexibleStay_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.FlexibleStay_iPad.png index 4572e843a..5873942db 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.FlexibleStay_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.FlexibleStay_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d7b4e6218a4e9924d0156393380ec27ab74c327b8c8a9eeb58b45dfc6073278 -size 396691 +oid sha256:82102a6f3f595b8afaf4e5f8521b02107ce8802bd5f6195710d5065b6ba65f4a +size 371024 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.FlexibleStay_iPad_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.FlexibleStay_iPad_accessibility.png index 9d413e48f..da237403b 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.FlexibleStay_iPad_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.FlexibleStay_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e881abc28a59f82a25cac569986ab531589e969b8e75f4972201b1759acd6df7 -size 726195 +oid sha256:5affbd06c6af6a377c3f4f2392d0b1b210c80b66c45d4cafe66a98d19dc14961 +size 717317 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.FlexibleStay_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.FlexibleStay_iPad_dark.png index ba73f57e0..2cd854221 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.FlexibleStay_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.FlexibleStay_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:df49005e69568629c8b4ad1964ea82c080d218f3d6dc587f9c5d434777aa23fb -size 386191 +oid sha256:d3950b4d92ce9780fb56d5e3d68da80f7e4351005f690acc55d7eaee6bbb992d +size 365063 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.FlexibleStay_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.FlexibleStay_iPhone.png index 419eaeccc..0b76548de 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.FlexibleStay_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.FlexibleStay_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1ccafd025db4760c7a5085415d43f9d8d702a229dd5819147419956334af51bd -size 321512 +oid sha256:4470e475359d25f8118162ff98147c8ac1b90285925e79d35bc5e905f5c6def7 +size 288958 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.FlexibleStay_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.FlexibleStay_iPhone_accessibility.png index 5ba7ca0c2..65591b519 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.FlexibleStay_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.FlexibleStay_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:14010f05c43260e9bafa4d3bc32ec902dc8960e2e5d1ebaf371f49f960e76c18 -size 626531 +oid sha256:8db836cb0c333631f0b23ca9903c44e83b8425bef1cbbc466c14cbe2010a009e +size 605211 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.FlexibleStay_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.FlexibleStay_iPhone_dark.png index c2299c990..c3d952c77 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.FlexibleStay_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.FlexibleStay_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6133b0e009a3836719c2f48c238fea3582c61de94fee724ef92b27c39ed867ce -size 313796 +oid sha256:af33639ab458342d4485a9fa80ac4ef4a7a73ce34f66332927f7cb4c4e36ebb7 +size 290648 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.NewStay_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.NewStay_iPad.png index 848be8f78..481d5dc3a 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.NewStay_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.NewStay_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f9da165d41d9ac208e81daaee32ef3983312c0901fe922c5ca3e58fb6314627d -size 353685 +oid sha256:58d983a1947dc4a7156b644a003cccc1ccf0461372e031fac2c8687624e75b5c +size 324107 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.NewStay_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.NewStay_iPad_dark.png index aa8557148..2fd990b54 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.NewStay_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.NewStay_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5d9736831ccdddbaee0970289b9591ff72bd2ffe07c85d4a4f36e70fc6ae5807 -size 342259 +oid sha256:f3a534d8ceecc1e8b83739560f34d23c459d0efa6d61ab36781a4f69a6187cd2 +size 320645 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.NewStay_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.NewStay_iPhone.png index efdaefe1c..6f793f4d3 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.NewStay_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.NewStay_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2a3c0282375f7c9d1e0970bdacb86f59b38e6820f8f28f743f59f6eb7d0325bd -size 237028 +oid sha256:1e433c3a98d78ee277d707b522a39814bd153e35fdd0949586d360395f8e0cbd +size 210601 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.NewStay_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.NewStay_iPhone_dark.png index 21c3bc782..6f16d2694 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.NewStay_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStayEditorSnapshotTests/plannedStayEditor.NewStay_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:74c900fb4daccb671674ce1e2195e09cdd84fda1190e5c8e5bc90360f15430ec -size 222478 +oid sha256:e4927868ac6c19923912dd0ac7505c6ec45c3a4707a2d800bb03c59df31c1ed0 +size 205916 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/other/plannedStays.Itinerary_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/other/plannedStays.Itinerary_iPad_ax5.png index 9e36f4e0c..790dc9f13 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/other/plannedStays.Itinerary_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/other/plannedStays.Itinerary_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:75473f63ed1c94ece28b0b85ee769909d1be0fa2044dcfa8b66a8844b5460698 -size 1285262 +oid sha256:616657746aa0470e05285e6c2ffcd3ec2657e5cc5493f540b9e3ce10378e101a +size 1183515 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/other/plannedStays.Itinerary_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/other/plannedStays.Itinerary_iPad_contrast.png index 9e99b9b52..3f0c5146d 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/other/plannedStays.Itinerary_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/other/plannedStays.Itinerary_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8c728077c5251baa3b021c2751d92a8f31aecf831d3b229b42475dd03f6f0a49 -size 430536 +oid sha256:28d584763f4dd830403fa17453ad44b692c6113da6385807ec5965e888af0a7a +size 434236 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/other/plannedStays.Itinerary_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/other/plannedStays.Itinerary_iPhone_ax5.png index ba7c603c4..4d157a9fb 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/other/plannedStays.Itinerary_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/other/plannedStays.Itinerary_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:159b51cfded882e8f473f72787f38babed727c70901c8d5f12ed783568f336d4 -size 1254866 +oid sha256:5e0a4be4c6b209a410def71a73a50f3a782bafad321589b7bcbce256e6b40a28 +size 1318365 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/other/plannedStays.Itinerary_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/other/plannedStays.Itinerary_iPhone_contrast.png index 4de00d780..d749bb94b 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/other/plannedStays.Itinerary_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/other/plannedStays.Itinerary_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8390a90bb5c38d0a1b0ff16bb5ab21bd4aeb9d2988ef6e0398f9cd754cef5e59 -size 370206 +oid sha256:1c1d71ca88641f6351bee34de4cfc2a6b4272f4cb264002fa86f4dfd4a2b9cf7 +size 353007 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Empty_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Empty_iPhone.png index 779eb9e58..9ef957482 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Empty_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Empty_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:89874fd8873e5059e862a0b210f16ebbc98635bbdbcb932c7b5c3fc6a00b4e48 -size 203603 +oid sha256:16b945884b764db130f82071f7c14f004a042560fdf772798f96bf9af4a4f6d4 +size 191588 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Empty_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Empty_iPhone_dark.png index 4e4d809b2..c811f8a0f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Empty_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Empty_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c07be85a76286820a0d2167cfae198fe21b09c8aac713b13defe7162ec53deef -size 196000 +oid sha256:014f93d3192642ba3efca009d2e028e22aae26e29272822a2f6de222e4f0c788 +size 188096 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Itinerary_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Itinerary_iPad.png index 04c11e383..ac38a2f62 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Itinerary_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Itinerary_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:17c791d9d51773dc8129fe10524cbedd33a99866d64a897c133765614a310ab9 -size 428881 +oid sha256:b1b25740412c88151cd538055edfb5621c87f54efa543115454612571a1e8d8d +size 431157 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Itinerary_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Itinerary_iPad_dark.png index 2ebfc27b2..a19a01370 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Itinerary_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Itinerary_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0f8a5bc944e31b9d313b64bf411740ef18daad8e97bf441b30ca2f37a9bf3458 -size 430236 +oid sha256:03a5d826fd3a550527ee4fc5f9d791f230487e9a75a9ab04dd50373c1b107fb8 +size 432446 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Itinerary_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Itinerary_iPhone.png index 9bf13beb3..0884e21af 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Itinerary_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Itinerary_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e22888b8683ee556eb6a2f469a3c57f3a650a6c2208e2c7a030626f693069acb -size 368474 +oid sha256:c5512848bcc8b5e50c84f70f06070d575c573ef47211b8e98df82b7b73d75d48 +size 347159 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Itinerary_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Itinerary_iPhone_accessibility.png index 7a4f9ffcb..de0bbe7d8 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Itinerary_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Itinerary_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:232d68d7511bd0ebbd640ba785312e00ac6f8293a4204ab1e1d8a23fa2357f42 -size 699370 +oid sha256:bd362dda2ce26220e0fd4312bcc5a9d119618229e6ba6af32f05c276ec7764e8 +size 682273 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Itinerary_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Itinerary_iPhone_dark.png index 65355d8b3..ee0342a91 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Itinerary_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.Itinerary_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:56632dd93c941a56f27231657ede844cc5c67b5e5ce9fac050f00e39e1c3768e -size 378435 +oid sha256:e20252ffadf889b77176b59d7eeebc1881c112c47d92a5dd68269ca557c19548 +size 360057 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.PastExpanded_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.PastExpanded_iPhone.png index 5c3d4a9ad..0273fe4d0 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.PastExpanded_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.PastExpanded_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:adc4fe4dedf6dd3d86139da01a5c4293c3ae173c4db51b1b8cdc95f9968f82e6 -size 406387 +oid sha256:1d37c838a79c5e5f80dbd37580a4bc58ae9b95f8c2039097430b34c668834cc2 +size 385271 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.PastExpanded_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.PastExpanded_iPhone_accessibility.png index 95f88430a..e4afb0f46 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.PastExpanded_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.PastExpanded_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bfb67c7d71d5235db33b5a963ee40643d4aaf8e69c76bf5c55bd8e3c739eaa4a -size 776392 +oid sha256:83258e0835ac60be63bf4eee7aaed1db0dea104f4753274d126df1164f276f41 +size 758980 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.PastExpanded_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.PastExpanded_iPhone_dark.png index 024ac1132..c5eb3d2d3 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.PastExpanded_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.PastExpanded_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fe07ec262eb8b641ca9cbf2f6dd5b5715b0d22abfc0d88c03af0585a43ab42ba -size 418299 +oid sha256:843947effa7250746e9409e2e24b106a8c8977cb9f9429281baf491adfe51550 +size 400856 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.PastTravelPattern_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.PastTravelPattern_iPhone.png index 82c818e98..44d01dc04 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.PastTravelPattern_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.PastTravelPattern_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:033efab0c5a1f3906a4ab822bc57480829d83ab15912617acefa3c4dc70ce54c -size 362579 +oid sha256:12a1498a90cbd5637d4208549f3e84b8ae3d4a7b9a0cebd1bd0b473816d0b3b4 +size 305443 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.PastTravelPattern_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.PastTravelPattern_iPhone_dark.png index 541c4d554..96c77e897 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.PastTravelPattern_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlannedStaysViewSnapshotTests/plannedStays.PastTravelPattern_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:084ead3065cf49b52c96eaed7c5933a8952b7fbcb209ff57b846e396455c9f94 -size 372440 +oid sha256:b177274fc3e128ac0711120a4a054db3826962e6f7c2def4a17100e3c3f911d8 +size 304814 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/other/planningRegionPicker.Home_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/other/planningRegionPicker.Home_iPhone_ax5.png index 08933c9d7..5b1a692c3 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/other/planningRegionPicker.Home_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/other/planningRegionPicker.Home_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:be2153e204ae97a62f1cc7192ff57f4bd946c6dd925d3075c3b3c1a07742c4ed -size 281513 +oid sha256:8825ab4fb03bb537dd8716721cdb41adc00709d5872de862fa073650bf7b01e6 +size 245362 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/other/planningRegionPicker.Home_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/other/planningRegionPicker.Home_iPhone_contrast.png index 7d372fbe0..3a1848b79 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/other/planningRegionPicker.Home_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/other/planningRegionPicker.Home_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f7e95c961f75e4e1cc732463d1c6553d792a5e2c4a74c0bae54cde0ad237214d -size 154482 +oid sha256:5c1175b17a7f890ee3f805c7beb9d3514a17f4c4ebe1d9fa5248e8acbb4707eb +size 135144 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Home_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Home_iPhone.png index 132d5cff9..150269f7d 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Home_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Home_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:63fee1397d4a26d1129990fe4b2347f2928f86087e1927a523c7e85eec415f62 -size 170371 +oid sha256:26171a85ff8adf01c9df7fb5c828cc5f175124c29ba1077f1d3b7afaf1cd7388 +size 135577 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Home_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Home_iPhone_accessibility.png index de9fc31ed..a32c1b3c8 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Home_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Home_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d80059b16cd1c2c73272ba85d6642a6da602b49ab879a807bfaa67f697c6839a -size 301633 +oid sha256:b541d400aa36ffcb16b217e7e8c79ba718bfb5089237bd6150eaaf86c2511339 +size 276650 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Home_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Home_iPhone_dark.png index c2b418855..5336ec9df 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Home_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Home_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e80ef3bcfb885255bb3c3b75ee6ec6badccdd66bb634d2f6806040ed3b8b7f93 -size 141410 +oid sha256:c76c8a3f4ca6ced6360aef9b0f1ea11d0737c32fc4e9ac2eb2d25b8d67b97888 +size 129828 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Search_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Search_iPhone.png index fa35403c1..110b8119d 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Search_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Search_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a461d51bb9167adefed70d7cde059e08dc56e00b1d90bd788461d5331109c01d -size 169549 +oid sha256:c2d4eabda12388241c49b4f691a98be0e4b62f5b1b2d5c5ac3b5e9bcd8463212 +size 139784 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Search_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Search_iPhone_dark.png index bc172a72e..21314afc3 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Search_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PlanningRegionPickerViewSnapshotTests/planningRegionPicker.Search_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:159cecb55503313587937b9294f86f0382eec900afc5646dabd3f5d5d085ef9f -size 147037 +oid sha256:adaad9b48250f41760d62e7c4b51c059f5c7d943b44b2e8c94edbfeefb42ac1e +size 135232 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.Flights_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.Flights_iPad_ax5.png index 90b901645..5612daeb8 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.Flights_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.Flights_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4305572704fa9e11fbb6c092eae4bdda1b6c020c456127c3a98d80c81b76c987 -size 6668447 +oid sha256:2951e5570bf03c0a8c96d2a15b53a9cc22ced1c5756d7af2cd3c7ee13a43b784 +size 6636493 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.Flights_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.Flights_iPad_contrast.png index 7efdf465c..b34bbcb63 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.Flights_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.Flights_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c2ab990cf3853f08b9514cb8493febe69fcb9a52373c1ac74ea3494cf97c6b2b -size 3093850 +oid sha256:d950d5a24b606cdde550402b5429a022db65baa54a9db1d5d321d0fed01f4e36 +size 3050937 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.Flights_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.Flights_iPhone_ax5.png index 199a5c6ff..a5040e534 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.Flights_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.Flights_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:60ffad94718f4c57f69357b5eab0d0100d5c06ac65f087fe2e9d656500e35595 -size 4750735 +oid sha256:51d5e5bbd4d49b144647785c0db48650bf94678e28d5af4f9d342caa5e68eaba +size 4754005 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.Flights_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.Flights_iPhone_contrast.png index 54db78823..a1cf95e16 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.Flights_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.Flights_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7eb939abdb15374eab9d552d040f068540b660418cdad5fa9e9b87a9cc3477b3 -size 1734814 +oid sha256:1aa4dbab16800f27a6dfc2ecd21a7064cd888228c0f8bbbb024338cd4c3896fa +size 1714447 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.UncertainArrival_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.UncertainArrival_iPhone_ax5.png index 60b1f6135..f48c8b8da 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.UncertainArrival_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.UncertainArrival_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c623502e1978f95426a97e3c958a5bd5b3d973965c2a33bfd86bb24d27bc8fb5 -size 4722905 +oid sha256:5c5e1f7072118992f067e14a94e602c40797580fece8db90c973e605eeeb4676 +size 4707280 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.WithData_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.WithData_iPad_ax5.png index 78cf6fdc7..7279a9938 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.WithData_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.WithData_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:33cd18b66b41f3ffd41533d5323b6978d0ee38c27567cbaf6c93e4b730dc9177 -size 6390477 +oid sha256:4317ec3eb5e8df4df741bc3605d050f04c574280ff39233d3537e661f1e3be7f +size 6364193 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.WithData_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.WithData_iPad_contrast.png index 4f4640275..39b883d9e 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.WithData_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.WithData_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:038378836ae3f77743e4ed6156fb3820b68ac0c42b442b245ee61ce9b7a60d56 -size 2966194 +oid sha256:4f8029fe31d39ec7ce70ce58a3a8daa0248eddbdb6206b56f3cf8dbeb201cacd +size 2922689 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.WithData_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.WithData_iPhone_ax5.png index bc3b81e3d..f92d75772 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.WithData_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.WithData_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7744b47e4c32d9e6b20e40c350ce9f50d2319a428751482b40602f863279c6e4 -size 4531633 +oid sha256:a71f2e6e7fd80a28f584acde74a495e0249fcab0b95a5dd970a18e3f900427a2 +size 4525524 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.WithData_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.WithData_iPhone_contrast.png index 58249e939..8a0d0c9b8 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.WithData_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/other/presenceTimeline.WithData_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e6acc829fbfe77f6483c847b68842dbc5dffccdf6a67c3789bb8cde8bcd91405 -size 1635278 +oid sha256:98e38d1c592e6bc81f6d91f3a03e0fb3ac7054abdb6fe4518836a7d7bc074b15 +size 1610886 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.DifferentiateWithoutColorInitialBottom_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.DifferentiateWithoutColorInitialBottom_iPhone.png index 24bf906ad..a38e0402f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.DifferentiateWithoutColorInitialBottom_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.DifferentiateWithoutColorInitialBottom_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:27ca48330d7b321e27ad286ce910122e3b5cae007e98d9975598fc01c5e4e5bd -size 1644784 +oid sha256:5b6aa844f84382595bd9b49646d4e97177e4df81039a7071eabfead27bcc0f77 +size 1493557 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.DifferentiateWithoutColorInitialBottom_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.DifferentiateWithoutColorInitialBottom_iPhone_dark.png index 5bb239e87..543d5b1ee 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.DifferentiateWithoutColorInitialBottom_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.DifferentiateWithoutColorInitialBottom_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6aedbe612cb9f5442e84db0a48abc29d97798717430649a653c760c1575b86e3 -size 933303 +oid sha256:e917f14f27084e445b07a2ee3d5cf058e04fe90631bd174892d1cf784cba6786 +size 822537 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.DifferentiateWithoutColor_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.DifferentiateWithoutColor_iPhone.png index 8875d229b..891ab5799 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.DifferentiateWithoutColor_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.DifferentiateWithoutColor_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8649d4e15ca481301c9127f8610e457c167950038da1075747706f28b1527a48 -size 1678979 +oid sha256:de3a9ea4d48440fa5bf93fce4b715e9a13308674ba802ae3853bdc0793ed418b +size 1662368 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.DifferentiateWithoutColor_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.DifferentiateWithoutColor_iPhone_dark.png index 16a2c0dd2..97bd78554 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.DifferentiateWithoutColor_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.DifferentiateWithoutColor_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c71047da81da116f104a62ea7a81655337944e81413d45c378c56531ec8bcbe5 -size 995221 +oid sha256:9e623a49b5e4d33acbfb2a3b773966a8b1206f5c83e5ddbc5e096435319a425b +size 985677 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Flights_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Flights_iPad.png index efd90b01f..e30975536 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Flights_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Flights_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a72cbca886884043edd388c0709ecb757f740758d45e3b6c8b02b4e2f76465ba -size 3068809 +oid sha256:9bfdf458053294ca4f26b36cc1402e492c7886f14581fe86518c78863b54a032 +size 3027404 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Flights_iPad_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Flights_iPad_accessibility.png index 11250a22f..36919e8c1 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Flights_iPad_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Flights_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e1680e80269b3d2ae4aed3a67cfd53b729f8bec5eb5c91344e642b55b9b457d9 -size 3358982 +oid sha256:eabd492a7a8fb91a847108e55d19e6c687ffe5567d00bff1b3979305991d3541 +size 3318082 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Flights_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Flights_iPad_dark.png index 02e682183..81cecc7ba 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Flights_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Flights_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3fa85d9b13bf221cf0af667ec5e72a7914fa9e819a14a04891a92fa570b07afd -size 1807923 +oid sha256:b4b7f097056e57410341ed4520637ca43a7325087172b7c453044e922dc7a278 +size 1792927 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Flights_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Flights_iPhone.png index 90ae7900e..487bf88ae 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Flights_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Flights_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b324d24fc2d4a735e7a17c3206ed47bc568e5c5d70e84d320559a3c737020b36 -size 1723952 +oid sha256:16d35380ba1174758a6941cbc1ebdb954825fc04cb4fe47f7083a610512bd268 +size 1702919 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Flights_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Flights_iPhone_accessibility.png index 505f49532..442431a5e 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Flights_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Flights_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a646c3e959052a05cf2bba0fbd4a4aa0ffef766789b1bf7278c28f4df82b4075 -size 2052101 +oid sha256:3e8e0e0d8a1478b2f9da1b85be7ea6a1c151a9f2c9e4cfcc789f094f11008f2d +size 2027515 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Flights_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Flights_iPhone_dark.png index 2846ccefd..6bcf159c2 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Flights_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Flights_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b52799b50b216dfe4186e9ab8a6a66c527dbd4a9975a6ebead533c66f95f80f3 -size 1044359 +oid sha256:d9057d8a5d345012119ea71cb62824ec6ccb1ca7e8432fd64189886fff067cd7 +size 1032034 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.InitialBottom_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.InitialBottom_iPhone.png index 2b531394f..b2f4e3659 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.InitialBottom_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.InitialBottom_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c791c95d5e1c2e99f283e44967488716dab71c387746b4029128985ec56f5a48 -size 1637424 +oid sha256:d9c794f1096bb5d93696e6c01e192b3da8a1680c4ca5166f91237e65559b0dd8 +size 1495404 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.InitialBottom_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.InitialBottom_iPhone_dark.png index e2788dee9..5f775af64 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.InitialBottom_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.InitialBottom_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ba91f3cf9785e7a1ed8a80c1c9f7a4f50093b3512e1a437880f7489c61f0f505 -size 928251 +oid sha256:01bea07555c94c7fee2c3ef5d01fdc62dd29bb554bef0b411e4fb219ff928a69 +size 824692 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.InterruptedStay_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.InterruptedStay_iPhone.png index 92619336c..277dc5874 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.InterruptedStay_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.InterruptedStay_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e61bcdd3bb81c6a3929c275a6bfff8fa7c0dcbe06045047a1c0175cbf9fb53ca -size 1504755 +oid sha256:e99f7095c5f2565bb36c97dd99f624e9b88f73ed33c7a1d35494e21eaf9d55ea +size 1483859 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.InterruptedStay_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.InterruptedStay_iPhone_dark.png index df03dc94e..566f5cf6c 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.InterruptedStay_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.InterruptedStay_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bef801536418a81455eb3c412c791c62a80ac01411b0dce83ef0fa788b5a7087 -size 851042 +oid sha256:84816e98ac349e6177a3acb61bbe39f5db0b990972bde81169a53e0c3c6a6ded +size 837667 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Itinerary_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Itinerary_iPhone.png index 4b74aff82..4d1a9687d 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Itinerary_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Itinerary_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bf0e9ac3ce601605b43761cd4e0364400aa4643f95d572719ddbc97347b08e23 -size 2150102 +oid sha256:4b376b12734410b038990c0d8993e61e4374aa1c31661d8a73a0a1c6b5417847 +size 2131710 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Itinerary_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Itinerary_iPhone_dark.png index 8f25370c3..0fe0e2c7a 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Itinerary_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.Itinerary_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a15822832b05cb1b985542975dd8cb9f0cab0008a98700a4957ea548aeda4c05 -size 1364699 +oid sha256:e3606934cc05641902ae6518fca2d122add2bf8145c0b7bed0dbf82d67a49f09 +size 1349297 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayAfterRecordingGap_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayAfterRecordingGap_iPhone.png index 582d3dacc..0f4aecc3c 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayAfterRecordingGap_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayAfterRecordingGap_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ab3a1266caa6295c32a037d399ad63bcee3405fa2d880a5541bdabc3e8909097 -size 1595109 +oid sha256:c5a142c1056b2e26fcd1f7335cc8e3cd51a812f930df65704668f2782572a6fe +size 1576984 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayAfterRecordingGap_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayAfterRecordingGap_iPhone_dark.png index d7e6bc62c..ef865fecf 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayAfterRecordingGap_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayAfterRecordingGap_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:019ad2520d4d3224b53c0bddcfdc9abbcb3a5af6ab0535a4d3f7d83e1373f1cb -size 888733 +oid sha256:0d3e48678b1578e2533f845086a303a04b173abee4be423228341f2ad4d3d7ff +size 873758 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayDifferentRegion_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayDifferentRegion_iPhone.png index 5a0d304ef..42e867e4f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayDifferentRegion_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayDifferentRegion_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:63ab23702f9c20225be87ff71cb53f2a723056f3063631aba0cfdf8cae4d1579 -size 1599338 +oid sha256:571d0631d48c7ad56ca2c39024579dba89e274c9c155f8d9be828c8a3669b77a +size 1575153 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayDifferentRegion_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayDifferentRegion_iPhone_dark.png index 6725c1d81..a49396a3f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayDifferentRegion_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayDifferentRegion_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d6962ecfc763525ef8775ac136cccebdff37db65dc6698c5928fdbaad3dc3920 -size 889002 +oid sha256:a07b938a4037d1ee5b2314996dc2daa7088db5e9714c1a9fea1a972a0d562203 +size 873723 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayHidden_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayHidden_iPhone.png index 930a53e47..6d2d4d069 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayHidden_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayHidden_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d600f44095e44d1c5e2623b114114337a18a4b521106bc81da4cc6e6d1ff8e1c -size 165784 +oid sha256:cacd6d0d106bcd817bd2daa0d0f58ace9c774ed3c2731c0fae8c342a5a1e7129 +size 165652 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayHidden_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayHidden_iPhone_dark.png index f384f3cb9..cdd4cf736 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayHidden_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStayHidden_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5e32c1a0c3c8d643510e087535988183f76d23d52e127fea625a3715ff65cc60 -size 170996 +oid sha256:9654eadec6933cb300520511d6c04d5ee91af33761d09405343709d4cd6261cc +size 170905 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStay_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStay_iPhone.png index 59b7703fe..49109cd60 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStay_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStay_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f2df1a33146ec78b241114a9adaaeea1c26823dc4e91834e10604b0dc7927512 -size 1585868 +oid sha256:7f9ca6b2a696fdc492094e62ccddecfa1ee69686f2642f5690357a7790264afa +size 1562800 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStay_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStay_iPhone_accessibility.png index 46e144b7f..2f6c8b0c3 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStay_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStay_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e1b8b0b65a41192854e1a972ad0bab0bb64d30eb99c2ec4f58a5cf1d5cbc606b -size 1777665 +oid sha256:eb858be37ed69bb205e0134bbf409858d60c5006934cb44fa164154e45af65f2 +size 1768882 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStay_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStay_iPhone_dark.png index 6ea4b9e82..a522b65aa 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStay_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.PlannedStay_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:00afcd73407c00e5761741fd202362f28dded6caeb7847f7dd6ea09a7a33e62f -size 871264 +oid sha256:1b179fe7ae6a9f370ef272090cc633a50513ae78b65337a2ba68fc29f821a0fe +size 855955 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.ShortPlannedStay_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.ShortPlannedStay_iPhone.png index d0240017c..6e0f488c5 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.ShortPlannedStay_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.ShortPlannedStay_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:35da74863b3d949deed7fa487dd58c735d80348fe4cabf308af6097b033a308f -size 1579024 +oid sha256:31700cd4e0150960307167129e1f6227853730b917ad41a5a3fa6943a0777887 +size 1554652 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.ShortPlannedStay_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.ShortPlannedStay_iPhone_dark.png index f3c8c0924..b7dc7a036 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.ShortPlannedStay_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.ShortPlannedStay_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5a8ad4f96db739236b24871fe4f1ffc0921e937f0d27b7c9163e0257b98ed851 -size 866033 +oid sha256:779116388dbec78f2f473d4234b4e8ede3599e6d10dca8c0d9d65f1dee858fca +size 850618 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.UncertainArrival_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.UncertainArrival_iPhone.png index 74a386d39..104462b75 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.UncertainArrival_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.UncertainArrival_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:35ced419afcd9a0d825d6792e3d8192b77d789987adf81909a4f7e2453da5da1 -size 1683440 +oid sha256:238475430aa4f6f56cd8aa2adbbd0b8d853da242779a91010182c2a4c7d93358 +size 1663300 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.UncertainArrival_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.UncertainArrival_iPhone_accessibility.png index 1b65b8c56..b81ca4155 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.UncertainArrival_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.UncertainArrival_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2208814019e94ee5d37921a7b506d81a82037712d7cbc07641ed76daff58bde3 -size 1996769 +oid sha256:350bdba3097af42f1a953dae3b1e444ea8dea35b309913b9ec9237498dd6ae09 +size 1973767 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.UncertainArrival_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.UncertainArrival_iPhone_dark.png index e8ec78baa..97db50936 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.UncertainArrival_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.UncertainArrival_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bcb08ba50d0dd53fd0203b5cc9316eb9e12792dcfad289db0ac9ee02cf5ea47e -size 1005731 +oid sha256:fa48f0f6b65b824e163ea0c200e2162d046322ef5a94c07b667efa9574653845 +size 992548 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPad.png index cd62d4291..4f609a091 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1ab9a6664a2f270176b81d9bada650825adc421b56774e2b0410c88a782c8414 -size 2941261 +oid sha256:16c793c2766be9b78fac3965ebe870d554c980d3f30727c4892cf90a154f6cc5 +size 2901823 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPad_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPad_accessibility.png index 329c4ca2a..06dc96e5b 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPad_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae70042c7a16140759377a000536edabe029b6b6b14d0f1c28dbfcf93a35bb4b -size 3020863 +oid sha256:2a6c71f95192699a82f315d0e6357842269397118362f1bae7f4023484f0f3c0 +size 3009692 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPad_dark.png index 2fa45f92a..3b8284e85 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b8513dd958060d645c4ae5950b91179fc4cf22cbfe3422ead26f55f7a2bba55a -size 1670775 +oid sha256:2e0284b69392009cc74d9935741a94f4a1311a01b22908845e64c1bed2b47c1e +size 1658798 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPhone.png index d336d3fd5..dce8624d2 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:98a1eeb5359a8e85bb263d959dab583cfb1226c280d394e55a9cadc78859cf8c -size 1623448 +oid sha256:67d170e9d53450ba0732a797d78474827f7200c9c9818a237ce469f388748dc3 +size 1597879 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPhone_accessibility.png index c206087f2..6d492b00f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:59080a07b5e1e51093a819fc1a63205b08caf8436b369bd9f350f7831f5a5104 -size 1809779 +oid sha256:513d58bb5bf968a62ccba15c55d99a3ad8f30aeaa33d091486e3fca8ee79d6cb +size 1806776 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPhone_dark.png index 8e4557d7e..2919cd0e6 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PresenceTimelineListSnapshotTests/presenceTimeline.WithData_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:177aa6cbb2823511f6c5f8a68b49ffb244c9d9c361056e09ba35513fdc935277 -size 937641 +oid sha256:980dbf7b0d8c0958d84532d251720053eacf9e2c369cda390098693110e90ac4 +size 922326 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyBackupsFeaturesViewSnapshotTests/gallery.Default_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyBackupsFeaturesViewSnapshotTests/gallery.Default_iPhone_dark.png index 23966a59a..9ab4235fc 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyBackupsFeaturesViewSnapshotTests/gallery.Default_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyBackupsFeaturesViewSnapshotTests/gallery.Default_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:690187841a3920d7ade21d693596ea6eb824568b4a4892a347d34848a0ac4597 -size 1816803 +oid sha256:a2adc5bf1fdbc44329031131a5a61ceb8f18810cd1545eeb638eeb5d77a5c2f5 +size 1693231 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyBackupsFeaturesViewSnapshotTests/gallery.Demo_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyBackupsFeaturesViewSnapshotTests/gallery.Demo_iPhone_dark.png index c8546bc57..6af1f7cce 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyBackupsFeaturesViewSnapshotTests/gallery.Demo_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyBackupsFeaturesViewSnapshotTests/gallery.Demo_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e8f690a37423b319deeb8e749b4b9638de46870beb672074bbceeea6427d4e20 -size 1782236 +oid sha256:683c64fe52b3371ba094a73cc410114043dae9c9a035dca3fe1234e6b895ef52 +size 1659988 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyBackupsFeaturesViewSnapshotTests/gallery.DiagnosticsOff_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyBackupsFeaturesViewSnapshotTests/gallery.DiagnosticsOff_iPhone_dark.png index 04c920d0a..986934bed 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyBackupsFeaturesViewSnapshotTests/gallery.DiagnosticsOff_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyBackupsFeaturesViewSnapshotTests/gallery.DiagnosticsOff_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cb7e5a47fe4bb66837c2e56dc0b85d1e4f08a4fa9fefebe4d25f3af6d1648105 -size 1700812 +oid sha256:b3f35721d2ee1f282f1d6c736d3929678d441386bf9001f65b514a35bacc9148 +size 1596815 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.AllOff_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.AllOff_iPhone.png index 46bbe86eb..9d9bdfb6e 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.AllOff_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.AllOff_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9b327e8b118915a0788963677746164f419a66621600bd5d259da01d10e973d6 -size 1351836 +oid sha256:4c702c3d048bc9a855d874a5312d2a923ef12897d99ee0739e61bf3ce6289bb0 +size 1351896 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.AllOff_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.AllOff_iPhone_dark.png index 6d1aabd94..65667121d 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.AllOff_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.AllOff_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9755eb48d3271a1447265df9f385fee91838c1c9f36d13bc961d7803d76ddd63 -size 1352228 +oid sha256:a7f66a9b313df67d9b1b55c0aee68df56b617370748c66da694a3bbc7689947a +size 1352827 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.DebugDefault_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.DebugDefault_iPhone.png index ffc2bbbb9..a0d04b1b3 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.DebugDefault_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.DebugDefault_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f8158089ae61f026fcd06dddde85fa455eab2876fa2e4b77a1b3116ccfc17f6b -size 1922752 +oid sha256:e38f91d9542b68fb8730afe6762178977527636b102d210f6357b5e107ed6119 +size 1914240 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.DebugDefault_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.DebugDefault_iPhone_dark.png index 6e4583093..e8c892c62 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.DebugDefault_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.DebugDefault_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b82888db93a344b6bbd5c6a937abce91f57d8f4e551baeb8db40b2df79e17ccf -size 1923410 +oid sha256:161dc4ea4ca67b5a84b0944f691c3ccec4fe1df757dc1ae2f63be972b39ad139 +size 1915833 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.FullMetadataWarning_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.FullMetadataWarning_iPhone.png index 09bfe0153..f00e33b4f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.FullMetadataWarning_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.FullMetadataWarning_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:98acf158bb3ba689e5fbed6e60b538e2d7d76230c3f4a48c721743ef63444751 -size 2723122 +oid sha256:e1b27469e0fdd2e86d8beb2fc97cd979c78c9f63f565647098233b22d6e5e53e +size 2715214 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.FullMetadataWarning_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.FullMetadataWarning_iPhone_dark.png index c6f61f06f..0bfc331ae 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.FullMetadataWarning_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.FullMetadataWarning_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5f1215fdb3a1aa335e8ad45a6d8609ffb3cfc261de864b8bc8f21fb6fac59b8b -size 2723935 +oid sha256:94230b23a8a0feb18d3e9effd06f71b658afbcb8140048fcd926660763eb2252 +size 2715934 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.PendingRelaunch_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.PendingRelaunch_iPhone.png index 9f8fca453..73bf7e9ec 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.PendingRelaunch_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.PendingRelaunch_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c97312abaedf8bab226c85981f114d727f1288c31dea574a5a0909eb49b57189 -size 1458222 +oid sha256:ad5bb52d60a3caa554184fcf475a07127274488384f5d3f1cec8652c86a2b613 +size 1457474 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.PendingRelaunch_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.PendingRelaunch_iPhone_dark.png index eef243f6b..49d9d4231 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.PendingRelaunch_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.PendingRelaunch_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae9d03be861d1693265a226945a82b6ddd0eb9a1a705430970867a86cab4e195 -size 1458355 +oid sha256:9c107d50957a20ffbd8b660bd92451de4fcf291692131d165d4d2a96558f75d3 +size 1459111 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.ShippingDefault_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.ShippingDefault_iPhone.png index 0d2353dd3..da846d147 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.ShippingDefault_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.ShippingDefault_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3b51bfab61f4c25d252fcb9dc09c835e21dec66690418bb946cc38dace832f35 -size 1442996 +oid sha256:49e35aca913dc918ae747b10b0c428a2a6453fb73218ebcdb830ae5cec0f3f65 +size 1444403 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.ShippingDefault_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.ShippingDefault_iPhone_dark.png index 5cdfda1e8..49d79848b 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.ShippingDefault_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/PrivacyDiagnosticsSettingsViewSnapshotTests/privacyDiagnostics.ShippingDefault_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:362fa7cf5d5a67779096618a60ff7f2524d3394f9d7dfe4243274b23eda8c29d -size 1442416 +oid sha256:95d4494df7b66b22097d5da68eaa4165c02ded324bd6dc1a0c89917757dcb40f +size 1445217 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RankingAnimationLabViewSnapshotTests/rankingAnimationLab.Default_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RankingAnimationLabViewSnapshotTests/rankingAnimationLab.Default_iPhone.png index cd9b018d2..5450c55a6 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RankingAnimationLabViewSnapshotTests/rankingAnimationLab.Default_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RankingAnimationLabViewSnapshotTests/rankingAnimationLab.Default_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ec1c50083fc787a5fd5bcaaac61d6cc412218441bdbfb6d43698b4125f75e12 -size 1924491 +oid sha256:0c791f20496e8b73b02522b7a1f8ce4b3527beacef09ebe04964f6a0208b904d +size 1565760 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RankingAnimationLabViewSnapshotTests/rankingAnimationLab.Default_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RankingAnimationLabViewSnapshotTests/rankingAnimationLab.Default_iPhone_dark.png index 614a0f603..880e31f63 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RankingAnimationLabViewSnapshotTests/rankingAnimationLab.Default_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RankingAnimationLabViewSnapshotTests/rankingAnimationLab.Default_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a5e47058c7676256d997a4bc1a56bf396291662e28c4a293180cc19dee92863e -size 1995804 +oid sha256:8f7c6a99d9f091cd5df85a645309052a3706b42f6463e54deaa129fa526ebc4f +size 1555749 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RecordingFeaturesViewSnapshotTests/gallery.Denied_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RecordingFeaturesViewSnapshotTests/gallery.Denied_iPhone_dark.png index 41d33ee02..a451df8e9 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RecordingFeaturesViewSnapshotTests/gallery.Denied_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RecordingFeaturesViewSnapshotTests/gallery.Denied_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fa786ec78bdb950f83c29215c1036b8a0cd53c2d447f85ad201d92b7c05fb28e -size 539735 +oid sha256:82a818a7d62ed6b8223665c77f955403d7eaef999369bfda9cb24faa332b686b +size 421099 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RecordingFeaturesViewSnapshotTests/gallery.Paused_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RecordingFeaturesViewSnapshotTests/gallery.Paused_iPhone_dark.png index 15a58b9e3..49481be3d 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RecordingFeaturesViewSnapshotTests/gallery.Paused_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RecordingFeaturesViewSnapshotTests/gallery.Paused_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:807de89a364d9f049f3ec4b1b5a45acc13dcce1ef1d44a457d6166b44c29cc12 -size 541409 +oid sha256:914939890413b71ce0c4d5169c69d184123da40b624d90d8fd123bb42cace99a +size 423335 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RecordingFeaturesViewSnapshotTests/gallery.Recording_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RecordingFeaturesViewSnapshotTests/gallery.Recording_iPhone_dark.png index bd613d0bf..ad060ff35 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RecordingFeaturesViewSnapshotTests/gallery.Recording_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RecordingFeaturesViewSnapshotTests/gallery.Recording_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7d3fdf08bb8ab4456b9e2e657fa73468cfd2a27393df59aca78611770ef936cc -size 541061 +oid sha256:d7435710cb4be8b5bb7500e33161fe4266556284ad3d57cc0dc62c97302525be +size 422973 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionCustomizeViewSnapshotTests/regionCustomize.Editor_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionCustomizeViewSnapshotTests/regionCustomize.Editor_iPhone.png index 35e61cdeb..99f5509a6 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionCustomizeViewSnapshotTests/regionCustomize.Editor_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionCustomizeViewSnapshotTests/regionCustomize.Editor_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:396acc3af9d34453dcf2d68f3dab9bda843649608363b80e549b00035d70024b -size 1572408 +oid sha256:41dfefd939d0a114407c098a535a2a83cf9fd85fbdcf992cdddf6e5292f9aab8 +size 1330674 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionCustomizeViewSnapshotTests/regionCustomize.Editor_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionCustomizeViewSnapshotTests/regionCustomize.Editor_iPhone_dark.png index 00e6be8a3..50d0d9652 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionCustomizeViewSnapshotTests/regionCustomize.Editor_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionCustomizeViewSnapshotTests/regionCustomize.Editor_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6dbe3890e5734f6dc7a96b7830db7fff5e188677f4d1960697d5c21977ad4be9 -size 1655110 +oid sha256:797744c7a0cea7698147c2f31d9ad6e3f26dd404cecc966d51f5d5b4b81e7fac +size 1374045 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionCustomizeViewSnapshotTests/regionCustomize.NeutralEditor_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionCustomizeViewSnapshotTests/regionCustomize.NeutralEditor_iPhone.png index 87ae23097..5cad0d1f8 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionCustomizeViewSnapshotTests/regionCustomize.NeutralEditor_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionCustomizeViewSnapshotTests/regionCustomize.NeutralEditor_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d74642417c74debd04f26125521d17ff5bf7c9e40208893eacc56e3dc31d9d50 -size 1492144 +oid sha256:f2346288ee52c6feb294d95ff1896eff283a4838f6172dd8bb0a100b689e4367 +size 1197346 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionCustomizeViewSnapshotTests/regionCustomize.NeutralEditor_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionCustomizeViewSnapshotTests/regionCustomize.NeutralEditor_iPhone_dark.png index e2f0e8384..1ceed519c 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionCustomizeViewSnapshotTests/regionCustomize.NeutralEditor_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionCustomizeViewSnapshotTests/regionCustomize.NeutralEditor_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:09c25b4b13d08d2c5b668fe921f892846bf1a167bd7f0a0e0eefcaecefb5e6c2 -size 1488878 +oid sha256:b69ff2bdfe21dcaaf277648f9cb4e123c4d9098640cc665f96f171f96a291f1f +size 1169455 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/other/regionDays.WithData_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/other/regionDays.WithData_iPhone_ax5.png index a1e58ea92..0e1d99b29 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/other/regionDays.WithData_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/other/regionDays.WithData_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a5782d61e679ae624ddf3f7f1a5996eae58b8a6ceda9efd0dec2d6712a119833 -size 409118 +oid sha256:7e17cf8edeb7a7551e18aff881e38f8fc2cfed52c44dadc2ffc029380fee1062 +size 402775 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/other/regionDays.WithData_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/other/regionDays.WithData_iPhone_contrast.png index 7e2bd3f6b..9166e38e2 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/other/regionDays.WithData_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/other/regionDays.WithData_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2a9245f7880a426c4fc92dee7c10e04abc8ac409968460fc7f661ed65e98056d -size 145018 +oid sha256:8382f68f92ed77317b45019f74777af9aaae1acd0d949dac7b81e915bbb4b85f +size 145529 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/regionDays.WithData_iPad_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/regionDays.WithData_iPad_accessibility.png index 3a5eaf3da..a47901104 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/regionDays.WithData_iPad_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/regionDays.WithData_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1428808cf313f835f0993f5ad6896066fa461f499fca4a82dfb663de8fa9921e -size 446869 +oid sha256:0199d24518e63642123186ccaad6c853d6dd9b51760a7bf3d4a797ef070d992f +size 447033 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/regionDays.WithData_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/regionDays.WithData_iPhone.png index da8a63dc0..ec0b1cd05 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/regionDays.WithData_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/regionDays.WithData_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:28492e6eb744dee4793122c1be23526b22394c0866ec2419243c8777c91eb800 -size 144031 +oid sha256:d0bb01b3adbeab522820b3282ac021cbba5c2db82fd081bbf333ab29ef923274 +size 144959 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/regionDays.WithData_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/regionDays.WithData_iPhone_dark.png index ac47177bc..df88dc1a6 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/regionDays.WithData_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionDaysViewSnapshotTests/regionDays.WithData_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2424e41bb322e2d8bd8543000140a161d5f8e93d748b2cf5b3b7ec3ec4f113bd -size 146381 +oid sha256:9b8d63ed736bb7a3554ef2dda24429ce53a875d569e1a4a0e2665842bf046a28 +size 147136 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionMapViewSnapshotTests/regionMap.Default_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionMapViewSnapshotTests/regionMap.Default_iPhone_dark.png index 0b7b795cd..4c79ecc3c 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionMapViewSnapshotTests/regionMap.Default_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionMapViewSnapshotTests/regionMap.Default_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:910e5ffa331f8460649e55a5d965ce8ab5b7b0ffa4a11e26e1e3d8b84cdad8dc -size 709738 +oid sha256:1370d0995f741d06d2b784f01ce9ef8b8719a849d97e074430927605ba62c464 +size 558990 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/other/regionsSettings.Overview_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/other/regionsSettings.Overview_iPad_ax5.png index a4c2df745..dbce407d7 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/other/regionsSettings.Overview_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/other/regionsSettings.Overview_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f19b0580961f2169c459d560c57f1d576502ce0dd2732e8aad40b455d0b0b1de -size 420477 +oid sha256:9e5ae1ce4af5f470d7eeb912771fc0df8cbaf458bcedb86e9614c7e7a41a92c1 +size 389169 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/other/regionsSettings.Overview_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/other/regionsSettings.Overview_iPad_contrast.png index bfd6dbfa2..2b6f53753 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/other/regionsSettings.Overview_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/other/regionsSettings.Overview_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d91bec768eda65bd69d7aa27f8af1d35fca7c873a5e83a326bf0a4d76013a5da -size 280076 +oid sha256:629ae6b28c4ecac7c64c927c12893afba86c5d03bed7561ade3a5547175c7802 +size 265398 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/other/regionsSettings.Overview_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/other/regionsSettings.Overview_iPhone_ax5.png index 6e0fb1981..a1fe5a4bb 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/other/regionsSettings.Overview_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/other/regionsSettings.Overview_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:471286c4e04396fb71984263650f3384c985bf4522a6c216fc6fe6a4900b1b1b -size 303748 +oid sha256:25e96eb17d9fbb762aadca941d7c2d42fafdb60ffd4d88b14663abcec16ff4fb +size 276954 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/other/regionsSettings.Overview_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/other/regionsSettings.Overview_iPhone_contrast.png index cbebf93df..def7f378a 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/other/regionsSettings.Overview_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/other/regionsSettings.Overview_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c6a6e022d6006221cfa23f8f7819f661faa97f4e9b3e8983bcd24df80dec2f7a -size 161255 +oid sha256:746d2934c4270b6cbddb679bb7384d7403037546ce375cafb95e4f06ac0384d8 +size 145924 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/regionsSettings.Overview_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/regionsSettings.Overview_iPad.png index c1baa1b8d..e2f077aeb 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/regionsSettings.Overview_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/regionsSettings.Overview_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ee4e72264e88f299fa3cffea8eca175cc8b90b30c7af6cbb4c8d4d2d41f01ac2 -size 294344 +oid sha256:31cbb082597ad84d5b9c8e23762a0ee7da0bf46e2552e389a9a62956e3d550d0 +size 267123 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/regionsSettings.Overview_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/regionsSettings.Overview_iPad_dark.png index aff11e587..50fa1685d 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/regionsSettings.Overview_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/regionsSettings.Overview_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:27617af62b2417ffdcc3731e6c496756fad3c33cd429596d7508befbadd0f672 -size 276562 +oid sha256:61e036de51b149afe2e67d198dcc670adda833a52da3e000ecb3a772c01a8d99 +size 259616 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/regionsSettings.Overview_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/regionsSettings.Overview_iPhone.png index ecd9ef65d..7438043c8 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/regionsSettings.Overview_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/regionsSettings.Overview_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6856af6ba214ca940bade81aa688eeb44b5dae7e2bd95fff02eb17deb8fff595 -size 173596 +oid sha256:197e5fb793fe936195d38079e1736fed7313f3f5f2231ca1210fc6c1ccdf109b +size 148135 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/regionsSettings.Overview_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/regionsSettings.Overview_iPhone_dark.png index 9f0b3c07d..e8fda6aac 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/regionsSettings.Overview_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/RegionsSettingsViewSnapshotTests/regionsSettings.Overview_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6a7c2464049ae67f64a54961be4cd939341dbe5ab197790671cf7a74fe78adfc -size 156886 +oid sha256:7df8fd206026eefa6c90cbb2bc62e91db55f07c8963182a30f232ae27d30f635 +size 140852 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/other/resolution.WithIssues_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/other/resolution.WithIssues_iPad_ax5.png index 90d9ccc64..9fc0b0856 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/other/resolution.WithIssues_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/other/resolution.WithIssues_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c6fae17800a4c9e708f9bd3f570dcc3b1e38a497ba79b4e11878327623b641a3 -size 527559 +oid sha256:d2b9fe29767067626bd78c16a9c1de83efaf1986c3e5d408e86991d104285303 +size 511299 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/other/resolution.WithIssues_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/other/resolution.WithIssues_iPad_contrast.png index 0697c471e..fff5291bf 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/other/resolution.WithIssues_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/other/resolution.WithIssues_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:51f28ad04e1db256d5c12d63bd32717cd7e926c6ad2872c2df70b87a422f8c38 -size 301786 +oid sha256:2023f005619e7520238178c03d0eb7bac1cb4b68c25ee36022a7265eb60d0b6f +size 302070 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/other/resolution.WithIssues_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/other/resolution.WithIssues_iPhone_ax5.png index 8b326a9d4..b8c514642 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/other/resolution.WithIssues_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/other/resolution.WithIssues_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:878f3b1eef9576f145f924eae5e4e502ccdef0282a5b24f887f6c120b05751cc -size 494749 +oid sha256:a9ce5b011334d3479d594860e31dcee05c11b09a53ab29accfafa9b3eda34c5b +size 473381 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/other/resolution.WithIssues_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/other/resolution.WithIssues_iPhone_contrast.png index bdfd3f128..4779123f2 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/other/resolution.WithIssues_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/other/resolution.WithIssues_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9efb70a3d8870ee72f5b4866cb61cb15570c0680e57ff71af06a519ba1c48766 -size 184907 +oid sha256:0292754ab42d84b1fd170066f618b4fea8d5f116b5d297ef571f96167136ccb3 +size 178263 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Completed_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Completed_iPhone.png index b540aadea..f6ecb9b2e 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Completed_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Completed_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c23df799e02b7368c46f29244e7566ae8149f12e3b196be22769bd549b31676a -size 156054 +oid sha256:5f5cc5a6d8754cab24550d4e20c2a3c98adce7b4360a77dbab11740338f672a2 +size 145032 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Completed_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Completed_iPhone_dark.png index 67db34a8c..d74667d67 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Completed_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Completed_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:96dc823d7bcf08ee486f393d181d5aedbc63c7f2733c91fbda15b0f6127415f3 -size 148663 +oid sha256:8248a7b6a30b42a45a1822144445e3bbda3913c3ba1192e21c52bf38de35e3d4 +size 140020 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Ready_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Ready_iPhone.png index 089caf833..d6117c078 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Ready_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Ready_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2b691984a3aef172524f36c50cfdfd5a965000e51bc31473840673392dc2ac83 -size 125167 +oid sha256:b34c33df09ae60ce348d07aaacd275032c5f2b96855876dccc0fedaa4592a644 +size 112432 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Ready_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Ready_iPhone_dark.png index 5ef545e25..8f4fa3243 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Ready_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Ready_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9da21af0729b5ac688ba895339a4bcafb60ac7663c380cd389ab073c2383ed19 -size 116029 +oid sha256:d2dd85695174e97f2616493c4c861d108962b1f7944b15958a6bc3648743b312 +size 107452 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Waiting_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Waiting_iPhone.png index 42f9cfe48..192b030e3 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Waiting_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Waiting_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b0cddbdaef28da5bfe918923c595837e72d91963b4d362daca3180e5d5ac349e -size 165509 +oid sha256:36ec70e900362cfbb37c2b1bd64089402a9cdfb410f789723b874824c3aa6e62 +size 154871 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Waiting_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Waiting_iPhone_dark.png index 436b6bbfc..4ba9c3cb5 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Waiting_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.Waiting_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c230971dd8ece8fff2cbd217817bdd1e22c7e65b30e16622168d4702a211dc93 -size 159738 +oid sha256:46fd93a0222151399406976c24507cb75462386f7182e011d8383bbf3fe674f4 +size 151850 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.WithIssues_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.WithIssues_iPad.png index d40b8247c..01d6913fb 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.WithIssues_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.WithIssues_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:72c0548225860cf1cdf7f10dc84b5b224451e7ef6dbbca69c74bda5dfa8dd79b -size 299565 +oid sha256:1b9b9eafe58d2ac7f007c8309bc523d9803256e0ab592f792430ff6bd6ba83b0 +size 299309 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.WithIssues_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.WithIssues_iPad_dark.png index a483cfef8..459deb07a 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.WithIssues_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.WithIssues_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:202ce69093828b0e092a175b3efb11080a01825cee7dd0f51ddbe28685133205 -size 297580 +oid sha256:53a46df1899aadb815938069bc65058215cb2f26ffa4e0c08c4ecdb04c9edb01 +size 297373 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.WithIssues_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.WithIssues_iPhone.png index 830c7560b..1128badc0 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.WithIssues_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.WithIssues_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:35eb4245da573f73255f6596b764c94b9a8850623dad058a258befd3c8166ffe -size 187514 +oid sha256:439efd6d00e0479e5540a04359f871cb8e77f132073f29a1653c585cf923f9a0 +size 176364 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.WithIssues_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.WithIssues_iPhone_dark.png index e299a47ee..9e827ffbc 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.WithIssues_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ResolutionViewSnapshotTests/resolution.WithIssues_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c86071cee0b55fa832135acb8813e1c4e21a774fd033b5a1b9bb46a5f99b42d8 -size 183221 +oid sha256:9006d4b12def69ae5dcbe2b85980dae63c0593b83cd6898ae3d2cc0e251f3971 +size 174696 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/other/settings.Default_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/other/settings.Default_iPad_ax5.png index 35f2f12e1..ed90c61ef 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/other/settings.Default_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/other/settings.Default_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2d2a805a9a55d426660fb05a8b23b52d2a1003168fcc694c93ff13ed92427954 -size 1065720 +oid sha256:0bd590e0a06c4b5f7736f2489c97607710b7a40c1802f8dd8f0407ead919fb39 +size 963567 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/other/settings.Default_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/other/settings.Default_iPad_contrast.png index 9a3a18c17..5b6bd1dcb 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/other/settings.Default_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/other/settings.Default_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e504d0ff5bb7a5c0cf3805250e8ad4ef031c25c927eee5a82f399bbd62f2ee50 -size 556044 +oid sha256:dfce2458b9e8c49f427096b873e481719d0a391d92339034f1b30111071a9a37 +size 528211 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/other/settings.Default_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/other/settings.Default_iPhone_ax5.png index 0a2cf5cc7..31e3a3c4f 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/other/settings.Default_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/other/settings.Default_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b76594656ebd2c93c4a8375203b8cd969c9e7dbc3760286cdcd30bdccd4c38f -size 1039709 +oid sha256:09b5807781503d5af954df40f95ab06c0a45a7c856f024fa62eb143913e0c037 +size 1031761 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/other/settings.Default_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/other/settings.Default_iPhone_contrast.png index badd12316..2ad1ee04c 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/other/settings.Default_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/other/settings.Default_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:041ea169b51d8029d9120b73117d032f4e1b3910f1d6c269e6668542595ed81b -size 428580 +oid sha256:6dfd903d562d0eae0355071bae3245168f71cbc9eadd4dd7da27e3681757968e +size 421981 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/other/settings.Default_iPhone_rtl.png b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/other/settings.Default_iPhone_rtl.png index 3e09699bd..315f37a6b 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/other/settings.Default_iPhone_rtl.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/other/settings.Default_iPhone_rtl.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43706271192a8e276372a9bc141694b6e9a3e5206e9a9b8a85ecf5db8a8e3a30 -size 425485 +oid sha256:3420350b480da92c9b6540650cbe992b10cddd8300c91054f5b395290c4af1f3 +size 418966 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.Default_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.Default_iPad.png index 731fe974c..2a2b43e6a 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.Default_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.Default_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1561407cc1aa55e67f7163c0d43dc555521e0a76149f5cf0ab2b25b957c3bce6 -size 550846 +oid sha256:581eef6897996d6d16b50ae05bba536cc999f24c7cc85f3a6e8d2659a859e4ca +size 522711 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.Default_iPad_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.Default_iPad_accessibility.png index d1413927c..2deb37985 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.Default_iPad_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.Default_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:71562e4c138910b057c1d77284061aeeb21e1b6bf4403babc62c204b80757a0d -size 929876 +oid sha256:b8af0ca7c044e15042bb9e27505091066dcef7538accfb2d34c424b80bc49fcf +size 876101 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.Default_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.Default_iPad_dark.png index 1344036b1..c6c6513df 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.Default_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.Default_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:55b9a9bcc28c4d78004144131d27e9d3bed605d2c1713b4b042d52046c1e30e9 -size 572014 +oid sha256:8ed4b39b7bd9d313346848bec18b9c34aeec511a836d1b62fd694e5982233fba +size 546878 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.Default_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.Default_iPhone.png index 5dc65df43..515bb2608 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.Default_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.Default_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:165ae7aecfbb1ef219ae9e3363a8348339575ad9395482e6de0c03347e255ac2 -size 421524 +oid sha256:0bd99b69e5bf9defac6493e19a6faa39a03abfbf0f37a3f3a128bb19ba423718 +size 414697 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.Default_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.Default_iPhone_accessibility.png index 5a931c528..7d250229d 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.Default_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.Default_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6ab0b9fe7c7d1e7bbaa62cc7078f7a6a0313cc063e1be300a94434df8ecac310 -size 801667 +oid sha256:6f2eace564f8093f3d9ddbedd7bb04ebb61f609acafb6101bbdf9d08457935be +size 792144 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.Default_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.Default_iPhone_dark.png index 59ca36bff..81b8a21dd 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.Default_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.Default_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5f3a66937196856ecd2ad5b189b88cb2544e43e5ee4196cde19b9682f16d3f3b -size 444692 +oid sha256:4938a113a28c767aa698a50750033675dcf50ae95c014aff738a01bdde45b7ff +size 437503 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.DemoMode_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.DemoMode_iPhone.png index 28ea79f54..ad3873c26 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.DemoMode_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.DemoMode_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:052f1895aedf8c8403c7bbf74b1719ba7fa12a1dcadb56dfcbd9df7a074e8222 -size 373018 +oid sha256:13ee37e1123c6e1c2aa7f9d9c0632f9f85253ff65167993fb28f6ecf55d12d65 +size 366253 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.DemoMode_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.DemoMode_iPhone_dark.png index f7838b673..385661682 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.DemoMode_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.DemoMode_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:29b7b294092de9499e26aee81cf47301882439c15c6912cffbbbd5b77fb3dfe3 -size 382705 +oid sha256:2ad63c374042a7d0dd26f187b135ca512071ee44a5e2547e0f07e0acae399783 +size 376925 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.LocalBuild_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.LocalBuild_iPhone.png index f6f744a21..f992f7320 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.LocalBuild_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.LocalBuild_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43ebf3e02cccbd9514be347420ae7f2972c7522af6253fd21a6271be95ba4baa -size 442924 +oid sha256:8d5efd46a7820a80fad778b61fb770e2550ffb1e201a41ede46df0d3a3839a6c +size 437383 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.LocalBuild_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.LocalBuild_iPhone_dark.png index 7f2718b58..4747beb56 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.LocalBuild_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.LocalBuild_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8fd8d8eb4e173634d91befe275aca429ef91618d9a61af309008b52891bac15c -size 466464 +oid sha256:8566e3de3f5a8863af41e895f41dfe024d3cd2d1db882864b56940b58c4f4f06 +size 461359 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.RecordingConfigurationWarning_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.RecordingConfigurationWarning_iPhone.png index 2687b957f..805a84612 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.RecordingConfigurationWarning_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.RecordingConfigurationWarning_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:080c9777e52f9933a2eafad4163136fcd166f2946acab9c9a4466819e6fe3356 -size 502017 +oid sha256:6cb874334f833302309e631b2ae6bc5d12f415131e598ea9e084ab48e7b13cba +size 493754 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.RecordingConfigurationWarning_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.RecordingConfigurationWarning_iPhone_dark.png index 6343b6b21..935d29820 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.RecordingConfigurationWarning_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.RecordingConfigurationWarning_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:671ecf13671a67ebf0801ff84e14a15c56ed1528da9cefc1860c5438c73d9b5e -size 530549 +oid sha256:db322126514fe42e4e67860ae0fb35ea7aa69db31dd6d2588b0d2e5e24a4dfe6 +size 521633 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.UpdateAvailable_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.UpdateAvailable_iPhone.png index 575ef1240..f39d28baa 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.UpdateAvailable_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.UpdateAvailable_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8da62863275a2d83cdf52c7a2277f950646c8e977e5d9607d46b2508e101a861 -size 448209 +oid sha256:f4c9455de51eea89a5b0e9f96f0c918c4c66958a5d55f5a0e598309ecab9cdfa +size 443009 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.UpdateAvailable_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.UpdateAvailable_iPhone_dark.png index 00e1bb7e9..50564248a 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.UpdateAvailable_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/SettingsViewSnapshotTests/settings.UpdateAvailable_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4c64a6707e648624707ebb5198be9f83161023ccc83b2778d045816c9a7c5aa0 -size 471721 +oid sha256:5935a989d3dba0cef0684f94a37e6ddd28240da4b4eeee2fba7b4ec3e86a2d1b +size 467100 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/ShareEvidenceFeaturesViewSnapshotTests/shareEvidenceFeatures.Default_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/ShareEvidenceFeaturesViewSnapshotTests/shareEvidenceFeatures.Default_iPhone_dark.png index 79ffb256b..2e36b1ea6 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/ShareEvidenceFeaturesViewSnapshotTests/shareEvidenceFeatures.Default_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/ShareEvidenceFeaturesViewSnapshotTests/shareEvidenceFeatures.Default_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cec2d38ea7867083666f6cb8d10702e2067c12ddf988cac97f69fe60720fa8dd -size 548919 +oid sha256:82e63b6338ad0d2119d02de78e7463e49296542b3991a4e7ac78ef74bf0b3533 +size 429430 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/SiriFeaturesViewSnapshotTests/siriFeatures.Default_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/SiriFeaturesViewSnapshotTests/siriFeatures.Default_iPhone_dark.png index c9eb87e5a..aca089c02 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/SiriFeaturesViewSnapshotTests/siriFeatures.Default_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/SiriFeaturesViewSnapshotTests/siriFeatures.Default_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f46028e290cc3f7081269a0aafa23c2d12e89ac5d87653b1a6f7fa922b8eeddc -size 845620 +oid sha256:09557c1c2acc4368b17609977e84c5dfbf218e671e1cc5c2921d500465098545 +size 706068 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/WidgetFeaturesViewSnapshotTests/widgetFeatures.Default_iPad_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/WidgetFeaturesViewSnapshotTests/widgetFeatures.Default_iPad_accessibility.png index 40ae62e9b..b9f94a1aa 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/WidgetFeaturesViewSnapshotTests/widgetFeatures.Default_iPad_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/WidgetFeaturesViewSnapshotTests/widgetFeatures.Default_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d78a9280fe16a4c3816c6c5b3cdfea60e9eddf930993c7c7a2224fd203f55e85 -size 2866482 +oid sha256:b302b66f8965b28a1920d2fe0b70c1908da26679ede1eb7eae902c1ddd214f58 +size 2686714 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/WidgetFeaturesViewSnapshotTests/widgetFeatures.Default_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/WidgetFeaturesViewSnapshotTests/widgetFeatures.Default_iPhone_accessibility.png index 4f97d6b2f..aa004260d 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/WidgetFeaturesViewSnapshotTests/widgetFeatures.Default_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/WidgetFeaturesViewSnapshotTests/widgetFeatures.Default_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:04e31cb54ccff0c7e311e4a86b4164f828114aa683a8c73d873c4750f750b603 -size 1640816 +oid sha256:8fa2ad03bd226c7fc08d4c2440c7f57b8639ae00a342c08d20ec79d1e21f6800 +size 1526605 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/WidgetFeaturesViewSnapshotTests/widgetFeatures.Default_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/WidgetFeaturesViewSnapshotTests/widgetFeatures.Default_iPhone_dark.png index e60cc4f3f..a358c4f67 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/WidgetFeaturesViewSnapshotTests/widgetFeatures.Default_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/WidgetFeaturesViewSnapshotTests/widgetFeatures.Default_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0352ea9be6dea2413be441dae20891fe02d2137574f63cc3ef3b58ca502a5202 -size 2868994 +oid sha256:b656e6a6abf341e2a29f9391b653bb2214c50dd2dd19ad279672e609fb40bcd0 +size 2752137 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/WidgetFeaturesViewSnapshotTests/widgetFeatures.TwoRegions_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/WidgetFeaturesViewSnapshotTests/widgetFeatures.TwoRegions_iPhone_dark.png index 2f78df98d..fb2df46ba 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/WidgetFeaturesViewSnapshotTests/widgetFeatures.TwoRegions_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/WidgetFeaturesViewSnapshotTests/widgetFeatures.TwoRegions_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0f265499c138f3f34553381293f2447ff6b767a46c8d9bb686949220dc3c90f9 -size 2813861 +oid sha256:75ec3a50f4583fe2c094af3e663ac715519e52efbf6c3ec8be32913ecfbbce71 +size 2700205 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/other/year.Loaded_iPad_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/other/year.Loaded_iPad_ax5.png index 3d5a2500f..41a690a44 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/other/year.Loaded_iPad_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/other/year.Loaded_iPad_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:81b2320478a8449124cf73192a8a42de9f49411d7237e8ce2251d0d2ba44a5df -size 7479874 +oid sha256:7f64e6add6fc5616c83790c3dcc4ae09dac2b98ca6b566384f3cbb5087a2ff87 +size 7442275 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/other/year.Loaded_iPad_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/other/year.Loaded_iPad_contrast.png index ac118afb8..119b2e3d7 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/other/year.Loaded_iPad_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/other/year.Loaded_iPad_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d3baed4775a884e4d602e0043d88eb452989f9143f894c2c971c9107fa0c3f3 -size 3655479 +oid sha256:58606daf5e86e94e613fd27e83fa406043d74c82bc681726c98929304e0c0bd0 +size 3646520 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/other/year.Loaded_iPhone_ax5.png b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/other/year.Loaded_iPhone_ax5.png index df5e1d31c..ff05020b1 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/other/year.Loaded_iPhone_ax5.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/other/year.Loaded_iPhone_ax5.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f0b79a5354b680c640da72624b4539babff78d9f88e894335fa8627389dc82b -size 5292219 +oid sha256:bc74ef5f9fcd92e3a2be32805b5da2567428e1e2cc8f5e13bc9c876ec92231bf +size 5241342 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/other/year.Loaded_iPhone_contrast.png b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/other/year.Loaded_iPhone_contrast.png index b12106e70..3a6401803 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/other/year.Loaded_iPhone_contrast.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/other/year.Loaded_iPhone_contrast.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eeeee92ee8b8022cf3e58af173b1db4c06536d961d2d3f35c0371b94aa8f9656 -size 2137105 +oid sha256:288c6179f738f13fd4f99ac62918b5184c29c38e0470ed55b4be2b63f38bd6df +size 2130099 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Empty_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Empty_iPhone.png index 1e2d463b8..e60710c1a 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Empty_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Empty_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:04caa263c82aa50565f60b8999b753d0f23e3b5990705a2a3ee40aef5384f18b -size 698235 +oid sha256:e18229e0c17bdbdae2a887d70f611a6c502f9668f6ad90fd3c7b58f67fb451d1 +size 680290 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Empty_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Empty_iPhone_dark.png index 3ff116b74..e02cc5b48 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Empty_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Empty_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6a53883288a9b1c7d7d42f1eb336fea06dd5d66481495d1057940bbaafca031d -size 736048 +oid sha256:a43da6680317ae2fbd9aea052244cbb3635754b24b624ffaa55a695462a4454d +size 713546 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Loaded_iPad.png b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Loaded_iPad.png index c95787965..f0e901a45 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Loaded_iPad.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Loaded_iPad.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b8f87b83ea7c6183c6544a262369231131e842730197463ee992f602201566fe -size 3627278 +oid sha256:a2de964cae1a0fb8b3fbeddfda3ace0d27101ac40d9d26f4a0a11639ebf1f651 +size 3617048 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Loaded_iPad_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Loaded_iPad_accessibility.png index 7c5e19394..13d475bba 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Loaded_iPad_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Loaded_iPad_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d0fc742a4bef5d48d7046ba23a711f4401da0550174e0441834a7ba11ceb5c2d -size 4165187 +oid sha256:175851eff1c337217cb336ea5c8e264bcc0720cf1143f275dc80d6f14bcaa6d8 +size 4171506 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Loaded_iPad_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Loaded_iPad_dark.png index ba54ed100..e6e8fee95 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Loaded_iPad_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Loaded_iPad_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:376782165599eafa5569a82f270a34b235e3f27cb1bfcda55dc6d963983281f5 -size 2378480 +oid sha256:7a92364424fec556402952553d7cb66fc6fc46d8b6298d4ed881aada1ea7fb0f +size 2365734 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Loaded_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Loaded_iPhone.png index a86241a22..7a4e9077b 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Loaded_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Loaded_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b047b83cb011f0f6c30e49a23dbd4d59838f1016c1bcdcaccf08153566b4c6e5 -size 2124530 +oid sha256:54dd3d3f1456c965c05603508b18fc87291b0c49be66d933a8a6ac64d526ce55 +size 2114129 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Loaded_iPhone_accessibility.png b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Loaded_iPhone_accessibility.png index 2cc89596f..55d0e6351 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Loaded_iPhone_accessibility.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Loaded_iPhone_accessibility.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:01176d6b695fc4fea6963c37c7ec072f4dc11d01075ac45624655bda2f5b5c35 -size 2711908 +oid sha256:16e6782477bdf112e6f4a0af8fe02a519f55335f3c1af3edc5349826218153c1 +size 2714048 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Loaded_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Loaded_iPhone_dark.png index a6ddda353..4476561ca 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Loaded_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.Loaded_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:11924876d4b1d69fb2bc995f34e34bbd073345daaf181b5ad7f05c496fd363d0 -size 1453673 +oid sha256:f81772a6d170f990754b10fa4d33be9c23a88339988beb28b2147245b13bd804 +size 1438481 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.RestoredOverview_iPhone.png b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.RestoredOverview_iPhone.png index 0301efad5..254a913c0 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.RestoredOverview_iPhone.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.RestoredOverview_iPhone.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0409d5c1bd49516f111abca3c62b0aad68cfd83f6db5e30c246051d3fe5052a8 -size 1477641 +oid sha256:23ba249bad07c999cbcdb8b68a7fec75f366207d87bbc42024c4c76f1c3d608f +size 1465167 diff --git a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.RestoredOverview_iPhone_dark.png b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.RestoredOverview_iPhone_dark.png index 471274716..10bd81242 100644 --- a/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.RestoredOverview_iPhone_dark.png +++ b/Where/WhereUI/SnapshotTests/__Snapshots__/YearViewSnapshotTests/year.RestoredOverview_iPhone_dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:73455d70fd74a84ce359bbfdd94fd54328247de41a59ca2bcb0cd646099a466d -size 878995 +oid sha256:1849a32b0e9e257415a9bb087f271e11687f95b339f535cdfa1b5235a5aa03cc +size 862300 diff --git a/Where/WhereUI/Sources/Developer/DeveloperOverlay.swift b/Where/WhereUI/Sources/Developer/DeveloperOverlay.swift index bc62b2620..cc7abc891 100644 --- a/Where/WhereUI/Sources/Developer/DeveloperOverlay.swift +++ b/Where/WhereUI/Sources/Developer/DeveloperOverlay.swift @@ -401,28 +401,42 @@ extension DeveloperOverlay: SnapshotProviding { static var snapshots: [SnapshotCase] { - whereSnapshot(name: "Collapsed", configurations: .phoneLightDark) { + whereSnapshot(name: "Collapsed", configurations: retainingScene(.phoneLightDark)) { DeveloperOverlayPreview(presentation: .collapsed) } whereSnapshot( name: "MenuBottomTrailing", - configurations: .fullContentPhoneLightDark, + configurations: retainingScene(.fullContentPhoneLightDark), ) { DeveloperOverlayPreview(presentation: .menu) } whereSnapshot( name: "MenuTopLeading", - configurations: SnapshotConfiguration.combinations(devices: [.iPhoneFullContent]), + configurations: retainingScene(SnapshotConfiguration + .combinations(devices: [.iPhoneFullContent])), ) { DeveloperOverlayPreview(presentation: .menu, corner: .topLeading) } whereSnapshot( name: "SelectedTool", - configurations: SnapshotConfiguration.combinations(devices: [.iPhone]), + configurations: retainingScene(SnapshotConfiguration + .combinations(devices: [.iPhone])), ) { DeveloperOverlayPreview(presentation: .floating(.openSpans)) } } + + /// Retain the scene for native glass; detached windows produce material bands + /// and clipping in the menu captures. + private static func retainingScene( + _ configurations: [SnapshotConfiguration], + ) -> [SnapshotConfiguration] { + configurations.map { configuration in + var configuration = configuration + configuration.device.scenePolicy = .retained + return configuration + } + } } #Preview { diff --git a/Where/WhereUI/Sources/Primary/PresenceTimelineList.swift b/Where/WhereUI/Sources/Primary/PresenceTimelineList.swift index e23737343..b74dea145 100644 --- a/Where/WhereUI/Sources/Primary/PresenceTimelineList.swift +++ b/Where/WhereUI/Sources/Primary/PresenceTimelineList.swift @@ -77,7 +77,9 @@ struct PresenceTimelineList: View { let pinsOverview = stylesheet.timeline.overview.pinsToViewport ScrollView { - LazyVStack(spacing: stylesheet.spacing.large) { + // Measure the complete year before expanding a bottom-anchored viewport. + // Lazy estimates can leave blank space below the final forecast. + VStack(spacing: stylesheet.spacing.large) { if !pinsOverview { YearRibbon( days: yearReport?.days ?? [], @@ -86,7 +88,7 @@ struct PresenceTimelineList: View { ) } - LazyVStack(spacing: 0) { + VStack(spacing: 0) { journeyRows(recordedItems: recordedItems, plannedItems: plannedItems) } diff --git a/Where/WhereUI/Sources/Settings/SettingsView.swift b/Where/WhereUI/Sources/Settings/SettingsView.swift index 245127d24..6279a4984 100644 --- a/Where/WhereUI/Sources/Settings/SettingsView.swift +++ b/Where/WhereUI/Sources/Settings/SettingsView.swift @@ -374,7 +374,6 @@ struct SettingsView: View { device: .iPhoneFullContent, ), ], - measurementReadiness: .immediate, ) { SettingsView(report: PreviewSupport.loadedYearReportModel()) .environment(PreviewSupport.loadedModel()) @@ -383,7 +382,6 @@ struct SettingsView: View { whereSnapshot( name: "UpdateAvailable", configurations: .fullContentPhoneLightDark, - measurementReadiness: .immediate, ) { SettingsView(report: PreviewSupport.loadedYearReportModel()) .environment(PreviewSupport.loadedModel()) @@ -393,7 +391,6 @@ struct SettingsView: View { whereSnapshot( name: "LocalBuild", configurations: .fullContentPhoneLightDark, - measurementReadiness: .immediate, ) { SettingsView(report: PreviewSupport.loadedYearReportModel()) .environment(PreviewSupport.loadedModel()) @@ -405,7 +402,6 @@ struct SettingsView: View { whereSnapshot( name: "DemoMode", configurations: .fullContentPhoneLightDark, - measurementReadiness: .immediate, ) { SettingsView(report: PreviewSupport.loadedYearReportModel()) .environment(PreviewSupport.loadedModel()) @@ -415,7 +411,6 @@ struct SettingsView: View { whereSnapshot( name: "RecordingConfigurationWarning", configurations: .fullContentPhoneLightDark, - measurementReadiness: .immediate, ) { SettingsView( report: PreviewSupport.loadedYearReportModel(), From 9f9fa84577078c66b27328c475de4aa12bb90052 Mon Sep 17 00:00:00 2001 From: Kyle Van Essen Date: Wed, 11 Nov 2026 13:48:56 -0500 Subject: [PATCH 11/12] docs(SnapshotKit): retain Duo provenance without raw measurement dump Remove the unused raw simulator record. Keep the measurement date, toolchain, collection method, and outstanding native validation in the module README; preserve all preset values. Update the measurement rule and source pointer. --- Shared/SnapshotKit/AGENTS.md | 2 +- .../Documentation/DuoMeasurements.json | 506 ------------------ Shared/SnapshotKit/README.md | 8 +- .../Sources/SnapshotDuoFrames.swift | 2 +- 4 files changed, 7 insertions(+), 511 deletions(-) delete mode 100644 Shared/SnapshotKit/Documentation/DuoMeasurements.json diff --git a/Shared/SnapshotKit/AGENTS.md b/Shared/SnapshotKit/AGENTS.md index 51ca18371..4d872c557 100644 --- a/Shared/SnapshotKit/AGENTS.md +++ b/Shared/SnapshotKit/AGENTS.md @@ -50,7 +50,7 @@ Read the root [`AGENTS.md`](../../AGENTS.md) first. - **Fixed device frames are for non-scrolling subjects.** Use explicit `Frame.viewport` captures for bounded adaptive shells only with full-content pane coverage. - **Keep frame names stable when setting layout traits.** Presets carry truthful size classes and idioms; component frames inherit. - **Keep scene retention explicit.** Use `Frame.scenePolicy = .retained` only for subjects that require native scene-backed chrome. Preserve truthful traits, configured insets, and full-content sizing. This policy keeps identifiers unchanged; name variants explicitly if both policies appear in one matrix. Preview rendering does not guarantee retained-scene fidelity. -- **Source Duo frames from native measurements.** Re-measure `Documentation/DuoMeasurements.json` when the runtime pin changes. Synthetic frames do not change native pose or bar arrangement. +- **Source Duo frames from native measurements.** Re-measure the presets when the runtime pin changes and update the provenance in `README.md`. Synthetic frames do not change native pose or bar arrangement. - **Create a separate case and model for each new adaptive configuration.** Readiness hooks must target that configuration's model. - **Use two-axis full-content frames only for spatial canvases.** Choose `.iPhoneFullContent2D`, `.iPadFullContent2D`, or an explicit `.fullContent2D` when the production subject intentionally scrolls in both dimensions. - **Keep ordinary screen presets fixed-width.** Guard: `SnapshotConfigurationTests`. diff --git a/Shared/SnapshotKit/Documentation/DuoMeasurements.json b/Shared/SnapshotKit/Documentation/DuoMeasurements.json deleted file mode 100644 index cbf3a886e..000000000 --- a/Shared/SnapshotKit/Documentation/DuoMeasurements.json +++ /dev/null @@ -1,506 +0,0 @@ -{ - "xcodeBuild": "27A9275", - "simulatorRuntimeBuild": "24A94232", - "measuredOn": "2026-10-15", - "device": "iPhone Duo", - "source": "UIWindowScene.screen, UIWindow.safeAreaInsets, UIView.traitCollection, and UIView.reservedRegions(kind:options:), read by a native UIKit simulator app. Device Hub selected each pose.", - "hardwareVerified": false, - "profiles": { - "outer-portrait": { - "divisions": [], - "horizontalSizeClass": 1, - "interfaceIdiom": 0, - "interfaceOrientation": 1, - "occlusions": [ - { - "active": true, - "frame": [ - 399.6666666666667, - 29.333333333333332, - 37, - 37 - ], - "margins": { - "bottom": 0, - "left": 0, - "right": 0, - "top": 0 - } - }, - { - "active": true, - "frame": [ - 382, - 0, - 84, - 170 - ], - "margins": { - "bottom": 0, - "left": 0, - "right": 0, - "top": 0 - } - } - ], - "runtime": "27.1", - "scale": 3, - "screenBounds": [ - 0, - 0, - 466, - 678 - ], - "verticalBarEdge": 2, - "verticalSizeClass": 2, - "viewBounds": [ - 0, - 0, - 466, - 678 - ], - "viewInsets": { - "bottom": 34, - "left": 0, - "right": 84, - "top": 0 - }, - "windowBounds": [ - 0, - 0, - 466, - 678 - ], - "windowInsets": { - "bottom": 34, - "left": 0, - "right": 84, - "top": 0 - } - }, - "outer-landscape": { - "divisions": [], - "horizontalSizeClass": 1, - "interfaceIdiom": 0, - "interfaceOrientation": 4, - "occlusions": [ - { - "active": true, - "frame": [ - 611.6666666666666, - 399.6666666666667, - 37, - 37 - ], - "margins": { - "bottom": 0, - "left": 0, - "right": 0, - "top": 0 - } - }, - { - "active": true, - "frame": [ - 594, - 384, - 84, - 82 - ], - "margins": { - "bottom": 0, - "left": 0, - "right": 0, - "top": 0 - } - } - ], - "runtime": "27.1", - "scale": 3, - "screenBounds": [ - 0, - 0, - 678, - 466 - ], - "verticalBarEdge": 2, - "verticalSizeClass": 1, - "viewBounds": [ - 0, - 0, - 678, - 466 - ], - "viewInsets": { - "bottom": 34, - "left": 0, - "right": 84, - "top": 0 - }, - "windowBounds": [ - 0, - 0, - 678, - 466 - ], - "windowInsets": { - "bottom": 34, - "left": 0, - "right": 84, - "top": 0 - } - }, - "inner-portrait": { - "divisions": [ - { - "active": false, - "frame": [ - 0, - 455.5, - 669, - 40 - ], - "margins": { - "bottom": 20, - "left": 0, - "right": 0, - "top": 20 - } - } - ], - "horizontalSizeClass": 2, - "interfaceIdiom": 0, - "interfaceOrientation": 1, - "occlusions": [ - { - "active": false, - "frame": [ - 21, - 215.66666666666666, - 37, - 57.99999999999997 - ], - "margins": { - "bottom": 0, - "left": 0, - "right": 0, - "top": 0 - } - }, - { - "active": true, - "frame": [ - 535, - 0, - 134, - 82 - ], - "margins": { - "bottom": 0, - "left": 0, - "right": 0, - "top": 0 - } - } - ], - "runtime": "27.1", - "scale": 3, - "screenBounds": [ - 0, - 0, - 669, - 951 - ], - "verticalBarEdge": 0, - "verticalSizeClass": 2, - "viewBounds": [ - 0, - 0, - 669, - 951 - ], - "viewInsets": { - "bottom": 34, - "left": 0, - "right": 0, - "top": 82 - }, - "windowBounds": [ - 0, - 0, - 669, - 951 - ], - "windowInsets": { - "bottom": 34, - "left": 0, - "right": 0, - "top": 82 - } - }, - "inner-landscape": { - "divisions": [ - { - "active": false, - "frame": [ - 455.5, - 0, - 40, - 669 - ], - "margins": { - "bottom": 0, - "left": 20, - "right": 20, - "top": 0 - } - } - ], - "horizontalSizeClass": 2, - "interfaceIdiom": 0, - "interfaceOrientation": 4, - "occlusions": [ - { - "active": false, - "frame": [ - 677.3333333333334, - 21, - 58, - 37 - ], - "margins": { - "bottom": 0, - "left": 0, - "right": 0, - "top": 0 - } - }, - { - "active": true, - "frame": [ - 867, - 0, - 84, - 120 - ], - "margins": { - "bottom": 0, - "left": 0, - "right": 0, - "top": 0 - } - } - ], - "runtime": "27.1", - "scale": 3, - "screenBounds": [ - 0, - 0, - 951, - 669 - ], - "verticalBarEdge": 2, - "verticalSizeClass": 2, - "viewBounds": [ - 0, - 0, - 951, - 669 - ], - "viewInsets": { - "bottom": 34, - "left": 0, - "right": 84, - "top": 0 - }, - "windowBounds": [ - 0, - 0, - 951, - 669 - ], - "windowInsets": { - "bottom": 34, - "left": 0, - "right": 84, - "top": 0 - } - }, - "tabletop-portrait": { - "divisions": [ - { - "active": true, - "frame": [ - 0, - 455.5, - 669, - 40 - ], - "margins": { - "bottom": 20, - "left": 0, - "right": 0, - "top": 20 - } - } - ], - "horizontalSizeClass": 2, - "interfaceIdiom": 0, - "interfaceOrientation": 1, - "occlusions": [ - { - "active": false, - "frame": [ - 21, - 215.66666666666666, - 37, - 57.99999999999997 - ], - "margins": { - "bottom": 0, - "left": 0, - "right": 0, - "top": 0 - } - }, - { - "active": true, - "frame": [ - 535, - 0, - 134, - 82 - ], - "margins": { - "bottom": 0, - "left": 0, - "right": 0, - "top": 0 - } - } - ], - "runtime": "27.1", - "scale": 3, - "screenBounds": [ - 0, - 0, - 669, - 951 - ], - "verticalBarEdge": 0, - "verticalSizeClass": 2, - "viewBounds": [ - 0, - 0, - 669, - 951 - ], - "viewInsets": { - "bottom": 34, - "left": 0, - "right": 0, - "top": 82 - }, - "windowBounds": [ - 0, - 0, - 669, - 951 - ], - "windowInsets": { - "bottom": 34, - "left": 0, - "right": 0, - "top": 82 - } - }, - "tabletop-landscape": { - "divisions": [ - { - "active": true, - "frame": [ - 455.5, - 0, - 40, - 669 - ], - "margins": { - "bottom": 0, - "left": 20, - "right": 20, - "top": 0 - } - } - ], - "horizontalSizeClass": 2, - "interfaceIdiom": 0, - "interfaceOrientation": 4, - "occlusions": [ - { - "active": false, - "frame": [ - 677.3333333333334, - 21, - 58, - 37 - ], - "margins": { - "bottom": 0, - "left": 0, - "right": 0, - "top": 0 - } - }, - { - "active": true, - "frame": [ - 867, - 0, - 84, - 120 - ], - "margins": { - "bottom": 0, - "left": 0, - "right": 0, - "top": 0 - } - } - ], - "runtime": "27.1", - "scale": 3, - "screenBounds": [ - 0, - 0, - 951, - 669 - ], - "verticalBarEdge": 2, - "verticalSizeClass": 2, - "viewBounds": [ - 0, - 0, - 951, - 669 - ], - "viewInsets": { - "bottom": 34, - "left": 0, - "right": 84, - "top": 0 - }, - "windowBounds": [ - 0, - 0, - 951, - 669 - ], - "windowInsets": { - "bottom": 34, - "left": 0, - "right": 84, - "top": 0 - } - } - } -} diff --git a/Shared/SnapshotKit/README.md b/Shared/SnapshotKit/README.md index c576504b5..72922717b 100644 --- a/Shared/SnapshotKit/README.md +++ b/Shared/SnapshotKit/README.md @@ -219,8 +219,10 @@ Synthetic windows test layout policy; they do not validate native folding or sys Retention preserves the frame’s size, traits, and insets, but physical reserved regions can affect native chrome. It does not change reference identifiers; name variants explicitly when comparing both policies. Previews remain an approximation. -The Duo presets retain [native iOS 27.1 measurements](Documentation/DuoMeasurements.json) from Xcode build `27A9275`, runtime `24A94232`. -Re-measurement on the native 27.2 Duo runtime remains pending; see [native release validation in PR #466](https://github.com/kyleve/Stuff/pull/466). +The Duo presets use native simulator measurements collected on 2026-10-15 with iOS 27.1, Xcode build `27A9275`, and runtime build `24A94232`. +Device Hub selected each pose. A native UIKit app read `UIWindowScene.screen`, `UIWindow.safeAreaInsets`, `UIView.traitCollection`, and `UIView.reservedRegions(kind:options:)`. +These measurements have not been verified on hardware. +Re-measurement on the native 27.2 Duo runtime remains pending; see [native release validation in PR #372](https://github.com/kyleve/Stuff/pull/372). Synthetic captures on the current runtime verify layout against these recorded profiles, not current native geometry. All four profiles use 3× scale and the phone idiom. @@ -233,6 +235,6 @@ All four profiles use 3× scale and the phone idiom. The inner display reports a 40-point division with 20-point margins on each adjoining side. Its frame already includes these margins. The division is active when partially folded. Flat layouts must ignore inactive divisions. -The measurement record also contains camera and status-bar occlusions. Use current region geometry in production; these records describe specific simulator poses. +Use current region geometry in production; the measurements describe specific simulator poses. Explicit configuration layout traits override frame traits and retain their identifier tokens. With no explicit override, previews and captures use the frame’s measured traits. diff --git a/Shared/SnapshotKit/Sources/SnapshotDuoFrames.swift b/Shared/SnapshotKit/Sources/SnapshotDuoFrames.swift index 30e4a445d..d76c9b8d6 100644 --- a/Shared/SnapshotKit/Sources/SnapshotDuoFrames.swift +++ b/Shared/SnapshotKit/Sources/SnapshotDuoFrames.swift @@ -3,7 +3,7 @@ import CoreGraphics extension SnapshotConfiguration.Frame { /// Duo outer portrait bounds and insets from the recorded native measurements. /// These synthetic viewports do not change the host simulator's physical pose. - /// See `Documentation/DuoMeasurements.json` for the native measurements. + /// See the module README's Adaptive containers section for measurement provenance. public static let duoOuterPortrait = viewport( name: "duoOuterPortrait", size: CGSize(width: 466, height: 678), From 42ab5b40e0ad7192f39df2075b07a41ed3c39384 Mon Sep 17 00:00:00 2001 From: Kyle Van Essen Date: Wed, 11 Nov 2026 13:51:33 -0500 Subject: [PATCH 12/12] refactor(SnapshotKit): make trait conversions exhaustive Share a switch-based size-class conversion between both axes and switch explicitly over the configuration idiom. Adding an enum case now requires a deliberate frame mapping instead of falling through a ternary. Existing mappings and identifiers are unchanged. Validation: all 56 SnapshotKit tests, architecture checks, and SwiftFormat pass. --- .../Sources/SnapshotLayoutTraits.swift | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/Shared/SnapshotKit/Sources/SnapshotLayoutTraits.swift b/Shared/SnapshotKit/Sources/SnapshotLayoutTraits.swift index 7e06e31c0..8b415f7b8 100644 --- a/Shared/SnapshotKit/Sources/SnapshotLayoutTraits.swift +++ b/Shared/SnapshotKit/Sources/SnapshotLayoutTraits.swift @@ -90,9 +90,27 @@ extension SnapshotConfiguration { public var resolvedLayoutTraits: Frame.LayoutTraits? { guard let layoutTraits else { return device.layoutTraits } return Frame.LayoutTraits( - horizontalSizeClass: layoutTraits.horizontalSizeClass == .compact ? .compact : .regular, - verticalSizeClass: layoutTraits.verticalSizeClass == .compact ? .compact : .regular, - interfaceIdiom: layoutTraits.interfaceIdiom == .phone ? .phone : .pad, + horizontalSizeClass: layoutTraits.horizontalSizeClass.frameSizeClass, + verticalSizeClass: layoutTraits.verticalSizeClass.frameSizeClass, + interfaceIdiom: layoutTraits.interfaceIdiom.frameIdiom, ) } } + +extension SnapshotConfiguration.LayoutTraits.SizeClass { + fileprivate var frameSizeClass: SnapshotConfiguration.Frame.LayoutTraits.SizeClass { + switch self { + case .compact: .compact + case .regular: .regular + } + } +} + +extension SnapshotConfiguration.LayoutTraits.InterfaceIdiom { + fileprivate var frameIdiom: SnapshotConfiguration.Frame.LayoutTraits.InterfaceIdiom { + switch self { + case .phone: .phone + case .tablet: .pad + } + } +}