#μ± μμ΄μ½ λꡬ
νλμ κΈ°λ³Έ μμ΄μ½μΌλ‘ νλ«νΌλ³ μ± μμ΄μ½μ μμ±νλ λꡬμ λλ€.
#κ°μ
generate-app-icons λꡬλ λ¨μΌ κΈ°λ³Έ μμ΄μ½(icon.png)μΌλ‘λΆν° νμν λͺ¨λ μμ΄μ½ λ³νμ μμ±ν©λλ€:
- iOS μ± μμ΄μ½ (1024x1024) - λ‘κ³ κ° 890px μ μμ μμΉ
- Android μ μν μμ΄μ½ (1024x1024) - λ‘κ³ κ° 475px μ μμ μμΉ
- μ€νλμ νλ©΄ μμ΄μ½ (1024x1024) - λ‘κ³ κ° 614px μ μμ μμΉ
- Android μλ¦Ό μμ΄μ½ (500x500) - ν¬λͺ λ°°κ²½μ ν°μ λ‘κ³
#μν¬νλ‘μ°
1. κΈ°λ³Έ μμ΄μ½μ {app-slug}/icons/icon.pngμ λ°°μΉ
2. generate-app-icons μ€ν β λͺ¨λ νλ«νΌλ³ μμ΄μ½ μμ±
#λλ ν 리 ꡬ쑰
public/products/{app-slug}/icons/
βββ icon.png # κΈ°λ³Έ μμ€ μμ΄μ½
βββ ios-light.png # iOS μ± μμ΄μ½ (1024x1024)
βββ adaptive-icon.png # Android μ μν μμ΄μ½ (1024x1024)
βββ splash-icon-light.png # μ€νλμ νλ©΄ μμ΄μ½ (1024x1024)
βββ android-notification-icon.png # μλ¦Ό μμ΄μ½ (500x500, ν°μ)
#generate-app-icons
κΈ°λ³Έ μμ΄μ½μΌλ‘λΆν° νλ«νΌλ³ μ± μμ΄μ½μ μμ±ν©λλ€.
#μꡬμ¬ν
- κΈ°λ³Έ μμ΄μ½:
public/products/{slug}/icons/icon.png - μλ¦Ό μμ΄μ½ μμ± μ:
GEMINI_API_KEYλλGOOGLE_API_KEYνκ²½ λ³μ νμ
#μ λ ₯ νλΌλ―Έν°
| νλΌλ―Έν° | νμ | νμ | κΈ°λ³Έκ° | μ€λͺ |
|---|---|---|---|---|
| appName | string | μ | - | μ± μ΄λ¦, slug, bundleId, packageName |
| iconTypes | ("ios-light" | "adaptive-icon" | "splash-icon-light" | "android-notification")[] | μλμ€ | λͺ¨λ νμ | μμ±ν νΉμ μμ΄μ½ νμ |
| backgroundColor | string | μλμ€ | "transparent" | λ°°κ²½μ (hex λλ "transparent") |
| logoPosition | string | μλμ€ | - | Gemini APIμ© μμΉ ννΈ |
| skipExisting | boolean | μλμ€ | false | μΆλ ₯ νμΌμ΄ μ΄λ―Έ μμΌλ©΄ 건λλ°κΈ° |
| dryRun | boolean | μλμ€ | false | μ€μ μμ± μμ΄ λ―Έλ¦¬λ³΄κΈ° |
#μμ΄μ½ μ¬μ
#1. iOS λΌμ΄νΈ μμ΄μ½ (ios-light.png)
- ν¬κΈ°: 1024x1024px
- μΈμ΄ν μ‘΄: λ‘κ³ κ° 890px μ§κ²½ μ(445px λ°μ§λ¦) μμ μμΉ
- λ°°κ²½: μ€μ κ°λ₯ (ν¬λͺ λλ 컀μ€ν μμ)
- μ¬μ©μ²: iOS App Store μμ΄μ½
#2. Android μ μν μμ΄μ½ (adaptive-icon.png)
- ν¬κΈ°: 1024x1024px
- μΈμ΄ν μ‘΄: λ‘κ³ κ° 475px μ§κ²½ μ(237.5px λ°μ§λ¦) μμ μμΉ
- λ°°κ²½: μ€μ κ°λ₯ (ν¬λͺ λλ 컀μ€ν μμ)
- μ¬μ©μ²: Android λ°μ² μμ΄μ½(μ μν)
#3. μ€νλμ μμ΄μ½ λΌμ΄νΈ (splash-icon-light.png)
- ν¬κΈ°: 1024x1024px
- μΈμ΄ν μ‘΄: λ‘κ³ κ° 614px μ§κ²½ μ(307px λ°μ§λ¦) μμ μμΉ
- λ°°κ²½: μ€μ κ°λ₯ (ν¬λͺ λλ 컀μ€ν μμ)
- μ¬μ©μ²: μ± μ€νλμ νλ©΄ μμ΄μ½
#4. Android μλ¦Ό μμ΄μ½ (android-notification-icon.png)
- ν¬κΈ°: 500x500px
- μ€νμΌ: ν¬λͺ λ°°κ²½μ ν°μ λ‘κ³
- λ°°κ²½: νμ ν¬λͺ
- μ¬μ©μ²: Android μνλ° μλ¦Ό μμ΄μ½
- μ°Έκ³ : Gemini APIλ₯Ό μ¬μ©νμ¬ μ§λ₯μ μΌλ‘ ν°μ λ§μ€νΉ μ²λ¦¬
#μ¬μ© μμ
#ν¬λͺ λ°°κ²½μΌλ‘ λͺ¨λ μμ΄μ½ μμ±
{
"appName": "my-app"
}
#ν°μ λ°°κ²½μΌλ‘ νΉμ μμ΄μ½λ§ μμ±
{
"appName": "my-app",
"iconTypes": ["ios-light", "adaptive-icon"],
"backgroundColor": "#FFFFFF"
}
#μλ¦Ό μμ΄μ½μ 컀μ€ν λ‘κ³ μμΉ μ§μ
{
"appName": "my-app",
"iconTypes": ["android-notification-icon"],
"logoPosition": "μ€μμ μμΉνλ μλ¨μ μ½κ° κ°μ‘°"
}
#μΈμ΄ν μ‘΄ κ°μ΄λλΌμΈ
μΈμ΄ν μ‘΄μ λ€μν νλ«νΌ μμ΄μ½ μ²λ¦¬μμ λ‘κ³ κ° λ³΄μ΄λλ‘ λ³΄μ₯ν©λλ€:
| μμ΄μ½ νμ | μΈμ΄ν μ‘΄ μ§κ²½ | μ΄μ |
|---|---|---|
| iOS λΌμ΄νΈ | 890px (87%) | iOSλ λͺ¨μ리λ₯Ό λ₯κΈκ² νκ³ λ§μ€ν¬ μ μ© |
| μ μν μμ΄μ½ | 475px (46%) | Androidλ λ€μν λͺ¨μμΌλ‘ ν΄λ¦¬ν |
| μ€νλμ μμ΄μ½ | 614px (60%) | μ€νλμ νλ©΄μ κ· νμ‘ν κ°μμ± |
κΆμ₯μ¬ν: κΈ°λ³Έ icon.pngλ₯Ό λμμΈν λ μ€μν λ‘κ³ μμκ° κ°μ₯ μμ μΈμ΄ν μ‘΄(μ μν μμ΄μ½μ 475px) μμ λ€μ΄κ°λλ‘ ν©λλ€.
#λ°°κ²½μ
#ν¬λͺ λ°°κ²½ μ¬μ© (κΈ°λ³Έκ°)
{
"appName": "my-app",
"backgroundColor": "transparent"
}
#컀μ€ν μμ μ¬μ©
{
"appName": "my-app",
"backgroundColor": "#000000"
}
μ°Έκ³ : android-notification-iconμ μ΄ μ€μ κ³Ό κ΄κ³μμ΄ νμ ν¬λͺ
λ°°κ²½μ μ¬μ©ν©λλ€.
#AI κΈ°λ° ν°μ λ§μ€νΉ
μλ¦Ό μμ΄μ½ μμ±μ Gemini APIλ₯Ό μ¬μ©νμ¬ λ‘κ³ μ λͺ¨μκ³Ό λν μΌμ μ μ§νλ©΄μ μ§λ₯μ μΌλ‘ ν°μμΌλ‘ λ³νν©λλ€:
- μ νν λ‘κ³ λͺ¨μκ³Ό μ€κ³½ μ μ§
- λͺ¨λ λ‘κ³ ν½μ μ μμ ν°μ(#FFFFFF)μΌλ‘ λ³ν
- λ°°κ²½μ μμ ν ν¬λͺ νκ² λ§λ¦
- λ‘κ³ μμΉ ννΈ λ°μ
#λ‘κ³ μμΉ ννΈ
AIλ₯Ό κ°μ΄λν μμ°μ΄ ννΈ μ 곡:
"μ€μ"- λ‘κ³ λ₯Ό μλ²½νκ² μ€μμ λ°°μΉ"μ€μλ³΄λ€ μ½κ° μ"- λ‘κ³ λ₯Ό λ λκ² λ°°μΉ"λΈλλ ν μ€νΈ κ°μ‘°"- ν μ€νΈ μμμ μ΄μ
#ν λ° λͺ¨λ² μ¬λ‘
#κΈ°λ³Έ μμ΄μ½ λμμΈ
- λ¨μμ±: μμ ν¬κΈ°μμ μΈμ κ°λ₯ν λ¨μν λμμΈ
- λλΉ: λ‘κ³ μ λ°°κ²½ κ° μ’μ λλΉ ν보
- μΈμ΄ν μ‘΄: μ€μν μμλ₯Ό 475px μ μμ λ°°μΉ
- κ³ ν΄μλ: λ²‘ν° κ·Έλν½ λλ κ³ ν΄μλ PNG(2048x2048+) μ¬μ©
#μμ μ ν
- ν¬λͺ : λλ ·ν ννμ λ‘κ³ μ κ°μ₯ μ ν©
- λΈλλ μμ: μ±μ λΈλλ μμ΄λ΄ν°ν°μ μΌμΉ
- ν°μ/κ²μμ: ν΄λμνλ©° λλΆλΆμ λμμΈκ³Ό μ μ΄μΈλ¦Ό
#νμΌ κ΅¬μ‘°
icons/
βββ icon.png # μμ€ (κ³ νμ§)
βββ ios-light.png # μμ±λ¨
βββ adaptive-icon.png # μμ±λ¨
βββ splash-icon-light.png # μμ±λ¨
βββ android-notification-icon.png # μμ±λ¨
icon.pngλ λ²μ κ΄λ¦¬μ ν¬ν¨νλ, μμ£Ό μ¬μμ±νλ κ²½μ° μμ±λ νμΌμ .gitignoreλ₯Ό κ³ λ €νμΈμ.
#μΌλ°μ μΈ λ¬Έμ
#λ¬Έμ : μ μν μμ΄μ½μμ λ‘κ³ κ° λ무 μκ² λ³΄μ
ν΄κ²°: μ μν μμ΄μ½μ κ°μ₯ μμ μΈμ΄ν μ‘΄(475px)μ κ°μ§λλ€. λ‘κ³ κ° μ΄ ν¬κΈ°μμ μ½μ μ μλμ§ νμΈνμΈμ.
#λ¬Έμ : μλ¦Ό μμ΄μ½μ μμΉ μλ μμκ° ν¬ν¨λ¨
ν΄κ²°: logoPosition νλΌλ―Έν°λ₯Ό μ¬μ©νμ¬ AIλ₯Ό κ°μ΄λνκ±°λ, μμ± μ μ icon.pngλ₯Ό νΈμ§νμ¬ λμμΈμ λ¨μννμΈμ.
#λ¬Έμ : λ°°κ²½μμ΄ μ μ©λμ§ μμ
ν΄κ²°: backgroundColorκ° μ ν¨ν hex μμ(μ: "#FFFFFF") λλ "transparent"μΈμ§ νμΈνμΈμ. μλ¦Ό μμ΄μ½μ νμ ν¬λͺ
λ°°κ²½μ μ¬μ©ν©λλ€.