compose-multiplatform icon indicating copy to clipboard operation
compose-multiplatform copied to clipboard

feat: Add support for macOS layered icons

Open Sanlorng opened this issue 2 months ago • 3 comments

Support for using macOS layered icons (.icon directory) for both JVM and native application packaging.

This feature requires actool version >= 26.0

  • A new layeredIconDir property is added to the compose.desktop.application.nativeDistributions.macOS and compose.nativeApplication.macOS DSLs.
  • The actool from Xcode Command Line Tools is used to compile the .icon directory into an Assets.car file.
  • The Assets.car file is included in the .app bundle resources.
  • The Info.plist is updated with CFBundleIconName to reference the compiled asset.
  • A check for a supported actool version is performed before compilation.
  • New integration tests (testMacLayeredIcon, testMacLayeredIconRemove) are added to verify the functionality for both JVM and native targets.
image image image image

Example

compose.desktop {
    application {
        nativeDistributions {
            macOS {
                layeredIconDir.set("Icon Path")
            }
        }
    }
}

Testing

Only verify the task behavior: compose:test-Gradle(9.2.0)-Agp(8.12.3) --tests org.jetbrains.compose.test.tests.integration.DesktopApplicationTest.testMacLayeredIcon

Only verify the task behavior: compose:test-Gradle(9.2.0)-Agp(8.12.3) --tests org.jetbrains.compose.test.tests.integration.DesktopApplicationTest.testMacLayeredIconRemove

This should be tested by QA

Tickets

CMP-9083 Support macOS 26 layered icons

Release Notes

Features - Gradle Plugin

  • Support for using macOS layered icons (.icon directory) for both JVM and native application packaging.

Sanlorng avatar Oct 13 '25 05:10 Sanlorng

Hi, thank you for the contribution! We will soon be requiring all PRs to have a linked issue in our tracker, I created one for this: CMP-9083 Support macOS 26 layered icons. It should be used for discussions around the newly added feature.

kropp avatar Oct 13 '25 11:10 kropp

Thanks again for creating the related YouTrack issue – it’s been really helpful!

I just wanted to gently follow up on this PR – would you have a moment to review it when you get a chance? Let me know if I can clarify anything to make it easier!

No rush at all, appreciate your help!

Sanlorng avatar Nov 21 '25 14:11 Sanlorng

@kropp All the changes you mentioned that needed to be made have already been completed.

Sanlorng avatar Dec 10 '25 15:12 Sanlorng

@igordmn requesting second review as it adds new public API in Gradle plugin

kropp avatar Dec 11 '25 16:12 kropp