Skip to content

fmeunier/fuse-for-macos

Repository files navigation

Fuse for macOS Source Distribution

This is the source distribution of the macOS version of Fuse, targeting
Apple Silicon (arm64) Macs running macOS 13.0 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 the submodule:

  git clone --recurse-submodules git@github.com:fmeunier/fuse-for-macos.git
  cd fuse-for-macos

If you already cloned without submodules, initialise just `fuse` with:

  git submodule update --init fuse

Build everything in one step:

  make fuse

This builds `Fuse.app`, the embedded Quick Look generator, the Spotlight
importer, and the staged Unix library dependencies used by the application.

Repository layout notes:

- `fuse/` is the upstream emulator source submodule
- `fusepb/` is the top-level macOS wrapper/app tree
- plugin source lives in-tree under `fusepb/plugins/`
- staged managed dependencies live under `fusepb/deps/`

The finished app is written to:

  fusepb/build/Deployment/Fuse.app

Other useful targets:

  make clean            # remove Fuse build products
  make adhoc            # ad-hoc sign and package as Fuse-adhoc.zip
  make notarize         # build, notarize, and staple Fuse.app
  make notarize-status  # inspect the current notarization submission
  make notarize-log     # fetch the current notarization log into .notary-log.json
  make dist             # build, notarize, staple, and package the full release zip
  make list-teams       # list available Developer ID signing identities

Signing and notarization

The default build is ad-hoc signed. 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.

To keep signing settings out of git, copy:

  fusepb/LocalSigning.xcconfig.example

to:

  fusepb/LocalSigning.xcconfig

and fill in your own Team ID. The top-level `Makefile` uses that file as the
default source for `DEVELOPMENT_TEAM` and resolves the matching
`Developer ID Application` certificate from your keychain automatically.

After creating `fusepb/LocalSigning.xcconfig` and installing your
Developer ID certificate, 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 package
the final `Fuse.zip` release archive. That archive contains the top-level
`Fuse for macOS/` folder with `Fuse.app`, the bundled docs/resources, and
`Debug Symbols/Fuse.app.dSYM`. `make notarize` stops after stapling.

If Apple's notary service is slow, `make notarize` stores the submission ID in
`.notary-submission-id`, so you can continue later with:

  make notarize-status
  make notarize-log
  make notarize-wait
  make notarize-staple

Maintainer notes

`libspectrum` is vendored in this repo as a squashed git subtree at:

  fusepb/deps/libspectrum

The current upstream remote used for subtree maintenance is the official GitHub
mirror:

  git@github.com:fuse-emulator/libspectrum.git

If you do not already have the maintenance remote configured locally:

  git remote add libspectrum-upstream git@github.com:fuse-emulator/libspectrum.git
  git fetch libspectrum-upstream --tags

To update it:

  git fetch libspectrum-upstream --tags
  git subtree pull --prefix=fusepb/deps/libspectrum libspectrum-upstream <tag-or-commit> --squash

If the update changes Autotools inputs inside the vendored tree (for example
`configure.ac`, `Makefile.am`, or `m4/` files), the dependency build will
normally regenerate the committed bootstrap files automatically. To refresh
those files manually without doing a full build, run:

  ./fusepb/scripts/bootstrap-libspectrum.sh

After any `libspectrum` subtree update, review and resync these locally patched
files before committing:

  fusepb/config.h
  fusepb/generate.pl
  fusepb/libspectrum.h

Then verify with:

  make fuse

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

Fred

About

Fuse for macOS (Apple Silicon build), maintained as this project's canonical wrapper repository with local patches and ongoing sync from upstream Fuse components.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors