mirror of
https://github.com/flectar/mail.git
synced 2026-11-11 17:57:54 +00:00
110 lines
4.8 KiB
Bash
Executable File
110 lines
4.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
trap 'status=$?; printf "macOS packaging failed at line %s: %s\n" "$LINENO" "$BASH_COMMAND" >&2; exit "$status"' ERR
|
|
|
|
project_dir="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)"
|
|
binary_path="${1:-$project_dir/target/release/flectar-mail}"
|
|
output_dir="${2:-$project_dir/target/macos}"
|
|
architecture="${3:-$(uname -m)}"
|
|
case "$architecture" in
|
|
arm64|aarch64)
|
|
asset_architecture="arm64"
|
|
pdfium_target="mac-arm64"
|
|
;;
|
|
x64|x86_64|amd64)
|
|
asset_architecture="x64"
|
|
pdfium_target="mac-x64"
|
|
;;
|
|
*)
|
|
printf 'Unsupported macOS architecture: %s\n' "$architecture" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
app_dir="$output_dir/Flectar Mail.app"
|
|
archive_path="$output_dir/flectar-mail-macos-$asset_architecture"
|
|
|
|
if [[ ! -x "$binary_path" ]]; then
|
|
printf 'Missing release binary: %s\n' "$binary_path" >&2
|
|
exit 1
|
|
fi
|
|
|
|
rm -rf "$app_dir"
|
|
mkdir -p \
|
|
"$app_dir/Contents/MacOS" \
|
|
"$app_dir/Contents/Frameworks" \
|
|
"$app_dir/Contents/Library/LaunchAgents" \
|
|
"$app_dir/Contents/Resources/Licenses/Flectar Mail" \
|
|
"$app_dir/Contents/Resources/Licenses/Google Sans Flex" \
|
|
"$app_dir/Contents/Resources/Licenses/Noto Emoji" \
|
|
"$app_dir/Contents/Resources/Licenses/PDFium"
|
|
cp "$binary_path" "$app_dir/Contents/MacOS/flectar-mail"
|
|
# Registered with Login Items through SMAppService for "Start automatically".
|
|
cp "$project_dir/platform/macos/com.flectar.mail.login.plist" \
|
|
"$app_dir/Contents/Library/LaunchAgents/com.flectar.mail.login.plist"
|
|
plutil -lint "$app_dir/Contents/Library/LaunchAgents/com.flectar.mail.login.plist"
|
|
|
|
python3 "$project_dir/scripts/stage-pdfium.py" \
|
|
"$pdfium_target" "$app_dir/Contents/Frameworks" \
|
|
--licenses-destination "$app_dir/Contents/Resources/Licenses/PDFium"
|
|
chmod 0755 "$app_dir/Contents/Frameworks/libpdfium.dylib"
|
|
|
|
icon_source="$project_dir/resources/app-icon/flectar-mail-masked.png"
|
|
iconset_dir="$output_dir/FlectarMail.iconset"
|
|
rm -rf "$iconset_dir"
|
|
mkdir -p "$iconset_dir"
|
|
sips -z 16 16 "$icon_source" --out "$iconset_dir/icon_16x16.png" >/dev/null
|
|
sips -z 32 32 "$icon_source" --out "$iconset_dir/icon_16x16@2x.png" >/dev/null
|
|
sips -z 32 32 "$icon_source" --out "$iconset_dir/icon_32x32.png" >/dev/null
|
|
sips -z 64 64 "$icon_source" --out "$iconset_dir/icon_32x32@2x.png" >/dev/null
|
|
sips -z 128 128 "$icon_source" --out "$iconset_dir/icon_128x128.png" >/dev/null
|
|
sips -z 256 256 "$icon_source" --out "$iconset_dir/icon_128x128@2x.png" >/dev/null
|
|
sips -z 256 256 "$icon_source" --out "$iconset_dir/icon_256x256.png" >/dev/null
|
|
sips -z 512 512 "$icon_source" --out "$iconset_dir/icon_256x256@2x.png" >/dev/null
|
|
sips -z 512 512 "$icon_source" --out "$iconset_dir/icon_512x512.png" >/dev/null
|
|
cp "$icon_source" "$iconset_dir/icon_512x512@2x.png"
|
|
iconutil -c icns "$iconset_dir" -o "$app_dir/Contents/Resources/FlectarMail.icns"
|
|
rm -rf "$iconset_dir"
|
|
|
|
cp "$project_dir/LICENSE" "$app_dir/Contents/Resources/Licenses/Flectar Mail/LICENSE"
|
|
cp -R "$project_dir/LICENSES" "$app_dir/Contents/Resources/Licenses/Flectar Mail/LICENSES"
|
|
cp "$project_dir/THIRD_PARTY_NOTICES.md" \
|
|
"$app_dir/Contents/Resources/Licenses/Flectar Mail/THIRD_PARTY_NOTICES.md"
|
|
cp "$project_dir/resources/fonts/google-sans-flex/OFL.txt" \
|
|
"$app_dir/Contents/Resources/Licenses/Google Sans Flex/OFL.txt"
|
|
cp "$project_dir/resources/fonts/google-sans-flex/README.md" \
|
|
"$app_dir/Contents/Resources/Licenses/Google Sans Flex/README.md"
|
|
cp "$project_dir/resources/fonts/noto-emoji/OFL.txt" \
|
|
"$app_dir/Contents/Resources/Licenses/Noto Emoji/OFL.txt"
|
|
cp "$project_dir/resources/fonts/noto-emoji/README.md" \
|
|
"$app_dir/Contents/Resources/Licenses/Noto Emoji/README.md"
|
|
|
|
version="$(sed -n 's/^version = "\([^"]*\)"/\1/p' "$project_dir/Cargo.toml" | head -1)"
|
|
native_version="${version%%-*}"
|
|
sed \
|
|
-e "s/@VERSION@/$native_version/g" \
|
|
"$project_dir/platform/macos/Info.plist.in" > "$app_dir/Contents/Info.plist"
|
|
|
|
# Sign nested code before the containing app. Distribution signing and
|
|
# notarization replace these ad-hoc identities when Apple credentials exist.
|
|
codesign --force --sign - "$app_dir/Contents/Frameworks/libpdfium.dylib"
|
|
codesign --force --sign - "$app_dir"
|
|
python3 "$project_dir/scripts/test-pdf-preview.py" "$app_dir/Contents/MacOS/flectar-mail"
|
|
|
|
mkdir -p "$output_dir"
|
|
ditto -c -k --sequesterRsrc --keepParent "$app_dir" "$archive_path.zip"
|
|
printf 'Built %s\n' "$archive_path.zip"
|
|
|
|
# Use a separate source folder so the disk image contains only the app and the
|
|
# usual Applications shortcut, not the ZIP or a previous disk image.
|
|
staging="$output_dir/dmg-staging"
|
|
rm -rf "$staging"
|
|
mkdir -p "$staging"
|
|
ditto "$app_dir" "$staging/Flectar Mail.app"
|
|
ln -s /Applications "$staging/Applications"
|
|
hdiutil create -volname "Flectar Mail" -srcfolder "$staging" -ov -format UDZO \
|
|
"$archive_path.dmg"
|
|
hdiutil verify "$archive_path.dmg"
|
|
codesign --verify --deep --strict "$app_dir"
|
|
rm -rf "$staging"
|
|
printf 'Built %s\n' "$archive_path.dmg"
|