CocoaSpice brings native Cocoa bindings to SPICE GTK and is used to build SPICE clients for macOS and iOS.
Features
- Renders displays and cursor into Metal textures
- Support copy/paste through custom pasteboard binding
- TCP socket connections and Unix socket file
- Cursor and scroll-wheel channel
- Take screenshot of current display
- USB sharing and enumeration
Usage
- Add this repository to your project through Xcode: File -> Add Packages...
- Link your target with:
libglib-2.0,libgstreamer-1.0,libusb-1.0(optional),libspice-client-glib-2.0. - Either add target
CocoaSpiceNoUsborCocoaSpiceto your dependencies.
Start SPICE GTK
You must do this before using any other API. This starts a worker thread for SPICE GTK.
import CocoaSwift guard CSMain.shared.spiceStart() else { // handle worker failed to start ... } defer { // use this to stop and clean up worker CSMain.shared.spiceStop() }
Open a connection
CSConnection is the main interface to CocoaSpice. You can create a connection from TCP (shown below) or with a Unix socket file.
import CocoaSwift let connection = CSConnection(host: "127.0.0.1", port: "4444") connection.delegate = yourConnectionDelegate; guard connection.connect() else { // handle connection failed to be created ... }
CocoaSpice follows the delegate model so connection events are handled through delegate methods. Implement the CSConnectionDelegate to be informed to SPICE client events.
Testing
TODO: Implement testing