mirror of
https://github.com/kunkundi/crossdesk.git
synced 2026-08-31 13:32:10 +08:00
71 lines
3.1 KiB
Markdown
71 lines
3.1 KiB
Markdown
# CrossDesk Mobile (native iOS)
|
|
|
|
This target is a native MiniRTC controller. It uses the same WebSocket
|
|
signaling, libnice ICE, SRTP/RTP and data-stream protocol as the desktop app.
|
|
There is no `WKWebView` or browser runtime.
|
|
|
|
## Requirements
|
|
|
|
- Xcode 16 or newer
|
|
- Xmake available on `PATH`
|
|
- A physical arm64 iPhone or iPad running iOS 16 or newer
|
|
|
|
## Build
|
|
|
|
Open `CrossDeskMobile.xcodeproj`, select the `CrossDeskMobile` scheme and a
|
|
physical device, then build. The first build phase compiles MiniRTC and the
|
|
shared CrossDesk protocol, then merges their iPhoneOS static dependencies into
|
|
a local archive under `Vendor/`.
|
|
|
|
You can also verify the target without code signing:
|
|
|
|
```sh
|
|
xcodebuild -project ios/CrossDeskMobile.xcodeproj \
|
|
-scheme CrossDeskMobile \
|
|
-configuration Debug \
|
|
-destination 'generic/platform=iOS' \
|
|
CODE_SIGNING_ALLOWED=NO build
|
|
```
|
|
|
|
The first connection to a signaling server provisions and stores an identity
|
|
for that server. Remote control sessions then log in as `C-<identity>` and use
|
|
the desktop-compatible `DisplayN`, `control_audio`, `mouse`, `keyboard`,
|
|
`control_data`, `clipboard`, `file`, and `file_feedback` streams.
|
|
|
|
## Video codecs
|
|
|
|
Every iOS build includes VideoToolbox, OpenH264, dav1d, libaom, and SVT-AV1. H.264 uses
|
|
VideoToolbox by default; the in-app **Settings > Video Codec** selector switches
|
|
H.264 software processing to OpenH264. AV1 encoding uses SVT-AV1 and AV1 decoding
|
|
uses dav1d; VideoToolbox AV1 hardware decoding is currently unsupported.
|
|
|
|
## Physical-device test checklist
|
|
|
|
Run the app from Xcode on a physical device and connect to a current desktop
|
|
build. Test the features in this order so a media problem is not confused with
|
|
a data-channel problem:
|
|
|
|
1. **Video:** after the connection turns green, the waiting panel should be
|
|
replaced by the remote desktop. The status bar reports the decoded size and
|
|
frame count.
|
|
2. **Audio:** play continuous sound on the remote computer, then toggle the
|
|
speaker button. Audio is Opus-decoded by MiniRTC and played as 48 kHz mono
|
|
16-bit PCM through `AVAudioEngine`.
|
|
3. **Clipboard:** copy a short text value on the phone and choose **Send local
|
|
clipboard**. Copy a different value on the desktop and confirm that it is
|
|
written to the iOS pasteboard. Text is limited to 128 KiB.
|
|
4. **Displays:** open the display menu, switch every listed monitor, and check
|
|
that the frame counter restarts and the selected monitor appears after a
|
|
new key frame.
|
|
5. **Files:** use the folder button to pick a small file, then send a file back
|
|
from the desktop. Progress is ACK-driven. Received files are stored in the
|
|
app's `Documents/Received` directory and can be exported with the share
|
|
button or Finder's Files tab.
|
|
|
|
For black-screen diagnosis, keep Xcode's device console open and filter for
|
|
`CrossDesk`. A working pipeline prints both `VideoToolbox decoded frame` from
|
|
MiniRTC and `CrossDesk received decoded frame` from the iOS bridge. If only the
|
|
first message appears, verify that the selected stream is named `Display1`,
|
|
`Display2`, and so on. If neither appears, update and rebuild the desktop side
|
|
and request a key frame.
|