Skip to content

[Feature]: native iOS reskin — replace custom "Pro" chrome with stock SwiftUI (HIG) #99195

Description

@marvkr

Summary

Reskin the iOS app to Apple-native SwiftUI (List/Form + HIG nav + iMessage chat + native inputs), replacing the custom ProCard/Pro-component chrome that makes it feel non-native.

Problem to solve

The iOS app reads as non-native / "vibe-coded". Screens are built from a custom component layer (ProCard, OpenClawProBackground, OpenClawProComponents, OpenClawAdaptiveHeaderRow): floating shadowed cards, custom segmented controls, custom capsule switches, gradient avatars, hand-rolled headers, .roundedBorder inputs, and status "pills". It feels closer to an Android app than stock iOS, and copy is verbose. This hurts first impressions and App Store polish for the iPhone release.

Proposed solution

Reskin to Apple-native SwiftUI, HIG-first:

  • Navigation: real nav bars (.navigationTitle, native back + push/slide, .searchable) — drop navigationBarHidden + custom header rows.
  • Lists/forms: List/Form .insetGrouped + Section + LabeledContent + Toggle + native Picker — replace ProCard/custom chrome; iOS-Settings-style colored icons.
  • Chat: iMessage-style bubbles + native iOS 26 glass composer (.glassEffect capsule + .buttonStyle(.glassProminent), availability-gated); ContentUnavailableView for empty/disconnected/error.
  • Inputs: stock text/secure fields + native switches (no .roundedBorder, no custom pill toggles).
  • Copy trimmed to the minimum; keep the brick-red brand accent + full light/dark; no IA/behavior changes.

Surfaces: Onboarding (Welcome, Connect Gateway), Chat, Talk, Control (+ hub & subscreens), Agent, Settings (+ all Gateway/Permissions/Voice/Diagnostics subscreens).

Alternatives considered

  • Incremental per-screen polish only (slower, inconsistent, leaves the custom chrome in place).
  • Keep the custom component system and only retune its tokens — doesn't fix the non-native feel, because the chrome itself (cards/shadows/custom controls) is the problem.

Notes: AI-assisted (Claude Code). Touches iOS/UI-UX owner surfaces (@mbelinky, @ngutman, @BunsDev) — seeking direction sign-off before opening the PR. Before/after screenshots of all core screens + full diff will be attached to the PR. Net so far: −307 LOC (removes the custom UI layer). The slash-command autocomplete menu is a separate proposal, not part of this.

Impact

  • Affected: all iPhone users of the OpenClaw iOS app (first public App Store release targets iPhone).
  • Severity: medium — no functional bug, but the non-native look hurts perceived quality, trust, and App Store polish.
  • Frequency: every session (it's the whole app surface).
  • Consequence: weak first impression vs stock-iOS expectations; higher long-term maintenance of a bespoke UI layer. Reskin removes ~custom UI code (net −307 LOC so far) with no IA/behavior change, so functional risk is low (main risk = UITest snapshot regeneration).

Evidence/examples

Prototype already built and verified screen-by-screen on iPhone 17 simulator (iOS 26.2) via xcodebuildmcp/idb. A self-contained before/after HTML report (all 6 core screens side-by-side + full color-coded diff) is ready and will be attached to the PR.

Prior art: native SwiftUI insetGrouped Settings, iMessage composer/bubbles, and iOS 26 Liquid Glass (.glassEffect / .buttonStyle(.glassProminent)); referenced Manus/Claude/Linear/Perplexity for the direction.

Additional information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3Low-priority cleanup, docs, polish, ergonomics, or speculative work.clawsweeper:fix-shape-clearClawSweeper found a clear likely implementation shape for this issue.clawsweeper:needs-maintainer-reviewClawSweeper marked this issue as needing maintainer review before automation.clawsweeper:needs-product-decisionClawSweeper marked this issue as needing a product or behavior decision.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.enhancementNew feature or requestimpact:otherThis issue has meaningful maintainer-visible impact outside the owned taxonomy.issue-rating: 🌊 off-meta tidepoolIssue quality rating does not apply to this item.maturity:stableIssue affects a taxonomy feature currently scored M4/M5.

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions