{"id":13510450,"url":"https://github.com/syncthing/syncthing-macos","last_synced_at":"2025-05-14T01:11:44.913Z","repository":{"id":41258465,"uuid":"60985120","full_name":"syncthing/syncthing-macos","owner":"syncthing","description":"Official frugal and native macOS Syncthing application bundle","archived":false,"fork":false,"pushed_at":"2025-04-08T11:29:38.000Z","size":22850,"stargazers_count":2953,"open_issues_count":36,"forks_count":155,"subscribers_count":51,"default_branch":"develop","last_synced_at":"2025-04-10T20:54:35.455Z","etag":null,"topics":["apple","backup","cloud-sync","file-sharing","file-sync","frugal","mac","macos","macosx","objective-c","osx","p2p","peer-to-peer","simple","swift","sync","sync-files","synchronization","syncthing"],"latest_commit_sha":null,"homepage":"https://syncthing.net","language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/syncthing.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.md","dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":["xor-gate"]}},"created_at":"2016-06-12T19:22:10.000Z","updated_at":"2025-04-10T20:26:00.000Z","dependencies_parsed_at":"2023-10-04T14:58:39.238Z","dependency_job_id":"a999d81e-6bc2-40f8-929c-dd5f62972614","html_url":"https://github.com/syncthing/syncthing-macos","commit_stats":null,"previous_names":["xor-gate/syncthing-macosx"],"tags_count":87,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syncthing%2Fsyncthing-macos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syncthing%2Fsyncthing-macos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syncthing%2Fsyncthing-macos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syncthing%2Fsyncthing-macos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/syncthing","download_url":"https://codeload.github.com/syncthing/syncthing-macos/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254049489,"owners_count":22006076,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apple","backup","cloud-sync","file-sharing","file-sync","frugal","mac","macos","macosx","objective-c","osx","p2p","peer-to-peer","simple","swift","sync","sync-files","synchronization","syncthing"],"created_at":"2024-08-01T02:01:39.541Z","updated_at":"2025-05-14T01:11:39.898Z","avatar_url":"https://github.com/syncthing.png","language":"Objective-C","readme":"# Syncthing for macOS\n\n[![Syncthing forum](https://img.shields.io/badge/syncthing-%20forum-blue.svg)](https://forum.syncthing.net/t/syncthing-for-macos)\n[![Downloads](https://img.shields.io/github/downloads/syncthing/syncthing-macos/total.svg)](https://github.com/syncthing/syncthing-macos/releases) [![Latest release](https://img.shields.io/github/release/syncthing/syncthing-macos.svg)](https://github.com/syncthing/syncthing-macos/releases/latest) [![license](https://img.shields.io/github/license/mashape/apistatus.svg?maxAge=2592000)](LICENSE)\n\n# Introduction\n\n`syncthing-macos` project is a [frugal](https://en.wikipedia.org/wiki/Frugality) [native](https://en.wikipedia.org/wiki/Native_(computing)) macOS [Syncthing](https://syncthing.net) tray application bundle. It bundles its own Syncthing instance and wraps Syncthing background process, making it behave more like a native macOS application and less like a command-line utility with a web browser interface.\n\nFeatures include:\n\n * Open the [Syncthing WebGUI](https://docs.syncthing.net/intro/gui.html) from the tray in your system preferred browser.\n * Optionally starts on login, so you don't need to set up Syncthing as a service.\n * Tray icon syncthing status indicator.\n * Retina ready icons for the Application bundle and status tray.\n * Automatic updates (using [Sparkle](https://sparkle-project.org) pushed from github releases).\n * Open shared folders in Finder.\n * Logfile written to `~/Library/Application Support/Syncthing/syncthing.log`, use Finder -\u003e Go -\u003e Go to Folder to open it.\n\n# Screenshot\n\n\u003cimg alt=\"screenshot.png\" src=\"https://user-images.githubusercontent.com/1050166/48157165-35970f00-e2cf-11e8-8009-10bfbf7fbce2.png\"\u003e\n\n# Installation\n\n**NOTICE**: This is the official Syncthing macOS application bundle. Please make sure you have no other [syncthing instances](https://docs.syncthing.net/users/autostart.html#macos)\n            or [wrappers running](https://docs.syncthing.net/users/contrib.html#mac-os) or else this application will not work!\n\nCurrently, OS X 10.13 or higher is necessary. **syncthing-macos** is packaged as a disk image as an application bundled with the [syncthing](https://github.com/syncthing/syncthing/releases) binary.\n\nTo install [just download the dmg](https://github.com/syncthing/syncthing-macos/releases/latest), mount it and drag and drop the application to install. The only necessary configuration is to set the API key and URL when provisioning a remote syncthing instance, the local instance is auto-configured. The `syncthing-macos` application bundle disables the auto-updater of `syncthing` as it has its own update mechanism using [Sparkle](https://sparkle-project.org/).\n\nThe latest version is available at [Github Releases](https://github.com/syncthing/syncthing-macos/releases/latest), or it can also be installed using [homebrew](https://github.com/Homebrew/homebrew-cask) [`brew install --cask syncthing`](https://formulae.brew.sh/cask/syncthing)\n\n# Why\n\nAll cross-platform approaches are not able to use all the native facilities Apple macOS provides. Including auto-updates,\n vector icon set (retina-ready) and creating an application bundle. GUIs are designed with XCode and everything\n is coded in a mix of Objective-C and Swift which is \"the native approach\".\n\n# Goal\n\nThe goal of this project is to keep the native macOS Syncthing tray lean but usable. No graphs, no advanced configuration\n windows. It just provides a very simple wrapper, so users are not aware syncthing ships as a commandline application. It strives to have a usability of good-by-default and should always follow the [Apple Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/macos) to feel as much as a native application as possible.\n\n# Known bugs\n\nSee the [issue tracker (bug tag filtered)]([https://github.com/syncthing/syncthing-macos/issues](https://github.com/syncthing/syncthing-macos/issues?q=is%3Aissue+is%3Aopen+label%3Abug)) for the current status.\n\n# Contributions\n\n[Contributions](CONTRIBUTING.md) and [issue reports](https://github.com/syncthing/syncthing-macos/issues) are welcome.\n\n# License\n\n[MIT](LICENSE)\n\n# FAQ: Frequently asked questions\n\n## macOS version support\n\n* From release v1.27.7 macOS 11 or probably higher is required (see issue [#218](https://github.com/syncthing/syncthing-macos/issues/218))\n* Last v1.27.6-1 release is compatible with macOS 10.13 (see issue [#217](https://github.com/syncthing/syncthing-macos/issues/217))\n* From release v1.20.0-1 macOS 10.13 or higher is required\n* Until release v1.19.2-1 macOS 10.12 is required (see issue [#177](https://github.com/syncthing/syncthing-macos/issues/177))\n* From release v1.14.0-1 macOS 10.12 is required\n* Until release [v1.13.1-1](https://github.com/syncthing/syncthing-macos/releases/tag/v1.13.1-1) macOS 10.11 or higher is supported (see issue [#148](https://github.com/syncthing/syncthing-macos/issues/148) why)\n\nAuto-update [must be manually disabled](https://github.com/syncthing/syncthing-macos?tab=readme-ov-file#disable-automatic-update-checker) for unsupported OS versions.\n\n## Preferences\n\n`syncthing-macos` is designed to run its own syncthing instance and automatically detect the API key.\nThe preferences window is used to point to a local running instance, a remote instance is not supported.\nIt is possible to run your own instance and point to it for advanced/development purposes.\nYou should only change the settings if you know what you are doing.\n\nSetting extra syncthing commandline parameters is a hidden feature. You need to write these using\nthe application defaults configuration. The only current limitation the parameters cannot contain spaces!.\nIn the example below the audit log is enabled:\n\n```\ndefaults write com.github.xor-gate.syncthing-macosx Arguments '--audit --auditfile=/Users/JohnDoe/staudit.log'\n```\n\n## Default IP address change\n\nWhen the default IP address is changed from 127.0.0.1 to a routable one like e.g 192.168.1.102 the tray application\npreferences need to be set also. Or else the API cannot be accessed and will stay 'Offline'. If you broke the\nconfiguration you can manually edit the file under the `~/Library/Application Support/Syncthing/config.xml` using\nFinder with Go -\u003e Go to folder. And restart the syncthing service from the tray.\n\n## Resolve xattr sync from macOS Ventura 13.0 to \u003c 13.0 devices (problem with `com.apple.provenance` metadata)\n\nWhen using the xattr synchronisation feature it fails when syncing from macOS 13.0 to macOS \u003c 13.0.\nWhen using this feature one must stop Syncthing and manually edit the configuration XML file located\nat `/Users/\u003cuser\u003e/Library/Application Support/Syncthing/config.xml`. Or the location when running an\nSyncthing daemon instance not managed the application bundle). Manually editing the configuration file\nis necessary because the web UI doesn't support xattr filter management just yet (release v1.22.1-1).\n\nPer shared folder the `xattrFilter` must be configured as follows:\n\n```\n\u003cfolder id=\"...\" ...\u003e\n  \u003cxattrFilter\u003e\n    ...\n    \u003centry match=\"com.apple.provenance\" permit=\"false\"/\u003e\n    \u003centry match=\"*\" permit=\"true\"/\u003e\n  \u003c/xattrFilter\u003e\n\u003c/folder\u003e\n```\n\nNOTE: see the `com.apple.provenance` `xattrFilter` `entry`.\n\nSee also [#185](https://github.com/syncthing/syncthing-macos/issues/185) and the\n[forum post](https://forum.syncthing.net/t/com-apple-provenance/19262) for more information.\n\n## Uninstallation\n\nOn Mac OS X you drop the application from the Application folder to your Trash. \nBut there are some user specific files are kept elsewhere, which are located under \n`$HOME/Library/Application Support/Syncthing`. The files in this folder are the configuration,\nencryption/profile files and the database cache. For more information see\n[docs.syncthing.net/users/config.html](https://docs.syncthing.net/users/config.html#description).\n\n## Disable automatic update checker\n\nBy default the Syncthing macOS application checks automatically for updates. To disable (or re-enable) the \nauto update check one must set the Sparkle updater parameter from the commandline:\n\n```\ndefaults write com.github.xor-gate.syncthing-macosx SUEnableAutomaticChecks 0\n```\n\nThis setting is un-adviced and therefor only available from the commandline. When your system is not \nsupported anymore and don't want to get notified of unsupported updates disabling then is recommended.\n\n# Prerequisites for building/using everything in this repository\n\nBefore compiling git submodules needs to be present:\n\n```\ngit submodule update --init\n```\n\n- Xcode, for the Objective-C/Swift compiler\n- Python 3, for the update-release.py script\n  - Needs [semver](https://pypi.org/project/semver/) from pip\n- Cocoapods for updating Objective-C/Swift 3th party dependencies\n- Golang, only needed for Sparkle Github releases to Appcast XML tool\n\n# Using XCode\n\nThe new `syncthing.xcworkspace` must be used when coding in XCode.\n\n# Compiling from Terminal\n\nBuild with XCode or run:\n\n```\nmake debug\n```\n\nIt will automaticly download syncthing universal binary and add it to the Application Bundle.\n\nFor release builds signing the application build and creating an distributable DMG:\n\n```\nmake release-dmg\n```\n\nThe script will select the first available Developer ID and sign the app with it. To specify the signing identity, use `SYNCTHING_APP_CODE_SIGN_IDENTITY` environment variable:\n\n```\nSYNCTHING_APP_CODE_SIGN_IDENTITY=\"Mac Developer: foo@bar.com (XB59MXU8EC)\" make release-dmg\n```\n\n# Design and useful information\n\n## Settings\n\nThe Syncthing settings use the NSDefaults facility. From the commandline all settings can be shown with:\n\n```\njerry@Jerrys-iMac ~ % defaults read com.github.xor-gate.syncthing-macosx\n{\n    ApiKey = rR7YrEDLKhNETJZKgySmnYPZvebY9qgk;\n    Executable = \"/Applications/Syncthing.app/Contents/Resources/syncthing/syncthing\";\n    SUEnableAutomaticChecks = 1;\n    SUHasLaunchedBefore = 1;\n    SULastCheckTime = \"2021-01-08 12:05:53 +0000\";\n    SUSendProfileInfo = 0;\n    StartAtLogin = 1;\n    URI = \"http://127.0.0.1:8384\";\n}\n```\n\n### Override Syncthing Daeomon `Executable` property (power-users only)\n\nIf you want to use the nice GUI but have your own executable located outside the `Syncthing.app` bundle,\nthen the `Executable` configuration parameter can be manually overwritten with the `defaults` commandline \ntool using builtin Terminal or iTerm2. The last arguments should be changed to the syncthing daemon golang\napplication.\n\n```\ndefaults write com.github.xor-gate.syncthing-macosx Executable /Users/jerry/develop/Syncthing/exe/syncthing\n```\n\nTo restore it back to the bundle path just use delete of the property. It will automatically reset it back.\n\n```\ndefaults delete com.github.xor-gate.syncthing-macosx Executable\n```\n\n## Dependency management\n\n[CocoaPods](https://cocoapods.org/) is used for dependency management. It can be installed\nwith [Homebrew](https://brew.sh/) package manager. For more information about CocoaPods read\nthe [CocoaPods Guides](https://guides.cocoapods.org/).\n\n## Versioning scheme\n\nIt uses the shipped syncthing executable version appended with a `-\u003cbundle index\u003e` number.\nSo for Syncthing `0.14.28` with first build/package it is versioned as `0.14.28-1`.\nCurrently there is no need for having a separate version for `syncthing-macos`. As it also\nkeeps the wrapper tightly coupled with the syncthing releases.\n\n## Compilation and packaging process\n\n* Xcode builds all sources\n* Syncthing resource is fetched with `syncthing/Scripts/syncthing-resource.sh`\n* Fancy DMG disk image is generated with `syncthing/Scripts/create-dmg.sh`\n  * The version part of the DMG name is fetched from `syncthing/Info.plist, key CFBundleShortVersionString`\n* Both the app bundle and the DMG are signed with the first available Developer\n  ID certificate, if found (or the one specified through `SYNCTHING_APP_CODE_SIGN_IDENTITY` environment variable)\n\n`syncthing/syncthing-macos` will only ship\n[stable releases and no release candidates](https://forum.syncthing.net/t/introducing-stable-releases-and-release-candidates/9167)\nof the Syncthing Service (daemon).\n\n## Apple Application Notarize\n\nAfter the dmg is created it must be send to Apple to be notarized. It can be checked with `spctl`\nif the app is correctly verified by Apple for distribution:\n\n```\nspctl -a -t exec -vvv /Volumes/Syncthing/Syncthing.app\n/Volumes/Syncthing/Syncthing.app: accepted\nsource=Notarized Developer ID\norigin=Developer ID Application: Jakob Borg (LQE5SYM783)\n```\n\nWhen it is not correctly notarized the following output is seen (note the source):\n\n```\nspctl -a -t exec -vvv /Volumes/Syncthing/Syncthing.app\n/Volumes/Syncthing/Syncthing.app: accepted\nsource=Developer ID\norigin=Developer ID Application: Jakob Borg (LQE5SYM783)\n```\n\nSee also the Apple Developer documentation at \u003chttps://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution\u003e\n\n## Release management\n\nActivate the Python virtual environment with `semver` module installed. E.g `source venv/bin/activate`.\n\nTo update the bundled syncthing the `make release-update` must be run from the main folder which does\nbasicly these steps automatically:\n* Update `syncthing/Scripts/syncthing-resource.sh`, `SYNCTHING_VERSION`\n* Update `syncthing/Info.plist`\n  * `CFBundleShortVersionString`: User readable string (e.g `1.27.10-1`)\n  * `CFBundleVersion`: Incrementing version counter (e.g `102701001` for `1.27.10-1`)\n\n* When the git branch develop or release pushed to github the Github actions CI server automatically builds debug and release\n* Manually download the release `.dmg` from [github.com actions](https://github.com/syncthing/syncthing-macos/actions/workflows/build-syncthing-macos.yml) which is correctly signed and notarized\n* Manually [create a new Github release](https://github.com/syncthing/syncthing-macos/releases/new) with tag `v\u003cmajor\u003e.\u003cminor\u003e.\u003cpatch\u003e-\u003cbundle index\u003e`\n* Run deployment of Sparkle updater [appcast.xml](https://github.com/syncthing/syncthing-macos/actions/workflows/generate-appcast.yml). Which turns [github releases JSON into a Sparkle appcast.xml file](https://github.com/syncthing/syncthing-macos/tree/develop/cmd/ghreleases2appcast). (See also [Sparkle documentation](https://sparkle-project.org/documentation/)) to push to users.\n","funding_links":["https://github.com/sponsors/xor-gate"],"categories":["Objective-C","Applications","前端开发框架及项目","apple","Table of Contents"],"sub_categories":["Other","iOS_Swift应用开发","📦 Other (22)","Sync"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsyncthing%2Fsyncthing-macos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsyncthing%2Fsyncthing-macos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsyncthing%2Fsyncthing-macos/lists"}