Como trocar ícone de apps no macOS e como converter .png ou .webp para um ícone de formato e tamanho válidos (.icns)
Para trocar o ícone de um app no macOS é muito simples, você pode ir para o site macOS Icons procurar e baixar um ícone já no formato e tamanho correto e aplicar ele seguindo o seguinte tutorial.
Porém muitas das vezes o ícone para o app que você deseja não existe no site anterior ou você criou um ícone próprio para o app e deseja utiliza-lo. Esse foi o meu caso, e abaixo eu conto mais sobre como desenvolvi um script que faz a conversão de qualquer arquivo .png ou .webp em escala 1:1 para o formato de ícones do macOS.
Vale a pena lembrar também que ícones no macOS não são completamente quadrados, eles possuem um pequeno arredondamento das bordas, mas que este, não incluí no meu script. Ele espera que sua imagem já tenha os cantos arredondados corretamente.
Hoje, eu quis trocar o ícone de um app no macOS por uma versão no tema claro. Parecia simples, mas eu não achava o arquivo em .icns e cada conversão que eu tentava ficava errada: às vezes enorme, às vezes minúsculo, nunca encaixava no Dock. Depois de apanhar um pouco, entendi o truque que faltava: não preencher 100% do quadrado, e sim manter o conteúdo em cerca de 86% do canvas. Abaixo deixo o passo a passo objetivo que usei e que funcionou.
O pulo do gato
- O
.icnsé um pacote com vários tamanhos do mesmo ícone. - Se a arte ocupa 100% do quadrado, tende a parecer grande demais no Dock.
- Resolvi usando escala de conteúdo 220/256 (aprox. 0,859375), centralizada em um canvas transparente. Ficou visualmente igual aos ícones nativos.
Pré-requisitos
-
macOS com
iconutildisponível. -
Python 3 e Pillow:
pip3 install pillow -
Uma arte quadrada em PNG ou WebP. Se não for quadrada, recorte para 1:1. Ideal ter 1024×1024 ou maior.
Script
Crie create-icon.sh:
#!/bin/bash
INPUT="$1"
OUTPUT="$2"
if [ -z "$INPUT" ] || [ -z "$OUTPUT" ]; then
echo "Uso: $0 input.png output.icns"
exit 1
fi
ICONSET="${OUTPUT%.icns}.iconset"
mkdir -p "$ICONSET"
python3 << EOF
from PIL import Image
import os
original = Image.open("$INPUT").convert("RGBA")
source_1024 = original.resize((1024, 1024), Image.Resampling.LANCZOS)
content_scale = 220 / 256
sizes = [(16, "icon_16x16.png"), (32, "[email protected]"), (32, "icon_32x32.png"),
(64, "[email protected]"), (128, "icon_128x128.png"), (256, "[email protected]"),
(256, "icon_256x256.png"), (512, "[email protected]"), (512, "icon_512x512.png"),
(1024, "[email protected]")]
for canvas_size, filename in sizes:
content_size = int(canvas_size * content_scale)
padding = (canvas_size - content_size) // 2
content_img = source_1024.resize((content_size, content_size), Image.Resampling.LANCZOS)
canvas = Image.new("RGBA", (canvas_size, canvas_size), (0, 0, 0, 0))
canvas.paste(content_img, (padding, padding), content_img)
canvas.save(f"$ICONSET/{filename}", "PNG")
EOF
iconutil --convert icns "$ICONSET" --output "$OUTPUT"
rm -rf "$ICONSET"
echo "Criado $OUTPUT"
Torne executável e rode seguindo o seguinte formato: ./create-icon.sh input.png output.icns
chmod +x create-icon.sh
./create-icon.sh app-icon-25d-light.webp app-icon.icns
Por que funciona: a escala de 0,859375 cria uma margem visual. No tamanho 256 px, o padding fica perto de 18 px por lado. A base em 1024 garante nitidez quando reduzir.
Dica rápida: se não atualizar de primeira, reinicie o Dock e o Finder.
killall Dock
killall Finder
Se ainda não funcionar feche o app, remova o da dock e adicione novamente.
Ajuste fino e solução de problemas
-
Ficou grande ou pequeno no Dock
Ajuste a variávelcontent_scale. Teste de 0,84 a 0,90 até ficar do seu gosto. -
Ícone borrado nos tamanhos menores
Garanta uma base nítida em 1024×1024 e bons contrastes. Evite detalhes muito finos. -
Quer preencher 100% do quadrado
Substitua o trecho que calcula padding por um resize direto paracanvas_size. Fica visualmente maior, eu preferi 86%.
Pronto. Foi assim que eu passei do caos de conversões para um .icns limpinho e alinhado com o visual do macOS.