The native shell exposed a few latent issues:
- viewport lacked viewport-fit=cover + maximum-scale so content could
zoom and leak under the notch,
- body had no overflow-x guard, so any one-line string pushed the layout
wider than the device,
- #root had no env(safe-area-inset-*) padding, hiding content behind
the status bar now that Capacitor's contentInset is off.
Flipping contentInset from "always" to "never" lets the CSS env()
values drive the inset (single source of truth, no double padding).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Phase 4 (mobile) kickoff. Ships the native iOS wrapper that lets users
share photos/videos from the iOS Share Sheet into AnyDrop — the one
thing the PWA alone cannot do on iOS because Apple still ignores the
Web Share Target API.
Architecture:
- web/ios/ — Capacitor-generated Xcode project pointing the WKWebView
at https://anydrop.arthurbarre.fr (real web app; only native code
is the share-in path, so no "thin wrapper" App Store concern).
- AnyDropShare (Share Extension target) — stashes selected items into
an App Group shared container then opens anydrop://share.
- SharedInboxPlugin (custom Capacitor plugin) — drains that container
from JS after the URL fires, returning base64 blobs.
- web/src/lib/nativeShare.ts — bridge that rehydrates File objects and
routes them into the existing /share page flow (same one Android uses).
Xcode-side target registration + signing isn't scriptable; runbook is
in docs/ios-setup.md.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>