diff --git a/Makefile b/Makefile
index 355651f..74cffd7 100644
--- a/Makefile
+++ b/Makefile
@@ -100,11 +100,15 @@ $(APP)/Contents/Info.plist: Resources/Info.plist
mkdir -p "$(APP)/Contents"
cp "$<" "$@"
+$(APP)/Contents/Resources/AppIcon.icns: Resources/AppIcon.icns
+ mkdir -p "$(APP)/Contents/Resources"
+ cp "$<" "$@"
+
$(CLI): $(CLI_SOURCES) $(CONFIG_LIBRARY) Makefile
mkdir -p "$(APP)/Contents/MacOS"
$(SWIFT) -target $(ARCH)-apple-macosx15.0 -swift-version 6 -parse-as-library -O $(DEBUG_FLAGS) $(CLI_SOURCES) $(CONFIG_FLAGS) -framework AppKit -o $@
-$(BUNDLE_STAMP): $(PLAYER) $(BOOTSTRAP) $(CLI) $(APP)/Contents/Info.plist $(APP)/Contents/Resources/TOMLDecoder-LICENSE.txt $(NATIVE_STAMP) $(HELPER_STAMP) Scripts/bundle.py
+$(BUNDLE_STAMP): $(PLAYER) $(BOOTSTRAP) $(CLI) $(APP)/Contents/Info.plist $(APP)/Contents/Resources/AppIcon.icns $(APP)/Contents/Resources/TOMLDecoder-LICENSE.txt $(NATIVE_STAMP) $(HELPER_STAMP) Scripts/bundle.py
python3 Scripts/bundle.py --app "$(APP)" --dependencies "$(DEPENDENCY_ROOT)" --signing-identity "$(SIGNING_IDENTITY)"
touch "$@"
diff --git a/README.md b/README.md
index 406d357..d764d40 100644
--- a/README.md
+++ b/README.md
@@ -19,6 +19,8 @@ The first build downloads dependencies. Quit Terebi before updating, then run `m
To run without installing, use `make run`. The built `.build/terebi.app` is self-contained; no separate FFmpeg, Python or yt-dlp installation is needed at runtime. Builds are ad-hoc signed, not notarized. Bundled licenses and source archives are in the app's Resources; public binary redistribution needs a separate license audit.
+The television app icon is bundled from `Resources/AppIcon.icns`; its editable vector source is `Resources/AppIcon.svg`.
+
## Usage
- **Local files:** use **⌘O**, drag files onto the player, or choose Finder's **Open With**. Multiple files form a queue in natural filename order, with automatic advance. Use **View → Show Queue** to play, reorder or remove items; **+ → file icon** or dropping files onto the sidebar appends them. The queue lasts only for the session; opening other media replaces it.
diff --git a/Resources/AppIcon.icns b/Resources/AppIcon.icns
new file mode 100644
index 0000000..8fec067
Binary files /dev/null and b/Resources/AppIcon.icns differ
diff --git a/Resources/AppIcon.svg b/Resources/AppIcon.svg
new file mode 100644
index 0000000..c949748
--- /dev/null
+++ b/Resources/AppIcon.svg
@@ -0,0 +1,21 @@
+
diff --git a/Resources/Info.plist b/Resources/Info.plist
index c0ec001..1e1902d 100644
--- a/Resources/Info.plist
+++ b/Resources/Info.plist
@@ -6,6 +6,7 @@
CFBundleIdentifierlocal.personal.terebiCFBundleNameTerebiCFBundleDisplayNameTerebi
+ CFBundleIconFileAppIconCFBundlePackageTypeAPPLCFBundleShortVersionString0.1LSMinimumSystemVersion15.0