Native macOS menu bar app that shows waste-collection dates from binable.
- macOS 15 (Sequoia) or newer
- Xcode 16+
- XcodeGen:
brew install xcodegen
./build.shThe script generates the Xcode project, builds the app and signs it. The app is then located at:
~/Library/Developer/Xcode/DerivedData/Binable-*/Build/Products/Debug/Binable.app
To launch it:
open ~/Library/Developer/Xcode/DerivedData/Binable-*/Build/Products/Debug/Binable.app# 1. Generate the Xcode project
cd Binable && xcodegen generate
# 2. Build (without signing β see the note below)
xcodebuild \
-project Binable.xcodeproj \
-scheme Binable \
-configuration Debug \
-destination 'platform=macOS' \
build
# 3. Sign the app (two steps required)
APP=$(find ~/Library/Developer/Xcode/DerivedData/Binable-*/Build/Products/Debug -name "*.app" | head -1)
codesign --force --sign - "$APP/Contents/MacOS/Binable"
codesign --force --sign - "$APP"
# 4. Launch
open "$APP"cd Binable && xcodegen generate
open Binable.xcodeprojOn macOS 26 Xcode's build system adds -no_adhoc_codesign to the linker, so the
binary is intentionally left unsigned and an explicit signing step is expected. On
macOS 26 codesign refuses to sign an app bundle while the enclosed binary is still
unsigned β the bundle therefore has to be signed in two steps (first the binary, then
the bundle). The build.sh script does this automatically.
If macOS Gatekeeper blocks the downloaded app:
xattr -cr /path/to/Binable.appA new release is triggered by a Git tag:
git tag 1.0.0
git push origin 1.0.0The GitHub Action automatically builds the app in the release configuration, signs it (ad-hoc) and attaches a ZIP archive to the GitHub release.
- Menu bar icon (trash can) β no Dock icon, no app switcher
- Upcoming collection dates per location right in the menu
- Multiple locations configurable (street, ZIP, city, country)
- Fetch frequency adjustable: 12 hours, daily, every 2 days
- Launch at login via
SMAppService - Optional API key for binable accounts with API access
The app calls POST https://binable.app/api/fetch:
{
"street": "MusterstraΓe",
"houseNumber": "1",
"zip": "12345",
"city": "Berlin",
"country": "DE"
}binable-macos/
βββ build.sh CLI build script
βββ .github/workflows/release.yml GitHub Action (tag β release)
βββ Binable/
βββ project.yml XcodeGen spec
βββ Sources/
βββ App/
β βββ BinableApp.swift @main, NSApplicationDelegateAdaptor
β βββ MenuBarController.swift NSStatusItem + NSMenu + window management
βββ Models/
β βββ StoredLocation.swift
β βββ PickupResult.swift
β βββ FetchFrequency.swift
β βββ AppSettings.swift UserDefaults wrapper
βββ Services/
β βββ APIService.swift binable REST client
β βββ PickupStore.swift @MainActor data store + auto refresh
β βββ LaunchAtLoginService.swift SMAppService wrapper
βββ Views/
β βββ SettingsView.swift Tabs: Locations + General
β βββ AddLocationView.swift Sheet for adding a location
β βββ AboutView.swift
βββ Resources/
βββ Info.plist LSUIElement = YES
βββ Binable.entitlements
βββ Assets.xcassets/