StreamBeam is a lightweight macOS menu bar app for mirroring and recording a wired iPhone or iPad screen on your Mac. Connect a device over USB, trust the Mac, and StreamBeam opens a clean preview window with an optional recording control.
- Detects connected iPhone and iPad devices from the macOS USB device tree.
- Opens device-specific preview windows from the menu bar.
- Uses
AVCaptureSessionandAVCaptureVideoPreviewLayerfor live screen preview. - Records the active capture session to a
.movfile selected with the native save panel. - Runs as a menu bar utility with no persistent dock window.
- Reacts to device connection and disconnection events.
Video720StreamBeam.mp4
- macOS 12.0 or later.
- Xcode with macOS development tools.
- Swift 5.
- A physical iPhone or iPad connected over USB.
StreamBeam depends on Apple system frameworks only. There are no package manager dependencies.
Clone the repository:
git clone https://github.com/jghg02/streambeam.git
cd streambeamOpen the Xcode project:
open StreamBeam.xcodeprojSelect the StreamBeam scheme, choose My Mac as the run destination, then build and run with Cmd + R.
You can also build from the command line:
xcodebuild -project StreamBeam.xcodeproj -scheme StreamBeam -configuration Debug buildIf you do not have the repository owner's signing certificate, either select your own team in Xcode or use an unsigned local build:
xcodebuild -project StreamBeam.xcodeproj -scheme StreamBeam -configuration Debug CODE_SIGNING_ALLOWED=NO buildOn first launch, macOS may ask for camera/video capture access because StreamBeam uses AVCaptureDevice to access connected device screen capture streams.
If permission was denied, update it in:
System Settings -> Privacy & Security -> Camera
Then quit and reopen StreamBeam.
- Launch StreamBeam.
- Connect an iPhone or iPad with a USB cable.
- Unlock the device and choose
Trust This Computerif iOS or iPadOS asks. - Use the StreamBeam menu bar icon to select the connected device.
- A preview window opens for that device.
- Hover over the preview window to show the recording button.
- Click the green button to choose a save location and start recording.
- Click the red stop button to finish the recording.
Recordings are saved as .mov files using the filename pattern:
StreamBeam_yyyyMMdd_HHmmss.mov
StreamBeam/
├── AppDelegate/ # Menu bar lifecycle, menu items, and device windows
├── DeviceMonitor/ # IOKit USB connection and disconnection monitoring
├── Log/ # Lightweight logging helper
├── Model/ # Device, capture session, and app metadata models
├── ScreenStream/ # AVFoundation capture sessions and preview layer bridge
├── Utils/ # Capture-device helper extensions
├── Views/ # SwiftUI views for preview, bezel, and About window
└── WindowsController/ # NSWindowController builder and window setup
StreamBeamTests/ # Unit test target
StreamBeamUITests/ # UI test target
StreamBeam is a SwiftUI and AppKit hybrid:
AppDelegatecreates the menu bar item, manages menu actions, and opens preview windows.DeviceMonitorlistens for USB device changes through IOKit and publishes device events with Combine.DeviceManagerenables screen capture devices, requests capture authorization, createsAVCaptureSessioninstances, and starts or stops recordings.CapturePreviewRepresentablebridgesAVCaptureVideoPreviewLayerinto SwiftUI withNSViewRepresentable.WindowControllerBuilderkeeps preview and About window creation consistent.
Run the test suite from Xcode with Cmd + U, or from the command line:
xcodebuild test -project StreamBeam.xcodeproj -scheme StreamBeam -destination 'platform=macOS'- Confirm the device is connected by USB.
- Unlock the device and accept the trust prompt.
- Try another USB cable or port.
- Quit and reopen StreamBeam after connecting the device.
- Confirm capture permission is enabled in macOS settings.
- Disconnect and reconnect the device.
- Close duplicate preview windows and select the device again from the menu bar.
- Make sure a preview session is active before clicking record.
- Choose a writable destination in the save panel.
- Check whether macOS has blocked capture access for the app build you are running.
That is expected. StreamBeam runs as an accessory app and is controlled from the macOS menu bar.
Issues and pull requests are welcome. For changes that affect capture behavior, please include:
- macOS version.
- Xcode version.
- Device model and iOS or iPadOS version.
- Steps used to verify preview and recording.
Before opening a pull request, build the app and run the tests when possible:
xcodebuild -project StreamBeam.xcodeproj -scheme StreamBeam -configuration Debug build
xcodebuild test -project StreamBeam.xcodeproj -scheme StreamBeam -destination 'platform=macOS'For local verification without signing, add CODE_SIGNING_ALLOWED=NO to the build command.
- Release packaging and notarization.
- Better multi-device preview selection.
- Recording status and error feedback improvements.
- Configurable preview window sizes.
- Automated coverage for device-monitor behavior.
StreamBeam is available under the Apache License 2.0. See LICENSE for details.
- Website: streambeam.tech
- Email: info@streambeam.tech
- Issues: GitHub Issues
