diff --git a/.github/actions/setup-dependencies/macos/action.yml b/.github/actions/setup-dependencies/macos/action.yml
index 0e6d48621..7de08e261 100644
--- a/.github/actions/setup-dependencies/macos/action.yml
+++ b/.github/actions/setup-dependencies/macos/action.yml
@@ -14,7 +14,7 @@ runs:
shell: bash
run: |
brew update
- brew install ninja extra-cmake-modules temurin@17
+ brew install ninja extra-cmake-modules temurin@17 mono
- name: Set JAVA_HOME
shell: bash
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 5eef33805..0e81fd5a1 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -118,7 +118,7 @@ jobs:
cmake-preset: windows_msvc
vcvars-arch: arm64
- - os: macos-14
+ - os: macos-26
artifact-name: macOS
cmake-preset: macos_universal
macosx-deployment-target: 12.0
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 69a8efb2d..d0bea2da3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -399,6 +399,52 @@ if(UNIX AND APPLE)
# Add the icon
install(FILES ${Launcher_Branding_ICNS} DESTINATION ${RESOURCES_DEST_DIR} RENAME ${Launcher_Name}.icns)
+ find_program(ACTOOL_EXE actool DOC "Path to the apple asset catalog compiler")
+ if(ACTOOL_EXE)
+ execute_process(
+ COMMAND xcodebuild -version
+ OUTPUT_VARIABLE XCODE_VERSION_OUTPUT
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+
+ string(REGEX MATCH "Xcode ([0-9]+\.[0-9]+)" XCODE_VERSION_MATCH "${XCODE_VERSION_OUTPUT}")
+ if(XCODE_VERSION_MATCH)
+ set(XCODE_VERSION ${CMAKE_MATCH_1})
+ else()
+ set(XCODE_VERSION 0.0)
+ endif()
+
+ if(XCODE_VERSION VERSION_GREATER_EQUAL 26.0)
+ set(ASSETS_OUT_DIR "${CMAKE_BINARY_DIR}/program_info")
+ set(GENERATED_ASSETS_CAR "${ASSETS_OUT_DIR}/Assets.car")
+ set(ICON_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/${Launcher_Branding_MAC_ICON}")
+
+ add_custom_command(
+ OUTPUT "${GENERATED_ASSETS_CAR}"
+ COMMAND ${ACTOOL_EXE} "${ICON_SOURCE}"
+ --compile "${ASSETS_OUT_DIR}"
+ --output-partial-info-plist /dev/null
+ --app-icon PrismLauncher
+ --enable-on-demand-resources NO
+ --target-device mac
+ --minimum-deployment-target ${CMAKE_OSX_DEPLOYMENT_TARGET}
+ --platform macosx
+ DEPENDS "${ICON_SOURCE}"
+ COMMENT "Compiling asset catalog (${ICON_SOURCE})"
+ VERBATIM
+ )
+ add_custom_target(compile_assets ALL DEPENDS "${GENERATED_ASSETS_CAR}")
+ install(FILES "${GENERATED_ASSETS_CAR}" DESTINATION "${RESOURCES_DEST_DIR}")
+ else()
+ message(WARNING "Xcode ${XCODE_VERSION} is too old. Minimum required version is 26.0. Not compiling liquid glass icons.")
+ endif()
+
+ else()
+ message(WARNING "actool not found. Cannot compile macOS app icons.\n"
+ "Install Xcode command line tools: 'xcode-select --install'")
+ endif()
+
+
elseif(UNIX)
include(KDEInstallDirs)
diff --git a/cmake/MacOSXBundleInfo.plist.in b/cmake/MacOSXBundleInfo.plist.in
index 3a8c8fbfe..cfd671d68 100644
--- a/cmake/MacOSXBundleInfo.plist.in
+++ b/cmake/MacOSXBundleInfo.plist.in
@@ -21,7 +21,9 @@
CFBundleGetInfoString
${MACOSX_BUNDLE_INFO_STRING}
CFBundleIconFile
- ${MACOSX_BUNDLE_ICON_FILE}
+ ${Launcher_Name}
+ CFBundleIconName
+ ${Launcher_Name}
CFBundleIdentifier
${MACOSX_BUNDLE_GUI_IDENTIFIER}
CFBundleInfoDictionaryVersion
diff --git a/program_info/CMakeLists.txt b/program_info/CMakeLists.txt
index 23eb840b1..064b1a540 100644
--- a/program_info/CMakeLists.txt
+++ b/program_info/CMakeLists.txt
@@ -32,6 +32,7 @@ set(Launcher_MetaInfo "program_info/${Launcher_AppID}.metainfo.xml" PARENT_SCOPE
set(Launcher_PNG_256 "program_info/${Launcher_AppID}_256.png" PARENT_SCOPE)
set(Launcher_SVG "program_info/${Launcher_SVGFileName}" PARENT_SCOPE)
set(Launcher_Branding_ICNS "program_info/prismlauncher.icns" PARENT_SCOPE)
+set(Launcher_Branding_MAC_ICON "program_info/PrismLauncher.icon" PARENT_SCOPE)
set(Launcher_Branding_ICO "program_info/prismlauncher.ico")
set(Launcher_Branding_ICO "${Launcher_Branding_ICO}" PARENT_SCOPE)
set(Launcher_Branding_WindowsRC "program_info/prismlauncher.rc" PARENT_SCOPE)
diff --git a/program_info/PrismLauncher.icon/Assets/block.svg b/program_info/PrismLauncher.icon/Assets/block.svg
new file mode 100644
index 000000000..08a80d8bd
--- /dev/null
+++ b/program_info/PrismLauncher.icon/Assets/block.svg
@@ -0,0 +1,91 @@
+
+
\ No newline at end of file
diff --git a/program_info/PrismLauncher.icon/Assets/rainbow.svg b/program_info/PrismLauncher.icon/Assets/rainbow.svg
new file mode 100644
index 000000000..d47bb615a
--- /dev/null
+++ b/program_info/PrismLauncher.icon/Assets/rainbow.svg
@@ -0,0 +1,95 @@
+
+
\ No newline at end of file
diff --git a/program_info/PrismLauncher.icon/icon.json b/program_info/PrismLauncher.icon/icon.json
new file mode 100644
index 000000000..131c7de4c
--- /dev/null
+++ b/program_info/PrismLauncher.icon/icon.json
@@ -0,0 +1,72 @@
+{
+ "color-space-for-untagged-svg-colors" : "display-p3",
+ "fill" : {
+ "solid" : "extended-gray:1.00000,1.00000"
+ },
+ "groups" : [
+ {
+ "layers" : [
+ {
+ "image-name" : "block.svg",
+ "name" : "block",
+ "position" : {
+ "scale" : 19.28,
+ "translation-in-points" : [
+ 0,
+ 0
+ ]
+ }
+ }
+ ],
+ "shadow" : {
+ "kind" : "neutral",
+ "opacity" : 0.5
+ },
+ "translucency" : {
+ "enabled" : true,
+ "value" : 0.5
+ }
+ },
+ {
+ "blur-material-specializations" : [
+ {
+ "value" : 0.5
+ },
+ {
+ "appearance" : "dark",
+ "value" : null
+ }
+ ],
+ "layers" : [
+ {
+ "blend-mode" : "normal",
+ "fill" : "automatic",
+ "glass" : true,
+ "hidden" : false,
+ "image-name" : "rainbow.svg",
+ "name" : "rainbow",
+ "position" : {
+ "scale" : 19.28,
+ "translation-in-points" : [
+ 0,
+ 0
+ ]
+ }
+ }
+ ],
+ "shadow" : {
+ "kind" : "neutral",
+ "opacity" : 0.5
+ },
+ "translucency" : {
+ "enabled" : false,
+ "value" : 0.5
+ }
+ }
+ ],
+ "supported-platforms" : {
+ "squares" : [
+ "macOS"
+ ]
+ }
+}
\ No newline at end of file