Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

9 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

binable β€” macOS Menu Bar App

Native macOS menu bar app that shows waste-collection dates from binable.

Requirements

  • macOS 15 (Sequoia) or newer
  • Xcode 16+
  • XcodeGen: brew install xcodegen

Build & Run

Quick start (CLI)

./build.sh

The 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

Manual (step by step)

# 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"

Open in Xcode

cd Binable && xcodegen generate
open Binable.xcodeproj

Note: Signing on macOS 26 (Tahoe)

On 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.app

Release

A new release is triggered by a Git tag:

git tag 1.0.0
git push origin 1.0.0

The GitHub Action automatically builds the app in the release configuration, signs it (ad-hoc) and attaches a ZIP archive to the GitHub release.

Features

  • 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

API

The app calls POST https://binable.app/api/fetch:

{
  "street": "Musterstraße",
  "houseNumber": "1",
  "zip": "12345",
  "city": "Berlin",
  "country": "DE"
}

Project structure

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/

About

πŸ—‘οΈ binable meets macOS

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages