#!/usr/bin/env bash set -euo pipefail APP_NAME="I Hate PDFs" EXECUTABLE_NAME="IHatePDFs" CONFIGURATION="${CONFIGURATION:-release}" if [[ -z "${ARCHS+x}" && "$CONFIGURATION" == "release" ]]; then ARCHS="arm64 x86_64" else ARCHS="${ARCHS:-}" fi ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" DIST_DIR="$ROOT_DIR/dist" APP_DIR="$DIST_DIR/$APP_NAME.app" CONTENTS_DIR="$APP_DIR/Contents" MACOS_DIR="$CONTENTS_DIR/MacOS" RESOURCES_DIR="$CONTENTS_DIR/Resources" ICON_SOURCE="$ROOT_DIR/ihatepdf.png" ICON_NAME="AppIcon" cd "$ROOT_DIR" SWIFT_BUILD_ARGS=(-c "$CONFIGURATION") for ARCH in $ARCHS; do SWIFT_BUILD_ARGS+=(--arch "$ARCH") done swift build "${SWIFT_BUILD_ARGS[@]}" BUILD_DIR="$(swift build "${SWIFT_BUILD_ARGS[@]}" --show-bin-path)" rm -rf "$APP_DIR" mkdir -p "$MACOS_DIR" "$RESOURCES_DIR" cp "$BUILD_DIR/$EXECUTABLE_NAME" "$MACOS_DIR/$EXECUTABLE_NAME" if [[ ! -f "$ICON_SOURCE" ]]; then echo "Missing app icon source: $ICON_SOURCE" >&2 exit 1 fi ICONSET_DIR="$DIST_DIR/$ICON_NAME.iconset" rm -rf "$ICONSET_DIR" mkdir -p "$ICONSET_DIR" make_icon() { local pixels="$1" local output="$2" sips -s format png --resampleHeightWidth "$pixels" "$pixels" "$ICON_SOURCE" --out "$ICONSET_DIR/$output" >/dev/null } make_icon 16 "icon_16x16.png" make_icon 32 "icon_16x16@2x.png" make_icon 32 "icon_32x32.png" make_icon 64 "icon_32x32@2x.png" make_icon 128 "icon_128x128.png" make_icon 256 "icon_128x128@2x.png" make_icon 256 "icon_256x256.png" make_icon 512 "icon_256x256@2x.png" make_icon 512 "icon_512x512.png" make_icon 1024 "icon_512x512@2x.png" iconutil -c icns "$ICONSET_DIR" -o "$RESOURCES_DIR/$ICON_NAME.icns" rm -rf "$ICONSET_DIR" cat > "$CONTENTS_DIR/Info.plist" < CFBundleDevelopmentRegion en CFBundleExecutable $EXECUTABLE_NAME CFBundleIdentifier org.ihatepdfs.app CFBundleInfoDictionaryVersion 6.0 CFBundleName $APP_NAME CFBundleDisplayName $APP_NAME CFBundleIconFile $ICON_NAME CFBundlePackageType APPL CFBundleDocumentTypes CFBundleTypeName PDF Document CFBundleTypeRole Viewer LSHandlerRank Alternate LSItemContentTypes com.adobe.pdf CFBundleShortVersionString 0.1.0 CFBundleVersion 1 LSMinimumSystemVersion 13.0 NSHighResolutionCapable NSSupportsAutomaticGraphicsSwitching LSSupportsOpeningDocumentsInPlace NSHumanReadableCopyright MIT License PLIST echo "Built $APP_DIR"