mirror of
https://github.com/Dimillian/Skills.git
synced 2026-03-25 08:55:54 +00:00
Introduce a set of templates, scripts, and documentation for scaffolding, building, packaging, signing, and notarizing SwiftPM-based macOS apps without Xcode. Includes bootstrap project skeleton, build and packaging scripts, signing/notarization helpers, and reference guides for setup, packaging, and release workflows.
63 lines
1.8 KiB
Bash
63 lines
1.8 KiB
Bash
#!/usr/bin/env bash
|
|
# Kill running instances, package, relaunch, verify.
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
APP_NAME=${APP_NAME:-MyApp}
|
|
APP_BUNDLE="${ROOT_DIR}/${APP_NAME}.app"
|
|
APP_PROCESS_PATTERN="${APP_NAME}.app/Contents/MacOS/${APP_NAME}"
|
|
DEBUG_PROCESS_PATTERN="${ROOT_DIR}/.build/debug/${APP_NAME}"
|
|
RELEASE_PROCESS_PATTERN="${ROOT_DIR}/.build/release/${APP_NAME}"
|
|
RUN_TESTS=0
|
|
RELEASE_ARCHES=""
|
|
|
|
log() { printf '%s\n' "$*"; }
|
|
fail() { printf 'ERROR: %s\n' "$*" >&2; exit 1; }
|
|
|
|
for arg in "$@"; do
|
|
case "${arg}" in
|
|
--test|-t) RUN_TESTS=1 ;;
|
|
--release-universal) RELEASE_ARCHES="arm64 x86_64" ;;
|
|
--release-arches=*) RELEASE_ARCHES="${arg#*=}" ;;
|
|
--help|-h)
|
|
log "Usage: $(basename "$0") [--test] [--release-universal] [--release-arches=\"arm64 x86_64\"]"
|
|
exit 0
|
|
;;
|
|
esac
|
|
done
|
|
|
|
log "==> Killing existing ${APP_NAME} instances"
|
|
pkill -f "${APP_PROCESS_PATTERN}" 2>/dev/null || true
|
|
pkill -f "${DEBUG_PROCESS_PATTERN}" 2>/dev/null || true
|
|
pkill -f "${RELEASE_PROCESS_PATTERN}" 2>/dev/null || true
|
|
pkill -x "${APP_NAME}" 2>/dev/null || true
|
|
|
|
if [[ "${RUN_TESTS}" == "1" ]]; then
|
|
log "==> swift test"
|
|
swift test -q
|
|
fi
|
|
|
|
HOST_ARCH="$(uname -m)"
|
|
ARCHES_VALUE="${HOST_ARCH}"
|
|
if [[ -n "${RELEASE_ARCHES}" ]]; then
|
|
ARCHES_VALUE="${RELEASE_ARCHES}"
|
|
fi
|
|
|
|
log "==> package app"
|
|
SIGNING_MODE=adhoc ARCHES="${ARCHES_VALUE}" "${ROOT_DIR}/Scripts/package_app.sh" release
|
|
|
|
log "==> launch app"
|
|
if ! open "${APP_BUNDLE}"; then
|
|
log "WARN: open failed; launching binary directly."
|
|
"${APP_BUNDLE}/Contents/MacOS/${APP_NAME}" >/dev/null 2>&1 &
|
|
disown
|
|
fi
|
|
|
|
for _ in {1..10}; do
|
|
if pgrep -f "${APP_PROCESS_PATTERN}" >/dev/null 2>&1; then
|
|
log "OK: ${APP_NAME} is running."
|
|
exit 0
|
|
fi
|
|
sleep 0.4
|
|
done
|
|
fail "App exited immediately. Check crash logs in Console.app (User Reports)."
|