Menu

Tree [b43a1e] master /
 History

HTTPS access


File Date Author Commit
 .beads 2026-03-15 Fredrick Meunier Fredrick Meunier [0364e2] Update beads hooks and metadata
 FuseGenerator 2026-03-15 Fredrick Meunier Fredrick Meunier [6cf2ed] Remove FuseGenerator submodule
 FuseImporter 2026-03-15 Fredrick Meunier Fredrick Meunier [d8acdb] Remove FuseImporter submodule
 .gitignore 2026-03-15 Fredrick Meunier Fredrick Meunier [8539ea] Squashed 'FuseImporter/' content from commit 72...
 .gitmodules 2026-03-15 Fredrick Meunier Fredrick Meunier [65195d] Point fuse submodule to GitHub and update revision
 Makefile 2026-03-13 Fredrick Meunier Fredrick Meunier [fa375a] Add resumable notarization workflow to release ...
 README 2026-03-15 Fredrick Meunier Fredrick Meunier [b43a1e] Updates to reflect gitsubtree migration for Fus...

Read Me

Fuse for macOS Source Distribution

This is the source distribution of the macOS version of Fuse, targeting
Apple Silicon (arm64) Macs running macOS 11.5 or later, built with Xcode.

You will also need ruby, jekyll and jekyll-apple-help to build the in-app
help content:

$ gem install jekyll bundler

(homebrew is a convenient way to install ruby first.)

Full build instructions:

Clone the repository and initialise submodules:

  git clone --recurse-submodules git://git.code.sf.net/p/fuse-for-macosx/fuse-for-macos
  cd fuse-for-macos

Build everything in one step:

  make deps && make fuse

Or broken down by stage:

  make third-party   # builds audiofile.framework and gcrypt.framework
  make plugins       # builds FuseGenerator.qlgenerator and FuseImporter.mdimporter
  make fuse          # runs code generation then builds Fuse.app (Deployment config)

Note: `FuseGenerator/` and `FuseImporter/` are vendored as git subtrees in this
repository (not git submodules).

- `FuseGenerator/` subtree baseline: `git@github.com:fmeunier/FuseGenerator.git`
  tag `fuse-generator-1.5.0`
- `FuseImporter/` subtree baseline: `git@github.com:fmeunier/FuseImporter.git`
  branch `master` (contains libspectrum subtree conversion)

Maintainers can update them with:

  git fetch fusegenerator --tags
  git subtree pull --prefix=FuseGenerator fusegenerator <tag> --squash
  git fetch fuseimporter
  git subtree pull --prefix=FuseImporter fuseimporter <ref> --squash

The finished app is at:

  fuse/fusepb/build/Deployment/Fuse.app

Other useful targets:

  make adhoc            # ad-hoc sign and package as Fuse-adhoc.zip (local testing only)
  make notarize         # submit, wait, and staple Fuse.app (Developer ID required)
  make notarize-status  # inspect the current notarization submission
  make notarize-log     # fetch the current notarization log into .notary-log.json
  make dist             # create Fuse.zip from the stapled app (Developer ID required)
  make list-teams       # list available Developer ID signing identities
  make clean            # clean Fuse.app build products
  make clean-deps       # clean all prerequisite build products

Note: the app is ad-hoc signed by default. It will run on the machine it was
built on but Gatekeeper will block it on other machines. Notarized distribution
requires an Apple Developer Program membership.

Maintainers can keep personal Developer ID settings out of git by copying
`fuse/fusepb/LocalSigning.xcconfig.example` to
`fuse/fusepb/LocalSigning.xcconfig` and filling in their own Team ID. The
shared Xcode project loads that file only when it exists, so contributor builds
stay portable.

The top-level `Makefile` uses the same local file as its default source for
`DEVELOPMENT_TEAM`, and resolves the matching `Developer ID Application`
certificate from your keychain automatically. You can still override either
value explicitly on the `make` command line when needed.

After creating `fuse/fusepb/LocalSigning.xcconfig` with your Team ID and
installing your Developer ID certificate in the keychain, you can usually just
run:

  make dist

If you need to force a specific identity or team, you can still do so
explicitly, for example:

  make dist CODE_SIGN_IDENTITY='Developer ID Application: Your Name (XXXXXXXXXX)' \
            DEVELOPMENT_TEAM=XXXXXXXXXX

`make dist` runs the full release flow: build, notarize, staple, and then zip
the stapled app as `Fuse.zip`. `make notarize` stops after stapling.

If Apple's notary service is slow, you do not need to keep a terminal blocked in
`--wait`. `make notarize` now stores the submission ID in
`.notary-submission-id`, so you can check progress later with
`make notarize-status`, fetch details with `make notarize-log`, or resume the
wait-and-staple steps with `make notarize-wait` and `make notarize-staple`.

If you have any problems you can email me at fredm@spamcop.net, and I look
forward to your patches and bug fixes!

Fred
MongoDB Logo MongoDB