diff --git a/.gitattributes b/.gitattributes
index 6e4c4df..32a5e0b 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -38,6 +38,7 @@
 .gitignore text eol=lf
 .markdownlintrc text eol=lf
 LICENSE text eol=lf
+Makefile text eol=lf
 TRADEMARK text eol=lf
 app.config eol=lf
 
diff --git a/Assets/Mac/raster/Mac Glyph Icon 1024x1024 WHITE.png b/Assets/Mac/raster/Mac Glyph Icon 1024x1024 WHITE.png
deleted file mode 100644
index bced591..0000000
Binary files a/Assets/Mac/raster/Mac Glyph Icon 1024x1024 WHITE.png and /dev/null differ
diff --git a/Assets/Mac/raster/Mac Glyph Icon 1024x1024.png b/Assets/Mac/raster/Mac Glyph Icon 1024x1024.png
deleted file mode 100644
index cb02c8d..0000000
Binary files a/Assets/Mac/raster/Mac Glyph Icon 1024x1024.png and /dev/null differ
diff --git a/Assets/Mac/raster/Master 1024x1024.png b/Assets/Mac/raster/Master 1024x1024.png
deleted file mode 100644
index f3aa28a..0000000
Binary files a/Assets/Mac/raster/Master 1024x1024.png and /dev/null differ
diff --git a/Assets/Windows/raster/App Store 1024x1024.png b/Assets/Windows/raster/App Store 1024x1024.png
deleted file mode 100644
index f3aa28a..0000000
Binary files a/Assets/Windows/raster/App Store 1024x1024.png and /dev/null differ
diff --git a/Assets/Windows/raster/Windows Menu 400x400.png b/Assets/Windows/raster/Windows Menu 400x400.png
deleted file mode 100644
index 366af63..0000000
Binary files a/Assets/Windows/raster/Windows Menu 400x400.png and /dev/null differ
diff --git a/Assets/Windows/raster/Windows Tray 400x400.png b/Assets/Windows/raster/Windows Tray 400x400.png
deleted file mode 100644
index a8eb3eb..0000000
Binary files a/Assets/Windows/raster/Windows Tray 400x400.png and /dev/null differ
diff --git a/Assets/Mac/vector/Mac Glyph Icon 1024x1024.svg b/Assets/glyph.svg
similarity index 100%
rename from Assets/Mac/vector/Mac Glyph Icon 1024x1024.svg
rename to Assets/glyph.svg
diff --git a/Assets/Windows/vector/App Store 1024x1024.ai b/Assets/main.ai
similarity index 100%
rename from Assets/Windows/vector/App Store 1024x1024.ai
rename to Assets/main.ai
diff --git a/Assets/Mac/vector/Master 1024x1024.svg b/Assets/rounded.svg
similarity index 100%
rename from Assets/Mac/vector/Master 1024x1024.svg
rename to Assets/rounded.svg
diff --git a/Assets/Windows/vector/Windows Tray 400x400.svg b/Assets/simplified.svg
similarity index 100%
rename from Assets/Windows/vector/Windows Tray 400x400.svg
rename to Assets/simplified.svg
diff --git a/Assets/Windows/vector/Windows Menu 400x400.svg b/Assets/square.svg
similarity index 100%
rename from Assets/Windows/vector/Windows Menu 400x400.svg
rename to Assets/square.svg
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..0c7619e
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,106 @@
+# This Makefile generates icon and tile images from the sources in `Assets/`.
+# This doesn't need to be run every time: just when there's a significant change to the source assets or
+# if we need different icons or tiles.
+
+# I recommend running "make" with the "-j" parameter to parallelize these jobs.
+# On my computer, a full run takes ~45 sec with "-j" or ~3.5 minutes without.
+
+# Requirements:
+# - cairosvg
+# - convert (from ImageMagick)
+# - optipng
+
+MAC_IMAGES = \
+	scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png \
+	scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png \
+	scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png \
+	scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png \
+	scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png \
+	scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png \
+	scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png \
+	scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png \
+	scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png \
+	scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png \
+	scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_16x16.png \
+	scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_16x16@2x.png \
+	scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_32x32.png \
+	scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_32x32@2x.png \
+	scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_128x128.png \
+	scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_128x128@2x.png \
+	scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_256x256.png \
+	scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_256x256@2x.png \
+	scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_512x512.png \
+	scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_512x512@2x.png \
+	Scratch\ Link\ Safari\ Helper/Scratch\ Link\ Safari\ Extension/Resources/images/icon-48.png \
+	Scratch\ Link\ Safari\ Helper/Scratch\ Link\ Safari\ Extension/Resources/images/icon-64.png \
+	Scratch\ Link\ Safari\ Helper/Scratch\ Link\ Safari\ Extension/Resources/images/icon-96.png \
+	Scratch\ Link\ Safari\ Helper/Scratch\ Link\ Safari\ Extension/Resources/images/icon-128.png \
+	Scratch\ Link\ Safari\ Helper/Scratch\ Link\ Safari\ Extension/Resources/images/icon-256.png \
+	Scratch\ Link\ Safari\ Helper/Scratch\ Link\ Safari\ Extension/Resources/images/icon-512.png \
+	Scratch\ Link\ Safari\ Helper/Scratch\ Link\ Safari\ Extension/Resources/images/toolbar-icon-16.png \
+	Scratch\ Link\ Safari\ Helper/Scratch\ Link\ Safari\ Extension/Resources/images/toolbar-icon-19.png \
+	Scratch\ Link\ Safari\ Helper/Scratch\ Link\ Safari\ Extension/Resources/images/toolbar-icon-32.png \
+	Scratch\ Link\ Safari\ Helper/Scratch\ Link\ Safari\ Extension/Resources/images/toolbar-icon-38.png \
+	Scratch\ Link\ Safari\ Helper/Scratch\ Link\ Safari\ Extension/Resources/images/toolbar-icon-48.png \
+	Scratch\ Link\ Safari\ Helper/Scratch\ Link\ Safari\ Extension/Resources/images/toolbar-icon-72.png
+
+.PHONY: all clean mac
+
+all: mac
+
+clean:
+	rm -vf $(MAC_IMAGES)
+
+mac: $(MAC_IMAGES)
+
+# Assumes the input SVG is square and that pixel [0,0] is a good background color
+# Pads the output horizontally, using the background color, to match the requested size
+# Usage: $(eval $(call svg2png,outpath/outfile.png,Assets/infile.svg,width,height,dpi))
+define svg2png
+$(1): $(2)
+	BORDER_COLOR=`convert -background none -format '%[pixel:u.p{0,0}]' "$$<" info:` && \
+	echo "Detected border color: $$$${BORDER_COLOR}" && \
+	cairosvg --output-height "$(4)" -f png -o - "$$<" | \
+		convert -background none -bordercolor "$$$${BORDER_COLOR}" -gravity center -extent "$(3)x$(4)" -density "$(5)" - "$$@" && \
+	optipng -o7 -zm1-9 "$$@"
+endef
+
+# macOS app icon
+$(eval $(call svg2png,scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png,Assets/rounded.svg,16,16,72))
+$(eval $(call svg2png,scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png,Assets/rounded.svg,32,32,144))
+$(eval $(call svg2png,scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png,Assets/rounded.svg,32,32,72))
+$(eval $(call svg2png,scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png,Assets/rounded.svg,64,64,144))
+$(eval $(call svg2png,scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png,Assets/rounded.svg,128,128,72))
+$(eval $(call svg2png,scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png,Assets/rounded.svg,256,256,144))
+$(eval $(call svg2png,scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png,Assets/rounded.svg,256,256,72))
+$(eval $(call svg2png,scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png,Assets/rounded.svg,512,512,144))
+$(eval $(call svg2png,scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png,Assets/rounded.svg,512,512,72))
+$(eval $(call svg2png,scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png,Assets/rounded.svg,1024,1024,144))
+
+# macOS app status bar icon
+$(eval $(call svg2png,scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_16x16.png,Assets/glyph.svg,16,16,72))
+$(eval $(call svg2png,scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_16x16@2x.png,Assets/glyph.svg,32,32,144))
+$(eval $(call svg2png,scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_32x32.png,Assets/glyph.svg,32,32,72))
+$(eval $(call svg2png,scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_32x32@2x.png,Assets/glyph.svg,64,64,144))
+$(eval $(call svg2png,scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_128x128.png,Assets/glyph.svg,128,128,72))
+$(eval $(call svg2png,scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_128x128@2x.png,Assets/glyph.svg,256,256,144))
+$(eval $(call svg2png,scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_256x256.png,Assets/glyph.svg,256,256,72))
+$(eval $(call svg2png,scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_256x256@2x.png,Assets/glyph.svg,512,512,144))
+$(eval $(call svg2png,scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_512x512.png,Assets/glyph.svg,512,512,72))
+$(eval $(call svg2png,scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_512x512@2x.png,Assets/glyph.svg,1024,1024,144))
+
+# macOS Safari extension icon
+$(eval $(call svg2png,Scratch\ Link\ Safari\ Helper/Scratch\ Link\ Safari\ Extension/Resources/images/icon-48.png,Assets/rounded.svg,48,48,72))
+$(eval $(call svg2png,Scratch\ Link\ Safari\ Helper/Scratch\ Link\ Safari\ Extension/Resources/images/icon-64.png,Assets/rounded.svg,64,64,72))
+$(eval $(call svg2png,Scratch\ Link\ Safari\ Helper/Scratch\ Link\ Safari\ Extension/Resources/images/icon-96.png,Assets/rounded.svg,96,96,72))
+$(eval $(call svg2png,Scratch\ Link\ Safari\ Helper/Scratch\ Link\ Safari\ Extension/Resources/images/icon-128.png,Assets/rounded.svg,128,128,72))
+$(eval $(call svg2png,Scratch\ Link\ Safari\ Helper/Scratch\ Link\ Safari\ Extension/Resources/images/icon-256.png,Assets/rounded.svg,256,256,72))
+$(eval $(call svg2png,Scratch\ Link\ Safari\ Helper/Scratch\ Link\ Safari\ Extension/Resources/images/icon-512.png,Assets/rounded.svg,512,512,72))
+
+# macOS Safari extension toolbar icon
+$(eval $(call svg2png,Scratch\ Link\ Safari\ Helper/Scratch\ Link\ Safari\ Extension/Resources/images/toolbar-icon-16.png,Assets/glyph.svg,16,16,72))
+$(eval $(call svg2png,Scratch\ Link\ Safari\ Helper/Scratch\ Link\ Safari\ Extension/Resources/images/toolbar-icon-19.png,Assets/glyph.svg,19,19,72))
+$(eval $(call svg2png,Scratch\ Link\ Safari\ Helper/Scratch\ Link\ Safari\ Extension/Resources/images/toolbar-icon-32.png,Assets/glyph.svg,32,32,72))
+$(eval $(call svg2png,Scratch\ Link\ Safari\ Helper/Scratch\ Link\ Safari\ Extension/Resources/images/toolbar-icon-38.png,Assets/glyph.svg,38,38,72))
+$(eval $(call svg2png,Scratch\ Link\ Safari\ Helper/Scratch\ Link\ Safari\ Extension/Resources/images/toolbar-icon-48.png,Assets/glyph.svg,48,48,72))
+$(eval $(call svg2png,Scratch\ Link\ Safari\ Helper/Scratch\ Link\ Safari\ Extension/Resources/images/toolbar-icon-72.png,Assets/glyph.svg,72,72,72))
diff --git a/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/icon-128.png b/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/icon-128.png
index 693f9bd..0fad9b9 100644
Binary files a/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/icon-128.png and b/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/icon-128.png differ
diff --git a/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/icon-256.png b/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/icon-256.png
index 8801d66..5a33f9c 100644
Binary files a/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/icon-256.png and b/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/icon-256.png differ
diff --git a/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/icon-48.png b/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/icon-48.png
index 496d5c6..9930583 100644
Binary files a/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/icon-48.png and b/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/icon-48.png differ
diff --git a/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/icon-512.png b/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/icon-512.png
index 9fd7977..624bf8c 100644
Binary files a/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/icon-512.png and b/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/icon-512.png differ
diff --git a/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/icon-64.png b/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/icon-64.png
index 1f7bcde..831f82d 100644
Binary files a/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/icon-64.png and b/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/icon-64.png differ
diff --git a/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/icon-96.png b/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/icon-96.png
index d83ca55..d5da15a 100644
Binary files a/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/icon-96.png and b/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/icon-96.png differ
diff --git a/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/toolbar-icon-16.png b/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/toolbar-icon-16.png
index 1af5019..2a91a4f 100644
Binary files a/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/toolbar-icon-16.png and b/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/toolbar-icon-16.png differ
diff --git a/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/toolbar-icon-19.png b/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/toolbar-icon-19.png
index 45b85da..971973d 100644
Binary files a/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/toolbar-icon-19.png and b/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/toolbar-icon-19.png differ
diff --git a/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/toolbar-icon-32.png b/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/toolbar-icon-32.png
index 38b3763..a772e0e 100644
Binary files a/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/toolbar-icon-32.png and b/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/toolbar-icon-32.png differ
diff --git a/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/toolbar-icon-38.png b/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/toolbar-icon-38.png
index cb03961..62f54c1 100644
Binary files a/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/toolbar-icon-38.png and b/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/toolbar-icon-38.png differ
diff --git a/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/toolbar-icon-48.png b/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/toolbar-icon-48.png
index b2cca14..2093c24 100644
Binary files a/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/toolbar-icon-48.png and b/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/toolbar-icon-48.png differ
diff --git a/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/toolbar-icon-72.png b/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/toolbar-icon-72.png
index d76d2cf..52516ae 100644
Binary files a/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/toolbar-icon-72.png and b/Scratch Link Safari Helper/Scratch Link Safari Extension/Resources/images/toolbar-icon-72.png differ
diff --git a/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png b/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png
index dde3826..e16362c 100644
Binary files a/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png and b/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png differ
diff --git a/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png b/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png
index 1c34ccf..c2c3e82 100644
Binary files a/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png and b/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png differ
diff --git a/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png b/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png
index 1e3d312..d21cf17 100644
Binary files a/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png and b/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png differ
diff --git a/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png b/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png
index 82ae187..40cb8cd 100644
Binary files a/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png and b/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png differ
diff --git a/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png b/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png
index 109a1e1..5906dc9 100644
Binary files a/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png and b/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png differ
diff --git a/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png b/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png
index 25c8227..c9642e6 100644
Binary files a/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png and b/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png differ
diff --git a/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png b/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png
index e81f171..66b7656 100644
Binary files a/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png and b/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png differ
diff --git a/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png b/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png
index 98a4f5d..e982742 100644
Binary files a/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png and b/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png differ
diff --git a/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png b/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png
index f284b85..165854e 100644
Binary files a/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png and b/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png differ
diff --git a/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png b/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png
index 1a343c6..2b858af 100644
Binary files a/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png and b/scratch-link-mac/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png differ
diff --git a/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_128x128.png b/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_128x128.png
index 8b0bbbe..950c610 100644
Binary files a/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_128x128.png and b/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_128x128.png differ
diff --git a/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_128x128@2x.png b/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_128x128@2x.png
index 93558f6..efc5ef9 100644
Binary files a/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_128x128@2x.png and b/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_128x128@2x.png differ
diff --git a/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_16x16.png b/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_16x16.png
index 7025427..8e2c5a9 100644
Binary files a/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_16x16.png and b/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_16x16.png differ
diff --git a/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_16x16@2x.png b/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_16x16@2x.png
index e053981..dc1d5dd 100644
Binary files a/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_16x16@2x.png and b/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_16x16@2x.png differ
diff --git a/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_256x256.png b/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_256x256.png
index 37083c3..b058c6f 100644
Binary files a/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_256x256.png and b/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_256x256.png differ
diff --git a/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_256x256@2x.png b/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_256x256@2x.png
index edd15e6..16e509c 100644
Binary files a/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_256x256@2x.png and b/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_256x256@2x.png differ
diff --git a/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_32x32.png b/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_32x32.png
index d20f98e..df9c5b8 100644
Binary files a/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_32x32.png and b/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_32x32.png differ
diff --git a/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_32x32@2x.png b/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_32x32@2x.png
index efaf20a..df154a1 100644
Binary files a/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_32x32@2x.png and b/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_32x32@2x.png differ
diff --git a/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_512x512.png b/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_512x512.png
index f0d4492..fda2868 100644
Binary files a/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_512x512.png and b/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_512x512.png differ
diff --git a/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_512x512@2x.png b/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_512x512@2x.png
index 5fd2425..f6f0e2d 100644
Binary files a/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_512x512@2x.png and b/scratch-link-mac/Assets.xcassets/StatusBarIcon.iconset/icon_512x512@2x.png differ
diff --git a/scratch-link-mac/Makefile b/scratch-link-mac/Makefile
deleted file mode 100644
index cde781c..0000000
--- a/scratch-link-mac/Makefile
+++ /dev/null
@@ -1,155 +0,0 @@
-SIGN_ID=Scratch Foundation, Inc.
-APP_ID=edu.mit.scratch.scratch-link
-APP_BUNDLE=Scratch\ Link.app
-CONFIG=release
-
-SIGN_MAS_APP=Apple Distribution: $(SIGN_ID)
-SIGN_MAS_INS=3rd Party Mac Developer Installer: $(SIGN_ID)
-SIGN_MAC_APP=Developer ID Application: $(SIGN_ID)
-SIGN_MAC_INS=Developer ID Installer: $(SIGN_ID)
-
-# Assume there's a recent tag called something like "1.1" and turn "1.1-2-g123abc" into "1.1.2"
-APP_VERSION=$(shell git describe --always --long | sed 's/-\([0-9]*\)-g.*/.\1/')
-VERSION_DETAIL=$(shell git describe --always --long --dirty --exclude '*')
-BIN_PATH=$(shell swift build --configuration $(CONFIG) --show-bin-path)
-
-BIN_FILE=$(BIN_PATH)/scratch-link
-APP_DEST=dist/$(APP_BUNDLE)
-PACKAGE_FILE=scratch-link-$(APP_VERSION).pkg
-ZIP_FILE=scratch-link-$(APP_VERSION).zip
-SWIFT_SOURCES=$(wildcard Sources/scratch-link/*.swift)
-
-.PHONY: all bin clean dist dist-mas dist-devid distclean lint resolve-dependencies uninstall xcodeproj zip
-
-#all: $(APP_DEST)
-all: Assets.xcassets/AppIcon.appiconset Assets.xcassets/StatusBarIcon.iconset
-
-show-version:
-	@echo APP_VERSION:    $(APP_VERSION)
-	@echo VERSION_DETAIL: $(VERSION_DETAIL)
-
-#lint: $(SWIFT_SOURCES)
-#	swiftlint lint --path Sources
-
-#bin: $(BIN_FILE)
-
-#dist: dist-mas dist-devid
-
-# For distribution to the Mac App Store
-#dist-mas: dist/mas-$(PACKAGE_FILE)
-
-#dist/mas-$(PACKAGE_FILE): dist/tmp.mas/$(APP_BUNDLE)
-#	productbuild --sign "$(SIGN_MAS_INS)" --component-compression auto --component "$<" /Applications "$@"
-
-#dist/tmp.mas/$(APP_BUNDLE): dist/$(APP_BUNDLE)
-#	rm -rf dist/tmp.mas/
-#	mkdir -p dist/tmp.mas/
-#	cp -aR "$<" "$@"
-#	xcrun swift-stdlib-tool --copy --sign "$(SIGN_MAS_APP)" --Xcodesign --options --Xcodesign runtime --platform macosx --scan-folder "$@/Contents/MacOS" --destination "$@/Contents/Frameworks"
-#	test -r "$@/Contents/Frameworks/libswiftCore.dylib" # verify swift-stdlib-tool did its job
-#	codesign --sign "$(SIGN_MAS_APP)" --identifier "$(APP_ID)" --deep --entitlements Packaging/entitlements.plist --options runtime "$@"
-#	find "$@" -type f -perm +111 -print0 | xargs -0 codesign --verify --verbose
-
-# For "Developer ID" distribution outside the Mac App Store
-#dist-devid: dist/$(PACKAGE_FILE)
-
-#resolve-dependencies:
-#	swift package resolve
-
-#zip: dist/$(ZIP_FILE)
-
-# build PKG (signed but not notarized)
-#dist/tmp.devid/$(PACKAGE_FILE): dist/tmp.devid/app/$(APP_BUNDLE)
-#	pkgbuild --analyze --root dist/tmp.devid/app/ dist/tmp.devid/components.plist
-#	plutil -replace "BundleIsRelocatable" -bool "NO" dist/tmp.devid/components.plist
-#	pkgbuild --root dist/tmp.devid/app/ --install-location /Applications/ --component-plist dist/tmp.devid/components.plist dist/tmp.devid/ScratchLink.pkg
-#	productbuild --synthesize --package dist/tmp.devid/ScratchLink.pkg dist/tmp.devid/distribution.plist
-#	# TODO: add a README and/or LICENSE to dist/tmp.devid/distribution.plist
-#	productbuild --sign "$(SIGN_MAC_INS)" --component-compression auto --distribution dist/tmp.devid/distribution.plist --package-path dist/tmp.devid/ "$@"
-
-# notarize and staple final PKG
-#dist/$(PACKAGE_FILE): dist/tmp.devid/$(PACKAGE_FILE)
-#	cp -a "$<" "$@"
-#	Packaging/notarize.sh "${APP_ID}" "$<" "$@" dist/tmp.devid
-
-#dist/tmp.devid/app/$(APP_BUNDLE): dist/$(APP_BUNDLE)
-#	rm -rf dist/tmp.devid/app
-#	mkdir -p dist/tmp.devid/app
-#	cp -aR "$<" "$@"
-#	xcrun swift-stdlib-tool --copy --sign "$(SIGN_MAC_APP)" --Xcodesign --options --Xcodesign runtime --platform macosx --scan-folder "$@/Contents/MacOS" --destination "$@/Contents/Frameworks"
-#	test -r "$@/Contents/Frameworks/libswiftCore.dylib" # verify swift-stdlib-tool did its job
-#	codesign --sign "$(SIGN_MAC_APP)" --identifier "$(APP_ID)" --deep --entitlements Packaging/entitlements.plist --options runtime "$@"
-#	find "$@" -type f -perm +111 -print0 | xargs -0 codesign --verify --verbose
-
-# TODO: remove "-Xswiftc -Xfrontend -Xswiftc -validate-tbd-against-ir=none"
-# once Perfect-Crypto builds in debug without it
-#$(BIN_FILE): $(SWIFT_SOURCES)
-#	@echo "Build Version: $(APP_VERSION) $(VERSION_DETAIL)"
-#	swift build --configuration $(CONFIG) --no-static-swift-stdlib -Xlinker -rpath -Xlinker '@executable_path/../Frameworks' -Xswiftc -Xfrontend -Xswiftc -validate-tbd-against-ir=none
-
-#xcodeproj:
-#	swift package generate-xcodeproj
-
-#dist/$(ZIP_FILE): dist/$(APP_BUNDLE)
-#	cd dist && zip -v9r $(ZIP_FILE) $(APP_BUNDLE)
-
-#$(APP_DEST): $(BIN_FILE) Packaging/entitlements.plist Packaging/Info.plist dist/Scratch\ Link.iconset dist/iconTemplate.iconset
-#	rm -rf "$@"
-#	mkdir -p "$@/Contents/MacOS"
-#	cp $(BIN_FILE) "$@/Contents/MacOS/"
-#	cp Packaging/Info.plist "$@/Contents/"
-#	plutil -replace "CFBundleVersion" -string "$(APP_VERSION)" "$@/Contents/Info.plist"
-#	plutil -replace "CFBundleShortVersionString" -string "$(APP_VERSION)" "$@/Contents/Info.plist"
-#	plutil -replace "ScratchVersionDetail" -string "$(VERSION_DETAIL)" "$@/Contents/Info.plist"
-#	mkdir -p "$@/Contents/Resources"
-#	iconutil -c icns --output "$@/Contents/Resources/Scratch Link.icns" "dist/Scratch Link.iconset"
-#	iconutil -c icns --output "$@/Contents/Resources/iconTemplate.icns" "dist/iconTemplate.iconset"
-
-Assets.xcassets/AppIcon.appiconset: ../Assets/Mac/raster/Master\ 1024x1024.png
-
-Assets.xcassets/StatusBarIcon.iconset: ../Assets/Mac/raster/Mac\ Glyph\ Icon\ 1024x1024.png
-
-# Generate a full icon set from an input image.
-# The @2x are marked as 144 DPI while the others are marked as 72 DPI.
-%.iconset:
-	mkdir -p "$@"
-	sips -s dpiWidth 72 -s dpiHeight 72 -z 16 16 "$<" --out "$@/icon_16x16.png"
-	sips -s dpiWidth 72 -s dpiHeight 72 -z 32 32 "$<" --out "$@/icon_32x32.png"
-	sips -s dpiWidth 72 -s dpiHeight 72 -z 128 128 "$<" --out "$@/icon_128x128.png"
-	sips -s dpiWidth 72 -s dpiHeight 72 -z 256 256 "$<" --out "$@/icon_256x256.png"
-	sips -s dpiWidth 72 -s dpiHeight 72 -z 512 512 "$<" --out "$@/icon_512x512.png"
-	sips -s dpiWidth 144 -s dpiHeight 144 -z 32 32 "$<" --out "$@/icon_16x16@2x.png"
-	sips -s dpiWidth 144 -s dpiHeight 144 -z 64 64 "$<" --out "$@/icon_32x32@2x.png"
-	sips -s dpiWidth 144 -s dpiHeight 144 -z 256 256 "$<" --out "$@/icon_128x128@2x.png"
-	sips -s dpiWidth 144 -s dpiHeight 144 -z 512 512 "$<" --out "$@/icon_256x256@2x.png"
-	sips -s dpiWidth 144 -s dpiHeight 144 -z 1024 1024 "$<" --out "$@/icon_512x512@2x.png"
-	for PNG in "$@"/icon_*.png; do pngcrush -new -brute -ow "$${PNG}"; done
-
-# An App Icon Set is almost the same, except for the file name pattern and an additional file called Contents.json
-# Assume that Contents.json is handled already
-%.appiconset:
-	mkdir -p "$@"
-	sips -s dpiWidth 72 -s dpiHeight 72 -z 16 16 "$<" --out "$@/AppIcon-16.png"
-	sips -s dpiWidth 72 -s dpiHeight 72 -z 32 32 "$<" --out "$@/AppIcon-32.png"
-	sips -s dpiWidth 72 -s dpiHeight 72 -z 128 128 "$<" --out "$@/AppIcon-128.png"
-	sips -s dpiWidth 72 -s dpiHeight 72 -z 256 256 "$<" --out "$@/AppIcon-256.png"
-	sips -s dpiWidth 72 -s dpiHeight 72 -z 512 512 "$<" --out "$@/AppIcon-512.png"
-	sips -s dpiWidth 144 -s dpiHeight 144 -z 32 32 "$<" --out "$@/AppIcon-16@2x.png"
-	sips -s dpiWidth 144 -s dpiHeight 144 -z 64 64 "$<" --out "$@/AppIcon-32@2x.png"
-	sips -s dpiWidth 144 -s dpiHeight 144 -z 256 256 "$<" --out "$@/AppIcon-128@2x.png"
-	sips -s dpiWidth 144 -s dpiHeight 144 -z 512 512 "$<" --out "$@/AppIcon-256@2x.png"
-	sips -s dpiWidth 144 -s dpiHeight 144 -z 1024 1024 "$<" --out "$@/AppIcon-512@2x.png"
-	for PNG in "$@"/AppIcon-*.png; do pngcrush -new -brute -ow "$${PNG}"; done
-
-#clean:
-#	rm -rf dist/ .build/*-apple-*/debug .build/*-apple-*/release "$(BIN_FILE)"
-
-#distclean: clean
-#	rm -rf .build
-
-#uninstall:
-#	@echo "These steps will probably fail unless run with sudo..."
-#	rm -rf /Library/Scratch/$(APP_BUNDLE)
-#	rmdir /Library/Scratch || true
-#	rm -f "/Library/LaunchAgents/$(APP_ID).plist"
-#	pkgutil --forget "$(APP_ID)"
diff --git a/scratch-link-mac/scratch-link-mac.csproj b/scratch-link-mac/scratch-link-mac.csproj
index 9f5ea10..d8d5d19 100644
--- a/scratch-link-mac/scratch-link-mac.csproj
+++ b/scratch-link-mac/scratch-link-mac.csproj
@@ -192,7 +192,6 @@
   <ItemGroup>
     <None Include="Info.plist" />
     <None Include="Entitlements.plist" />
-    <None Include="Makefile" />
     <None Include="app.config" />
     <None Include="notarize.sh" />
   </ItemGroup>
@@ -241,4 +240,4 @@
       <PrivateAssets>all</PrivateAssets>
     </PackageReference>
   </ItemGroup>
-</Project>
+</Project>
\ No newline at end of file
diff --git a/scratch-link.sln b/scratch-link.sln
index 400db68..eda4149 100644
--- a/scratch-link.sln
+++ b/scratch-link.sln
@@ -19,6 +19,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
 		.gitignore = .gitignore
 		.markdownlintrc = .markdownlintrc
 		LICENSE = LICENSE
+		Makefile = Makefile
 		playground.html = playground.html
 		README.md = README.md
 		stylecop.json = stylecop.json