Fuse for macOS Fuse for macOS
Brought to you by:
fredm
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