Mac: run via launchd agent with mach service
This commit is contained in:
@@ -9,6 +9,7 @@ APP_PROCESS_PATTERN="Clawdis.app/Contents/MacOS/Clawdis"
|
|||||||
DEBUG_PROCESS_PATTERN="${ROOT_DIR}/apps/macos/.build/debug/Clawdis"
|
DEBUG_PROCESS_PATTERN="${ROOT_DIR}/apps/macos/.build/debug/Clawdis"
|
||||||
LOCAL_PROCESS_PATTERN="${ROOT_DIR}/apps/macos/.build-local/debug/Clawdis"
|
LOCAL_PROCESS_PATTERN="${ROOT_DIR}/apps/macos/.build-local/debug/Clawdis"
|
||||||
RELEASE_PROCESS_PATTERN="${ROOT_DIR}/apps/macos/.build/release/Clawdis"
|
RELEASE_PROCESS_PATTERN="${ROOT_DIR}/apps/macos/.build/release/Clawdis"
|
||||||
|
LAUNCH_AGENT="${HOME}/Library/LaunchAgents/com.steipete.clawdis.plist"
|
||||||
|
|
||||||
log() { printf '%s\n' "$*"; }
|
log() { printf '%s\n' "$*"; }
|
||||||
fail() { printf 'ERROR: %s\n' "$*" >&2; exit 1; }
|
fail() { printf 'ERROR: %s\n' "$*" >&2; exit 1; }
|
||||||
@@ -21,6 +22,38 @@ run_step() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
write_launch_agent() {
|
||||||
|
cat > "${LAUNCH_AGENT}" <<PLIST
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>Label</key>
|
||||||
|
<string>com.steipete.clawdis</string>
|
||||||
|
<key>ProgramArguments</key>
|
||||||
|
<array>
|
||||||
|
<string>${APP_BUNDLE}/Contents/MacOS/Clawdis</string>
|
||||||
|
</array>
|
||||||
|
<key>WorkingDirectory</key>
|
||||||
|
<string>${ROOT_DIR}</string>
|
||||||
|
<key>RunAtLoad</key>
|
||||||
|
<true/>
|
||||||
|
<key>KeepAlive</key>
|
||||||
|
<true/>
|
||||||
|
<key>MachServices</key>
|
||||||
|
<dict>
|
||||||
|
<key>com.steipete.clawdis.xpc</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<key>StandardOutPath</key>
|
||||||
|
<string>/tmp/clawdis.log</string>
|
||||||
|
<key>StandardErrorPath</key>
|
||||||
|
<string>/tmp/clawdis.log</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
|
PLIST
|
||||||
|
}
|
||||||
|
|
||||||
kill_all_clawdis() {
|
kill_all_clawdis() {
|
||||||
for _ in {1..10}; do
|
for _ in {1..10}; do
|
||||||
pkill -f "${APP_PROCESS_PATTERN}" 2>/dev/null || true
|
pkill -f "${APP_PROCESS_PATTERN}" 2>/dev/null || true
|
||||||
@@ -50,10 +83,16 @@ run_step "swift build" bash -lc "cd '${ROOT_DIR}/apps/macos' && swift build -q -
|
|||||||
# 3) Package + relaunch the app (script also stops any stragglers).
|
# 3) Package + relaunch the app (script also stops any stragglers).
|
||||||
run_step "package app" "${ROOT_DIR}/scripts/package-mac-app.sh"
|
run_step "package app" "${ROOT_DIR}/scripts/package-mac-app.sh"
|
||||||
|
|
||||||
# 4) Verify the packaged app is alive.
|
# 4) Install launch agent with Mach service and bootstrap it.
|
||||||
|
write_launch_agent
|
||||||
|
launchctl bootout gui/"$UID"/com.steipete.clawdis 2>/dev/null || true
|
||||||
|
run_step "bootstrap launch agent" launchctl bootstrap gui/"$UID" "${LAUNCH_AGENT}"
|
||||||
|
run_step "kickstart" launchctl kickstart -k gui/"$UID"/com.steipete.clawdis
|
||||||
|
|
||||||
|
# 5) Verify the packaged app is alive.
|
||||||
sleep 1
|
sleep 1
|
||||||
if pgrep -f "${APP_PROCESS_PATTERN}" >/dev/null 2>&1; then
|
if pgrep -f "${APP_PROCESS_PATTERN}" >/dev/null 2>&1; then
|
||||||
log "OK: Clawdis is running."
|
log "OK: Clawdis is running (launchd)."
|
||||||
else
|
else
|
||||||
fail "App exited immediately. Check /tmp/clawdis.log or Console.app (User Reports)."
|
fail "App exited immediately. Check /tmp/clawdis.log or Console.app (User Reports)."
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user