Flutter로 만든 macOS 앱의 기본 아이콘은 Flutter 로고입니다.
이를 커스텀 아이콘으로 바꾸기 위해 가장 확실하게 적용된 방식만 정리합니다.
.icns 방식 없이, PNG 파일과 Contents.json 수정만으로 완전히 반영된 방법입니다.
아이콘 이미지 준비
아이콘 이미지는 다음과 같이 정사각형 PNG 파일로 준비합니다.
크기는 Apple에서 요구하는 해상도에 맞춰 리사이징합니다.
파일 이름크기(px)
icon_16x16.png | 16×16 |
icon_16x16@2x.png | 32×32 |
icon_32x32.png | 32×32 |
icon_32x32@2x.png | 64×64 |
icon_128x128.png | 128×128 |
icon_128x128@2x.png | 256×256 |
icon_256x256.png | 256×256 |
icon_256x256@2x.png | 512×512 |
icon_512x512.png | 512×512 |
icon_512x512@2x.png | 1024×1024 |
파일 위치
생성한 PNG 파일들을 모두 아래 경로로 복사합니다:
macos/Runner/Assets.xcassets/AppIcon.appiconset/
기존에 있던 Flutter 아이콘 파일들은 덮어쓰거나 삭제해도 됩니다.
Contents.json 수정
같은 폴더에 있는 Contents.json 파일을 아래와 같이 수정합니다:
{
"images": [
{ "idiom": "mac", "size": "16x16", "scale": "1x", "filename": "icon_16x16.png" },
{ "idiom": "mac", "size": "16x16", "scale": "2x", "filename": "icon_16x16@2x.png" },
{ "idiom": "mac", "size": "32x32", "scale": "1x", "filename": "icon_32x32.png" },
{ "idiom": "mac", "size": "32x32", "scale": "2x", "filename": "icon_32x32@2x.png" },
{ "idiom": "mac", "size": "128x128", "scale": "1x", "filename": "icon_128x128.png" },
{ "idiom": "mac", "size": "128x128", "scale": "2x", "filename": "icon_128x128@2x.png" },
{ "idiom": "mac", "size": "256x256", "scale": "1x", "filename": "icon_256x256.png" },
{ "idiom": "mac", "size": "256x256", "scale": "2x", "filename": "icon_256x256@2x.png" },
{ "idiom": "mac", "size": "512x512", "scale": "1x", "filename": "icon_512x512.png" },
{ "idiom": "mac", "size": "512x512", "scale": "2x", "filename": "icon_512x512@2x.png" }
],
"info": {
"version": 1,
"author": "xcode"
}
}
빌드 및 확인
설정이 완료되면 앱을 다시 빌드합니다:
flutter clean
flutter build macos
빌드가 완료된 .app 파일을 실행하거나 Finder, Dock, Spotlight에서 확인했을 때
아이콘이 제대로 보이면 성공입니다.
마무리
Flutter macOS 앱에 아이콘을 적용하는 가장 간단하고 확실한 방법은
.icns 없이 PNG와 Contents.json을 정확히 구성하는 것입니다.
이 방식은 Xcode 프로젝트를 수정할 필요도 없고, Flutter 기본 구조 내에서 완전히 동작합니다.
아이콘 적용이 막히셨다면 이 방식으로 시도해보시길 추천드립니다.
'programing > App' 카테고리의 다른 글
[Flutter/macOS] .dmg 설치 파일 만들기 (create-dmg) (0) | 2025.04.15 |
---|---|
[Flutter]UUID 사용법 완벽 정리 – v1, v4, v5 차이점과 예제까지 (1) | 2025.04.03 |
[Flutter macOS] 앱을 항상 위에 고정(Always on Top) + 기본 창 크기 설정하는 방법 (1) | 2025.04.01 |
[React] key를 분명히 넣었는데도 Warning이 뜬다면? (Fragment 주의!) (0) | 2025.03.27 |
[React Native/Expo] uuid 사용 시 crypto.getRandomValues() 에러 해결하기 (0) | 2025.03.26 |