It’s sometimes valuable to be able to customise icons for folders and apps. You might have more than one copy of an app, or two different versions which by default use identical icons. Giving special folders their own icon makes them more distinctive than simply applying a tag to them. This article explains how to do that, how it works, and goes on a brief archaeological dig into the history of Mac OS.
Customising folder icons
To create a custom icon you’ll need a decent graphics editor capable of working with PNG files. Here I’m using the new version 12 of GraphicConverter.
Select the folder or icon you wish to customise, then Get Info on it. Select the image at the top left of that dialog, copy it, and open the pasted image using your graphics editor. Make the changes that you want to it, and save it as a PNG file with Alpha (transparency). In some cases, you may need to open that PNG file using Preview to make this work, but you should be able to do this direct in the graphics editor once it’s in PNG format.
Select that icon, and paste it into the original in the top left of the Get Info window. A couple of seconds later, the custom icon should appear correctly in the Finder window.
You can’t do this any longer with bundled apps, though, as Ventura breaks their signature if you try making a copy of them to a folder on a writeable volume. You can also do this with individual documents, and with volumes, although custom volume icons can cause problems when they’re shared in Ventura, it appears.
How does it work?
Normally, app icons are set by the developer, using the AppIcon.icns file in the app, in the bundle path Contents/Resources. When you add a custom icon, that isn’t changed at all. Instead, whether you’re adding the icon to an app (or other bundle) or a regular folder, it’s saved in a hidden file named Icon?
just inside the folder.
If you try copying that Icon? file to another folder, you’ll discover that doesn’t change that folder’s icon at all, though. What’s going on is more complex, and takes us back to a bit of Mac OS archaeology.
Icons in Classic Mac OS
App bundles were introduced with OS X to replace the previous single-file structure of apps in Classic Mac OS. Instead of an app consisting of nested folders containing resources such as executable code and icons, these were all stored in resources.

This shows some of the resources of a Classic version of QuarkXPress. Among the resource types then used were ICN#, ICON, and others. The window here shows icons used by the app for its documents and other files. As resources, these were stored in the resource fork of the file, not in a bundle.
Resources live on
Resource forks live on in macOS today in extended attributes of the type com.apple.ResourceFork. Although rarely used any more, one situation where you will find them still in use is in these custom icons. Examine one of those hidden Icon? files using my free app xattred to display its extended attributes (xattrs), and you see that Icon? has no data at all, just two xattrs, one of which is a resource fork in com.apple.ResourceFork
.
Amazingly, macOS Ventura still contains tools to work with resources, including one to display information about those in Icon? files. DeRez
may have been ‘deprecated’ for the last 23 years, and its man page still bears the year of 2000 when it was last updated, but you can use it to look inside the resource fork in Icon?’s com.apple.ResourceFork
xattr, with a command like
DeRez Icon?
which yields
data 'icns' (-16455) {
$"6963 6E73 0001 6355 6963 3132 0000 0500" /* icns..cUic12.... */
$"8950 4E47 0D0A 1A0A 0000 000D 4948 4452" /* ?PNG........IHDR */
and so on.
So the custom icon pasted into the Finder’s Get Info dialog in 2023 has been stored as an icns
resource with the ID of -16455 from 1984. The explanation as to why you can’t simply copy an Icon? file into another folder lies in the other xattr, com.apple.FinderInfo
, which then doesn’t match the enclosing folder. When you add a custom icon to a single file like a document, it’s packaged inside a similar resource fork and added as a com.apple.ResourceFork
xattr to that file.
The resource fork has survived for nearly forty years, from the first 68K Macs to the latest M2 models, through all of Classic Mac OS, OS X and macOS, Macs powered by Motorola 68000 processors, PowerPCs, Intel x86 and now Apple silicon. For that we should thank Bruce Horn, his colleagues and successors.
Thanks to @GeekAndDad for reminding me where resource forks are still used in macOS.