1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//! Apple capture backend.
//!
//! `AVFoundation` camera + mic, `ScreenCaptureKit` macOS screen, `ReplayKit` iOS screen — one
//! module covering both macOS and iOS per `docs/spec/crate-packaging.md`'s `apple` platform
//! suffix.
//!
//! - [`AppleCameraCapture::open`] — `AVCaptureSession` + a `define_class!` delegate (CPU NV12
//! frames, `VideoRange`). See [ADR-0001](adr/apple/0001-avfoundation-camera-capture.md).
//! - [`AppleMicrophoneCapture::open`] — `AVAudioEngine` input tap. See
//! [ADR-0002](adr/apple/0002-avaudioengine-microphone-capture.md).
//! - macOS [`AppleScreenCapture::open`] (`screencapturekit` module) — `ScreenCaptureKit`
//! `SCStream`. See [ADR-0003](adr/apple/0003-screencapturekit-macos-screen-capture.md).
//! - macOS [`AppleWindowCapture::open`] (`screencapturekit` module) — same `SCStream` recipe,
//! filtered to one `SCWindow` via `SCContentFilter::initWithDesktopIndependentWindow`. No iOS
//! equivalent: `ReplayKit` has no other-window capture concept (single foreground app). See
//! ADR-0003 § Open questions #5 / § Decisions confirmed with the user.
//! - iOS [`AppleScreenCapture::open`] (`replaykit` module) — `RPScreenRecorder` in-app capture,
//! **plus** [`AppleBroadcastExtensionCapture`] (a Broadcast Upload Extension push-sink — needs
//! a real host-project `.appex` extension target this crate cannot build itself). See
//! [ADR-0004](adr/apple/0004-replaykit-ios-inapp-screen-capture.md).
//!
//! **`AppleScreenCapture`'s `open()` signature genuinely differs by OS** (`&DesktopVideoCaptureConfig`
//! on macOS vs. parameterless on iOS, since `RPScreenRecorder` is a config-less singleton) — a
//! real, deliberate API difference, not an oversight; see each ADR's own § Decision.
//!
//! **Zero compile verification** — this dev environment cannot cross-compile Apple code at all
//! outside macOS/Xcode; see the crate's `apple-macos`/`apple-ios` CI jobs
//! (`.github/workflows/ci.yml`).
pub use AppleCameraCapture;
pub use ;
pub use AppleMicrophoneCapture;
pub use ;
pub use ;
// `AppleBroadcastExtensionCapture` has no non-Apple stub — its only real method,
// `push_sample_buffer`, takes a `&CMSampleBuffer`, an Apple-only type with no meaningful
// off-Apple stand-in; unlike every other type here, there is no honest way to expose a
// same-shaped stub. It is iOS-only even among real Apple targets (see `replaykit` module docs).
//
// `AppleWindowCapture` has no iOS stub either — genuinely macOS-only (see module docs above),
// unlike `AppleScreenCapture`/`AppleCameraCapture`/`AppleMicrophoneCapture`, which are real on
// both Apple sub-platforms and so need one shared stub shape off-Apple.
pub use ;