Skip to content

Ios Apps

live-view-ios

iOS app that displays four panels on screen — front camera, rear camera, live satellite globe map, and a branded CTA panel — designed to be screen-recorded as a single composite video for content creation. One tap records the whole thing to Photos with no system UI in the frame.

  • When recording a piece-to-camera that needs both your face and what you are looking at (driving, event coverage, walking-and-talking).
  • When you want a location-aware shot with a live satellite globe map showing where you are.
  • When you want a clean export with a branded subscribe CTA built into the frame — no overlays added in post.
  1. Top-left — rear camera (world view).
  2. Top-right — front camera (selfie).
  3. Bottom-left — live map with current location, pinch to zoom out to the full satellite globe.
  4. Bottom-right — CTA panel with configurable title, URL, and subscribe button.
  5. Tap the CTA panel (anywhere except the Subscribe button) to start recording. Tap again to stop. Video saves to Photos automatically with no system UI in the frame.
  6. Tap either camera quadrant to swap front and back. Long-press the map to swap map and CTA positions. Pinch to zoom either camera. Tap Subscribe to open settings and edit branding.
  • Repo: ~/apps/live-view-ios/
  • Bundle ID: com.ojhurst.LiveView
  • Tech: Swift / SwiftUI, AVFoundation MultiCam, MapKit (satellite globe), ReplayKit (recording), Photos (direct save).

run.sh at the repo root is the one-command pipeline: git fetch && git reset --hard origin/main, xcodebuild, devicectl install, devicectl process launch. Hardcoded for James iPhone 16 Pro Max.

Must run in a Terminal with full UI keychain access — codesign fails over plain SSH with errSecInternalComponent. Invoke from any Claude session via:

bash ~/apps/cc/bin/run-terminal-over-ssh.sh mbp ~/apps/live-view-ios/run.sh

The wrapper opens a Terminal on the MBP, runs run.sh there, propagates the exit code, and auto-closes the window. Around 30 seconds end-to-end. No need to open Xcode.

build.txt (plain integer) AND LiveView/SettingsSheet.swift constants must stay in lockstep so the running app shows the right build number. Never bump by hand — use the script:

bash bump-build.sh "short summary"

If the app shows an older number than build.txt, the constants drifted — rerun bump-build.sh to resync.

Build 47+ has UIFileSharingEnabled and writes liveview-log.txt in the app’s Documents folder. Pull while tethered:

xcrun devicectl device copy from \
--device "James iPhone 16 Pro Max 256 GB" \
--domain-type appDataContainer \
--domain-identifier com.ojhurst.LiveView \
--source Documents/liveview-log.txt \
--destination /tmp/liveview-log.txt

In-app alternative (no tether): Settings → Diagnostics → Share Log opens the iOS share sheet for AirDrop.

  • iOS 17+ and an iPhone with MultiCam support (XS or later).
  • Long recordings (9 min, 29 min, 1 min observed) sometimes terminate silently with Stop failed: Failed due to attempting to stop a recording that wasn't in recording state — that means iOS killed the recording on its own. Build 48 added an RPScreenRecorderDelegate that logs the actual iOS error code, so check the delegate line in the log first when triaging a lost recording.
  • Dual camera does not work in Simulator — physical device only.