macOS

Ci sono diversi modi per farlo, questa guida presuppone che Xcode, Git e Homebrew siano già installati.

La sfida più grande è probabilmente trovare le versioni di tutti gli strumenti che funzionano insieme, specialmente dato che parti della toolchain come Xcode e LLVM sono dettate dalla tua versione di macOS. Le versioni utilizzate in questa guida probabilmente non sono quelle che dovresti utilizzare. Come punto di partenza per capire quali versioni utilizzare, guarda il workflow di build di GitHub per la versione di RustDesk che vuoi compilare. Scegli il tag per vedere il file nell’angolo in alto a sinistra della pagina. Ma questo potrebbe non funzionare necessariamente perché gli strumenti macOS forniti con il runner di GitHub potrebbero non essere le stesse versioni di quelle sul tuo sistema locale.

Export

export viene utilizzato per impostare varie variabili ambientali. Quando esegui export, quella variabile viene impostata solo per la sessione terminale corrente, e quindi deve essere ripetuta per ogni nuova finestra terminale che vuoi utilizzare per compilare RustDesk, ora o in futuro. Generalmente, è preferibile aggiungere tutti gli export a uno script che viene eseguito automaticamente per ogni terminale che viene aperto, ad esempio ~/.bash_profile. I comandi export completi elencati qui possono essere semplicemente aggiunti al file, ma devono anche essere eseguiti nel terminale corrente perché il file non viene letto fino a quando non viene aperto un nuovo terminale.

Installa gli strumenti che utilizzeremo da Homebrew

brew install python3 create-dmg nasm cmake gcc wget ninja pkg-config wget rustup

Alcune delle installazioni potrebbero fallire perché alcune delle cartelle di destinazione non esistono sul nostro sistema. In quel caso, crea la cartella, imposta proprietario e permessi ed esegui nuovamente il comando brew. Esempio se /usr/local/include non esiste:

sudo mkdir /usr/local/include
sudo chown <username>:admin /usr/local/include
sudo chmod 775 /usr/local/include

Installa vcpkg

Vcpkg viene utilizzato per gestire le dipendenze C/C++ utilizzate da RustDesk. Decidi dove vuoi l’installazione ed esegui quanto segue dalla cartella in cui vuoi che risieda la cartella vcpkg. In questo esempio /Users/<username>/repos/ viene utilizzato come posizione, e il tag 2023.04.15 viene utilizzato come versione.

git clone https://github.com/microsoft/vcpkg
cd vcpkg
git checkout 2023.04.15
./bootstrap-vcpkg.sh -disableMetrics
./vcpkg install libvpx libyuv opus aom
export VCPKG_ROOT=~/repos/vcpkg

Installa e configura Rust

Utilizziamo rustup per gestire Rust, che è già stato installato sopra utilizzando Homebrew. Ma deve ancora essere configurato. Segui le istruzioni e assicurati che sia rustup che rustc siano nel PATH. In questo esempio utilizziamo la versione di Rust 1.75.0, ma potresti dover utilizzare una versione diversa. Puoi installare e gestire più versioni di Rust con rustup.

rustup-init
rustup default 1.75.0
rustup component add rustfmt

Per una panoramica delle toolchain Rust installate e predefinite, esegui rustup show.

Scarica i file sorgente di RustDesk

Decidi dove vuoi i file sorgente di RustDesk ed esegui quanto segue dalla cartella in cui vuoi che risieda la cartella rustdesk. In questo esempio /Users/<username>/repos/ viene utilizzato come posizione.

git clone --recurse-submodules https://github.com/rustdesk/rustdesk
cd rustdesk/libs/portable/
python3 -m pip install --upgrade pip
pip3 install -r requirements.txt

Se python3 o pip sono sconosciuti, aggiungili al PATH con qualcosa come (usa i nomi delle tue cartelle effettive):

export PATH=~/Library/Python/3.9/bin:$PATH

Una volta fatto, esegui nuovamente i comandi falliti. Ricorda anche di modificare ~/.bash_profile.

Installa i componenti dell’interfaccia utente

RustDesk può essere compilato utilizzando sia Sciter che Flutter. Entrambi necessitano di componenti aggiuntivi, quindi segui i passaggi per la versione pertinente, o entrambe.

Sciter

Dalla cartella rustdesk, esegui:

wget https://github.com/c-smile/sciter-sdk/raw/master/bin.osx/libsciter.dylib

Flutter

FVM ti consente di gestire quale versione di Flutter viene utilizzata, ed è probabilmente il modo più semplice per poter facilmente provare diverse versioni di Flutter.

brew tap leoafarias/fvm
brew install fvm cocoapods

Installa e usa, ad esempio Flutter 3.16.9, con:

fvm global 3.16.9

FVM è pensato per utilizzare una configurazione più complessa dove può fornire diverse versioni di Flutter per progetti diversi, ma questo va oltre lo scopo di questa guida. Invece, aggiungi semplicemente la posizione del Flutter predefinito fornito da FVM al tuo PATH manualmente, il che significa che devi utilizzare fvm global per cambiare versione di Flutter:

export PATH=$HOME/fvm/default/bin:$PATH

Una volta fatto, dovresti disabilitare la telemetria e controllare se tutto è OK:

flutter --disable-analytics
dart --disable-analytics
flutter doctor -v

Non importa se alcuni dei controlli falliscono, di solito lo fanno, quello che è importante è che il controllo per l’ambiente che intendi utilizzare sia OK, ovvero Xcode. Se vengono segnalati problemi, affrontali prima di andare avanti.

Una volta che Flutter è attivo e funzionante, è il momento di installare il “bridge” che lega insieme Rust e Flutter. Ecco un’altra delle versioni che devono funzionare insieme a tutto il resto, in questo esempio utilizziamo 1.80.1:

cargo install flutter_rust_bridge_codegen --version "1.80.1" --features "uuid"

Build

Compila dalla cartella rustdesk. Compila la versione Sciter con:

python3 ./build.py

Compila la versione Flutter con:

flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart --c-output ./flutter/macos/Runner/bridge_generated.h
python3 ./build.py --flutter

Se tutto va bene, ora dovresti avere un file dmg pronto per l’installazione nella tua cartella rustdesk.