feat(ios): modernize the app with iOS 26 Liquid Glass#98452
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 56ceb55f1a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Codex review: needs maintainer review before merge. Reviewed July 1, 2026, 8:55 AM ET / 12:55 UTC. Summary PR surface: Tests +18, Docs +55, Other -15. Total +58 across 30 files. Reproducibility: not applicable. this is a visual/product-direction PR rather than a bug report. The concrete behavior proof is screenshot- and source-checkable, and I inspected representative after-fix images plus current-head source. Review metrics: 1 noteworthy metric.
Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Mantis proof suggestion Risk before merge
Maintainer options:
Next step before merge
Security Review detailsBest possible solution: Have iOS maintainers explicitly accept the Xcode 26 and Liquid Glass direction, then land this branch as the broad modernization pass or split it into narrower design-system steps if they want smaller review units. Do we have a high-confidence way to reproduce the issue? Not applicable; this is a visual/product-direction PR rather than a bug report. The concrete behavior proof is screenshot- and source-checkable, and I inspected representative after-fix images plus current-head source. Is this the best way to solve the issue? Unclear until iOS maintainers accept the product direction. The implementation is a coherent broad pass with availability-gated iOS 26 APIs, but the best landing shape depends on whether maintainers want one large redesign or smaller design-system PRs. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 5e4d71686a6a. Label changesLabel changes:
Label justifications:
Evidence reviewedPR surface: Tests +18, Docs +55, Other -15. Total +58 across 30 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
|
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
@clawsweeper re-review Resolved the final dead-code findings on |
|
🦞🧹 I asked ClawSweeper to review this item again. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1736460cb2
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@clawsweeper re-review Please review exact head |
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
@clawsweeper re-review Please review exact head |
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
Merged via squash.
|
* feat(ios): adopt iOS 26 Liquid Glass design * refactor(ios): refine Liquid Glass hierarchy * docs(ios): require Xcode 26 * refactor(ios): remove obsolete design helpers * fix(ios): keep agent tab navigation hidden * fix(ios): compact chat composer at rest * refactor(ios): reduce interface density * fix(ios): keep native string inventory current
Related: #98317
What Problem This Solves
The iOS app mixed nested status pills, card-within-card surfaces, gradients, compact typography, and inconsistent navigation controls. The result looked busy rather than native: connection state was repeated, semantic red was used decoratively, and nearly every piece of content competed for elevation.
Why This Change Was Made
This redesign applies Apple's iOS 26 hierarchy more deliberately: native Liquid Glass only for interactive chrome, quiet grouped surfaces for content, one semantic status treatment per context, standard segmented controls, larger readable type, and consistent concentric geometry. The deployment target remains iOS 18; every iOS 26 API stays availability-gated with a functional bordered/material fallback.
The design audit is captured in
apps/ios/DESIGN.md, informed by Apple's Adopting Liquid Glass, Applying Liquid Glass to custom views, and Build a SwiftUI app with the new design guidance.User Impact
Evidence
RootTabsSourceGuardTests+SwiftUIRenderSmokeTests: 47/47 passed.OpenClawSnapshotUITests.testConnectedGatewayTabs: passed with five light and five dark primary-tab captures.OpenClawSnapshotUITests.testLiveGatewayControlOverviewNavigation: passed end to end against a fresh isolated OpenClaw Gateway; setup code pairing connected, Control rendered, Overview opened, andBack to Controlremained available without a crash.OpenClawSnapshotUITests.testChatComposerStartsCompactAndGrowsWithDraft: passed on iPhone 17 / iOS 26.5; the empty text field remained below the 44-point compact ceiling and grew by at least 12 points for a multiline draft.swift test --package-path apps/shared/OpenClawKit --filter ChatDynamicTypeSourceGuardTests: 1/1 passed on the final composer patch.OpenClawscheme build for an iPhone 17 Pro / iOS 26 simulator: succeeded.git diff --check: passed (pre-existing warning-only lint findings unchanged).Chat composer sizing — before and after
The previous iOS frame reserved the full four-line allowance even when the field was empty. The revised field uses its intrinsic single-line height at rest, keeps the accessory and send controls bottom-aligned, and grows only when text wraps. A continuous rounded rectangle replaces the capsule so the expanded state keeps professional corner geometry.
Before and after — light appearance
Matched iPhone 17 / iOS 26.5 fixture captures. The left side is the original branch baseline; the right side is this comprehensive hierarchy pass.
Dark appearance
The same five screens were independently rendered and inspected in dark appearance.
Live Gateway proof
These are XCTest attachments from the real Gateway flow, not fixture data. They show the paired LAN address and the destination reached by tapping Overview.
Density cleanup follow-up
The second complete UI pass removes information that was technically available but not useful at a glance. It keeps operational state and navigation intact while reducing the number of labels, duplicated brand names, inline diagnostics, and explanatory sentences competing on each screen.
Light appearance — previous redesign vs final density pass
Dark appearance — previous redesign vs final density pass
Density-pass verification
217a7b9662b2f0bc10b2f4150dfe43cb4c55a3fd.OpenClawsimulator build: passed.RootTabsSourceGuardTests: 33/33 passed from fresh DerivedData.OpenClawSnapshotUITests.testConnectedGatewayTabs: passed on iPhone 17 Pro / iOS 26.0; five light and five dark captures inspected.main.git diff --checkand production SwiftFormat/SwiftLint build phases: passed; warning-only lint findings are pre-existing.