Skip to content

feat(v3): Support for Icon Composer Liquid Glass Icons (macOS) - #4934

Merged
leaanthony merged 23 commits into
wailsapp:v3-alphafrom
wimaha:v3-alpha-feature/liquid-glass-icon
Jan 31, 2026
Merged

leaanthony merged 23 commits into
wailsapp:v3-alphafrom
wimaha:v3-alpha-feature/liquid-glass-icon

Conversation

@wimaha

@wimaha wimaha commented Jan 29, 2026 •

Copy link
Copy Markdown
Contributor

Description

It adds support for Icon Composer (.icon) and asset catalogs (Assets.car) for macOS, enabling Wails3 apps to use the modern vector-based, Liquid Glass-style app icon format. It also includes a beautiful Wails Liquid Glass icon that greets the user right away when a new project is created and adapts to the default light, dark or clear variants.

Bildschirmfoto 2026-01-29 um 10 33 06 Bildschirmfoto 2026-01-29 um 10 33 26 Bildschirmfoto 2026-01-29 um 10 34 19

Changes

Icon generation (wails3 generate icons)

  • New flags: -iconcomposerinput (path to .icon file) and -macassetdir (output directory for macOS assets)
  • When both are set on macOS, the command runs actool to compile the .icon file and produce:
    • Assets.car (asset catalog with the app icon)
    • icons.icns (for compatibility).
  • Mac asset generation is macOS-only and skipped on other platforms so cross-platform builds still work.

Build assets & Info.plist

  • When build/darwin/Assets.car exists, build-assets.go sets CFBundleIconName in Info.plist
  • config.yml supports optional cfBundleIconName; if omitted and Assets.car exists, it defaults to "appicon"
  • Info.plist templates (Info.plist.tmpl, Info.dev.plist.tmpl) render CFBundleIconName when set

Other

  • Taskfiles are updated accordingly
  • Documentation macOS Packaging was updated

Tests

  • Icons: test for IconComposerInput + MacAssetDir generating Assets.car and icons.icns
  • Build-assets: tests for CFBundleIconName when Assets.car exists vs missing, and with/without config

Fixes #4909

Type of change

Please select the option that is relevant.

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

How Has This Been Tested?

Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration using wails doctor.

  • Windows
  • macOS
  • Linux

If you checked Linux, please specify the distro and version.

Test Configuration

Wails (v3.0.0-dev)  Wails Doctor 
                                                                                                                                           
# System 

┌──────────────────────────────────────────────────┐
| Name          | MacOS                            |
| Version       | 26.2                             |
| ID            | 25C56                            |
| Branding      | MacOS 26.2                       |
| Platform      | darwin                           |
| Architecture  | arm64                            |
| Apple Silicon | true                             |
| CPU           | Apple M1 Pro                     |
| CPU 1         | Apple M1 Pro                     |
| CPU 2         | Apple M1 Pro                     |
| GPU           | 16 cores, Metal Support: Metal 4 |
| Memory        | 16 GB                            |
└──────────────────────────────────────────────────┘

# Build Environment 

┌─────────────────────────────────────────────────────────┐
| Wails CLI    | v3.0.0-dev                               |
| Go Version   | go1.25.5                                 |
| Revision     | 1856ddb0d9207225a62699390673012d1ccc16c1 |
| Modified     | true                                     |
| -buildmode   | exe                                      |
| -compiler    | gc                                       |
| CGO_CFLAGS   |                                          |
| CGO_CPPFLAGS |                                          |
| CGO_CXXFLAGS |                                          |
| CGO_ENABLED  | 1                                        |
| CGO_LDFLAGS  |                                          |
| GOARCH       | arm64                                    |
| GOARM64      | v8.0                                     |
| GOOS         | darwin                                   |
| vcs          | git                                      |
| vcs.modified | true                                     |
| vcs.revision | 1856ddb0d9207225a62699390673012d1ccc16c1 |
| vcs.time     | 2026-01-29T09:20:11Z                     |
└─────────────────────────────────────────────────────────┘

# Dependencies 

┌──────────────────────────────────────────────────────────────────────────────┐
| Xcode cli tools | 2416                                                       |
| npm             | 10.9.2                                                     |
| *NSIS           | v3.11                                                      |
| docker          | *Docker version 27.5.1, build 9f9e405 (daemon not running) |
|                                                                              |
└────────────────────────── * - Optional Dependency ───────────────────────────┘

# Checking for issues 

SUCCESS  No issues found

# Diagnosis 

SUCCESS  Your system is ready for Wails development!

Checklist:

  • I have updated website/src/pages/changelog.mdx with details of this PR
  • My code follows the general coding style of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes

Summary by CodeRabbit

  • New Features

    • Support Icon Composer (.icon) input to generate macOS asset catalogs and icons, with combined macOS/Windows outputs and macOS-preferred asset workflow.
  • Documentation

    • Expanded macOS icon guide with examples, generate:icons workflow usage, asset-based outputs, and guidance to refresh Info.plist when Assets.car exists.
  • Chores

    • Optional CFBundleIconName config to sync asset catalogs and plist entries; conditional inclusion of Assets.car in app bundles.
  • Tests

    • Added tests covering macOS icon generation and CFBundleIconName detection.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai

coderabbitai Bot commented Jan 29, 2026 •

Copy link
Copy Markdown
Contributor

Walkthrough

Adds support for macOS Liquid Glass icon sources (.icon / Assets.car), macOS-only asset generation via actool, CFBundleIconName propagation through build-assets generate/update flows and Info.plist templates, docs/taskfile/config updates, tests, and conditional bundle copying into app resources.

Changes

Cohort / File(s) Summary
Docs & Changelog
docs/src/content/docs/guides/build/macos.mdx, v3/UNRELEASED_CHANGELOG.md
Expanded macOS icon docs, added changelog entry and updated generate:icons guidance to mention .icon / Assets.car and generate:icons task usage.
Icon Generation Core
v3/internal/commands/icons.go, v3/internal/commands/icons_test.go
Added IconComposerInput and MacAssetDir to IconsOptions, implemented generateMacAsset (actool invocation, plist parsing, outputs handling), platform guards and ErrMacAssetNotSupported; added darwin-gated tests.
Build Assets Logic & Tests
v3/internal/commands/build-assets.go, v3/internal/commands/build-assets_test.go
Added CFBundleIconName to options and WailsConfig.Info, introduced CFBundleIconNameSetter and shared check/propagation logic for Generate/Update flows; added CFBundleIconName detection tests (duplicate test present).
Taskfiles & Config
v3/internal/commands/build_assets/Taskfile.tmpl.yml, v3/internal/commands/build_assets/config.yml, v3/internal/commands/build_assets/darwin/Taskfile.yml
generate:icons task now accepts appicon.icon and mac asset flags; example cfBundleIconName in config; conditional copying of darwin/Assets.car into .app/Contents/Resources when present.
Updatable Asset Templates
v3/internal/commands/updatable_build_assets/darwin/Info.plist.tmpl, v3/internal/commands/updatable_build_assets/darwin/Info.dev.plist.tmpl
Info.plist templates optionally include CFBundleIconName when provided.
Icon Asset Bundle
v3/internal/commands/build_assets/appicon.icon/icon.json
Added Icon Composer JSON asset describing layered/vector icon group used for mac asset generation.

Sequence Diagram(s)

sequenceDiagram
    participant CLI as Wails CLI
    participant Icons as icons.go
    participant Actool as actool (macOS)
    participant FS as File System
    participant Config as WailsConfig

    CLI->>Icons: GenerateIcons(IconComposerInput?, Input?, MacAssetDir?)
    Icons->>FS: Check for IconComposerInput / Assets.car / Input files
    Icons->>Config: Load/merge WailsConfig (CFBundleIconName?)
    Icons->>Icons: checkAndSetCFBundleIconNameCommon()
    alt mac asset path (darwin + actool available)
        Icons->>Actool: Run actool with IconComposerInput -> MacAssetDir
        Actool-->>FS: Emit Assets.car, *.plist, *.icns
        FS-->>Icons: Return generated files
        Icons->>FS: Parse plist, rename/move *.icns -> darwin/icons.icns
        Icons->>Config: Update/persist CFBundleIconName if set
    else Non-macOS or unsupported
        Icons-->>CLI: Return ErrMacAssetNotSupported or fallback to raster generation
    end
    alt raster inputs present
        Icons->>FS: Generate windows/icon.ico and mac raster icons
    end
    Icons-->>CLI: Return generated icon artifacts
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Suggested labels

Enhancement, MacOS, cli, Documentation, v3-alpha, size:XL, lgtm

Suggested reviewers

  • atterpac

Poem

🐰 I hopped through folders, bright and quick,
Brought liquid-glass icons with a nimble trick.
actool sang on darwin's glen,
Assets.car danced, then back again —
Now macOS icons shine, hurrah! ✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the main feature being added: Icon Composer support with Liquid Glass Icons for macOS, accurately summarizing the primary change.
Description check ✅ Passed The PR description provides comprehensive details covering changes, implementation details, test configuration, and all required checklist items are marked complete.
Linked Issues check ✅ Passed The changes fully address #4909 requirements: Icon Composer .icon support via -iconcomposerinput flag [icons.go, build_assets/Taskfile.tmpl.yml], Assets.car integration with CFBundleIconName handling [build-assets.go], cross-compile support via precompiled Assets.car [darwin/Taskfile.yml], and asset catalog embedding into app bundles.
Out of Scope Changes check ✅ Passed All changes are directly aligned with the linked issue #4909: documentation updates, icon generation enhancements, build assets configuration, test coverage, and integration with existing Taskfile workflows are all within scope.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In `@v3/internal/commands/icons_test.go`:
- Around line 127-180: The test is inspecting and deleting "Assets.car" and
"icons.icns" from the current working directory while IconsOptions sets
MacAssetDir to localDir; update the test's test closure to build full paths
using filepath.Join(localDir, "Assets.car") and filepath.Join(localDir,
"icons.icns") (use the same localDir computed in setup), replace os.Stat("...")
and os.Remove("...") calls to use these joined paths, and ensure the cleanup
defer removes the files at those joined paths rather than the bare filenames so
existence checks and cleanup target the MacAssetDir used by
IconComposerInput/MacAssetDir.

In `@v3/internal/commands/icons.go`:
- Around line 61-74: The code currently string-compares the error from
generateMacAsset and sets macIconsGenerated=true even on the non-macOS failure;
change generateMacAsset to return a sentinel exported error (e.g.,
ErrMacAssetNotSupported) and use errors.Is(err, ErrMacAssetNotSupported) to
detect the non-fatal case, set macIconsGenerated = true only when
generateMacAsset returns nil (successful generation), and let other errors
propagate so the Input-based Mac icon generation (IconComposerInput path) can
still run when MacAssetDir was configured but generation was skipped due to
platform support.
🧹 Nitpick comments (7)
v3/internal/commands/build_assets/Taskfile.tmpl.yml (1)

99-109: Consider adding darwin/Assets.car to the generates list.

The task can now produce Assets.car on macOS when using Icon Composer input, but it's not listed in generates (lines 106-107). This may cause the task system to not properly track this output for incremental builds.

Note that since Assets.car generation is macOS-only, this is a minor concern as the task will still work correctly—it just won't benefit from task caching for this output on macOS.

💡 Suggested enhancement
     generates:
       - "darwin/icons.icns"
       - "windows/icon.ico"
+      - "darwin/Assets.car"
     cmds:
docs/src/content/docs/guides/build/macos.mdx (1)

49-49: Minor: Consider clarifying platform skip behavior.

The text says "(skipped on Windows)" but the actual behavior skips on all non-macOS platforms (including Linux). Consider updating for accuracy:

📝 Suggested wording
-This uses `build/appicon.png` to produce `darwin/icons.icns` and `windows/icon.ico`. On macOS you can also provide `build/appicon.icon` (Icon Composer format): the task passes `-iconcomposerinput appicon.icon -macassetdir darwin`, which produces `Assets.car` and `darwin/icons.icns` from the `.icon` file (skipped on Windows). When `Assets.car` is present, run the `update:build-assets` task so that `Info.plist` and `CFBundleIconName` are updated accordingly:
+This uses `build/appicon.png` to produce `darwin/icons.icns` and `windows/icon.ico`. On macOS you can also provide `build/appicon.icon` (Icon Composer format): the task passes `-iconcomposerinput appicon.icon -macassetdir darwin`, which produces `Assets.car` and `darwin/icons.icns` from the `.icon` file (skipped on non-macOS platforms). When `Assets.car` is present, run the `update:build-assets` task so that `Info.plist` and `CFBundleIconName` are updated accordingly:
v3/internal/commands/build_assets/darwin/Taskfile.yml (1)

164-172: Consider: The run task doesn't include Assets.car for dev bundles.

The run task creates a .dev.app bundle but only copies icons.icns, not Assets.car. If developers want to test Liquid Glass icons during development, they won't see them in the dev app bundle.

This may be intentional to keep dev builds simple, but it's worth documenting or adding the same conditional copy for consistency.

💡 Optional: Add Assets.car to dev bundle
   run:
     cmds:
       - mkdir -p "{{.BIN_DIR}}/{{.APP_NAME}}.dev.app/Contents/MacOS"
       - mkdir -p "{{.BIN_DIR}}/{{.APP_NAME}}.dev.app/Contents/Resources"
       - cp build/darwin/icons.icns "{{.BIN_DIR}}/{{.APP_NAME}}.dev.app/Contents/Resources"
+      - |
+        if [ -f build/darwin/Assets.car ]; then
+          cp build/darwin/Assets.car "{{.BIN_DIR}}/{{.APP_NAME}}.dev.app/Contents/Resources"
+        fi
       - cp "{{.BIN_DIR}}/{{.APP_NAME}}" "{{.BIN_DIR}}/{{.APP_NAME}}.dev.app/Contents/MacOS"
v3/internal/commands/build-assets.go (2)

151-156: Misleading comment: code runs between extractions, not before.

The comment states "This must happen BEFORE template extraction" but this code executes after the first extraction (line 147) and before the second extraction (line 162). The logic works correctly because CFBundleIconName is used in updatable_build_assets templates, but the comment is confusing.

📝 Clarify the comment
-	// Check if Assets.car exists - if so, set CFBundleIconName if not already set
-	// This must happen BEFORE template extraction so CFBundleIconName is available in the template
+	// Check if Assets.car exists - if so, set CFBundleIconName if not already set
+	// This must happen BEFORE the updatable_build_assets extraction so CFBundleIconName is available in Info.plist templates
 	checkAndSetCFBundleIconName(options.Dir, options, &config)

305-335: Near-duplicate helper functions could be unified.

checkAndSetCFBundleIconName and checkAndSetCFBundleIconNameUpdate have identical logic with different option/config types. Consider using an interface or extracting the common pattern.

♻️ Example: extract common logic
// CFBundleIconNameSetter interface for types that can set CFBundleIconName
type CFBundleIconNameSetter interface {
	GetCFBundleIconName() string
	SetCFBundleIconName(string)
}

func checkAndSetCFBundleIconNameCommon(dir string, setter CFBundleIconNameSetter) {
	darwinDir := filepath.Join(dir, "darwin")
	assetsCarPath := filepath.Join(darwinDir, "Assets.car")
	if _, err := os.Stat(assetsCarPath); err == nil {
		if setter.GetCFBundleIconName() == "" {
			setter.SetCFBundleIconName("appicon")
		}
	}
}
v3/internal/commands/icons.go (2)

221-234: Consider capturing stderr for better actool error diagnostics.

When actool fails, only the error is returned. Capturing stderr would provide more useful diagnostic information.

🔧 Proposed improvement to capture stderr
 	cmd = exec.Command("actool", iconComposerPath,
 		"--compile", macAssetDirPath,
 		"--notices", "--warnings", "--errors",
-		"--output-partial-info-plist", filepath.Join(macAssetDirPath, "/temp.plist"),
+		"--output-partial-info-plist", filepath.Join(macAssetDirPath, "temp.plist"),
 		"--app-icon", iconComposerFilename,
 		"--enable-on-demand-resources", "NO",
 		"--development-region", "en",
 		"--target-device", "mac",
 		"--minimum-deployment-target", "26.0",
 		"--platform", "macosx")
-	out, err := cmd.Output()
+	var stdout, stderr bytes.Buffer
+	cmd.Stdout = &stdout
+	cmd.Stderr = &stderr
+	err = cmd.Run()
 	if err != nil {
-		return fmt.Errorf("failed to run actool: %w", err)
+		return fmt.Errorf("failed to run actool: %w\nstderr: %s", err, stderr.String())
 	}
+	out := stdout.Bytes()

Note: Also removed the leading slash from "/temp.plist" for consistency.


253-255: Hardcoded file count expectation is brittle.

Requiring exactly 3 output files may break if actool behavior changes. Consider verifying required files exist without enforcing exact count.

♻️ Proposed flexible validation
-	if len(outputFiles) != 3 {
-		return fmt.Errorf("expected 3 output files, got %d", len(outputFiles))
-	}
-
 	// Check that we have one .car file and one .plist file
 	var carFile, plistFile, icnsFile string
 	for _, file := range outputFiles {
 		filePath, ok := file.(string)
 		if !ok {
 			return fmt.Errorf("output file is not a string: %v", file)
 		}
 		ext := filepath.Ext(filePath)
 		switch ext {
 		case ".car":
 			carFile = filePath
 		case ".plist":
 			plistFile = filePath
 		case ".icns":
 			icnsFile = filePath
-		default:
-			return fmt.Errorf("unexpected output file extension: %s", ext)
+		// Ignore other output files that may be added in future actool versions
 		}
 	}

Comment thread v3/internal/commands/icons_test.go
Comment thread v3/internal/commands/icons.go

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@v3/internal/commands/icons.go`:
- Around line 221-225: The call building the actool command uses
filepath.Join(macAssetDirPath, "/temp.plist") which ignores macAssetDirPath due
to the leading slash; update the argument used when constructing the
exec.Command (the code around cmd = exec.Command(...) where
"--output-partial-info-plist" is set) to join the directory correctly (e.g.,
filepath.Join(macAssetDirPath, "temp.plist") or otherwise construct an absolute
path without a leading slash) so the plist is written inside macAssetDirPath
rather than to the filesystem root.

Comment thread v3/internal/commands/icons.go
@wimaha
wimaha marked this pull request as draft January 29, 2026 21:41
@wimaha
wimaha marked this pull request as ready for review January 29, 2026 22:08

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 3

🤖 Fix all issues with AI agents
In `@v3/internal/commands/build_assets/darwin/Taskfile.yml`:
- Around line 141-147: The current Taskfile always tries to copy
build/darwin/icons.icns which fails for Assets.car-only bundles; update the
packaging steps around the cp of build/darwin/icons.icns (and the duplicate
block at the later similar location) to check for files first: if
build/darwin/icons.icns exists, cp it into
"{{.BIN_DIR}}/{{.APP_NAME}}.app/Contents/Resources"; else if
build/darwin/Assets.car exists, skip the icon copy (Assets.car is sufficient);
otherwise, fail with a clear error that neither icons.icns nor Assets.car were
found. Ensure this conditional logic is applied to both the earlier block
(around the cp of icons.icns and Assets.car) and the later block referenced at
lines 166-172.

In `@v3/internal/commands/build-assets.go`:
- Around line 246-248: The code unconditionally overwrites
options.CFBundleIconName with wailsConfig.Info.CFBundleIconName which ignores
CLI flags; change the assignment to only set options.CFBundleIconName when it is
empty (follow the same pattern used for other fields) by checking
options.CFBundleIconName == "" before assigning from
wailsConfig.Info.CFBundleIconName so CLI-provided values take precedence.

In `@v3/internal/commands/icons.go`:
- Around line 66-79: The current logic in icons.go silently ignores
ErrMacAssetNotSupported when options.IconComposerInput is set but no fallback
output (e.g., options.Input) exists, causing a no-op success; update the
generate path that calls generateMacAsset(options) to detect when
IconComposerInput != "" and no other output target is provided and, instead of
swallowing ErrMacAssetNotSupported, return that error (or wrap it with context)
so callers see the unsupported-platform failure; specifically change the block
around generateMacAsset(options) and the macIconsGenerated handling to return
ErrMacAssetNotSupported (or a wrapped error) when generateMacAsset returns that
error and no fallback generation will run.

Comment thread v3/internal/commands/build_assets/darwin/Taskfile.yml
Comment thread v3/internal/commands/build-assets.go Outdated
Comment thread v3/internal/commands/icons.go

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@v3/internal/commands/icons.go`:
- Around line 217-240: The mac asset output directory (macAssetDirPath) must be
created before invoking actool; before the line that sets cmd =
exec.Command(...), call os.MkdirAll(macAssetDirPath, 0o755) (or appropriate
permissions) and handle any error (return fmt.Errorf(...)) so actool --compile
won't fail; ensure this creation occurs after computing macAssetDirPath and
before exec.Command is called.

Comment thread v3/internal/commands/icons.go
@leaanthony
leaanthony self-requested a review January 31, 2026 11:46
@leaanthony
leaanthony self-requested a review January 31, 2026 11:53
@leaanthony
leaanthony self-requested a review January 31, 2026 11:59
@leaanthony
leaanthony self-requested a review January 31, 2026 12:17
@leaanthony
leaanthony self-requested a review January 31, 2026 22:11
@sonarqubecloud

Copy link
Copy Markdown

@leaanthony

Copy link
Copy Markdown
Member

Thank you for such a well put together PR 🙏 It was an opportunity to also get the cross-compilation tests setup in CI so double win! 🎉 That icon is 😍

@leaanthony
leaanthony merged commit 2db6a1c into wailsapp:v3-alpha Jan 31, 2026
66 checks passed
Grantmartin2002 pushed a commit to Grantmartin2002/wails that referenced this pull request Apr 29, 2026
…app#4934)

* feat(icons): implement Mac asset (.car) generation with actool

- Check actool version >= 26 requirement
- Generate asset.car from Icon Composer input
- Validate compilation output and cleanup temp files

* Wails Icon as Icon Composer file

* a generated assets.car from the wails icon

* handle absolute paths correctly in actool command

- Check if paths are absolute before prepending "./"
- Use filepath.Join for temp.plist path construction

* add test for Assets.car generation

* Skipping Asset.car generation and test on non mac-systems

* add CFBundleIconName generation to plist, if Assets.car exists

* also create .icns from .icon-File and use always absolut path

Use absolut path, because otherwise we got strange behavior from actool.

* update to use appicon as CFBundleIconName and optionally use the name from config

* update the Taskfiles

* remove log prints

* the awesome new LiquidGlass icon files

* update doc

* Update UNRELEASED_CHANGELOG.md

* Update UNRELEASED_CHANGELOG.md

* fix security bug

* Skip icon generation test with actool on CI

* fix error from coderabbitai

* solved the coderabbitai nitpicks

* fix coderabbitai findings

* Update changelog

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
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.

2 participants