Skip to content

fix: crash hardening (MQTT/SSWCP/GCodeViewer), mixed-filament dialog UI, preset and logging fixes - #735

Merged
LiuLikeQian merged 10 commits into
release_2_3_6from
fix_2.3.6_bug
Aug 18, 2026
Merged

fix: crash hardening (MQTT/SSWCP/GCodeViewer), mixed-filament dialog UI, preset and logging fixes#735
LiuLikeQian merged 10 commits into
release_2_3_6from
fix_2.3.6_bug

Conversation

@zhangzhend0ng

Copy link
Copy Markdown
Collaborator

Description

Batch of bugfixes for the 2.3.6 release branch, cherry-picked/merged from #723, #724, #726, #727, #730 and #611.

Stability / crash fixes

  • MQTT hardening (MQTT.cpp): construct the mqtt::async_client inside try/catch; null-safe guards in SSL init, Connect(), Disconnect() and Subscribe(). Exceptions are now logged and reported via the out-param instead of propagating and crashing the caller.
  • SW web-channel hardening (SSWCP.cpp): wrap all sw_* event handlers in try/catch with handle_general_fail() so exceptions thrown while handling JS events fail the job gracefully instead of terminating the app.
  • GCodeViewer re-entrancy crash (GCodeViewer.cpp, cherry-picked from fix: prevent re-entrant reset crash in GCodeViewer::load() #611): the modal progress dialog in load_toolpaths() pumps the event loop, allowing dispatched events to re-enter reset() and zero m_moves_count, causing unsigned underflow in reserve()std::length_error. Guarded reset() with an m_loading flag armed by an RAII ScopeGuard, replaced manual gcode_result.unlock() with a ScopeGuard, and added a defensive clamp on ssid_count.
  • Disable macOS memory guard detection (utils.cpp, fix: disable macOS memory guard detection #724): get_available_physical_memory() returns 0 on macOS so check_memory_guard() skips sampling. The old vm_statistics64-based estimate counted free pages only (ignoring reclaimable cache) and raised false low-memory warnings even for small models. Windows/Linux behavior unchanged.

UI fixes — mixed filament batch dialog (#726)

  • Add _light icon variants for add/remove and tray-nav buttons plus explicit disabled-state bitmaps, so all four states are distinguishable in dark mode.
  • Center the preview placeholder by logical size (GetScaledSize) to fix the Retina-rasterized bitmap drifting to top-left on macOS.
  • Pin row heights (title 20 DIP, manual-card 30 DIP) and add/remove buttons to 16x16 DIP so cards no longer shift when switching between recommended and manual modes.
  • Call m_btn_batch_match->Rescale() in Sidebar::msw_rescale() and sys_color_changed() so the cached text extent stays correct after DPI/theme changes.
  • Refine zh_CN translation of the mix-ratio range warning.

Other fixes

No breaking changes; no profile migration required (single filament preset value update).

iesteem and others added 10 commits August 17, 2026 16:36
- Center the preview placeholder by logical size (GetScaledSize) so the
  Retina-rasterized bitmap is no longer shifted toward the top-left on macOS
- Add _light icon variants for the add/remove and tray nav buttons, and set
  explicit disabled-state bitmaps (muted opposite-palette asset) so the four
  states are distinguishable in both themes
- Pin title rows to 20 DIP and manual-card rows to 30 DIP (matching the
  recommended card), and pin add/remove buttons to 16x16 DIP, so cards no
  longer shift when switching between recommended and manual modes
- Refine zh_CN translation of the mix-ratio range warning
Button::Rescale() refreshes icons, re-measures the cached text
extent (messureSize) and re-applies the style. It was missing for
m_btn_batch_match in Sidebar::msw_rescale() and sys_color_changed(),
so the label drifted/clipped after a DPI or theme change while the
sibling flushing-volume button stayed correct.
fix(gui): dark-mode icons, layout shift and DPI rescale in mixed-filament batch dialog
The modal progress dialog in load_toolpaths() pumps the event loop,
allowing dispatched events to re-enter reset() and zero m_moves_count.
This causes unsigned underflow in reserve(m_moves_count -
biased_seams_ids.size()), throwing std::length_error.

Guard reset() with an m_loading flag armed via RAII ScopeGuard,
and move reset() before the flag is set. Replace manual
gcode_result.unlock() with ScopeGuard for exception safety.
Also add a defensive clamp on the ssid_count computation in
load_toolpaths() as a belt-and-suspenders measure.
- get_available_physical_memory() returns 0 on macOS, so the runtime
  memory guard skips sampling entirely (avail == 0 short-circuit in
  check_memory_guard): no low-memory dialog, no guard actions
- The vm_statistics64-based estimate counted free pages only and
  ignored reclaimable cache (inactive/purgeable), sitting far below
  the guard threshold on any normally-used system; it raised false
  low-memory warnings even for small models
- Windows and Linux behavior is untouched
fix: prevent re-entrant reset crash in GCodeViewer::load()
* fix revert try catch for the mqtt connect.

* fix add try catch for mqtt.

* feature add the exception catch for mqtt.

* fix exception not catch question
@LiuLikeQian
LiuLikeQian merged commit ce37018 into release_2_3_6 Aug 18, 2026
1 check passed
LiuLikeQian pushed a commit that referenced this pull request Aug 18, 2026
- SSWCP.cpp sw_WakeupFind(): the Bonjour kick block was left as a bare
  '{ ... } catch (...) {}' — restore the missing 'try' keyword so the
  catch has an associated try block (error C2318)
- MoonRaker.cpp Moonraker_Mqtt ctor: drop the stray '{' left over when
  the socket probe was wrapped in try/catch; the unbalanced brace kept
  the constructor open and cascaded C2601/C2065/C1075 errors

Both are one-line brace/keyword fixes; no logic changes. Verified with
a full Release build of Snapmaker_Orca on MSVC (0 errors).
zhangzhend0ng added a commit to zhangzhend0ng/OrcaSlicer that referenced this pull request Aug 27, 2026
- BuildFullSpectrumPalette / DefaultFullSpectrumSelections: palette built from
  every Full Spectrum family in filaments_colours.json (single-color SKUs,
  family-grouped alphabetical order); default C/M/Y/W slots anchored on the
  default family with canonical fallback for short/degenerate configs
- Recommended card: four selectable dropdowns with numbered slot badge icons
  (re-applied on show for hidden-window rendering) and per-row tooltips
  (localized color name + config TD value); 30 DIP row height per upstream Snapmaker#735
- Match input: the four dropdown selections snapshotted on the UI thread and
  captured by value into the worker; <4 colors degrade to the canonical
  palette; distinct-selection gate dropped in favor of graceful fallback
- Config integration: TD values read through FilamentColorLibrary tdValue
  (static FULL_SPECTRUM_TD table removed); OTA update reloads the color
  library via PresetUpdater so hot-updated colors/TD appear without restart
- UX copy: unconfigured-filament note dialog at Confirm, tooltip/mode copy per
  phase-2 spec, dropdown rows show the filament name (not color+family)
- i18n: zh_CN translations for the new copy; orphaned string removed
- Tests: palette builder, default selections, td pass-through cases
- Docs: test-case vs implementation comparison and TD decision record
@iesteem
iesteem deleted the fix_2.3.6_bug branch August 28, 2026 08:10
LiuLikeQian added a commit that referenced this pull request Aug 31, 2026
* Fixing the issue that ASA and ABS are not heat-resistant materials. (#721)

* fix: prevent re-entrant reset crash in GCodeViewer::load() (#722)

The modal progress dialog in load_toolpaths() pumps the event loop,
allowing dispatched events to re-enter reset() and zero m_moves_count.
This causes unsigned underflow in reserve(m_moves_count -
biased_seams_ids.size()), throwing std::length_error.

Guard reset() with an m_loading flag armed via RAII ScopeGuard,
and move reset() before the flag is set. Replace manual
gcode_result.unlock() with ScopeGuard for exception safety.
Also add a defensive clamp on the ssid_count computation in
load_toolpaths() as a belt-and-suspenders measure.

Co-authored-by: zhangzhendong <zzdong0119@foxmail.com>

* ci: sign builds for release_* branches (#734)

Sign macOS builds for branches matching refs/heads/release_* (e.g. release_2_3_6, release_2_3_7) and skip the unsigned DMG step for them so it no longer overwrites the notarized DMG.

* fix: crash hardening (MQTT/SSWCP/GCodeViewer), mixed-filament dialog UI, preset and logging fixes (#735)

* fix:Modify the preset temperature value of the cold plate

* Fix dark-mode icons and layout shift in mixed filament batch dialog

- Center the preview placeholder by logical size (GetScaledSize) so the
  Retina-rasterized bitmap is no longer shifted toward the top-left on macOS
- Add _light icon variants for the add/remove and tray nav buttons, and set
  explicit disabled-state bitmaps (muted opposite-palette asset) so the four
  states are distinguishable in both themes
- Pin title rows to 20 DIP and manual-card rows to 30 DIP (matching the
  recommended card), and pin add/remove buttons to 16x16 DIP, so cards no
  longer shift when switching between recommended and manual modes
- Refine zh_CN translation of the mix-ratio range warning

* fix(gui): rescale batch match button on DPI/theme change

Button::Rescale() refreshes icons, re-measures the cached text
extent (messureSize) and re-applies the style. It was missing for
m_btn_batch_match in Sidebar::msw_rescale() and sys_color_changed(),
so the label drifted/clipped after a DPI or theme change while the
sibling flushing-volume button stayed correct.

* chore(log): downgrade GetFilamentInfo failure log to info (#727)

* Reset assembly view camera fit state when opening a project (#730)

* fix: prevent re-entrant reset crash in GCodeViewer::load()

The modal progress dialog in load_toolpaths() pumps the event loop,
allowing dispatched events to re-enter reset() and zero m_moves_count.
This causes unsigned underflow in reserve(m_moves_count -
biased_seams_ids.size()), throwing std::length_error.

Guard reset() with an m_loading flag armed via RAII ScopeGuard,
and move reset() before the flag is set. Replace manual
gcode_result.unlock() with ScopeGuard for exception safety.
Also add a defensive clamp on the ssid_count computation in
load_toolpaths() as a belt-and-suspenders measure.

* fix: disable macOS memory guard detection (#724)

- get_available_physical_memory() returns 0 on macOS, so the runtime
  memory guard skips sampling entirely (avail == 0 short-circuit in
  check_memory_guard): no low-memory dialog, no guard actions
- The vm_statistics64-based estimate counted free pages only and
  ignored reclaimable cache (inactive/purgeable), sitting far below
  the guard threshold on any normally-used system; it raised false
  low-memory warnings even for small models
- Windows and Linux behavior is untouched

* revert try catch for the mqtt connect. (#723)

* fix revert try catch for the mqtt connect.

* fix add try catch for mqtt.

* feature add the exception catch for mqtt.

* fix exception not catch question

---------

Co-authored-by: joyx_desktop <y.iesteem@gmail.com>
Co-authored-by: Kenshin627 <Kenshin627@users.noreply.github.com>
Co-authored-by: ZhangZheng <67276816+LuckZAE@users.noreply.github.com>
Co-authored-by: XieJiajun <68017138+PILIPALA030@users.noreply.github.com>
Co-authored-by: zackaree-shen <zackary_shen@qq.com>
Co-authored-by: Alves <LiuLikeQian@users.noreply.github.com>

* Fix timelapse download popup: border ring, flicker, and flutter_web update (#733)

* fix: correct parent of title bar and task panel to content panel

The title bar and task panel were added to m_content_panel's sizer but
their parent was still 'this' (the dialog), so wxWidgets could not
locate/render them, leaving the download list blank. Reparent them to
m_content_panel so ownership matches the sizer they live in.

* fix: eliminate download popup flicker on Windows

- Use wxBORDER_NONE on Windows (wxBORDER_SIMPLE kept elsewhere)
- Enable double buffering on the popup subtree
- Repaint the border ring on every paint event on Windows

* chore: update flutter_web resources to v2.3.26 (build 20260817160540)

* chore: update flutter_web resources to v2.3.26 (build 20260818172502)

---------

Co-authored-by: YukiMacMini <yukimacmini@YukiMacMinideMac-mini.local>

* Replace splash screen Beta label with localized Release tag (#736)

- Remove the "Beta version" line drawn under the brand name
- Append a localized "Release" tag to the version string on the
  splash screen (zh_CN: 版本), rendered as "V2.3.6 版本"
- Add the "Release" msgid to the zh_CN catalog and the pot template;
  other languages fall back to English until translated

* Fix syntax errors introduced by crash hardening (#735) (#738)

- SSWCP.cpp sw_WakeupFind(): the Bonjour kick block was left as a bare
  '{ ... } catch (...) {}' — restore the missing 'try' keyword so the
  catch has an associated try block (error C2318)
- MoonRaker.cpp Moonraker_Mqtt ctor: drop the stray '{' left over when
  the socket probe was wrapped in try/catch; the unbalanced brace kept
  the constructor open and cascaded C2601/C2065/C1075 errors

Both are one-line brace/keyword fixes; no logic changes. Verified with
a full Release build of Snapmaker_Orca on MSVC (0 errors).

* Fix Flatpak build: add missing <wx/wupdlock.h> includes (#739)

TimelapseDownloadPopup.cpp (introduced in #733) and ParamsPanel.cpp use
wxWindowUpdateLocker without including <wx/wupdlock.h>; they only compiled
because the PCH (pchheader.hpp) pulls the header in. The Flatpak build sets
-DSLIC3R_PCH=OFF, so TimelapseDownloadPopup.cpp failed with
'wxWindowUpdateLocker was not declared in this scope' in CI (run 32143560654).
ParamsPanel.cpp has the same latent dependency and is fixed preemptively.

Same pattern as 46e6284 (MixedFilamentBatchDialog.cpp).

* Fix case mismatch in U1 Color Mixing process preset filename (#742)

Snapmaker.json references the preset via sub_path
"process/0.10mm Color Mixing @Snapmaker U1 (0.4 nozzle).json"
(lowercase), but the file on disk was named "(0.4 Nozzle)".
PresetBundle::load_vendor_configs_from_json resolves each manifest
entry by the exact sub_path string, so on case-sensitive filesystems
(Linux AppImage/Flatpak/deb) the open fails and loading of the whole
Snapmaker vendor bundle aborts with ConfigurationError.

Rename the file to match both the manifest sub_path and the preset's
own "name" field. No preset content changed. Audited all 570
sub_path entries in Snapmaker.json — this was the only mismatch.
The same mismatch also exists on main.

* Fix: Remove unsupported Cold Steel Plate from U1 plate list (#759)

* Fix:从默认列表移除冷打板

* Hide Cool Steel Plate bed temperature rows in filament settings for U1 default list

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>

* fix: refresh sidebar nozzle UI on preset switch (#769)

* fix: refresh sidebar nozzle UI on preset switch

Printer preset switches from non-sidebar entries (Machine Settings
combo, preset deletion, UnsavedChangesDialog transfer, physical
printer linkage) left the sidebar nozzle selector stale: old
diameter, old candidate list, dual-nozzle pages not rebuilt.

After a successful FFF printer preset switch in Tab::select_preset,
schedule a CallAfter refresh of Sidebar::update_nozzle_settings()
via a weak ref to the sidebar (shutdown/GUI recreation safe). Also
harden update_nozzle_settings():
- null-safe printer_variant read (bare configs lack the key; the
  old code dereferenced it unchecked)
- focus recorded before the destructive rebuild and only reassigned
  when it was inside the rebuilt notebook
- wxWindowUpdateLocker around the rebuild (no flicker)

The sidebar combo paths now rebuild once directly and once via the
deferred refresh; the second rebuild is idempotent.

Guard the plater dereference at schedule time: GUI_App::plater_ is
never re-nulled on MainFrame destruction, so a preset switch reached
during recreate_GUI teardown would otherwise dereference a dangling
pointer.

* fix: explicitly initialize nozzle diameter string in sidebar

* fix: resolve ambiguous ternary operands breaking GCC/Clang builds (#775)

* fix: resolve ambiguous ternary operands breaking GCC/Clang builds

wxEmptyString is a macro that expands to const wxChar* (wchar_t* in
unicode builds), so the conditional introduced in #769 mixed a raw
pointer with wxString. Each converts to the other implicitly, which
makes the conditional expression ambiguous per [expr.cond]: GCC 13
and Apple Clang reject it while MSVC accepts it, so only the Linux,
macOS and Flatpak CI jobs broke (run 32856432114).

Use wxString() so both operands share one type. No behavior change:
the empty branch still produces an empty string.

* chore: bump minimum required firmware version to 1.6.0

* Modify the high and low temperature G-code for the model. (#781)

---------

Co-authored-by: zhouzengping <44285325+zhouzengping@users.noreply.github.com>
Co-authored-by: zackaree-shen <zackary_shen@qq.com>
Co-authored-by: joyx_desktop <y.iesteem@gmail.com>
Co-authored-by: Kenshin627 <Kenshin627@users.noreply.github.com>
Co-authored-by: ZhangZheng <67276816+LuckZAE@users.noreply.github.com>
Co-authored-by: XieJiajun <68017138+PILIPALA030@users.noreply.github.com>
Co-authored-by: Alves <LiuLikeQian@users.noreply.github.com>
Co-authored-by: SukiSunYuhang <sukiyuhang.sun@gmail.com>
Co-authored-by: YukiMacMini <yukimacmini@YukiMacMinideMac-mini.local>
Co-authored-by: Joyx <48636909+iesteem@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
LiuLikeQian added a commit that referenced this pull request Sep 3, 2026
* Fixing the issue that ASA and ABS are not heat-resistant materials. (#721)

* fix: prevent re-entrant reset crash in GCodeViewer::load() (#722)

The modal progress dialog in load_toolpaths() pumps the event loop,
allowing dispatched events to re-enter reset() and zero m_moves_count.
This causes unsigned underflow in reserve(m_moves_count -
biased_seams_ids.size()), throwing std::length_error.

Guard reset() with an m_loading flag armed via RAII ScopeGuard,
and move reset() before the flag is set. Replace manual
gcode_result.unlock() with ScopeGuard for exception safety.
Also add a defensive clamp on the ssid_count computation in
load_toolpaths() as a belt-and-suspenders measure.

Co-authored-by: zhangzhendong <zzdong0119@foxmail.com>

* ci: sign builds for release_* branches (#734)

Sign macOS builds for branches matching refs/heads/release_* (e.g. release_2_3_6, release_2_3_7) and skip the unsigned DMG step for them so it no longer overwrites the notarized DMG.

* fix: crash hardening (MQTT/SSWCP/GCodeViewer), mixed-filament dialog UI, preset and logging fixes (#735)

* fix:Modify the preset temperature value of the cold plate

* Fix dark-mode icons and layout shift in mixed filament batch dialog

- Center the preview placeholder by logical size (GetScaledSize) so the
  Retina-rasterized bitmap is no longer shifted toward the top-left on macOS
- Add _light icon variants for the add/remove and tray nav buttons, and set
  explicit disabled-state bitmaps (muted opposite-palette asset) so the four
  states are distinguishable in both themes
- Pin title rows to 20 DIP and manual-card rows to 30 DIP (matching the
  recommended card), and pin add/remove buttons to 16x16 DIP, so cards no
  longer shift when switching between recommended and manual modes
- Refine zh_CN translation of the mix-ratio range warning

* fix(gui): rescale batch match button on DPI/theme change

Button::Rescale() refreshes icons, re-measures the cached text
extent (messureSize) and re-applies the style. It was missing for
m_btn_batch_match in Sidebar::msw_rescale() and sys_color_changed(),
so the label drifted/clipped after a DPI or theme change while the
sibling flushing-volume button stayed correct.

* chore(log): downgrade GetFilamentInfo failure log to info (#727)

* Reset assembly view camera fit state when opening a project (#730)

* fix: prevent re-entrant reset crash in GCodeViewer::load()

The modal progress dialog in load_toolpaths() pumps the event loop,
allowing dispatched events to re-enter reset() and zero m_moves_count.
This causes unsigned underflow in reserve(m_moves_count -
biased_seams_ids.size()), throwing std::length_error.

Guard reset() with an m_loading flag armed via RAII ScopeGuard,
and move reset() before the flag is set. Replace manual
gcode_result.unlock() with ScopeGuard for exception safety.
Also add a defensive clamp on the ssid_count computation in
load_toolpaths() as a belt-and-suspenders measure.

* fix: disable macOS memory guard detection (#724)

- get_available_physical_memory() returns 0 on macOS, so the runtime
  memory guard skips sampling entirely (avail == 0 short-circuit in
  check_memory_guard): no low-memory dialog, no guard actions
- The vm_statistics64-based estimate counted free pages only and
  ignored reclaimable cache (inactive/purgeable), sitting far below
  the guard threshold on any normally-used system; it raised false
  low-memory warnings even for small models
- Windows and Linux behavior is untouched

* revert try catch for the mqtt connect. (#723)

* fix revert try catch for the mqtt connect.

* fix add try catch for mqtt.

* feature add the exception catch for mqtt.

* fix exception not catch question

---------

Co-authored-by: joyx_desktop <y.iesteem@gmail.com>
Co-authored-by: Kenshin627 <Kenshin627@users.noreply.github.com>
Co-authored-by: ZhangZheng <67276816+LuckZAE@users.noreply.github.com>
Co-authored-by: XieJiajun <68017138+PILIPALA030@users.noreply.github.com>
Co-authored-by: zackaree-shen <zackary_shen@qq.com>
Co-authored-by: Alves <LiuLikeQian@users.noreply.github.com>

* Fix timelapse download popup: border ring, flicker, and flutter_web update (#733)

* fix: correct parent of title bar and task panel to content panel

The title bar and task panel were added to m_content_panel's sizer but
their parent was still 'this' (the dialog), so wxWidgets could not
locate/render them, leaving the download list blank. Reparent them to
m_content_panel so ownership matches the sizer they live in.

* fix: eliminate download popup flicker on Windows

- Use wxBORDER_NONE on Windows (wxBORDER_SIMPLE kept elsewhere)
- Enable double buffering on the popup subtree
- Repaint the border ring on every paint event on Windows

* chore: update flutter_web resources to v2.3.26 (build 20260817160540)

* chore: update flutter_web resources to v2.3.26 (build 20260818172502)

---------

Co-authored-by: YukiMacMini <yukimacmini@YukiMacMinideMac-mini.local>

* Replace splash screen Beta label with localized Release tag (#736)

- Remove the "Beta version" line drawn under the brand name
- Append a localized "Release" tag to the version string on the
  splash screen (zh_CN: 版本), rendered as "V2.3.6 版本"
- Add the "Release" msgid to the zh_CN catalog and the pot template;
  other languages fall back to English until translated

* Fix syntax errors introduced by crash hardening (#735) (#738)

- SSWCP.cpp sw_WakeupFind(): the Bonjour kick block was left as a bare
  '{ ... } catch (...) {}' — restore the missing 'try' keyword so the
  catch has an associated try block (error C2318)
- MoonRaker.cpp Moonraker_Mqtt ctor: drop the stray '{' left over when
  the socket probe was wrapped in try/catch; the unbalanced brace kept
  the constructor open and cascaded C2601/C2065/C1075 errors

Both are one-line brace/keyword fixes; no logic changes. Verified with
a full Release build of Snapmaker_Orca on MSVC (0 errors).

* Fix Flatpak build: add missing <wx/wupdlock.h> includes (#739)

TimelapseDownloadPopup.cpp (introduced in #733) and ParamsPanel.cpp use
wxWindowUpdateLocker without including <wx/wupdlock.h>; they only compiled
because the PCH (pchheader.hpp) pulls the header in. The Flatpak build sets
-DSLIC3R_PCH=OFF, so TimelapseDownloadPopup.cpp failed with
'wxWindowUpdateLocker was not declared in this scope' in CI (run 32143560654).
ParamsPanel.cpp has the same latent dependency and is fixed preemptively.

Same pattern as 46e6284 (MixedFilamentBatchDialog.cpp).

* Fix case mismatch in U1 Color Mixing process preset filename (#742)

Snapmaker.json references the preset via sub_path
"process/0.10mm Color Mixing @Snapmaker U1 (0.4 nozzle).json"
(lowercase), but the file on disk was named "(0.4 Nozzle)".
PresetBundle::load_vendor_configs_from_json resolves each manifest
entry by the exact sub_path string, so on case-sensitive filesystems
(Linux AppImage/Flatpak/deb) the open fails and loading of the whole
Snapmaker vendor bundle aborts with ConfigurationError.

Rename the file to match both the manifest sub_path and the preset's
own "name" field. No preset content changed. Audited all 570
sub_path entries in Snapmaker.json — this was the only mismatch.
The same mismatch also exists on main.

* feature update mac os pack version

* fix mac os build fail.

* fix mac os 26.x build failed.

---------

Co-authored-by: zhouzengping <44285325+zhouzengping@users.noreply.github.com>
Co-authored-by: zackaree-shen <zackary_shen@qq.com>
Co-authored-by: zhangzhendong <zzdong0119@foxmail.com>
Co-authored-by: joyx_desktop <y.iesteem@gmail.com>
Co-authored-by: Kenshin627 <Kenshin627@users.noreply.github.com>
Co-authored-by: ZhangZheng <67276816+LuckZAE@users.noreply.github.com>
Co-authored-by: XieJiajun <68017138+PILIPALA030@users.noreply.github.com>
Co-authored-by: SukiSunYuhang <sukiyuhang.sun@gmail.com>
Co-authored-by: YukiMacMini <yukimacmini@YukiMacMinideMac-mini.local>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants