#1815

Bring the verify sheet closer to Android

Openswedishfrenchpresswants to merge intofrom

Summary

Restructures the iOS verification sheet after bitchat-android's VerificationSheet, using iOS controls in place of Material ones.

  • Tabs. A segmented "my QR" / "scan" control under the header replaces the bottom "scan someone else's qr" toggle. Settings and Notices already use the same control. A successful scan returns to my QR, as on Android.
  • My QR. The code sits on a white card with a quiet zone, white in every theme so it scans reliably. The nickname and a muted "bitchat" line are under it. The raw bitchat://verify URL is no longer printed under the code, as on Android. Long-pressing (right-clicking on macOS) the card copies it, which keeps the Mac app's paste box usable for Macs without a camera; the old sheet allowed this through selectable URL text.
  • Scan. The camera preview fills the available space, with a reticle and a caption pill on dark material.
  • Camera access denied. The scanner explains that camera access is needed and offers open settings, because iOS can't re-prompt once access is denied. iOS no longer says "paste a QR below"; that field only exists on macOS.
  • Remove verification. A full-width bordered button with the destructive role. It uses system red: the matrix alertRed was too dark to read on black.
  • Typography. Text goes through bitchatFont, so it follows Dynamic Type. My QR scrolls at large sizes.

Screenshots

Rendered in the iPhone 17 simulator with mock identity keys.

BeforeAfter (matrix, dark)After (matrix, light)
Liquid glass, darkLiquid glass, lightVerified DM peer
Scan tab

The simulator has no camera, so the scan tab shows the reticle and caption over an empty preview.

Other changes

  • SystemSettings.camera opens the camera privacy pane on macOS and the app's Settings page on iOS.
  • 5 new strings in all 30 locales: verification.tab.my_qr, verification.tab.scan, verification.tab.picker_label, verification.scan.camera_permission and verification.scan.no_camera. open settings reuses location_channels.action.open_settings, and remove verification reuses fingerprint.action.remove_verification. The translations are new and could use a native-speaker check.
  • The old "show my qr", "scan someone else's qr" and "remove verification" labels were literals missing from the string catalog. They're gone.

Testing

  • swift test passes: 2198 tests, including ViewSmokeTests and the localization checks.
  • The iOS simulator build succeeds with no new warnings. The macOS build succeeds through SwiftPM.
  • Rendered both themes in light and dark, the verified-peer state and the scan tab in the simulator (above).
  • Not yet checked:
    • the live camera on a device
    • the camera-denied state and its Settings link
    • long-press copy
    • the largest Dynamic Type sizes
    • the macOS sheet on screen

🤖 Generated with Claude Code

Activity

10
swedishfrenchpress5d ago

tested by scanning bitchat running on a nearby android. verification successful.

chatgpt-codex-connector[bot]5d ago

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

ReviewStatusCommitReview trigger
📝 Code Review✅ Completed 2026-10-25T18:17:49.189123Z545df49Manual request
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

chatgpt-codex-connector[bot]reviewed5d ago
chatgpt-codex-connector[bot]5d ago

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 545df496cb

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

swedishfrenchpress5d ago

@codex review

chatgpt-codex-connector[bot]5d ago

Codex Review: Didn't find any major issues. Keep them coming!

Reviewed commit: 545df496cb

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".