feat: support Icon Composer files as icon input for macOS - #1806
Conversation
5ac6ec5 to
aedefc8
Compare
aedefc8 to
0a4d37f
Compare
dsanders11
left a comment
There was a problem hiding this comment.
Since this is something new that apps are going to need to do to get the Liquid Glass icons in macOS 26, we should try to make this new functionality higher visibility so folks can easily find it.
Should we add it to docs/faq.md? And maybe plan a blog post for more visibility.
|
@dsanders11 Worth noting that so far I've only gotten this working with super specific versions of Xcode 26 beta and only on macOS 26 itself. |
|
Does the CLI work as expected with specifying both old and new macOS icons? To me, the API change to allow an array feels kinda bad - this might be an impetus to update export type IconOptions {
darwin?: string
// Open to new name, largely a placeholder
darwinLiquidGlass?: string
win32?: string
}
export interface Options {
// ...
icon?: string | IconOptions
// ...
}The advantage to adding an object instead is that it should be automatically parsed by |
Haven't tested the CLI but assuming it converts multiple incantations to an array of strings it will work just fine. I also thing we don't need the array if we're ok requiring people to do I agree an object is a good end state here, but I think that requires some more careful thought, i.e. |
Yeah, I figured as much but I have no context for what the key should be named, so I deliberately annotated it as a placeholder in the comment. |
|
🎉 This PR is included in version 18.4.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
macOS 13–25 do not mask app icons, so a full-bleed render shows as a hard square. macOS 26 masks icons itself (Liquid Glass) and would shrink a pre-shaped icon. Ship the right asset for each: - Pre-shaped squircle PNG → the legacy .icns (CFBundleIconFile) for macOS 13–25. The mask is a superellipse on Apple's 824/1024 icon grid, generated by a shared, unit-tested util and applied in the icon app via ?shape=mask. - Full-bleed art → an Icon Composer .icon compiled to Assets.car with actool (mirrors electron/packager#1806), embedded via mac.extraResources + CFBundleIconName=Icon for macOS 26 to mask itself. The Icon Composer step is gated on macOS + actool 26: off-mac or older Xcode it is skipped and only the legacy .icns ships, so CI and pre-26 hosts degrade cleanly. Generated icon assets are gitignored.
Validated locally but impossible to test in CI as it requires Xcode@26 beta.
This adds support for the new Icon Composer icon format in macOS 26 which is required in order to get liquid glass icons. Command for
actoolwas reverse engineered by intercepting xcode's internal build commands and identifying the magic incantation to build icon files correctly.In order to support both macOS >= 26 and macOS < 26 you must provide
icon: ['old.icns', 'new.icon']as your config, pretty simple tho.Note for anyone trying this, it requires Xcode@26 but 26b3 is currently busted, you have to use 26b2 or 26b1