MacOS Behavior CLI vs App Differs
When trying to use Typst, I discovered a weird behavior. The CLI is rather unstable and although the CLI version can detect Typst's installation (via brew
), the App cannot.
Here, App means launching the package /Applications/Inkscape.app
as an app versus launching Inkscape via the CLI.
Primary Issue? CLI vs Executable
I have inkscape on my path at /usr/local/bin/inkscape
symlinked to the executable inside the Inkscape app package (/Applications/Inkscape.app/Contents/MacOS/inkscape
). So, why on Earth would running inkscape
the command (realpath $(which inkscape)
== /Applications/Inkscape.app/Contents/MacOS/inkscape
) differ from running the executable directly? When I run the executable from the command line directly, Inkscape works perfectly, but if I run the command, it crashes with the following warnings and stack trace.
Here are some of the related error messages:
As A Command errors
Gtk errors seem innocuous. Odd that it's pathing the extensions wrong, it's off by one instance of org.inkscape.extension.33713
(for example).
** (org.inkscape.Inkscape:70547): WARNING **: 20:16:23.817: Invalid child element found in parameter 'matchwhat' in extension 'burghoff.scaleplots'. Expected 'option'.
** (org.inkscape.Inkscape:70547): WARNING **: 20:16:23.817: Invalid child element found in parameter 'matchto' in extension 'burghoff.scaleplots'. Expected 'option'.
** (org.inkscape.Inkscape:70547): WARNING **: 20:16:23.861: Failed to find resource file 'hatch_fill.py'. Looked in:
/Users/coesite/Library/Application Support/org.inkscape.Inkscape/config/inkscape/extensions/hatch_fill.py
(null)
/Applications/Inkscape.app/Contents/Resources/share/inkscape/extensions/hatch_fill.py
** (org.inkscape.Inkscape:70547): WARNING **: 20:16:23.872: Failed to find resource file 'hatch_fill.py'. Looked in:
/Users/coesite/Library/Application Support/org.inkscape.Inkscape/config/inkscape/extensions/hatch_fill.py
(null)
/Applications/Inkscape.app/Contents/Resources/share/inkscape/extensions/hatch_fill.py
(org.inkscape.Inkscape:70547): Gtk-WARNING **: 20:16:23.891: Could not load image '../screens/start-welcome-text.svg': Unable to load image-loading module: /usr/local/bin/../Resources/lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.so: dlopen(/usr/local/bin/../Resources/lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.so, 0x0001): tried: '/usr/local/bin/../Resources/lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.so' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/usr/local/bin/../Resources/lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.so' (no such file), '/usr/local/bin/../Resources/lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.so' (no such file)
(org.inkscape.Inkscape:70547): Gtk-WARNING **: 20:16:23.899: Could not load a pixbuf from icon theme.
This may indicate that pixbuf loaders or the mime database could not be found.
**
Gtk:ERROR:../../../usr/src/gtk+-3.24.38/gtk/gtkiconhelper.c:495:ensure_surface_for_gicon: assertion failed (error == NULL): Failed to load /Applications/Inkscape.app/Contents/Resources/share/inkscape/icons/multicolor/symbolic/actions/image-missing-symbolic.svg: Unable to load image-loading module: /usr/local/bin/../Resources/lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.so: dlopen(/usr/local/bin/../Resources/lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.so, 0x0001): tried: '/usr/local/bin/../Resources/lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.so' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/usr/local/bin/../Resources/lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.so' (no such file), '/usr/local/bin/../Resources/lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.so' (no such file) (gdk-pixbuf-error-quark, 5)
Bail out! Gtk:ERROR:../../../usr/src/gtk+-3.24.38/gtk/gtkiconhelper.c:495:ensure_surface_for_gicon: assertion failed (error == NULL): Failed to load /Applications/Inkscape.app/Contents/Resources/share/inkscape/icons/multicolor/symbolic/actions/image-missing-symbolic.svg: Unable to load image-loading module: /usr/local/bin/../Resources/lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.so: dlopen(/usr/local/bin/../Resources/lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.so, 0x0001): tried: '/usr/local/bin/../Resources/lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.so' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/usr/local/bin/../Resources/lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.so' (no such file), '/usr/local/bin/../Resources/lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.so' (no such file) (gdk-pixbuf-error-quark, 5)
Emergency save activated!
Emergency save completed. Inkscape will close now.
If you can reproduce this crash, please file a bug at https://inkscape.org/report
with a detailed description of the steps leading to the crash, so we can fix it.
As a Command Crash Trace
The CLI fails to run Inkscape.
0# Inkscape::Application::crash_handler(int) in /Applications/Inkscape.app/Contents/Resources/lib/inkscape/libinkscape_base.1.3.2.0.dylib 1# _sigtramp in /usr/lib/system/libsystem_platform.dylib 2# pthread_kill in /usr/lib/system/libsystem_pthread.dylib 3# abort in /usr/lib/system/libsystem_c.dylib 4# g_assertion_message_expr in /Applications/Inkscape.app/Contents/Resources/lib/libglib-2.0.0.dylib 5# g_assertion_message_error in /Applications/Inkscape.app/Contents/Resources/lib/libglib-2.0.0.dylib 6# ensure_surface_for_gicon in /Applications/Inkscape.app/Contents/Resources/lib/libgtk-3.0.dylib 7# gtk_icon_helper_load_surface in /Applications/Inkscape.app/Contents/Resources/lib/libgtk-3.0.dylib 8# _gtk_icon_helper_get_size in /Applications/Inkscape.app/Contents/Resources/lib/libgtk-3.0.dylib 9# gtk_image_get_content_size in /Applications/Inkscape.app/Contents/Resources/lib/libgtk-3.0.dylib 10# gtk_css_gadget_get_preferred_size in /Applications/Inkscape.app/Contents/Resources/lib/libgtk-3.0.dylib 11# Gtk::Widget_Class::get_preferred_width_vfunc_callback(_GtkWidget*, int*, int*) in /Applications/Inkscape.app/Contents/Resources/lib/libgtkmm-3.0.1.dylib 12# gtk_widget_query_size_for_orientation in /Applications/Inkscape.app/Contents/Resources/lib/libgtk-3.0.dylib 13# gtk_fixed_get_preferred_width in /Applications/Inkscape.app/Contents/Resources/lib/libgtk-3.0.dylib 14# Gtk::Widget_Class::get_preferred_width_vfunc_callback(_GtkWidget*, int*, int*) in /Applications/Inkscape.app/Contents/Resources/lib/libgtkmm-3.0.1.dylib 15# gtk_widget_query_size_for_orientation in /Applications/Inkscape.app/Contents/Resources/lib/libgtk-3.0.dylib 16# gtk_bin_get_preferred_width in /Applications/Inkscape.app/Contents/Resources/lib/libgtk-3.0.dylib 17# gtk_revealer_real_get_preferred_width in /Applications/Inkscape.app/Contents/Resources/lib/libgtk-3.0.dylib 18# Gtk::Widget_Class::get_preferred_width_vfunc_callback(_GtkWidget*, int*, int*) in /Applications/Inkscape.app/Contents/Resources/lib/libgtkmm-3.0.1.dylib 19# gtk_widget_query_size_for_orientation in /Applications/Inkscape.app/Contents/Resources/lib/libgtk-3.0.dylib 20# gtk_fixed_get_preferred_width in /Applications/Inkscape.app/Contents/Resources/lib/libgtk-3.0.dylib 21# Gtk::Widget_Class::get_preferred_width_vfunc_callback(_GtkWidget*, int*, int*) in /Applications/Inkscape.app/Contents/Resources/lib/libgtkmm-3.0.1.dylib 22# gtk_widget_query_size_for_orientation in /Applications/Inkscape.app/Contents/Resources/lib/libgtk-3.0.dylib 23# gtk_window_get_preferred_width in /Applications/Inkscape.app/Contents/Resources/lib/libgtk-3.0.dylib 24# Gtk::Widget_Class::get_preferred_width_vfunc_callback(_GtkWidget*, int*, int*) in /Applications/Inkscape.app/Contents/Resources/lib/libgtkmm-3.0.1.dylib 25# gtk_widget_query_size_for_orientation in /Applications/Inkscape.app/Contents/Resources/lib/libgtk-3.0.dylib 26# _gtk_widget_get_preferred_size_and_baseline in /Applications/Inkscape.app/Contents/Resources/lib/libgtk-3.0.dylib 27# gtk_window_compute_configure_request in /Applications/Inkscape.app/Contents/Resources/lib/libgtk-3.0.dylib 28# gtk_window_realize in /Applications/Inkscape.app/Contents/Resources/lib/libgtk-3.0.dylib 29# Gtk::Widget_Class::realize_callback(_GtkWidget*) in /Applications/Inkscape.app/Contents/Resources/lib/libgtkmm-3.0.1.dylib 30# _g_closure_invoke_va in /Applications/Inkscape.app/Contents/Resources/lib/libgobject-2.0.0.dylib 31# g_signal_emit_valist in /Applications/Inkscape.app/Contents/Resources/lib/libgobject-2.0.0.dylib 32# g_signal_emit in /Applications/Inkscape.app/Contents/Resources/lib/libgobject-2.0.0.dylib 33# gtk_widget_realize in /Applications/Inkscape.app/Contents/Resources/lib/libgtk-3.0.dylib 34# gtk_window_show in /Applications/Inkscape.app/Contents/Resources/lib/libgtk-3.0.dylib 35# Gtk::Widget_Class::show_callback(_GtkWidget*) in /Applications/Inkscape.app/Contents/Resources/lib/libgtkmm-3.0.1.dylib 36# g_closure_invoke in /Applications/Inkscape.app/Contents/Resources/lib/libgobject-2.0.0.dylib 37# signal_emit_unlocked_R in /Applications/Inkscape.app/Contents/Resources/lib/libgobject-2.0.0.dylib 38# g_signal_emit_valist in /Applications/Inkscape.app/Contents/Resources/lib/libgobject-2.0.0.dylib 39# g_signal_emit in /Applications/Inkscape.app/Contents/Resources/lib/libgobject-2.0.0.dylib 40# gtk_widget_show in /Applications/Inkscape.app/Contents/Resources/lib/libgtk-3.0.dylib 41# Inkscape::UI::Dialog::StartScreen::StartScreen() in /Applications/Inkscape.app/Contents/Resources/lib/inkscape/libinkscape_base.1.3.2.0.dylib 42# InkscapeApplication::on_activate() in /Applications/Inkscape.app/Contents/Resources/lib/inkscape/libinkscape_base.1.3.2.0.dylib 43# Glib::SignalProxyNormal::slot0_void_callback(_GObject*, void*) in /Applications/Inkscape.app/Contents/Resources/lib/libglibmm-2.4.1.dylib 44# g_closure_invoke in /Applications/Inkscape.app/Contents/Resources/lib/libgobject-2.0.0.dylib 45# signal_emit_unlocked_R in /Applications/Inkscape.app/Contents/Resources/lib/libgobject-2.0.0.dylib 46# g_signal_emit_valist in /Applications/Inkscape.app/Contents/Resources/lib/libgobject-2.0.0.dylib 47# g_signal_emit in /Applications/Inkscape.app/Contents/Resources/lib/libgobject-2.0.0.dylib 48# g_application_real_local_command_line in /Applications/Inkscape.app/Contents/Resources/lib/libgio-2.0.0.dylib 49# g_application_run in /Applications/Inkscape.app/Contents/Resources/lib/libgio-2.0.0.dylib 50# main in /Applications/Inkscape.app/Contents/MacOS/inkscape
System info
Inkscape 1.3.2 (091e20e, 2023-11-25)
GLib version: 2.76.3
GTK version: 3.24.38
glibmm version: 2.66.6
gtkmm version: 3.24.7
libxml2 version: 2.11.4
libxslt version: 1.1.35
Cairo version: 1.18.0
Pango version: 1.50.14
HarfBuzz version: 8.0.1
OS version: macOS 14.4.1 (23E224) arm64
Running the Executable Directly Warnings
The executable runs Inkscape just fine, so I doubt these warnings are troubling.
** (org.inkscape.Inkscape:72828): WARNING **: 20:24:07.097: Invalid child element found in parameter 'matchwhat' in extension 'burghoff.scaleplots'. Expected 'option'.
** (org.inkscape.Inkscape:72828): WARNING **: 20:24:07.097: Invalid child element found in parameter 'matchto' in extension 'burghoff.scaleplots'. Expected 'option'.
** (org.inkscape.Inkscape:72828): WARNING **: 20:24:07.141: Failed to find resource file 'hatch_fill.py'. Looked in:
/Users/coesite/Library/Application Support/org.inkscape.Inkscape/config/inkscape/extensions/hatch_fill.py
(null)
/Applications/Inkscape.app/Contents/Resources/share/inkscape/extensions/hatch_fill.py
** (org.inkscape.Inkscape:72828): WARNING **: 20:24:07.152: Failed to find resource file 'hatch_fill.py'. Looked in:
/Users/coesite/Library/Application Support/org.inkscape.Inkscape/config/inkscape/extensions/hatch_fill.py
(null)
/Applications/Inkscape.app/Contents/Resources/share/inkscape/extensions/hatch_fill.py
2024-04-12 20:24:07.675 inkscape[72828:7011322] WARNING: Secure coding is not enabled for restorable state! Enable secure coding by implementing NSApplicationDelegate.applicationSupportsSecureRestorableState: and returning YES.
Where it gets weird: Typst
The reason I ran into this issue was in trying to use Typst, so although my true request is help getting Typst to work, I... have no idea what the underlying problem may be.
Typst works if I run the executable from the terminal, but not if I open the App... Under Extensions (->Text), Typst is greyed out if I launch the App, but not if I run Inkscape from the command line.
I wonder if installing Typst with Homebrew is somehow not compatible with how Inkscape normally scans the path, so running from the CLI exposes typst correctly while launching the app does not.