Skip to content

Commit 470928f

Browse files
Add neetly app icon
- docs/assets/logo.svg: funky split-pane + cursor + mini browser design with Catppuccin-ish gradient (dark purple → blue → pink) - scripts/build-icon.sh: renders the SVG to a full .icns via rsvg-convert and iconutil (generates all 10 required sizes) - scripts/AppIcon.icns: committed so releases pick it up automatically - build-dmg.sh: copies AppIcon.icns to Contents/Resources and adds CFBundleIconFile to Info.plist To regenerate the icon after editing the SVG: bash scripts/build-icon.sh Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent c062eca commit 470928f

5 files changed

Lines changed: 115 additions & 0 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ DerivedData/
66
*.dmg
77
appcast.xml
88
.sparkle-tools/
9+
scripts/AppIcon.iconset/

docs/assets/logo.svg

Lines changed: 56 additions & 0 deletions
Loading

scripts/AppIcon.icns

527 KB
Binary file not shown.

scripts/build-dmg.sh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@ mkdir -p "$FRAMEWORKS_DIR"
2222
cp "$BUILD_DIR/neetly-app" "$APP_DIR/Contents/MacOS/neetly-app"
2323
cp "$BUILD_DIR/neetly" "$APP_DIR/Contents/MacOS/neetly"
2424

25+
# Copy app icon
26+
if [ -f "scripts/AppIcon.icns" ]; then
27+
cp "scripts/AppIcon.icns" "$APP_DIR/Contents/Resources/AppIcon.icns"
28+
else
29+
echo "==> WARNING: scripts/AppIcon.icns not found; run scripts/build-icon.sh first"
30+
fi
31+
2532
# Copy Sparkle framework if found
2633
if [ -n "$SPARKLE_FRAMEWORK" ] && [ -d "$SPARKLE_FRAMEWORK" ]; then
2734
echo "==> Copying Sparkle.framework from $SPARKLE_FRAMEWORK"
@@ -44,6 +51,8 @@ cat > "$APP_DIR/Contents/Info.plist" << PLIST
4451
<dict>
4552
<key>CFBundleExecutable</key>
4653
<string>neetly-app</string>
54+
<key>CFBundleIconFile</key>
55+
<string>AppIcon</string>
4756
<key>CFBundleIdentifier</key>
4857
<string>com.neetly.app</string>
4958
<key>CFBundleName</key>

scripts/build-icon.sh

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#!/bin/bash
2+
set -euo pipefail
3+
4+
# Build the macOS app icon (.icns) from docs/assets/logo.svg
5+
# Requires: rsvg-convert (brew install librsvg), iconutil (macOS built-in)
6+
7+
SVG="docs/assets/logo.svg"
8+
ICONSET="scripts/AppIcon.iconset"
9+
OUTPUT="scripts/AppIcon.icns"
10+
11+
if [ ! -f "$SVG" ]; then
12+
echo "Error: $SVG not found"
13+
exit 1
14+
fi
15+
16+
if ! command -v rsvg-convert >/dev/null 2>&1; then
17+
echo "Error: rsvg-convert not installed. Run: brew install librsvg"
18+
exit 1
19+
fi
20+
21+
rm -rf "$ICONSET"
22+
mkdir -p "$ICONSET"
23+
24+
# macOS icons need these sizes: 16, 32, 64, 128, 256, 512, 1024
25+
# with @1x and @2x variants
26+
sizes=(
27+
"16:icon_16x16.png"
28+
"32:icon_16x16@2x.png"
29+
"32:icon_32x32.png"
30+
"64:icon_32x32@2x.png"
31+
"128:icon_128x128.png"
32+
"256:icon_128x128@2x.png"
33+
"256:icon_256x256.png"
34+
"512:icon_256x256@2x.png"
35+
"512:icon_512x512.png"
36+
"1024:icon_512x512@2x.png"
37+
)
38+
39+
for entry in "${sizes[@]}"; do
40+
size="${entry%%:*}"
41+
name="${entry##*:}"
42+
echo "Rendering $name at ${size}x${size}"
43+
rsvg-convert -w "$size" -h "$size" "$SVG" -o "$ICONSET/$name"
44+
done
45+
46+
echo "Packaging .icns..."
47+
iconutil -c icns "$ICONSET" -o "$OUTPUT"
48+
49+
echo "==> Done: $OUTPUT"

0 commit comments

Comments
 (0)