From 86f1782fd015fad4b3aead6b3e1b71b91816971a Mon Sep 17 00:00:00 2001 From: abhinavgautam01 Date: Mon, 1 Jun 2026 16:49:51 +0530 Subject: [PATCH 1/4] Add macOS menu bar launcher --- README.md | 2 +- docs/MACOS_APP.md | 23 ++- docs/RELEASES.md | 2 + packaging/macos/Stringcast | 7 - packaging/macos/StringcastMenu.swift | 235 +++++++++++++++++++++++++++ packaging/macos/build_app.sh | 23 ++- 6 files changed, 275 insertions(+), 17 deletions(-) delete mode 100755 packaging/macos/Stringcast create mode 100644 packaging/macos/StringcastMenu.swift diff --git a/README.md b/README.md index 9898811..8fccdc6 100644 --- a/README.md +++ b/README.md @@ -98,7 +98,7 @@ Download artifacts from the GitHub Actions release workflow or from GitHub Relea See [docs/RELEASES.md](docs/RELEASES.md) for artifact download and smoke-test steps. -The macOS release also includes an unsigned `Stringcast.app` wrapper. See [docs/MACOS_APP.md](docs/MACOS_APP.md) for build and testing notes. +The macOS release also includes an unsigned menu-bar `Stringcast.app` wrapper. See [docs/MACOS_APP.md](docs/MACOS_APP.md) for build and testing notes. ## Development diff --git a/docs/MACOS_APP.md b/docs/MACOS_APP.md index 7a67e16..3047058 100644 --- a/docs/MACOS_APP.md +++ b/docs/MACOS_APP.md @@ -1,8 +1,8 @@ # macOS App Wrapper -Stringcast can be packaged as an unsigned `.app` bundle around the Rust CLI binary. This gives macOS a stable app identity for permissions and Keychain prompts while the runtime still uses the existing CLI internally. +Stringcast can be packaged as an unsigned menu-bar `.app` bundle around the Rust CLI binary. This gives macOS a stable app identity for permissions and Keychain prompts while the runtime still uses the existing CLI internally. -This is not a full menu-bar UI yet. Launching the app starts `stringcast run` in the background. +Launching the app starts `stringcast run` in the background and adds a `Stringcast` item to the macOS menu bar. ## Build Locally @@ -25,7 +25,18 @@ Open it: open dist/macos/Stringcast.app ``` -Stop it: +Use the menu-bar item to: + +- View status +- Start Stringcast +- Stop Stringcast +- Check permissions +- Run an API test +- Open the config file +- Open logs +- Quit + +Stop it from Terminal if needed: ```bash pkill -f "Stringcast.app" @@ -44,15 +55,13 @@ If permissions were granted to a terminal binary before, macOS may ask again bec ## Current Limitations - The app is unsigned. -- There is no menu-bar UI yet. -- There is no visible quit control yet. -- Logs are not surfaced in an app window. +- There is no custom app icon yet. +- Logs open in Finder rather than an in-app viewer. - Packaging does not create a DMG or installer yet. ## Next Packaging Steps - Add an icon. -- Add a menu-bar process with Start/Stop/Quit controls. - Add log/status display. - Add code signing and notarization. - Produce a DMG for end users. diff --git a/docs/RELEASES.md b/docs/RELEASES.md index e70a4b8..951c12f 100644 --- a/docs/RELEASES.md +++ b/docs/RELEASES.md @@ -82,6 +82,8 @@ Or launch the app wrapper: open Stringcast.app ``` +The app starts Stringcast in the background and adds a menu-bar item with status, start, stop, permissions, API test, config, logs, and quit actions. + macOS may ask for: - Accessibility permission for keyboard automation. diff --git a/packaging/macos/Stringcast b/packaging/macos/Stringcast deleted file mode 100755 index 62564fa..0000000 --- a/packaging/macos/Stringcast +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -set -eu - -APP_DIR=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd) -BIN="$APP_DIR/Resources/stringcast" - -exec "$BIN" run diff --git a/packaging/macos/StringcastMenu.swift b/packaging/macos/StringcastMenu.swift new file mode 100644 index 0000000..9c07dce --- /dev/null +++ b/packaging/macos/StringcastMenu.swift @@ -0,0 +1,235 @@ +import AppKit +import Foundation + +final class AppDelegate: NSObject, NSApplicationDelegate { + private var statusItem: NSStatusItem! + private let menu = NSMenu() + private let stateItem = NSMenuItem(title: "Stringcast: Stopped", action: nil, keyEquivalent: "") + private let startItem = NSMenuItem(title: "Start Stringcast", action: #selector(startRuntime), keyEquivalent: "s") + private let stopItem = NSMenuItem(title: "Stop Stringcast", action: #selector(stopRuntimeFromMenu), keyEquivalent: "x") + private var runtimeProcess: Process? + private var logHandle: FileHandle? + + private var binaryURL: URL { + Bundle.main.bundleURL + .appendingPathComponent("Contents") + .appendingPathComponent("Resources") + .appendingPathComponent("stringcast") + } + + func applicationDidFinishLaunching(_ notification: Notification) { + configureStatusItem() + startRuntime() + } + + func applicationWillTerminate(_ notification: Notification) { + stopRuntime() + } + + private func configureStatusItem() { + statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength) + statusItem.button?.title = "Stringcast" + statusItem.menu = menu + + stateItem.isEnabled = false + menu.addItem(stateItem) + menu.addItem(NSMenuItem.separator()) + + startItem.target = self + menu.addItem(startItem) + + stopItem.target = self + menu.addItem(stopItem) + + menu.addItem(NSMenuItem.separator()) + addMenuItem("Status", #selector(showStatus), "i") + addMenuItem("Check Permissions", #selector(showPermissions), "p") + addMenuItem("Run API Test", #selector(runApiTest), "t") + addMenuItem("Open Config", #selector(openConfig), "o") + addMenuItem("Open Logs", #selector(openLogs), "l") + + menu.addItem(NSMenuItem.separator()) + addMenuItem("Quit", #selector(quit), "q") + updateMenuState() + } + + private func addMenuItem(_ title: String, _ action: Selector, _ keyEquivalent: String = "") { + let item = NSMenuItem(title: title, action: action, keyEquivalent: keyEquivalent) + item.target = self + menu.addItem(item) + } + + @objc private func startRuntime() { + guard runtimeProcess?.isRunning != true else { + updateMenuState() + return + } + + let process = Process() + process.executableURL = binaryURL + process.arguments = ["run"] + process.standardOutput = runtimeLogHandle() + process.standardError = runtimeLogHandle() + process.terminationHandler = { [weak self] terminatedProcess in + DispatchQueue.main.async { + if self?.runtimeProcess?.processIdentifier == terminatedProcess.processIdentifier { + self?.runtimeProcess = nil + self?.closeLogHandle() + self?.updateMenuState() + } + } + } + + do { + try process.run() + runtimeProcess = process + updateMenuState() + } catch { + showAlert(title: "Could Not Start Stringcast", message: error.localizedDescription) + closeLogHandle() + updateMenuState() + } + } + + @objc private func stopRuntimeFromMenu() { + stopRuntime() + } + + private func stopRuntime() { + guard let process = runtimeProcess else { + closeLogHandle() + updateMenuState() + return + } + + if process.isRunning { + process.terminate() + DispatchQueue.global(qos: .utility).async { + process.waitUntilExit() + } + } + + runtimeProcess = nil + closeLogHandle() + updateMenuState() + } + + @objc private func showStatus() { + runCommand(title: "Stringcast Status", arguments: ["status"]) + } + + @objc private func showPermissions() { + runCommand(title: "Stringcast Permissions", arguments: ["check-permissions"]) + } + + @objc private func runApiTest() { + runCommand(title: "Stringcast API Test", arguments: ["api-test"]) + } + + @objc private func openConfig() { + DispatchQueue.global(qos: .userInitiated).async { + let result = self.commandOutput(arguments: ["show-config"]) + DispatchQueue.main.async { + guard result.exitCode == 0 else { + self.showAlert(title: "Could Not Find Config", message: result.output) + return + } + + let path = result.output.trimmingCharacters(in: .whitespacesAndNewlines) + NSWorkspace.shared.open(URL(fileURLWithPath: path)) + } + } + } + + @objc private func openLogs() { + NSWorkspace.shared.open(logDirectoryURL()) + } + + @objc private func quit() { + stopRuntime() + NSApp.terminate(nil) + } + + private func runCommand(title: String, arguments: [String]) { + DispatchQueue.global(qos: .userInitiated).async { + let result = self.commandOutput(arguments: arguments) + DispatchQueue.main.async { + self.showAlert(title: title, message: result.output, isError: result.exitCode != 0) + } + } + } + + private func commandOutput(arguments: [String]) -> (exitCode: Int32, output: String) { + let process = Process() + process.executableURL = binaryURL + process.arguments = arguments + + let pipe = Pipe() + process.standardOutput = pipe + process.standardError = pipe + + do { + try process.run() + process.waitUntilExit() + let data = pipe.fileHandleForReading.readDataToEndOfFile() + let output = String(data: data, encoding: .utf8)?.trimmingCharacters(in: .whitespacesAndNewlines) + return (process.terminationStatus, output?.isEmpty == false ? output! : "(no output)") + } catch { + return (1, error.localizedDescription) + } + } + + private func updateMenuState() { + let running = runtimeProcess?.isRunning == true + stateItem.title = running ? "Stringcast: Running" : "Stringcast: Stopped" + statusItem.button?.title = running ? "Stringcast On" : "Stringcast Off" + startItem.isEnabled = !running + stopItem.isEnabled = running + } + + private func runtimeLogHandle() -> FileHandle { + if let logHandle { + return logHandle + } + + let url = logFileURL() + FileManager.default.createFile(atPath: url.path, contents: nil) + let handle = (try? FileHandle(forWritingTo: url)) ?? FileHandle.standardError + _ = try? handle.seekToEnd() + logHandle = handle + return handle + } + + private func closeLogHandle() { + if let logHandle { + try? logHandle.close() + } + logHandle = nil + } + + private func logDirectoryURL() -> URL { + let base = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask)[0] + let directory = base.appendingPathComponent("Stringcast", isDirectory: true) + try? FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true) + return directory + } + + private func logFileURL() -> URL { + logDirectoryURL().appendingPathComponent("stringcast-app.log") + } + + private func showAlert(title: String, message: String, isError: Bool = false) { + let alert = NSAlert() + alert.messageText = title + alert.informativeText = message + alert.alertStyle = isError ? .warning : .informational + alert.addButton(withTitle: "OK") + alert.runModal() + } +} + +let app = NSApplication.shared +let delegate = AppDelegate() +app.delegate = delegate +app.setActivationPolicy(.accessory) +app.run() diff --git a/packaging/macos/build_app.sh b/packaging/macos/build_app.sh index ff8c93b..0c129c3 100755 --- a/packaging/macos/build_app.sh +++ b/packaging/macos/build_app.sh @@ -5,7 +5,7 @@ if [ "${1:-}" = "--help" ]; then cat <<'USAGE' usage: packaging/macos/build_app.sh [release-binary-path] [output-dir] -Builds an unsigned Stringcast.app bundle around the Rust CLI binary. +Builds an unsigned menu-bar Stringcast.app bundle around the Rust CLI binary. Defaults: release-binary-path: target/release/stringcast @@ -27,11 +27,30 @@ if [ ! -f "$BIN_PATH" ]; then exit 1 fi +if [ "$(uname -s)" != "Darwin" ]; then + echo "macOS app bundles can only be built on macOS" >&2 + exit 1 +fi + +if ! command -v xcrun >/dev/null 2>&1; then + echo "missing xcrun; install Xcode command line tools" >&2 + exit 1 +fi + +if ! xcrun --sdk macosx --find swiftc >/dev/null 2>&1; then + echo "missing swiftc; install Xcode command line tools" >&2 + exit 1 +fi + rm -rf "$APP_DIR" mkdir -p "$MACOS_DIR" "$RESOURCES_DIR" cp packaging/macos/Info.plist "$CONTENTS_DIR/Info.plist" -cp packaging/macos/Stringcast "$MACOS_DIR/Stringcast" +xcrun --sdk macosx swiftc \ + -module-cache-path "${TMPDIR:-/tmp}/stringcast-swift-module-cache" \ + packaging/macos/StringcastMenu.swift \ + -framework AppKit \ + -o "$MACOS_DIR/Stringcast" cp "$BIN_PATH" "$RESOURCES_DIR/stringcast" chmod +x "$MACOS_DIR/Stringcast" "$RESOURCES_DIR/stringcast" From dc1052d26200785a7b48247d21c3ce2d2b7f66e5 Mon Sep 17 00:00:00 2001 From: abhinavgautam01 Date: Mon, 1 Jun 2026 23:08:38 +0530 Subject: [PATCH 2/4] Run macOS runtime as app executable --- README.md | 2 +- docs/MACOS_APP.md | 21 +++- docs/RELEASES.md | 2 +- packaging/macos/StringcastMenu.swift | 173 +++++++++++---------------- packaging/macos/build_app.sh | 8 +- src/main.rs | 133 +++++++++++++++++++- src/platform/macos.rs | 38 ++++++ src/platform/mod.rs | 4 +- 8 files changed, 259 insertions(+), 122 deletions(-) diff --git a/README.md b/README.md index 8fccdc6..28170be 100644 --- a/README.md +++ b/README.md @@ -98,7 +98,7 @@ Download artifacts from the GitHub Actions release workflow or from GitHub Relea See [docs/RELEASES.md](docs/RELEASES.md) for artifact download and smoke-test steps. -The macOS release also includes an unsigned menu-bar `Stringcast.app` wrapper. See [docs/MACOS_APP.md](docs/MACOS_APP.md) for build and testing notes. +The macOS release also includes an unsigned `Stringcast.app` bundle with a companion menu-bar item. See [docs/MACOS_APP.md](docs/MACOS_APP.md) for build and testing notes. ## Development diff --git a/docs/MACOS_APP.md b/docs/MACOS_APP.md index 3047058..17a625b 100644 --- a/docs/MACOS_APP.md +++ b/docs/MACOS_APP.md @@ -1,8 +1,8 @@ # macOS App Wrapper -Stringcast can be packaged as an unsigned menu-bar `.app` bundle around the Rust CLI binary. This gives macOS a stable app identity for permissions and Keychain prompts while the runtime still uses the existing CLI internally. +Stringcast can be packaged as an unsigned `.app` bundle where the Rust runtime is the app executable. This keeps the permission-sensitive keyboard listening and replacement work under `Stringcast.app` instead of a separate helper binary. -Launching the app starts `stringcast run` in the background and adds a `Stringcast` item to the macOS menu bar. +Launching the app starts the runtime and adds a `Stringcast` companion item to the macOS menu bar. ## Build Locally @@ -28,12 +28,11 @@ open dist/macos/Stringcast.app Use the menu-bar item to: - View status -- Start Stringcast -- Stop Stringcast -- Check permissions +- Request permissions - Run an API test - Open the config file - Open logs +- Reveal the app executable - Quit Stop it from Terminal if needed: @@ -52,6 +51,18 @@ macOS may ask for: If permissions were granted to a terminal binary before, macOS may ask again because `Stringcast.app` has a different app identity. +Grant permissions to `Stringcast.app`. The runtime now runs as the app executable: + +- `dist/macos/Stringcast.app/Contents/MacOS/Stringcast` + +If macOS still shows a stale `Stringcast` entry from an older local build, remove the old entry and add the rebuilt `Stringcast.app` again. To locate the current executable manually, use `Reveal App Executable` from the menu, or open Finder's Go to Folder dialog and paste: + +```text +dist/macos/Stringcast.app/Contents/MacOS/ +``` + +The app does not block startup on this permission check. If permissions are missing, Stringcast can still show as running, but keyboard listening or text replacement may not work until macOS grants the required permissions. + ## Current Limitations - The app is unsigned. diff --git a/docs/RELEASES.md b/docs/RELEASES.md index 951c12f..5c2055a 100644 --- a/docs/RELEASES.md +++ b/docs/RELEASES.md @@ -82,7 +82,7 @@ Or launch the app wrapper: open Stringcast.app ``` -The app starts Stringcast in the background and adds a menu-bar item with status, start, stop, permissions, API test, config, logs, and quit actions. +The app runs Stringcast as the app executable and adds a companion menu-bar item with status, request permissions, API test, config, logs, reveal executable, and quit actions. macOS may ask for: diff --git a/packaging/macos/StringcastMenu.swift b/packaging/macos/StringcastMenu.swift index 9c07dce..514e060 100644 --- a/packaging/macos/StringcastMenu.swift +++ b/packaging/macos/StringcastMenu.swift @@ -1,125 +1,67 @@ import AppKit +import Darwin import Foundation -final class AppDelegate: NSObject, NSApplicationDelegate { +final class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate { private var statusItem: NSStatusItem! private let menu = NSMenu() - private let stateItem = NSMenuItem(title: "Stringcast: Stopped", action: nil, keyEquivalent: "") - private let startItem = NSMenuItem(title: "Start Stringcast", action: #selector(startRuntime), keyEquivalent: "s") - private let stopItem = NSMenuItem(title: "Stop Stringcast", action: #selector(stopRuntimeFromMenu), keyEquivalent: "x") - private var runtimeProcess: Process? - private var logHandle: FileHandle? + private let stateItem = NSMenuItem(title: "Stringcast: Running", action: nil, keyEquivalent: "") + private let runtimePid = Int32(ProcessInfo.processInfo.environment["STRINGCAST_APP_RUNTIME_PID"] ?? "") - private var binaryURL: URL { + private var executableURL: URL { Bundle.main.bundleURL .appendingPathComponent("Contents") - .appendingPathComponent("Resources") - .appendingPathComponent("stringcast") + .appendingPathComponent("MacOS") + .appendingPathComponent("Stringcast") } func applicationDidFinishLaunching(_ notification: Notification) { configureStatusItem() - startRuntime() - } - - func applicationWillTerminate(_ notification: Notification) { - stopRuntime() } private func configureStatusItem() { statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength) - statusItem.button?.title = "Stringcast" + statusItem.button?.title = "Stringcast On" statusItem.menu = menu + menu.delegate = self stateItem.isEnabled = false menu.addItem(stateItem) menu.addItem(NSMenuItem.separator()) - startItem.target = self - menu.addItem(startItem) - - stopItem.target = self - menu.addItem(stopItem) - - menu.addItem(NSMenuItem.separator()) addMenuItem("Status", #selector(showStatus), "i") - addMenuItem("Check Permissions", #selector(showPermissions), "p") + addMenuItem("Request Permissions", #selector(requestPermissions), "r") addMenuItem("Run API Test", #selector(runApiTest), "t") addMenuItem("Open Config", #selector(openConfig), "o") addMenuItem("Open Logs", #selector(openLogs), "l") + addMenuItem("Reveal App Executable", #selector(revealAppExecutable), "h") menu.addItem(NSMenuItem.separator()) addMenuItem("Quit", #selector(quit), "q") updateMenuState() } + func menuWillOpen(_ menu: NSMenu) { + updateMenuState() + } + private func addMenuItem(_ title: String, _ action: Selector, _ keyEquivalent: String = "") { let item = NSMenuItem(title: title, action: action, keyEquivalent: keyEquivalent) item.target = self menu.addItem(item) } - @objc private func startRuntime() { - guard runtimeProcess?.isRunning != true else { - updateMenuState() - return - } - - let process = Process() - process.executableURL = binaryURL - process.arguments = ["run"] - process.standardOutput = runtimeLogHandle() - process.standardError = runtimeLogHandle() - process.terminationHandler = { [weak self] terminatedProcess in - DispatchQueue.main.async { - if self?.runtimeProcess?.processIdentifier == terminatedProcess.processIdentifier { - self?.runtimeProcess = nil - self?.closeLogHandle() - self?.updateMenuState() - } - } - } - - do { - try process.run() - runtimeProcess = process - updateMenuState() - } catch { - showAlert(title: "Could Not Start Stringcast", message: error.localizedDescription) - closeLogHandle() - updateMenuState() - } - } - - @objc private func stopRuntimeFromMenu() { - stopRuntime() - } - - private func stopRuntime() { - guard let process = runtimeProcess else { - closeLogHandle() - updateMenuState() - return - } - - if process.isRunning { - process.terminate() - DispatchQueue.global(qos: .utility).async { - process.waitUntilExit() - } - } - - runtimeProcess = nil - closeLogHandle() - updateMenuState() - } - @objc private func showStatus() { runCommand(title: "Stringcast Status", arguments: ["status"]) } - @objc private func showPermissions() { - runCommand(title: "Stringcast Permissions", arguments: ["check-permissions"]) + @objc private func requestPermissions() { + DispatchQueue.global(qos: .userInitiated).async { + let result = self.commandOutput(arguments: ["request-permissions"]) + DispatchQueue.main.async { + self.showPermissionAlert(message: result.output) + } + } } @objc private func runApiTest() { @@ -145,8 +87,14 @@ final class AppDelegate: NSObject, NSApplicationDelegate { NSWorkspace.shared.open(logDirectoryURL()) } + @objc private func revealAppExecutable() { + NSWorkspace.shared.activateFileViewerSelecting([executableURL]) + } + @objc private func quit() { - stopRuntime() + if let runtimePid, runtimePid > 0 { + Darwin.kill(runtimePid, SIGTERM) + } NSApp.terminate(nil) } @@ -161,7 +109,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate { private func commandOutput(arguments: [String]) -> (exitCode: Int32, output: String) { let process = Process() - process.executableURL = binaryURL + process.executableURL = executableURL process.arguments = arguments let pipe = Pipe() @@ -180,31 +128,16 @@ final class AppDelegate: NSObject, NSApplicationDelegate { } private func updateMenuState() { - let running = runtimeProcess?.isRunning == true + let running = runtimeIsRunning() stateItem.title = running ? "Stringcast: Running" : "Stringcast: Stopped" statusItem.button?.title = running ? "Stringcast On" : "Stringcast Off" - startItem.isEnabled = !running - stopItem.isEnabled = running - } - - private func runtimeLogHandle() -> FileHandle { - if let logHandle { - return logHandle - } - - let url = logFileURL() - FileManager.default.createFile(atPath: url.path, contents: nil) - let handle = (try? FileHandle(forWritingTo: url)) ?? FileHandle.standardError - _ = try? handle.seekToEnd() - logHandle = handle - return handle } - private func closeLogHandle() { - if let logHandle { - try? logHandle.close() + private func runtimeIsRunning() -> Bool { + guard let runtimePid, runtimePid > 0 else { + return false } - logHandle = nil + return Darwin.kill(runtimePid, 0) == 0 } private func logDirectoryURL() -> URL { @@ -214,10 +147,6 @@ final class AppDelegate: NSObject, NSApplicationDelegate { return directory } - private func logFileURL() -> URL { - logDirectoryURL().appendingPathComponent("stringcast-app.log") - } - private func showAlert(title: String, message: String, isError: Bool = false) { let alert = NSAlert() alert.messageText = title @@ -226,6 +155,38 @@ final class AppDelegate: NSObject, NSApplicationDelegate { alert.addButton(withTitle: "OK") alert.runModal() } + + private func showPermissionAlert(message: String) { + let alert = NSAlert() + alert.messageText = "Stringcast Needs Permissions" + alert.informativeText = """ + \(message) + + Grant permissions to Stringcast.app. The runtime now runs as the app executable: + \(executableURL.path) + """ + alert.alertStyle = .warning + alert.addButton(withTitle: "Open Accessibility") + alert.addButton(withTitle: "Open Input Monitoring") + alert.addButton(withTitle: "Reveal App Executable") + alert.addButton(withTitle: "OK") + + let response = alert.runModal() + if response == .alertFirstButtonReturn { + openSystemSettings("x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility") + } else if response == .alertSecondButtonReturn { + openSystemSettings("x-apple.systempreferences:com.apple.preference.security?Privacy_ListenEvent") + } else if response == .alertThirdButtonReturn { + revealAppExecutable() + } + } + + private func openSystemSettings(_ urlString: String) { + guard let url = URL(string: urlString) else { + return + } + NSWorkspace.shared.open(url) + } } let app = NSApplication.shared diff --git a/packaging/macos/build_app.sh b/packaging/macos/build_app.sh index 0c129c3..f3da128 100755 --- a/packaging/macos/build_app.sh +++ b/packaging/macos/build_app.sh @@ -5,7 +5,7 @@ if [ "${1:-}" = "--help" ]; then cat <<'USAGE' usage: packaging/macos/build_app.sh [release-binary-path] [output-dir] -Builds an unsigned menu-bar Stringcast.app bundle around the Rust CLI binary. +Builds an unsigned Stringcast.app bundle where the Rust runtime is the app executable. Defaults: release-binary-path: target/release/stringcast @@ -46,13 +46,13 @@ rm -rf "$APP_DIR" mkdir -p "$MACOS_DIR" "$RESOURCES_DIR" cp packaging/macos/Info.plist "$CONTENTS_DIR/Info.plist" +cp "$BIN_PATH" "$MACOS_DIR/Stringcast" xcrun --sdk macosx swiftc \ -module-cache-path "${TMPDIR:-/tmp}/stringcast-swift-module-cache" \ packaging/macos/StringcastMenu.swift \ -framework AppKit \ - -o "$MACOS_DIR/Stringcast" -cp "$BIN_PATH" "$RESOURCES_DIR/stringcast" + -o "$MACOS_DIR/StringcastMenu" -chmod +x "$MACOS_DIR/Stringcast" "$RESOURCES_DIR/stringcast" +chmod +x "$MACOS_DIR/Stringcast" "$MACOS_DIR/StringcastMenu" echo "Built $APP_DIR" diff --git a/src/main.rs b/src/main.rs index 304d058..698c301 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,12 +1,13 @@ use std::env; use std::path::Path; +use std::process::Command; use std::time::{Instant, SystemTime, UNIX_EPOCH}; use stringcast::api::{ ApiClient, ApiClientConfig, KeyMaterialStore, KeyPool, ReqwestHttpTransport, StaticKeyMaterialStore, }; -use stringcast::input::{InputHook, RdevInputHook}; +use stringcast::input::{InputControllerOutcome, InputEvent, InputHook, RdevInputHook}; use stringcast::platform::{PermissionChecker, SystemPermissionChecker}; use stringcast::runtime::StringcastRuntime; use stringcast::storage::{config_file_path, ApiKeyConfig, AppConfig, KeyringKeyMaterialStore}; @@ -29,6 +30,7 @@ fn run() -> Result<(), String> { Some("set-model") => return set_model(&args[1..]), Some("show-config") => return show_config_path(), Some("check-permissions") => return check_permissions(), + Some("request-permissions") => return request_permissions(), Some("add-key") => return add_key(&args[1..]), Some("api-test") => return api_test(), Some("run") | None => {} @@ -45,7 +47,12 @@ fn run() -> Result<(), String> { ) })?; - preflight_permissions()?; + launch_app_menu_if_needed(); + request_app_permissions_if_needed(); + + if !skip_permission_preflight() { + preflight_permissions()?; + } let key_material = load_key_material(&config)?; let mut runtime = StringcastRuntime::from_config(&config, key_material) @@ -54,11 +61,25 @@ fn run() -> Result<(), String> { println!("Stringcast running. Config: {}", config_path.display()); let mut hook = input_hook(); + let log_events = log_events(); hook.run(move |event| { + if log_events { + eprintln!("Stringcast input event: {}", describe_input_event(&event)); + } + let outcome = runtime.handle_event(event, Instant::now()); - if let Err(error) = outcome { - eprintln!("Stringcast event error: {error:?}"); + match outcome { + Ok(outcome) if log_events => { + eprintln!( + "Stringcast input outcome: {}", + describe_input_outcome(&outcome) + ); + } + Ok(_) => {} + Err(error) => { + eprintln!("Stringcast event error: {error:?}"); + } } }) .map_err(|error| format!("input hook error: {error:?}")) @@ -86,6 +107,91 @@ fn preflight_permissions() -> Result<(), String> { report.startup_error_message().map_or(Ok(()), Err) } +fn skip_permission_preflight() -> bool { + env::var("STRINGCAST_SKIP_PERMISSION_PREFLIGHT").is_ok_and(|value| value == "1") + || running_from_app_bundle() +} + +fn log_events() -> bool { + env::var("STRINGCAST_LOG_EVENTS").is_ok_and(|value| value == "1") +} + +fn describe_input_event(event: &InputEvent) -> String { + match event { + InputEvent::Text(text) => format!("Text(len={})", text.chars().count()), + InputEvent::Backspace => "Backspace".to_string(), + InputEvent::Delete => "Delete".to_string(), + InputEvent::Enter => "Enter".to_string(), + InputEvent::Escape => "Escape".to_string(), + InputEvent::Tab => "Tab".to_string(), + InputEvent::Navigation(key) => format!("Navigation({key:?})"), + InputEvent::MouseButton => "MouseButton".to_string(), + InputEvent::Shortcut(shortcut) => format!("Shortcut({shortcut:?})"), + InputEvent::FocusChanged => "FocusChanged".to_string(), + InputEvent::SleepOrLock => "SleepOrLock".to_string(), + } +} + +fn describe_input_outcome(outcome: &InputControllerOutcome) -> String { + match outcome { + InputControllerOutcome::IgnoredSynthetic => "IgnoredSynthetic".to_string(), + InputControllerOutcome::BufferUpdated(buffer) => { + format!("BufferUpdated(len={})", buffer.chars().count()) + } + InputControllerOutcome::BufferCleared => "BufferCleared".to_string(), + InputControllerOutcome::Pipeline(outcome) => format!("Pipeline({outcome:?})"), + } +} + +#[cfg(target_os = "macos")] +fn running_from_app_bundle() -> bool { + env::current_exe() + .ok() + .and_then(|path| path.to_str().map(str::to_string)) + .is_some_and(|path| path.contains(".app/Contents/MacOS/")) +} + +#[cfg(not(target_os = "macos"))] +fn running_from_app_bundle() -> bool { + false +} + +#[cfg(target_os = "macos")] +fn launch_app_menu_if_needed() { + if !running_from_app_bundle() || env::var("STRINGCAST_APP_MENU_DISABLED").is_ok() { + return; + } + + let Ok(exe) = env::current_exe() else { + return; + }; + let Some(macos_dir) = exe.parent() else { + return; + }; + + let menu_exe = macos_dir.join("StringcastMenu"); + if !menu_exe.exists() { + return; + } + + let _ = Command::new(menu_exe) + .env("STRINGCAST_APP_RUNTIME_PID", std::process::id().to_string()) + .spawn(); +} + +#[cfg(not(target_os = "macos"))] +fn launch_app_menu_if_needed() {} + +#[cfg(target_os = "macos")] +fn request_app_permissions_if_needed() { + if running_from_app_bundle() { + let _ = stringcast::platform::request_accessibility_permission(); + } +} + +#[cfg(not(target_os = "macos"))] +fn request_app_permissions_if_needed() {} + fn check_permissions() -> Result<(), String> { let report = SystemPermissionChecker::default().permission_report(); println!("Accessibility: {:?}", report.accessibility); @@ -96,6 +202,24 @@ fn check_permissions() -> Result<(), String> { Ok(()) } +#[cfg(target_os = "macos")] +fn request_permissions() -> Result<(), String> { + let trusted = stringcast::platform::request_accessibility_permission(); + let report = SystemPermissionChecker::default().permission_report(); + println!("Accessibility prompt requested: {trusted}"); + println!("Accessibility: {:?}", report.accessibility); + println!("Input Monitoring: {:?}", report.input_monitoring); + println!( + "If macOS opens Privacy & Security, enable Stringcast or stringcast, then restart Stringcast." + ); + Ok(()) +} + +#[cfg(not(target_os = "macos"))] +fn request_permissions() -> Result<(), String> { + check_permissions() +} + fn init_config() -> Result<(), String> { let config_path = config_file_path().map_err(|error| format!("config path error: {error:?}"))?; @@ -347,6 +471,7 @@ fn usage() -> &'static str { stringcast set-model stringcast show-config stringcast check-permissions + stringcast request-permissions stringcast api-test STRINGCAST_API_KEY= stringcast add-key [alias]" } diff --git a/src/platform/macos.rs b/src/platform/macos.rs index 217935f..0063b0a 100644 --- a/src/platform/macos.rs +++ b/src/platform/macos.rs @@ -3,6 +3,7 @@ use super::{ PlatformContextError, }; use std::process::Command; +use std::{ffi::c_void, ptr}; #[derive(Debug, Clone, Default)] pub struct MacOsForegroundAppProvider; @@ -98,10 +99,47 @@ fn accessibility_trusted() -> bool { unsafe { AXIsProcessTrusted() } } +pub fn request_accessibility_permission() -> bool { + unsafe { + let keys = [kAXTrustedCheckOptionPrompt]; + let values = [kCFBooleanTrue]; + let options = CFDictionaryCreate( + ptr::null(), + keys.as_ptr(), + values.as_ptr(), + 1, + ptr::null(), + ptr::null(), + ); + + let trusted = AXIsProcessTrustedWithOptions(options); + if !options.is_null() { + CFRelease(options); + } + trusted + } +} + #[link(name = "ApplicationServices", kind = "framework")] unsafe extern "C" { fn IsSecureEventInputEnabled() -> bool; fn AXIsProcessTrusted() -> bool; + static kAXTrustedCheckOptionPrompt: *const c_void; + fn AXIsProcessTrustedWithOptions(options: *const c_void) -> bool; +} + +#[link(name = "CoreFoundation", kind = "framework")] +unsafe extern "C" { + static kCFBooleanTrue: *const c_void; + fn CFDictionaryCreate( + allocator: *const c_void, + keys: *const *const c_void, + values: *const *const c_void, + num_values: isize, + key_callbacks: *const c_void, + value_callbacks: *const c_void, + ) -> *const c_void; + fn CFRelease(cf: *const c_void); } #[cfg(test)] diff --git a/src/platform/mod.rs b/src/platform/mod.rs index ca2dc97..fbceaf8 100644 --- a/src/platform/mod.rs +++ b/src/platform/mod.rs @@ -7,7 +7,9 @@ mod macos; mod windows; #[cfg(target_os = "macos")] -pub use macos::{MacOsForegroundAppProvider, MacOsPermissionChecker}; +pub use macos::{ + request_accessibility_permission, MacOsForegroundAppProvider, MacOsPermissionChecker, +}; #[cfg(target_os = "windows")] pub use windows::WindowsForegroundAppProvider; From 3bbfb58e8f8f731e686770d1ff75ba6ce859b4de Mon Sep 17 00:00:00 2001 From: abhinavgautam01 Date: Mon, 1 Jun 2026 23:14:57 +0530 Subject: [PATCH 3/4] Fix Linux clippy unused import --- src/main.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 698c301..7251f46 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,5 @@ use std::env; use std::path::Path; -use std::process::Command; use std::time::{Instant, SystemTime, UNIX_EPOCH}; use stringcast::api::{ @@ -174,7 +173,7 @@ fn launch_app_menu_if_needed() { return; } - let _ = Command::new(menu_exe) + let _ = std::process::Command::new(menu_exe) .env("STRINGCAST_APP_RUNTIME_PID", std::process::id().to_string()) .spawn(); } From daa0d92e3dda12576cb464f20aeb34dce6923979 Mon Sep 17 00:00:00 2001 From: abhinavgautam01 Date: Mon, 1 Jun 2026 23:36:48 +0530 Subject: [PATCH 4/4] Add macOS app icon --- docs/MACOS_APP.md | 12 +++++++++++ packaging/macos/Info.plist | 2 ++ packaging/macos/StringcastIcon.png | Bin 0 -> 120939 bytes packaging/macos/build_app.sh | 32 +++++++++++++++++++++++++++++ 4 files changed, 46 insertions(+) create mode 100644 packaging/macos/StringcastIcon.png diff --git a/docs/MACOS_APP.md b/docs/MACOS_APP.md index 17a625b..355ac57 100644 --- a/docs/MACOS_APP.md +++ b/docs/MACOS_APP.md @@ -13,6 +13,18 @@ cargo build --release packaging/macos/build_app.sh ``` +To include the app icon, save a square PNG at: + +```text +packaging/macos/StringcastIcon.png +``` + +The packaging script converts it to `Contents/Resources/StringcastIcon.icns`. You can also use a different source path for local builds: + +```bash +STRINGCAST_ICON=/path/to/icon.png packaging/macos/build_app.sh +``` + The app is written to: ```text diff --git a/packaging/macos/Info.plist b/packaging/macos/Info.plist index ab8751c..1f42101 100644 --- a/packaging/macos/Info.plist +++ b/packaging/macos/Info.plist @@ -14,6 +14,8 @@ 6.0 CFBundleName Stringcast + CFBundleIconFile + StringcastIcon CFBundlePackageType APPL CFBundleShortVersionString diff --git a/packaging/macos/StringcastIcon.png b/packaging/macos/StringcastIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..9f614d57b0dfa222b9850a18b774ec700153b18d GIT binary patch literal 120939 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 y=h5 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%0ASEm{?LqNm?7!5N8KF^+4 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≫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 literal 0 HcmV?d00001 diff --git a/packaging/macos/build_app.sh b/packaging/macos/build_app.sh index f3da128..c8f12ca 100755 --- a/packaging/macos/build_app.sh +++ b/packaging/macos/build_app.sh @@ -20,6 +20,7 @@ APP_DIR="$OUT_DIR/Stringcast.app" CONTENTS_DIR="$APP_DIR/Contents" MACOS_DIR="$CONTENTS_DIR/MacOS" RESOURCES_DIR="$CONTENTS_DIR/Resources" +ICON_SOURCE=${STRINGCAST_ICON:-packaging/macos/StringcastIcon.png} if [ ! -f "$BIN_PATH" ]; then echo "missing binary: $BIN_PATH" >&2 @@ -42,6 +43,16 @@ if ! xcrun --sdk macosx --find swiftc >/dev/null 2>&1; then exit 1 fi +if ! command -v sips >/dev/null 2>&1; then + echo "missing sips; cannot generate app icon" >&2 + exit 1 +fi + +if ! command -v iconutil >/dev/null 2>&1; then + echo "missing iconutil; cannot generate app icon" >&2 + exit 1 +fi + rm -rf "$APP_DIR" mkdir -p "$MACOS_DIR" "$RESOURCES_DIR" @@ -53,6 +64,27 @@ xcrun --sdk macosx swiftc \ -framework AppKit \ -o "$MACOS_DIR/StringcastMenu" +if [ -f "$ICON_SOURCE" ]; then + ICONSET_DIR="$OUT_DIR/StringcastIcon.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 + sips -z 1024 1024 "$ICON_SOURCE" --out "$ICONSET_DIR/icon_512x512@2x.png" >/dev/null + iconutil -c icns "$ICONSET_DIR" -o "$RESOURCES_DIR/StringcastIcon.icns" + rm -rf "$ICONSET_DIR" +else + echo "warning: icon source not found: $ICON_SOURCE" >&2 + echo " save the app icon PNG there, or set STRINGCAST_ICON=/path/to/icon.png" >&2 +fi + chmod +x "$MACOS_DIR/Stringcast" "$MACOS_DIR/StringcastMenu" echo "Built $APP_DIR"