Repository of KDE Connect macOS

This project is the macOS version of the group of applications called KDE Connect, which uses the LAN network to integrate devices together. For information on KDE Connect, check out:

This project is based on iOS codebase (kdeconnect-ios d24e5ca5ebb1ae446de8eeab5f2d619e46fbd996). Compatibility with iOS is preserved at the maximum effort.

If you would like to talk to the KDE Connect developers & contributors (for questions or if you would like to contribute!), please join the KDE Connect development Telegram channel.

Features

Demo Screenshot

  • Device List, Discovery, and Pairing
  • Ping
  • Battery Status (send only, does not always work)
  • Clipboard: Push & Receive Text
  • Share: Send and Receive File
  • Settings

Contributing

Contribution including bugs, feature requests, and merge requests are highly welcomed. To get started, you might find the following information helpful.

We keep track of tasks for KDE Connect macOS using Phabricator and the following Tasks section, and accept changes through KDE Invent GitLab merge requests.

Bug Reporting

Please feel free to give feedback about/report bugs in the TestFlight version through:

  • System Preferences app: you can report general information such as the number of app launches and crashes by enabling System Preferences > Security & Privacy > Analytics & Improvements > Share with App Developers option
  • TestFlight’s feedback: click “Send Beta Feedback” button to send a feedback email to us
  • TestFlight’s integrated crash feedback system: upon app crashing, an alert will appear asking you if you would like to send the crash data along as feedback
  • KDE Bugzilla: As we currently do not have a macOS component on Bugzilla, you might use the iOS component instead.

macOS

To compile or run this project, a latest Xcode with an Apple ID (Apple Developer Program enrollment is not necessary) is required. As Xcode could be installed only on macOS, any interested developer should have a latest macOS environment.

The best and most stable way is to purchase an Apple device with latest macOS supported. If the interested developer has insufficiency in funds, there are several alternative options:

  • Virtual Machine: A convenient but not performance-optimized way, and there are many tutorials online.
  • Hackintosh: The developer could try to run macOS with amd64 arch on their own PCs. See OpenCore.
  • Public Devices: The developer might visit nearby universities or public libraries to seek the access for an Apple device.

Frameworks

We are using Swift and SwiftUI for frontend, plus Swift and Objective-C for backend. Since KDE Connect macOS makes heavy use of both Swift and Objective-C and needs to keep compatibility with iOS, it can be a bit confusing at first, so feel free to ask the developers some questions.

Tasks

Many tasks only include a high level description and could be easily misinterpreted, so we would recommend first starting a conversation in the task you are interested in implementing with your high level plan before diving into coding.

  • DevicesView Layout: We are currently using adaptive LazyVGrid. It would be better to implement an AirDrop-like window, i.e., to layout the items along the center of an arc path, and use the grid layout as a fallback when there are too many devices.
  • PeerSettingsView Editable List: The editable list should be reimplemented, as the current list does not support night mode and does not look or behave (e.g., Command+A not supported) like the editable list in System Preferences (e.g., WiFi).
  • App Singleton: More than one MainView or AskNotificationView for this app should not be allowed to avoid conflicts. If we would like to let user close MainView window and keep KDE Connect macOS running in the background, we might also move backend services to App from MainView.
  • AppDelegate Menu: We would like to remove non-necessary application menus set by the system (e.g., File, Edit, View), but we currently manually remove every time when the window updates, which might be replaced by a better approach.
  • App Notification Permission: Like the previous task, to detect changes, we currently manually check every time when the window updates.
  • Battery: We still need to show battery status received from other devices, and the battery status send sometimes does not work, albeit we manually send at window updates.
  • DeviceItemView Secondary Click: Show unpair only but not actions of plugins if the device is paired but not connected.
  • Integration: The macOS codebase will be shared with KDE Connect iOS, either by integrating the macOS Views into iOS project, or extracting the backend and plugins from seperate iOS and macOS repositories to a public repository, and rebase will be applied.
  • More Plugins Supported by iOS: Find My Device, Presenter Control Sender, Mouse Control Sender, Run Command Sender.
  • More Features Will Also Be Supported by iOS: Keyboard Control Sender, Trusted Networks, i18n & l10n.
  • Plugins Not Supported by iOS: Mouse Control Receiver, Keyboard Control Receiver, Presenter Control Receiver, Run Command Receiver.
  • Multi-device Experience Extension for Remote Input: Requires completion of Remote Control Receiver.
  • More: New feature requests are welcomed.

GitHub

View Github