Skip to content

feat(ios): QR scan pairing + home-screen Widget#124

Merged
oratis merged 2 commits into
mainfrom
feat/ios-qr-and-widget
Jun 19, 2026
Merged

feat(ios): QR scan pairing + home-screen Widget#124
oratis merged 2 commits into
mainfrom
feat/ios-qr-and-widget

Conversation

@oratis

@oratis oratis commented Jun 19, 2026

Copy link
Copy Markdown
Owner

Two iOS companion follow-ups from the plan (docs/IOS_COMPANION_PLAN.md §G5, §5.3), both compile-verified for the simulator with ./build.sh. Based on main (the #113#123 stack already landed in v0.11.0).

QR scan pairing

  • New QRScannerView (AVFoundation) + a Scan QR code button/sheet in Settings.
  • The decoded string flows through the existing applyPairing path, so lisa-pair://… and http://…?token= both work.
  • Requests the camera grant; degrades honestly when there's no camera (Simulator) or access is denied — a message, not a black screen.
  • Adds NSCameraUsageDescription.

Home-screen Widget — active / stuck agent counts

  • StaticConfiguration + TimelineProvider in the existing LisaPocketWidgets extension; small + medium families.
  • Privacy-first sharing: the auth token never leaves the Keychain. The app keeps making the authenticated /api/agents/sessions fetch and writes only a counts-only AgentSnapshot (no session content) to an App Group; the widget reads that, and the app nudges it via WidgetCenter.reloadAllTimelines().
  • App Group entitlements for both targets are generated from project.yml (like Info.plist) and gitignored.

Verification

  • ./build.shBUILD SUCCEEDED.
  • NSCameraUsageDescription present in the built Info.plist; both targets' generated entitlements carry group.ai.meetlisa.pocket; the widget .appex is bundled.

Honest limit

Like the existing Live Activity, the Widget is compile-verified on the Simulator; its App-Group data only populates on a signed build (capabilities aren't applied to unsigned Simulator builds), so unsigned it shows the "Open Lisa Pocket" placeholder. Noted in the README.

🤖 Generated with Claude Code

oratis and others added 2 commits June 19, 2026 14:06
Settings can now scan the lisa-pair:// QR code the Mac shows instead of
only pasting it. An AVFoundation viewfinder (QRScannerView) requests the
camera grant and degrades honestly when there's no camera (e.g. the
Simulator) or access is denied — a message, not a black screen. The
decoded string flows through the existing applyPairing path, so both
lisa-pair:// and http://…?token= strings work.

Also gitignore the xcodegen-generated Widgets/Info.plist (the Sources one
was already ignored), so a build no longer dirties the tree.

Verified: ./build.sh → BUILD SUCCEEDED; NSCameraUsageDescription is
present in the built app's Info.plist.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
A WidgetKit StaticConfiguration + TimelineProvider (added to the existing
LisaPocketWidgets extension) that glances the roster: active (working) and
stuck (waiting / pending-permission / error) counts, plus total + an "as of"
time on the medium size.

Privacy-first sharing: the app keeps making the authenticated
/api/agents/sessions fetch and writes only a counts-only AgentSnapshot —
no session content, no token — to an App Group (group.ai.meetlisa.pocket);
the extension reads that. The token never leaves the Keychain. The app
nudges the timeline via WidgetCenter.reloadAllTimelines() on each roster
change. App Group entitlements for both targets are generated from
project.yml (like Info.plist) and gitignored.

Verified: ./build.sh -> BUILD SUCCEEDED; both targets' generated
entitlements carry the app group; the widget .appex is bundled. Honest
limit: like Live Activities, runtime data-sharing needs a signed build —
an unsigned Simulator build doesn't apply the App Group, so the Widget
shows its placeholder. Compile-verified only.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@oratis oratis merged commit 6711358 into main Jun 19, 2026
1 check passed
@oratis oratis deleted the feat/ios-qr-and-widget branch June 19, 2026 10:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant