|
| 1 | +PROJECT := kutuk.xcodeproj |
| 2 | +SCHEME := kutuk |
| 3 | +CONFIGURATION ?= Release |
| 4 | +DESTINATION ?= generic/platform=macOS |
| 5 | +DERIVED_DATA := $(CURDIR)/build/DerivedData |
| 6 | +BUILD_PRODUCTS_DIR := $(DERIVED_DATA)/Build/Products/$(CONFIGURATION) |
| 7 | +APP_NAME := Kutuk |
| 8 | +APP_BUNDLE := $(BUILD_PRODUCTS_DIR)/$(APP_NAME).app |
| 9 | +DIST_DIR := $(CURDIR)/dist |
| 10 | +DIST_APP_BUNDLE := $(DIST_DIR)/$(APP_NAME).app |
| 11 | +DMG_STAGING_DIR := $(DIST_DIR)/dmg |
| 12 | +DMG_VOLUME_NAME ?= Kutuk |
| 13 | +DMG_NAME ?= Kutuk-$(CONFIGURATION).dmg |
| 14 | +DMG_PATH := $(DIST_DIR)/$(DMG_NAME) |
| 15 | +BUNDLE_IDENTIFIER ?= io.github.irajul.kutuk |
| 16 | + |
| 17 | +# Build flags: Universal Binary (Intel + Apple Silicon), no code signing for CI |
| 18 | +XCODEBUILD_FLAGS ?= \ |
| 19 | + CODE_SIGNING_ALLOWED=NO \ |
| 20 | + ONLY_ACTIVE_ARCH=NO \ |
| 21 | + ARCHS="arm64 x86_64" |
| 22 | + |
| 23 | +.PHONY: build dist-app dmg clean verify-app verify-universal |
| 24 | + |
| 25 | +build: |
| 26 | + xcodebuild \ |
| 27 | + -project "$(PROJECT)" \ |
| 28 | + -scheme "$(SCHEME)" \ |
| 29 | + -configuration "$(CONFIGURATION)" \ |
| 30 | + -destination "$(DESTINATION)" \ |
| 31 | + -derivedDataPath "$(DERIVED_DATA)" \ |
| 32 | + build \ |
| 33 | + $(XCODEBUILD_FLAGS) |
| 34 | + |
| 35 | +verify-app: build |
| 36 | + @test -d "$(APP_BUNDLE)" || (echo "Expected app bundle not found at $(APP_BUNDLE)" && exit 1) |
| 37 | + |
| 38 | +verify-universal: verify-app |
| 39 | + @echo "Checking Universal Binary architectures..." |
| 40 | + @lipo -info "$(APP_BUNDLE)/Contents/MacOS/$(APP_NAME)" | grep -q "arm64" || (echo "Missing arm64 architecture" && exit 1) |
| 41 | + @lipo -info "$(APP_BUNDLE)/Contents/MacOS/$(APP_NAME)" | grep -q "x86_64" || (echo "Missing x86_64 architecture" && exit 1) |
| 42 | + @echo "Universal Binary verified: arm64 + x86_64" |
| 43 | + |
| 44 | +dist-app: verify-app |
| 45 | + rm -rf "$(DIST_APP_BUNDLE)" |
| 46 | + mkdir -p "$(DIST_DIR)" |
| 47 | + ditto "$(APP_BUNDLE)" "$(DIST_APP_BUNDLE)" |
| 48 | + codesign --force --deep --sign - --identifier "$(BUNDLE_IDENTIFIER)" "$(DIST_APP_BUNDLE)" |
| 49 | + @echo "App bundle created at $(DIST_APP_BUNDLE)" |
| 50 | + |
| 51 | +dmg: dist-app |
| 52 | + rm -rf "$(DMG_STAGING_DIR)" "$(DMG_PATH)" |
| 53 | + mkdir -p "$(DMG_STAGING_DIR)" |
| 54 | + ditto "$(DIST_APP_BUNDLE)" "$(DMG_STAGING_DIR)/$(APP_NAME).app" |
| 55 | + ln -s /Applications "$(DMG_STAGING_DIR)/Applications" |
| 56 | + hdiutil create \ |
| 57 | + -volname "$(DMG_VOLUME_NAME)" \ |
| 58 | + -srcfolder "$(DMG_STAGING_DIR)" \ |
| 59 | + -ov \ |
| 60 | + -format UDZO \ |
| 61 | + "$(DMG_PATH)" |
| 62 | + @if [ -n "$(DMG_CODESIGN_IDENTITY)" ]; then \ |
| 63 | + codesign --force --sign "$(DMG_CODESIGN_IDENTITY)" --timestamp "$(DMG_PATH)"; \ |
| 64 | + fi |
| 65 | + rm -rf "$(DMG_STAGING_DIR)" |
| 66 | + @echo "DMG created at $(DMG_PATH)" |
| 67 | + |
| 68 | +clean: |
| 69 | + rm -rf "$(CURDIR)/build" "$(DIST_DIR)" |
0 commit comments