diff --git a/macos-bar/Resources/AppIcon-source.png b/macos-bar/Resources/AppIcon-source.png
new file mode 100644
index 00000000..05e924ab
Binary files /dev/null and b/macos-bar/Resources/AppIcon-source.png differ
diff --git a/macos-bar/Resources/Info.plist b/macos-bar/Resources/Info.plist
index 73a77fb9..f0849ba7 100644
--- a/macos-bar/Resources/Info.plist
+++ b/macos-bar/Resources/Info.plist
@@ -20,6 +20,8 @@
13.0
LSUIElement
+ CFBundleIconFile
+ AppIcon
NSHumanReadableCopyright
CCS Bar
diff --git a/macos-bar/Scripts/package_app.sh b/macos-bar/Scripts/package_app.sh
index 39f34466..b4e17ca7 100755
--- a/macos-bar/Scripts/package_app.sh
+++ b/macos-bar/Scripts/package_app.sh
@@ -42,6 +42,29 @@ if [[ -d "$ROOT/Resources/Assets" ]]; then
cp "$ROOT/Resources/Assets/"*.png "$APP/Contents/Resources/" 2>/dev/null || true
fi
+# Build AppIcon.icns from AppIcon-source.png (1024x1024 RGBA PNG).
+ICON_SRC="$ROOT/Resources/AppIcon-source.png"
+if [[ -f "$ICON_SRC" ]]; then
+ echo "[i] Building AppIcon.icns..."
+ ICONSET_DIR="$(mktemp -d)/AppIcon.iconset"
+ mkdir -p "$ICONSET_DIR"
+ sips -z 16 16 "$ICON_SRC" --out "$ICONSET_DIR/icon_16x16.png" > /dev/null
+ sips -z 32 32 "$ICON_SRC" --out "$ICONSET_DIR/icon_16x16@2x.png" > /dev/null
+ sips -z 32 32 "$ICON_SRC" --out "$ICONSET_DIR/icon_32x32.png" > /dev/null
+ sips -z 64 64 "$ICON_SRC" --out "$ICONSET_DIR/icon_32x32@2x.png" > /dev/null
+ sips -z 128 128 "$ICON_SRC" --out "$ICONSET_DIR/icon_128x128.png" > /dev/null
+ sips -z 256 256 "$ICON_SRC" --out "$ICONSET_DIR/icon_128x128@2x.png" > /dev/null
+ sips -z 256 256 "$ICON_SRC" --out "$ICONSET_DIR/icon_256x256.png" > /dev/null
+ sips -z 512 512 "$ICON_SRC" --out "$ICONSET_DIR/icon_256x256@2x.png" > /dev/null
+ sips -z 512 512 "$ICON_SRC" --out "$ICONSET_DIR/icon_512x512.png" > /dev/null
+ sips -z 1024 1024 "$ICON_SRC" --out "$ICONSET_DIR/icon_512x512@2x.png" > /dev/null
+ iconutil -c icns "$ICONSET_DIR" -o "$APP/Contents/Resources/AppIcon.icns"
+ rm -rf "$(dirname "$ICONSET_DIR")"
+ echo "[OK] AppIcon.icns built."
+else
+ echo "[!] AppIcon-source.png not found at $ICON_SRC — skipping icon." >&2
+fi
+
echo "[i] Signing ($SIGNING)..."
case "$SIGNING" in
adhoc)