diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 825f948..beafee7 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -20,6 +20,8 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
+ - name: Install SVG renderer
+ run: brew install librsvg
- name: Build
run: |
cmake --preset release
diff --git a/assets/simstore.svg b/assets/simstore.svg
new file mode 100644
index 0000000..dae79d1
--- /dev/null
+++ b/assets/simstore.svg
@@ -0,0 +1,36 @@
+
diff --git a/cmake/Info.plist.in b/cmake/Info.plist.in
index 6b6f017..9bcfb3a 100644
--- a/cmake/Info.plist.in
+++ b/cmake/Info.plist.in
@@ -8,6 +8,8 @@
${MACOSX_BUNDLE_EXECUTABLE_NAME}
CFBundleIdentifier
${MACOSX_BUNDLE_GUI_IDENTIFIER}
+ CFBundleIconFile
+ ${MACOSX_BUNDLE_ICON_FILE}
CFBundleInfoDictionaryVersion
6.0
CFBundleName
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 297a9c4..340720e 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -2,6 +2,31 @@ add_executable(SimStore MACOSX_BUNDLE
SimStoreApp.swift
ContentView.swift
)
+
+find_program(RSVG_CONVERT_EXECUTABLE rsvg-convert REQUIRED)
+find_program(ICONUTIL_EXECUTABLE iconutil REQUIRED)
+set(ICONSET_DIR "${CMAKE_CURRENT_BINARY_DIR}/simstore.iconset")
+set(ICON_FILE "${CMAKE_CURRENT_BINARY_DIR}/simstore.icns")
+set(ICON_COMMANDS)
+foreach(SIZE 16 32 128 256 512)
+ math(EXPR RETINA_SIZE "${SIZE} * 2")
+ list(APPEND ICON_COMMANDS
+ COMMAND "${RSVG_CONVERT_EXECUTABLE}" --width "${SIZE}" --height "${SIZE}"
+ --output "${ICONSET_DIR}/icon_${SIZE}x${SIZE}.png" "${PROJECT_SOURCE_DIR}/assets/simstore.svg"
+ COMMAND "${RSVG_CONVERT_EXECUTABLE}" --width "${RETINA_SIZE}" --height "${RETINA_SIZE}"
+ --output "${ICONSET_DIR}/icon_${SIZE}x${SIZE}@2x.png" "${PROJECT_SOURCE_DIR}/assets/simstore.svg"
+ )
+endforeach()
+add_custom_command(OUTPUT "${ICON_FILE}"
+ COMMAND "${CMAKE_COMMAND}" -E make_directory "${ICONSET_DIR}"
+ ${ICON_COMMANDS}
+ COMMAND "${ICONUTIL_EXECUTABLE}" --convert icns --output "${ICON_FILE}" "${ICONSET_DIR}"
+ DEPENDS "${PROJECT_SOURCE_DIR}/assets/simstore.svg"
+ VERBATIM
+)
+set_source_files_properties("${ICON_FILE}" PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
+target_sources(SimStore PRIVATE "${ICON_FILE}")
+
# Preserve the SDK version in LC_BUILD_VERSION when invoking swiftc directly.
target_link_options(SimStore PRIVATE
"SHELL:-Xclang-linker -isysroot -Xclang-linker \"${CMAKE_OSX_SYSROOT}\""
@@ -10,6 +35,7 @@ set_target_properties(SimStore PROPERTIES
MACOSX_BUNDLE_INFO_PLIST "${PROJECT_SOURCE_DIR}/cmake/Info.plist.in"
MACOSX_BUNDLE_BUNDLE_NAME SimStore
MACOSX_BUNDLE_GUI_IDENTIFIER io.simstore.SimStore
+ MACOSX_BUNDLE_ICON_FILE simstore.icns
MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION}"
MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_VERSION}"
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}"