Skip to content

Modernise macOS app icon for macOS 26 / Liquid Glass#4522

Open
digitalby wants to merge 1 commit into
mapeditor:masterfrom
digitalby:macos-26-liquid-glass-icon
Open

Modernise macOS app icon for macOS 26 / Liquid Glass#4522
digitalby wants to merge 1 commit into
mapeditor:masterfrom
digitalby:macos-26-liquid-glass-icon

Conversation

@digitalby
Copy link
Copy Markdown

@digitalby digitalby commented May 18, 2026

Long-overdue update to bring Tiled's macOS app icon into compliance with Apple's current Human Interface Guidelines. The existing icon predates Big Sur (2020), and macOS 26 (Tahoe) is the first release to actively penalise non-conforming icons: anything that isn't a proper squircle gets trapped inside a forced gray frame ("icon jail"). The cost has shifted from aesthetic to functional. Tiled has been in the macOS jail bucket since macOS 11.

Closes #2994.

Screenshots

This branch, macOS 26 Dock, in light, dark, and tinted modes:

preview-dock icon-composer-canvas preview-clear preview-dark preview-default

What changed

Three files.

  • New src/tiledapp/images/tiled-icon-macos26.icon/: Icon Composer source bundle (icon.json + 512×512 source reusing the existing brand T from the legacy appiconset).
  • src/tiledapp/Info.plist: added CFBundleIconName = tiled-icon-macos26.
  • src/tiledapp/tiledapp.qbs: added the .icon directory to the macOS file group, and repointed ib.appIconName from tiled-icon-mac to tiled-icon-macos26 so qbs's ib module compiles the new source.

The legacy tiled.xcassets/tiled-icon-mac.appiconset/ is left as-is. Its compiled tiled-icon-mac.icns still ends up in the bundle, now unreferenced by Info.plist. Happy to remove it in a follow-up if you'd prefer a clean cut.

Design

I deliberately kept this close to a compliance fix. Same brand-blue T silhouette users already recognise, lifted onto a Liquid Glass squircle. Icon Composer settings:

  • Foreground: existing 512px brand T, scaled to fill Apple's icon-grid bounding box (the same one you flagged in the 2021 thread; appreciated the steer).
  • Background: automatic gradient display-p3:0.55, 0.59, 0.80, tuned to sit under the blue T without competing with it.
  • Material: Liquid Glass with neutral shadow and translucency, so macOS 26 derives the dark-mode and tinted appearances automatically.

Backwards compatibility

actool compiles the .icon into two artefacts in Tiled.app/Contents/Resources/:

  • Assets.car: Liquid Glass, contains IconImageStack for NSAppearanceNameAqua, NSAppearanceNameDarkAqua, and ISAppearanceTintable. Read by macOS 26 via CFBundleIconName.
  • tiled-icon-macos26.icns: flat fallback auto-generated from the same source. Read by macOS ≤ 15 via CFBundleIconFile, which qbs sets from ib.appIconName.

Both ship in every build. No version bump, no minimum-deployment-target change.

How I verified

Local toolchain: macOS 26.4.1, Xcode 26.4.1, Qt 6.11.1, qbs 3.2.0.

qbs build modules.codesign.enableCodeSigning:false profile:qt6
xcrun --sdk macosx assetutil --info \
    default/install-root/usr/local/Tiled.app/Contents/Resources/Assets.car \
    | jq -r '.[] | select(.AssetType=="IconImageStack") | .Appearance'
# -> NSAppearanceNameAqua, NSAppearanceNameDarkAqua, ISAppearanceTintable
open default/install-root/usr/local/Tiled.app

Visual checks on the running app:

  • Dock: T fills the squircle, no gray frame.
  • System Settings, Appearance, Dark: icon honours dark mode (re-rendered from the same .icon source).
  • System Settings, Appearance, Tint icons: icon honours the system tint.
  • .tmx files in Finder still show the existing document icon (untouched in this PR).

The codesign-disable flag is only for local sandbox builds without a developer identity; CI builds with a signing identity are unaffected.

Context for non-macOS reviewers

If the diff looks like cosmetic fuss, the visible cost is higher than it reads on paper.

Apple HIG has been escalating icon requirements every release since Big Sur (2020); macOS 26 is the third release in a row to tighten them. 9to5Mac measured the squircle-jail penalty at "20% smaller and 80% harder to recognize." Chrome and Pixelmator Pro shipped fixes in their 2024 / 2025 cycles; for a tool that ships professional macOS builds, staying in the jail bucket actively undersells the project on every macOS 26 install.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0f14a43f71

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/tiledapp/tiledapp.qbs
files: [
"Info.plist",
"images/tiled.xcassets",
"images/tiled-icon-macos26.icon",
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Require Qbs 3.2 before using .icon assets

This macOS build now depends on Qbs support for Icon Composer bundles, but the project still advertises minimumQbsVersion: "1.18" in tiled.qbs. In Qbs 3.1.1 and earlier the ib module only auto-tags *.xcassets and *.iconset, while *.icon is only tagged as iconcomposer starting in 3.2.0; with an older but still allowed Qbs, this directory is ignored and the build compiles only images/tiled.xcassets while ib.appIconName asks for tiled-icon-macos26, which is not in that catalog. Please either bump the minimum Qbs version or keep a supported asset path for older Qbs versions.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Question to reviewer(s): are we planning a Qbs update anytime soon?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Well Qbs 3.2 is the latest release from just 2 months ago, so it's not something we can require globally. I think there's two options:

  • Raise the minimum Qbs version to 3.2 only on macOS.
  • Support both the old and the new way of shipping the icon and pick one based on the Qbs version used.

Even if there's probably little point in supporting older Qbs versions of macOS, I'd still lean towards the second one if it's easy to support. I guess it would mostly mean setting the value of ib.appIconName based on Utilities.versionCompare(qbs.version, "3.2") >= 0?

Btw, do we need to explicitly set CFBundleIconName in the Info.plist? Just wondering since the icon has worked without this before, so I think it might get added automatically. If not, it's another place that would need updating based on the Qbs version.

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.

Big Sur icon proposal

2 participants