ahkohd / tauri-macos-spotlight-example

An example macOS Spotlight app built with Tauri
MIT License
133 stars 8 forks source link

System tray not working in built version of Spotlight/NSPanel example #20

Closed allachetan closed 2 months ago

allachetan commented 2 months ago

The app runs fine with the "run dev" command, but quits immediately after opening the built version of the app. I suspect there might be a bug in the init_spotlight_window function. I have only added a basic implementation of the system tray from the Tauri docs shown below (no other additions to the codebase).

My macos version is: 13.6.6 (intel). However I tested this on my arm mac and it also did not work.

Code:

#![cfg_attr(
    all(not(debug_assertions), target_os = "windows"),
    windows_subsystem = "windows"
)]
mod spotlight;
use tauri::{SystemTray, CustomMenuItem, SystemTrayMenu, SystemTrayMenuItem};

fn main() {
    let quit = CustomMenuItem::new("quit".to_string(), "Quit");
    let hide = CustomMenuItem::new("hide".to_string(), "Hide");
    let tray_menu = SystemTrayMenu::new()
        .add_item(quit)
        .add_native_item(SystemTrayMenuItem::Separator)
        .add_item(hide);
    let system_tray = SystemTray::new().with_menu(tray_menu);

    tauri::Builder::default()
        .invoke_handler(tauri::generate_handler![
            spotlight::init_spotlight_window,
            spotlight::show_spotlight,
            spotlight::hide_spotlight
        ])
        .manage(spotlight::State::default())
        .system_tray(system_tray)
        .setup(move |app| {
            // Set activation poicy to Accessory to prevent the app icon from showing on the dock
            app.set_activation_policy(tauri::ActivationPolicy::Accessory);
            Ok(())
        })
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

Any help with this would be greatly appreciated :). In init_spotlight_window code seems to be able to create the panel without issue. So the issue seems to be within the following code inside init_spotlight_window:

// Set panel above the main menu window level
panel.set_level(NSMainMenuWindowLevel + 1);

// Set panel to auto hide when it resigns key
panel.set_auto_hide(true);

// Ensure that the panel can display over the top of fullscreen apps
panel.set_collection_behaviour(
    NSWindowCollectionBehavior::NSWindowCollectionBehaviorTransient
        | NSWindowCollectionBehavior::NSWindowCollectionBehaviorMoveToActiveSpace
        | NSWindowCollectionBehavior::NSWindowCollectionBehaviorFullScreenAuxiliary,
);

// Ensures panel does not activate
panel.set_style_mask(NSWindowStyleMaskNonActivatingPanel);

// Setup delegate for an NSPanel to listen for window resign key and hide the panel
let delegate = RawNSPanelDelegate::new();
delegate.set_panel_(panel.clone());
panel.set_delegate(Some(delegate));
ahkohd commented 2 months ago

I have tested a production build of this repository's example, and it works perfectly.

Can you please provide a GitHub repository containing a minimal reproduction of your project? I would like to test it on my end and debug the issue for you.

ahkohd commented 2 months ago

You can also check this https://github.com/ahkohd/tauri-macos-menubar-app-example template on building a menubar application with a tray icon using the tauri-nspanel plugin.

ahkohd commented 2 months ago

You can get more information about why your app crashed by running the binary of the app in terminal and inspecting the standard output.

https://github.com/user-attachments/assets/f02c64bd-14cb-4c2d-9d70-75dfc11603ce

Right-click on your production build "App.app", On the context menu, click on "Show Package Contents"

allachetan commented 2 months ago

Thank you for your response. I will try debugging later tonight or this week with your method, thank you for showing me!

I have created a repo with the minimal implementation here: https://github.com/allachetan/tauri-macos-spotlight-with-tray. I tried running the build command again, but same issue of an immediate crash after attempting to open the app even though it works fine with the run dev command.

allachetan commented 2 months ago

Update: I was not able to get it working with this codebase, however I was able to get the solution I was looking for follwing your repo https://github.com/ahkohd/tauri-macos-menubar-app-example using the tauri nspanel plugin.