APP_NAME = Pommedoro BUILD_DIR = .build RELEASE_BIN = $(BUILD_DIR)/arm64-apple-macosx/release/$(APP_NAME) APP_BUNDLE = $(BUILD_DIR)/$(APP_NAME).app CONTENTS = $(APP_BUNDLE)/Contents MACOS_DIR = $(CONTENTS)/MacOS RESOURCES_DIR = $(CONTENTS)/Resources LAUNCH_AGENT_LABEL = com.pommedoro.app LAUNCH_AGENT_PLIST = $(HOME)/Library/LaunchAgents/$(LAUNCH_AGENT_LABEL).plist .PHONY: all build bundle install clean run icons install-agent uninstall-agent dmg all: bundle build: swift build -c release icons: @echo "Generating icons from SVG..." @mkdir -p Resources/Pommedoro.iconset @for size in 16 32 64 128 256 512 1024; do \ rsvg-convert -w $$size -h $$size Resources/boot-logo.svg \ -o Resources/Pommedoro.iconset/icon_$${size}x$${size}.png; \ done @cp Resources/Pommedoro.iconset/icon_32x32.png Resources/Pommedoro.iconset/icon_16x16@2x.png @cp Resources/Pommedoro.iconset/icon_64x64.png Resources/Pommedoro.iconset/icon_32x32@2x.png @cp Resources/Pommedoro.iconset/icon_256x256.png Resources/Pommedoro.iconset/icon_128x128@2x.png @cp Resources/Pommedoro.iconset/icon_512x512.png Resources/Pommedoro.iconset/icon_256x256@2x.png @cp Resources/Pommedoro.iconset/icon_1024x1024.png Resources/Pommedoro.iconset/icon_512x512@2x.png @rm -f Resources/Pommedoro.iconset/icon_64x64.png Resources/Pommedoro.iconset/icon_1024x1024.png @iconutil -c icns Resources/Pommedoro.iconset -o Resources/Pommedoro.icns @rm -rf Resources/Pommedoro.iconset @echo "Icon generated: Resources/Pommedoro.icns" bundle: build @echo "Creating $(APP_NAME).app bundle..." @rm -rf $(APP_BUNDLE) @mkdir -p $(MACOS_DIR) @mkdir -p $(RESOURCES_DIR) @cp $(RELEASE_BIN) $(MACOS_DIR)/$(APP_NAME) @cp Resources/Info.plist $(CONTENTS)/Info.plist @cp Resources/$(APP_NAME).icns $(RESOURCES_DIR)/$(APP_NAME).icns @echo "Built $(APP_BUNDLE)" install: bundle @echo "Installing to /Applications..." @rm -rf /Applications/$(APP_NAME).app @cp -R $(APP_BUNDLE) /Applications/$(APP_NAME).app @echo "Installed /Applications/$(APP_NAME).app" run: bundle @open $(APP_BUNDLE) install-agent: install @echo "Installing LaunchAgent..." @mkdir -p $(HOME)/Library/LaunchAgents @/usr/libexec/PlistBuddy -c "Clear dict" /dev/null 2>/dev/null; \ printf '\n\ \n\ \n\ \n\ \tLabel\n\ \t$(LAUNCH_AGENT_LABEL)\n\ \tProgram\n\ \t/Applications/$(APP_NAME).app/Contents/MacOS/$(APP_NAME)\n\ \tRunAtLoad\n\ \t\n\ \tKeepAlive\n\ \t\n\ \n\ \n' > $(LAUNCH_AGENT_PLIST) @echo "LaunchAgent installed: $(LAUNCH_AGENT_PLIST)" uninstall-agent: @echo "Removing LaunchAgent..." @rm -f $(LAUNCH_AGENT_PLIST) @echo "LaunchAgent removed" dmg: bundle @echo "Creating DMG..." @rm -f $(BUILD_DIR)/$(APP_NAME).dmg @mkdir -p $(BUILD_DIR)/dmg-staging @cp -R $(APP_BUNDLE) $(BUILD_DIR)/dmg-staging/ @ln -s /Applications $(BUILD_DIR)/dmg-staging/Applications @cp Resources/$(APP_NAME).icns $(BUILD_DIR)/dmg-staging/.VolumeIcon.icns @SetFile -a C $(BUILD_DIR)/dmg-staging @hdiutil create -volname "$(APP_NAME)" \ -srcfolder $(BUILD_DIR)/dmg-staging \ -ov -format UDZO \ $(BUILD_DIR)/$(APP_NAME).dmg @rm -rf $(BUILD_DIR)/dmg-staging @echo "Created $(BUILD_DIR)/$(APP_NAME).dmg" clean: swift package clean rm -rf $(APP_BUNDLE)