Skip to content
WolfWave
Build from source

Build from Source

Build WolfWave from source on macOS. Xcode 16, Swift 5.9, macOS 26. Configure Twitch + Discord client IDs and run the open-source menu bar app locally in minutes.

This is for developers building WolfWave from source. Just want to use the app? Grab the Installation guide instead.

Before you start

You'll need:

  • macOS 26.0+ (Tahoe)
  • Apple Silicon (M1 or later)
  • Xcode 16.0+
  • Swift 5.9+
  • Command Line Tools. Run xcode-select --install if you haven't.

Clone the repo

git clone https://github.com/MrDemonWolf/WolfWave.git
cd WolfWave

Configure API keys

Copy the example config:

cp apps/native/WolfWave/Config.xcconfig.example apps/native/WolfWave/Config.xcconfig

Open apps/native/WolfWave/Config.xcconfig and set your keys:

TWITCH_CLIENT_ID = your_twitch_client_id_here
DISCORD_CLIENT_ID = your_discord_client_id_here

# Optional. Fork/whitelabel branding overrides. Leave as-is for the upstream defaults.
DOCS_URL = https://mrdemonwolf.github.io/wolfwave
COMMUNITY_DISCORD_URL = https://mrdwolf.net/discord
COPYRIGHT_HOLDER = MrDemonWolf, Inc.

Get a Twitch Client ID at dev.twitch.tv/console/apps. Get a Discord Application ID at discord.com/developers/applications.

Config.xcconfig is gitignored. Each contributor uses their own.

Forking WolfWave? Override DOCS_URL, COMMUNITY_DISCORD_URL, and COPYRIGHT_HOLDER to point at your own site, community, and legal entity. Each falls back to the upstream MrDemonWolf default if left blank. To rename the app itself, edit CFBundleDisplayName in Info.plist (or set PRODUCT_NAME in an xcconfig overlay).

Open the project

make open-xcode
# or
open apps/native/WolfWave.xcodeproj

Build and run

Hit ⌘R in Xcode. That's it.

Production build

For a release build with a DMG:

make prod-build

The DMG lands at builds/WolfWave-{version}.dmg. Have a Developer ID Application certificate in your Keychain? The app gets re-signed for distribution as part of the build.

To build and drop straight into /Applications:

make prod-install

Notarization

Notarize the DMG so Gatekeeper trusts it:

APPLE_ID=you@example.com \
APPLE_TEAM_ID=YOUR_TEAM_ID \
APPLE_APP_PASSWORD=xxxx-xxxx-xxxx-xxxx \
make notarize

Generate an app-specific password at appleid.apple.com under Sign-In and Security → App-Specific Passwords.

CI/CD

Push a version tag that matches the app's MARKETING_VERSION to kick off the GitHub Actions release workflow. It builds, signs, notarizes, and staples the app, embeds the release notes in the Sparkle appcast, and uploads the DMG plus appcast.xml to a draft GitHub Release.

Rerunning the workflow updates an existing draft's assets. It refuses to replace a release that has already been published.

git tag v2.0.0
git push origin v2.0.0

Then review and publish. Open the draft release, confirm the notarized DMG and notes look right, and click Publish. The Homebrew cask updates on its own once the release is live.

Heads up: the TWITCH_CLIENT_ID and DISCORD_CLIENT_ID secrets must be set in your repo's Actions secrets. The full release checklist lives in the Development Guide and PUBLISH.md.

Next steps


Support development

WolfWave is built and maintained by one person. If it's useful to you, a sponsorship goes a long way. It pays for development time and Apple Developer Program fees.

Sponsor on GitHub →

On this page