Modernise macOS app icon for macOS 26 / Liquid Glass#4522
Conversation
There was a problem hiding this comment.
💡 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".
| files: [ | ||
| "Info.plist", | ||
| "images/tiled.xcassets", | ||
| "images/tiled-icon-macos26.icon", |
There was a problem hiding this comment.
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 👍 / 👎.
There was a problem hiding this comment.
Question to reviewer(s): are we planning a Qbs update anytime soon?
There was a problem hiding this comment.
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.
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:
What changed
Three files.
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: addedCFBundleIconName = tiled-icon-macos26.src/tiledapp/tiledapp.qbs: added the.icondirectory to the macOS file group, and repointedib.appIconNamefromtiled-icon-mactotiled-icon-macos26so qbs'sibmodule compiles the new source.The legacy
tiled.xcassets/tiled-icon-mac.appiconset/is left as-is. Its compiledtiled-icon-mac.icnsstill 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:
display-p3:0.55, 0.59, 0.80, tuned to sit under the blue T without competing with it.Backwards compatibility
actoolcompiles the.iconinto two artefacts inTiled.app/Contents/Resources/:Assets.car: Liquid Glass, containsIconImageStackforNSAppearanceNameAqua,NSAppearanceNameDarkAqua, andISAppearanceTintable. Read by macOS 26 viaCFBundleIconName.tiled-icon-macos26.icns: flat fallback auto-generated from the same source. Read by macOS ≤ 15 viaCFBundleIconFile, which qbs sets fromib.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.appVisual checks on the running app:
.iconsource)..tmxfiles 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.