Implement Mac App Store build support by introducing the BUILD_FOR_MAC_APP_STORE option. This change disables Sparkle and localhost OAuth redirect server for MAS builds, updates CMake configuration, and modifies build scripts accordingly. Additionally, the macOS bundle identifier is now configurable via CMake.

This commit is contained in:
2026-01-22 19:28:00 +09:00
parent 6a1d8bbc87
commit bd59c19301
11 changed files with 479 additions and 29 deletions

View File

@@ -0,0 +1,103 @@
#!/usr/bin/env bash
set -euo pipefail
usage() {
cat <<'EOF'
Usage:
./build_tools/macos/export_compliance/make_pdf.sh \
--bundle-id com.dryark.strawberry \
--version 1.2.3 \
--developer "Dry Ark LLC" \
--contact "support@example.com"
Outputs (in the same folder as this script):
- EXPORT_COMPLIANCE.filled.txt
- EXPORT_COMPLIANCE.pdf
Notes:
- Uses macOS built-in /usr/bin/textutil + /usr/sbin/cupsfilter to generate the PDF.
EOF
}
script_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
template="${script_dir}/EXPORT_COMPLIANCE.txt"
filled="${script_dir}/EXPORT_COMPLIANCE.filled.txt"
pdf="${script_dir}/EXPORT_COMPLIANCE.pdf"
bundle_id=""
version=""
developer=""
contact=""
date_str="$(date +%Y-%m-%d)"
while [[ $# -gt 0 ]]; do
case "$1" in
--bundle-id) bundle_id="${2:-}"; shift 2 ;;
--version) version="${2:-}"; shift 2 ;;
--developer) developer="${2:-}"; shift 2 ;;
--contact) contact="${2:-}"; shift 2 ;;
-h|--help) usage; exit 0 ;;
*) echo "Unknown arg: $1" >&2; usage; exit 2 ;;
esac
done
if [[ -z "$bundle_id" || -z "$version" || -z "$developer" || -z "$contact" ]]; then
echo "Error: missing required args." >&2
usage
exit 2
fi
if [[ "$(uname -s)" != "Darwin" ]]; then
echo "Error: This script is for macOS only (uses textutil)." >&2
exit 1
fi
if [[ ! -f "$template" ]]; then
echo "Error: missing template file: $template" >&2
exit 1
fi
if [[ ! -x /usr/bin/textutil ]]; then
echo "Error: /usr/bin/textutil not found. This should exist on macOS." >&2
exit 1
fi
if [[ ! -x /usr/sbin/cupsfilter ]]; then
echo "Error: /usr/sbin/cupsfilter not found. This should exist on macOS." >&2
exit 1
fi
escape_sed_repl() {
# Escape characters that are special in sed replacement strings: \ & and delimiter |
# bash 3.2 compatible
echo "$1" | sed -e 's/[\\&|]/\\&/g'
}
bundle_id_esc="$(escape_sed_repl "$bundle_id")"
version_esc="$(escape_sed_repl "$version")"
developer_esc="$(escape_sed_repl "$developer")"
contact_esc="$(escape_sed_repl "$contact")"
date_esc="$(escape_sed_repl "$date_str")"
sed \
-e "s|@BUNDLE_ID@|${bundle_id_esc}|g" \
-e "s|@VERSION@|${version_esc}|g" \
-e "s|@DEVELOPER@|${developer_esc}|g" \
-e "s|@CONTACT@|${contact_esc}|g" \
-e "s|@DATE@|${date_esc}|g" \
"$template" > "$filled"
rm -f "$pdf" >/dev/null 2>&1 || true
# textutil does not support direct PDF output on modern macOS; convert to HTML first, then print-to-PDF via cupsfilter.
tmp_html="${script_dir}/EXPORT_COMPLIANCE.tmp.html"
rm -f "$tmp_html" >/dev/null 2>&1 || true
/usr/bin/textutil -convert html "$filled" -output "$tmp_html" >/dev/null
# Convert HTML to PDF. cupsfilter writes to stdout by default.
/usr/sbin/cupsfilter -i text/html -m application/pdf "$tmp_html" > "$pdf"
rm -f "$tmp_html" >/dev/null 2>&1 || true
echo "Wrote:"
echo " $filled"
echo " $pdf"