Skip to content

feat(app): add Icon Composer app icon for macOS - #7401

Closed
tomatopotato17265 wants to merge 1 commit into
modrinth:mainfrom
tomatopotato17265:tomatopotato17265/liquid-glass-macos-icon
Closed

feat(app): add Icon Composer app icon for macOS#7401
tomatopotato17265 wants to merge 1 commit into
modrinth:mainfrom
tomatopotato17265:tomatopotato17265/liquid-glass-macos-icon

Conversation

@tomatopotato17265

@tomatopotato17265 tomatopotato17265 commented Sep 1, 2026

Copy link
Copy Markdown

This change uses the existing Icon Composer .icon as the app icon on macOS 26 and 27. Any previous macOS versions that do not support .icons fall back to the existing .icns. No dependencies were used; only these commands were run:

  1. Compile apple.icon into a .car:
cd apps/app
actool icons/apple.icon --compile resources --app-icon apple --include-all-app-icons --output-partial-info-plist resources/partial.plist --enable-on-demand-resources NO --target-device mac --minimum-deployment-target 10.13 --platform macosx
  1. Add CFBundleIconName to Info.plist:
<key>CFBundleIconName</key>
    <string>apple</string>
  1. Add to bundle.macOS in tauri.conf.json:
"macOS": {
    "files": { "Resources/Assets.car": "resources/Assets.car" },
  1. Build in production mode since it doesn't show in dev mode

I also had to re-sign it (codesign --force --deep --sign - "target/release/bundle/macos/Modrinth App.app") because adding to Content/Resources breaks signing.

After all of this, I was able to use the Icon Composer icon. The icon follows Apple's dark icons and is fluent with the rest of my dock:

Screenshot 2026-09-01 at 6 49 22 AM

Copilot AI lite review requested due to automatic review settings September 1, 2026 14:34
@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Pull request changelog

App

Added

Changed

Deprecated

Removed

Fixed

Security

Website

Added

Changed

Deprecated

Removed

Fixed

Security

Hosting

Added

Changed

Deprecated

Removed

Fixed

Security

@tomatopotato17265 tomatopotato17265 changed the title Add Icon Composer app icon for macOS (Modrinth App) feat(app): add Icon Composer app icon for macOS Sep 1, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds support for using an Icon Composer–generated asset catalog (Assets.car) as the macOS app icon on newer macOS versions, by bundling the compiled asset catalog into the .app and declaring the icon name in Info.plist.

Changes:

  • Bundle resources/Assets.car into the macOS app bundle via bundle.macOS.files.
  • Set CFBundleIconName in apps/app/Info.plist to select the asset-catalog icon.
  • Add an assetcatalog_generated_info.plist file containing icon-related keys (appears actool-generated).

Reviewed changes

Copilot reviewed 3 out of 5 changed files in this pull request and generated 2 comments.

File Description
apps/app/tauri.conf.json Adds macOS bundle file copy for Assets.car (but also reformats indentation across the file).
apps/app/resources/assetcatalog_generated_info.plist Adds an actool-style partial plist with icon keys (currently appears unused).
apps/app/Info.plist Declares CFBundleIconName (apple) to use the asset-catalog icon.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +1 to +5
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleIconFile</key>
Comment thread apps/app/tauri.conf.json
Comment on lines 1 to +5
{
"$schema": "https://schema.tauri.app/config/2",
"build": {
"beforeDevCommand": "pnpm -w i18n:coverage && pnpm turbo run dev --filter=@modrinth/app-frontend",
"beforeBuildCommand": "pnpm turbo run build --filter=@modrinth/app-frontend",
"frontendDist": "../app-frontend/dist",
"devUrl": "http://localhost:1420"
},
"bundle": {
"active": true,
"category": "Game",
"copyright": "",
"targets": "all",
"externalBin": [],
"icon": [
"icons/128x128.png",
"icons/128x128@2x.png",
"icons/icon.icns",
"icons/icon.ico"
],
"windows": {
"nsis": {
"installMode": "currentUser",
"installerHooks": "./nsis/hooks.nsi"
}
},
"longDescription": "",
"macOS": {
"entitlements": "App.entitlements",
"exceptionDomain": "",
"frameworks": [],
"providerShortName": null,
"signingIdentity": null,
"dmg": {
"background": "./dmg/dmg-background.png",
"windowSize": {
"width": 661,
"height": 432
},
"appPosition": {
"x": 188,
"y": 212
},
"applicationFolderPosition": {
"x": 475,
"y": 212
}
}
},
"shortDescription": "",
"linux": {
"deb": {
"depends": []
}
},
"fileAssociations": [
{
"ext": [
"mrpack"
],
"mimeType": "application/x-modrinth-modpack+zip"
}
]
},
"productName": "Modrinth App",
"version": "../app-frontend/package.json",
"mainBinaryName": "Modrinth App",
"identifier": "ModrinthApp",
"plugins": {
"deep-link": {
"desktop": {
"schemes": [
"modrinth"
]
},
"mobile": []
}
},
"app": {
"withGlobalTauri": false,
"macOSPrivateApi": true,
"windows": [
{
"titleBarStyle": "Overlay",
"hiddenTitle": true,
"fullscreen": false,
"height": 800,
"resizable": true,
"title": "Modrinth App",
"label": "main",
"width": 1280,
"minHeight": 700,
"minWidth": 1100,
"visible": false,
"zoomHotkeysEnabled": false,
"decorations": false
}
],
"security": {
"assetProtocol": {
"scope": [
"$APPDATA/caches/icons/*",
"$APPCONFIG/caches/icons/*",
"$CONFIG/caches/icons/*",
"$APPDATA/profiles/*/saves/*/icon.png",
"$APPCONFIG/profiles/*/saves/*/icon.png",
"$CONFIG/profiles/*/saves/*/icon.png"
],
"enable": true
},
"capabilities": [
"ads",
"core",
"plugins"
],
"csp": {
"default-src": "'self' customprotocol: asset:",
"connect-src": "ipc: http://ipc.localhost https://modrinth.com https://*.modrinth.com https://*.nodes.modrinth.com https://*.posthog.com https://posthog.modrinth.com https://*.sentry.io https://api.mclo.gs http://textures.minecraft.net https://textures.minecraft.net https://js.stripe.com https://*.stripe.com wss://*.stripe.com https://*.intercom.io wss://*.intercom.io https://*.intercomcdn.com https://www.intercom-reporting.com https://app.getsentry.com wss://*.nodes.modrinth.com https://*.taila228c5.ts.net https://*.taila228c5.ts.net wss://*.taila228c5.ts.net https://fill.papermc.io https://api.purpurmc.org 'self' data: blob:",
"font-src": [
"https://cdn-raw.modrinth.com/fonts/",
"https://js.intercomcdn.com"
],
"img-src": "https: 'unsafe-inline' 'self' asset: http://asset.localhost http://textures.minecraft.net blob: data:",
"style-src": "'unsafe-inline' 'self'",
"script-src": "https://*.posthog.com https://posthog.modrinth.com https://js.stripe.com https://widget.intercom.io https://js.intercomcdn.com https://tally.so/widgets/embed.js 'self'",
"frame-src": "https://www.youtube.com https://www.youtube-nocookie.com https://discord.com https://tally.so/popup/ https://js.stripe.com https://hooks.stripe.com https://*.intercom.io https://intercom-sheets.com https://www.intercom-reporting.com https://app.intercom.com 'self'",
"media-src": "https://*.githubusercontent.com"
}
}
}
"$schema": "https://schema.tauri.app/config/2",
"build": {
"beforeDevCommand": "pnpm -w i18n:coverage && pnpm turbo run dev --filter=@modrinth/app-frontend",
"beforeBuildCommand": "pnpm turbo run build --filter=@modrinth/app-frontend",
@Hallskii
Hallskii requested a review from IMB11 September 4, 2026 16:23
@IMB11

IMB11 commented Sep 4, 2026

Copy link
Copy Markdown
Member

Hi there, I'm going to close this as this is something we'll probably do ourselves for the next update - thank you for taking the time to create a PR though!

@IMB11 IMB11 closed this Sep 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

3 participants