fmeunier/fuse-for-macos
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
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