diff --git a/macos-bar/Resources/Info.plist b/macos-bar/Resources/Info.plist
new file mode 100644
index 00000000..73a77fb9
--- /dev/null
+++ b/macos-bar/Resources/Info.plist
@@ -0,0 +1,26 @@
+
+
+
+
+ CFBundleExecutable
+ CCSBar
+ CFBundleIdentifier
+ ca.kaitran.ccs.bar
+ CFBundleName
+ CCS Bar
+ CFBundleDisplayName
+ CCS Bar
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ __VERSION__
+ CFBundleVersion
+ __VERSION__
+ LSMinimumSystemVersion
+ 13.0
+ LSUIElement
+
+ NSHumanReadableCopyright
+ CCS Bar
+
+
diff --git a/macos-bar/Scripts/package_app.sh b/macos-bar/Scripts/package_app.sh
new file mode 100755
index 00000000..d03e701b
--- /dev/null
+++ b/macos-bar/Scripts/package_app.sh
@@ -0,0 +1,68 @@
+#!/usr/bin/env bash
+# Assemble and sign "CCS Bar.app" from a release build.
+#
+# Signing mode (CCS_BAR_SIGNING):
+# adhoc (default) ad-hoc sign with `codesign -s -`. Free, no Apple
+# Developer account. Users open via right-click > Open or clear
+# quarantine with `xattr -dr com.apple.quarantine`.
+# developer-id Sign with a Developer ID Application identity (set
+# CCS_BAR_SIGN_IDENTITY) for the notarized public-launch path.
+#
+# Usage:
+# ./Scripts/package_app.sh [version]
+# CCS_BAR_SIGNING=developer-id CCS_BAR_SIGN_IDENTITY="Developer ID Application: ..." ./Scripts/package_app.sh 0.1.0
+set -euo pipefail
+
+VERSION="${1:-0.0.0}"
+SIGNING="${CCS_BAR_SIGNING:-adhoc}"
+APP_NAME="CCS Bar"
+EXEC_NAME="CCSBar"
+
+ROOT="$(cd "$(dirname "$0")/.." && pwd)"
+DIST="$ROOT/dist"
+APP="$DIST/$APP_NAME.app"
+
+echo "[i] Building release binary..."
+( cd "$ROOT" && swift build -c release )
+BIN="$ROOT/.build/release/$EXEC_NAME"
+if [[ ! -x "$BIN" ]]; then
+ echo "[X] Release binary not found at $BIN" >&2
+ exit 1
+fi
+
+echo "[i] Assembling $APP_NAME.app (version $VERSION)..."
+rm -rf "$APP"
+mkdir -p "$APP/Contents/MacOS" "$APP/Contents/Resources"
+cp "$BIN" "$APP/Contents/MacOS/$EXEC_NAME"
+sed "s/__VERSION__/$VERSION/g" "$ROOT/Resources/Info.plist" > "$APP/Contents/Info.plist"
+
+echo "[i] Signing ($SIGNING)..."
+case "$SIGNING" in
+ adhoc)
+ codesign --force --deep --sign - "$APP"
+ ;;
+ developer-id)
+ : "${CCS_BAR_SIGN_IDENTITY:?Set CCS_BAR_SIGN_IDENTITY for developer-id signing}"
+ codesign --force --deep --options runtime --timestamp \
+ --sign "$CCS_BAR_SIGN_IDENTITY" "$APP"
+ echo "[i] Signed with Developer ID. Notarize before public distribution:"
+ echo " xcrun notarytool submit --keychain-profile --wait"
+ ;;
+ *)
+ echo "[X] Unknown CCS_BAR_SIGNING: $SIGNING (expected adhoc|developer-id)" >&2
+ exit 1
+ ;;
+esac
+
+ZIP="$DIST/CCS-Bar.zip"
+echo "[i] Zipping -> $ZIP"
+rm -f "$ZIP"
+( cd "$DIST" && ditto -c -k --keepParent "$APP_NAME.app" "CCS-Bar.zip" )
+
+echo "[OK] Packaged: $APP"
+echo "[OK] Asset: $ZIP"
+if [[ "$SIGNING" == "adhoc" ]]; then
+ echo "[!] Ad-hoc build: first launch needs right-click > Open, or"
+ echo " xattr -dr com.apple.quarantine \"/Applications/$APP_NAME.app\""
+fi
+echo "[i] To publish: gh release upload ccs-bar-latest \"$ZIP\" --clobber"