feat(release): prepare 1.1.0 candidate

This commit is contained in:
Yun Chan 2026-08-29 18:33:45 +09:00
parent 5a34f66981
commit 5205dcdfa9
736 changed files with 115667 additions and 12203 deletions

View file

@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<rect width="512" height="512" rx="112" fill="#19191b"/>
<circle cx="256" cy="224" r="64" fill="none" stroke="#3b82f6" stroke-width="24"/>
<rect x="232" y="288" width="48" height="80" rx="24" fill="#3b82f6"/>
<path d="M160 256 Q160 352 256 352 Q352 352 352 256" fill="none" stroke="#3b82f6" stroke-width="20" stroke-linecap="round"/>
<line x1="256" y1="352" x2="256" y2="416" stroke="#3b82f6" stroke-width="20" stroke-linecap="round"/>
<line x1="208" y1="416" x2="304" y2="416" stroke="#3b82f6" stroke-width="20" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 620 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View file

@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<rect width="512" height="512" fill="#19191b"/>
<circle cx="256" cy="224" r="64" fill="none" stroke="#3b82f6" stroke-width="24"/>
<rect x="232" y="288" width="48" height="80" rx="24" fill="#3b82f6"/>
<path d="M160 256 Q160 352 256 352 Q352 352 352 256" fill="none" stroke="#3b82f6" stroke-width="20" stroke-linecap="round"/>
<line x1="256" y1="352" x2="256" y2="416" stroke="#3b82f6" stroke-width="20" stroke-linecap="round"/>
<line x1="208" y1="416" x2="304" y2="416" stroke="#3b82f6" stroke-width="20" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 611 B

View file

@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<circle cx="256" cy="256" r="256" fill="#19191b"/>
<circle cx="256" cy="224" r="64" fill="none" stroke="#3b82f6" stroke-width="24"/>
<rect x="232" y="288" width="48" height="80" rx="24" fill="#3b82f6"/>
<path d="M160 256 Q160 352 256 352 Q352 352 352 256" fill="none" stroke="#3b82f6" stroke-width="20" stroke-linecap="round"/>
<line x1="256" y1="352" x2="256" y2="416" stroke="#3b82f6" stroke-width="20" stroke-linecap="round"/>
<line x1="208" y1="416" x2="304" y2="416" stroke="#3b82f6" stroke-width="20" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 614 B

View file

@ -0,0 +1,57 @@
# Google Play feature graphic 후보
기준일: 2026-08-24
Google Play의 1024×500 feature graphic 규격에 맞춘 선택 후보다. 네 후보 모두
저장소의 canonical D3RO microphone motif와 `D3RO VOICE` 표기만 사용하며, 기능이나
성과를 주장하는 문구와 합성 앱 화면은 포함하지 않는다.
## 후보와 권장안
| 후보 | 방향 | PNG SHA-256 |
| ------------------------------ | --------------------------------------- | ------------------------------------------------------------------ |
| A `candidate-a-signal-grid` | dark signal grid, microphone + waveform | `3CFA86A4843339FD9C15781598E301ECE29C2B1522828F7AD1B69D8497775103` |
| B `candidate-b-voice-orbit` | centered voice orbit | `F7FCB26B063762D08AC1211A85CFDDD3C99C14936CD6DE753F5E9F88BC0B0D14` |
| C `candidate-c-blueprint-band` | light/dark blueprint split | `C484AC514966347BF4E7AA526B040B88DDA89F9150AC3677B8C74297A1373C1E` |
| D `candidate-d-monolith` | bold dark monolith | `28FC7B608454E073A29AFE2149414F4186629AE8889B3FE2FA683D786F8C3EA9` |
현재 권장안은 **A**다. 작은 스토어 카드에서도 microphone, 제품명, 파형이 가장
명확하게 분리된다. 다만 최종 자산 확정과 Play Console 업로드는 사용자 선택 및
Console preview 검증 뒤에만 진행한다.
## 원본과 재현
- brand source: `site/public/favicon.svg`
- Play icon source: `docs/v3/play/assets/d3ro-voice-play-icon-source.svg`
- 편집 원본: 각 후보의 `.svg`
- 제출 후보: 같은 basename의 `.png`
- export runtime: ImageMagick `7.1.2-25 Q16-HDRI`
- 출력 조건: 1024×500, PNG, sRGB, 8-bit, TrueColor, 완전 불투명
- machine-readable manifest: `manifest.json`
- verifier: `scripts/ci/verify-play-store-assets.mjs`
저장소 루트의 PowerShell에서 다음 명령으로 다시 내보낸다.
```powershell
Get-ChildItem docs/v3/play/assets/feature-graphic/candidate-*.svg |
ForEach-Object {
$output = [System.IO.Path]::ChangeExtension($_.FullName, '.png')
magick $_.FullName -background none -resize '1024x500!' -alpha off -colorspace sRGB "PNG24:$output"
}
```
환경이나 SVG renderer 버전이 바뀌면 raster hash가 달라질 수 있다. 제출할 PNG는
위 해시, 크기, 불투명 여부를 다시 확인하고 그 파일을 release evidence에 기록한다.
```powershell
npm run release:play:assets
```
## SVG 원본 해시
| 파일 | SHA-256 |
| -------------------------------- | ------------------------------------------------------------------ |
| `candidate-a-signal-grid.svg` | `3A39D0D61F5AE7E182149BD11C9D7F491FBEC0A542999B0516C869AE82E24B1B` |
| `candidate-b-voice-orbit.svg` | `DB7D778394419C6AF8FF43C7490B43C0CD65C61CE012A358FB37E603431082F4` |
| `candidate-c-blueprint-band.svg` | `176BEB99EA418F78BF5F9DC4E4D6A3A3700F5CEADA28697F3750B0C8883E4546` |
| `candidate-d-monolith.svg` | `6560C334C061470959D9BA120E58CCA264B5A1ED41FBC3045F804049117640FF` |

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View file

@ -0,0 +1,17 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 500">
<rect width="1024" height="500" fill="#19191b"/>
<g stroke="#2b2b31" stroke-width="1">
<path d="M0 50H1024M0 100H1024M0 150H1024M0 200H1024M0 250H1024M0 300H1024M0 350H1024M0 400H1024M0 450H1024"/>
<path d="M64 0V500M128 0V500M192 0V500M256 0V500M320 0V500M384 0V500M448 0V500M512 0V500M576 0V500M640 0V500M704 0V500M768 0V500M832 0V500M896 0V500M960 0V500"/>
</g>
<rect x="64" y="54" width="290" height="392" rx="42" fill="#111114" stroke="#3b82f6" stroke-width="2"/>
<g transform="translate(98 62) scale(4.35)" fill="none" stroke="#3b82f6" stroke-linecap="round">
<circle cx="32" cy="28" r="8" stroke-width="3"/>
<rect x="29" y="36" width="6" height="10" rx="3" fill="#3b82f6" stroke="none"/>
<path d="M20 32Q20 44 32 44Q44 44 44 32" stroke-width="2.5"/>
<path d="M32 44V52M26 52H38" stroke-width="2.5"/>
</g>
<text x="430" y="227" fill="#f5f7fb" font-family="Arial, sans-serif" font-size="78" font-weight="700" letter-spacing="7">D3RO</text>
<text x="434" y="288" fill="#3b82f6" font-family="Arial, sans-serif" font-size="40" font-weight="700" letter-spacing="15">VOICE</text>
<path d="M432 352H484L500 326L526 390L548 340L568 362H620L640 312L664 396L690 346L710 366H774L792 333L812 378L834 352H944" fill="none" stroke="#3b82f6" stroke-width="5" stroke-linejoin="round" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View file

@ -0,0 +1,16 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 500">
<rect width="1024" height="500" fill="#0f1014"/>
<circle cx="512" cy="250" r="205" fill="#19191b" stroke="#292c35" stroke-width="2"/>
<circle cx="512" cy="250" r="166" fill="none" stroke="#3b82f6" stroke-opacity="0.22" stroke-width="28"/>
<circle cx="512" cy="250" r="126" fill="none" stroke="#3b82f6" stroke-opacity="0.45" stroke-width="3" stroke-dasharray="5 17"/>
<g transform="translate(416 106) scale(3)" fill="none" stroke="#3b82f6" stroke-linecap="round">
<circle cx="32" cy="28" r="8" stroke-width="3"/>
<rect x="29" y="36" width="6" height="10" rx="3" fill="#3b82f6" stroke="none"/>
<path d="M20 32Q20 44 32 44Q44 44 44 32" stroke-width="2.5"/>
<path d="M32 44V52M26 52H38" stroke-width="2.5"/>
</g>
<path d="M40 250H250M774 250H984" stroke="#3b82f6" stroke-width="2"/>
<path d="M62 250L92 250L110 220L134 286L158 238L180 260L205 210L228 276L250 250M774 250L802 250L826 208L848 290L872 235L896 270L920 224L944 278L962 250" fill="none" stroke="#3b82f6" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<rect x="401" y="386" width="222" height="46" rx="23" fill="#3b82f6"/>
<text x="512" y="417" text-anchor="middle" fill="#0f1014" font-family="Arial, sans-serif" font-size="22" font-weight="700" letter-spacing="4">D3RO VOICE</text>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View file

@ -0,0 +1,27 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 500">
<rect width="1024" height="500" fill="#f4f6fa"/>
<rect x="0" y="0" width="356" height="500" fill="#19191b"/>
<rect x="356" y="0" width="28" height="500" fill="#3b82f6"/>
<g transform="translate(42 98) scale(4.25)" fill="none" stroke="#3b82f6" stroke-linecap="round">
<circle cx="32" cy="28" r="8" stroke-width="3"/>
<rect x="29" y="36" width="6" height="10" rx="3" fill="#3b82f6" stroke="none"/>
<path d="M20 32Q20 44 32 44Q44 44 44 32" stroke-width="2.5"/>
<path d="M32 44V52M26 52H38" stroke-width="2.5"/>
</g>
<text x="438" y="224" fill="#19191b" font-family="Arial, sans-serif" font-size="82" font-weight="700" letter-spacing="5">D3RO</text>
<text x="443" y="287" fill="#3b82f6" font-family="Arial, sans-serif" font-size="38" font-weight="700" letter-spacing="17">VOICE</text>
<g stroke="#cbd2df" stroke-width="2">
<path d="M444 344H954"/>
<path d="M444 372H954"/>
<path d="M444 400H954"/>
</g>
<g fill="#3b82f6">
<rect x="444" y="366" width="8" height="13" rx="4"/>
<rect x="460" y="349" width="8" height="47" rx="4"/>
<rect x="476" y="333" width="8" height="79" rx="4"/>
<rect x="492" y="357" width="8" height="31" rx="4"/>
<rect x="508" y="341" width="8" height="63" rx="4"/>
<rect x="524" y="362" width="8" height="21" rx="4"/>
<rect x="540" y="352" width="8" height="41" rx="4"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View file

@ -0,0 +1,15 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 500">
<rect width="1024" height="500" fill="#19191b"/>
<rect x="52" y="42" width="920" height="416" rx="34" fill="#15161a" stroke="#31343d" stroke-width="2"/>
<text x="90" y="314" fill="#f7f8fb" font-family="Arial, sans-serif" font-size="210" font-weight="700" letter-spacing="-8">D3RO</text>
<rect x="90" y="354" width="378" height="58" rx="29" fill="#3b82f6"/>
<text x="279" y="394" text-anchor="middle" fill="#101115" font-family="Arial, sans-serif" font-size="28" font-weight="700" letter-spacing="11">VOICE</text>
<circle cx="826" cy="250" r="112" fill="#0e0f12" stroke="#3b82f6" stroke-width="2"/>
<g transform="translate(730 106) scale(3)" fill="none" stroke="#3b82f6" stroke-linecap="round">
<circle cx="32" cy="28" r="8" stroke-width="3"/>
<rect x="29" y="36" width="6" height="10" rx="3" fill="#3b82f6" stroke="none"/>
<path d="M20 32Q20 44 32 44Q44 44 44 32" stroke-width="2.5"/>
<path d="M32 44V52M26 52H38" stroke-width="2.5"/>
</g>
<path d="M720 404H932" stroke="#3b82f6" stroke-width="3" stroke-dasharray="3 12" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1,57 @@
{
"schemaVersion": 1,
"generatedOn": "2026-08-24",
"selection": {
"recommended": "A",
"status": "pending_user_selection_and_console_preview"
},
"brandSource": "site/public/favicon.svg",
"export": {
"tool": "ImageMagick 7.1.2-25 Q16-HDRI",
"format": "PNG24",
"colorSpace": "sRGB",
"width": 1024,
"height": 500,
"bitDepth": 8,
"pngColorType": 2,
"opaque": true
},
"candidates": [
{
"id": "A",
"source": "candidate-a-signal-grid.svg",
"sourceBytes": 1411,
"sourceSha256": "3A39D0D61F5AE7E182149BD11C9D7F491FBEC0A542999B0516C869AE82E24B1B",
"output": "candidate-a-signal-grid.png",
"outputBytes": 25200,
"outputSha256": "3CFA86A4843339FD9C15781598E301ECE29C2B1522828F7AD1B69D8497775103"
},
{
"id": "B",
"source": "candidate-b-voice-orbit.svg",
"sourceBytes": 1365,
"sourceSha256": "DB7D778394419C6AF8FF43C7490B43C0CD65C61CE012A358FB37E603431082F4",
"output": "candidate-b-voice-orbit.png",
"outputBytes": 44972,
"outputSha256": "F7FCB26B063762D08AC1211A85CFDDD3C99C14936CD6DE753F5E9F88BC0B0D14"
},
{
"id": "C",
"source": "candidate-c-blueprint-band.svg",
"sourceBytes": 1443,
"sourceSha256": "176BEB99EA418F78BF5F9DC4E4D6A3A3700F5CEADA28697F3750B0C8883E4546",
"output": "candidate-c-blueprint-band.png",
"outputBytes": 14337,
"outputSha256": "C484AC514966347BF4E7AA526B040B88DDA89F9150AC3677B8C74297A1373C1E"
},
{
"id": "D",
"source": "candidate-d-monolith.svg",
"sourceBytes": 1151,
"sourceSha256": "6560C334C061470959D9BA120E58CCA264B5A1ED41FBC3045F804049117640FF",
"output": "candidate-d-monolith.png",
"outputBytes": 28737,
"outputSha256": "28FC7B608454E073A29AFE2149414F4186629AE8889B3FE2FA683D786F8C3EA9"
}
]
}

View file

@ -0,0 +1,270 @@
{
"schemaVersion": 1,
"canonicalSource": {
"path": "docs/v3/play/assets/d3ro-voice-play-icon-source.svg",
"viewBox": "0 0 512 512",
"sha256": "E2390BF8AA82EA357D61D8834F9FC58179227A87E26672699C63866A533B7E5B"
},
"playStoreIcon": {
"path": "docs/v3/play/assets/d3ro-voice-play-icon-512.png",
"width": 512,
"height": 512,
"bitDepth": 8,
"colorType": 6,
"alpha": "opaque",
"sha256": "0FAE53FB40CCE4B9FB0213CBEDB4E087CA00A8F8C438D6731C5C47C4AFD096B1"
},
"android": {
"applicationManifest": "apps/mobile-rn/android/app/src/main/AndroidManifest.xml",
"icon": "@mipmap/ic_launcher",
"roundIcon": "@mipmap/ic_launcher_round",
"background": {
"path": "apps/mobile-rn/android/app/src/main/res/values/colors.xml",
"resource": "d3ro_launcher_background",
"value": "#19191B"
},
"sourceAssets": [
{
"path": "docs/v3/play/assets/d3ro-voice-legacy-icon-source.svg",
"viewBox": "0 0 512 512",
"sha256": "8DDC2ACB6C8BC379611597A47FECA65DDC61237DE30B78C16F355D00FC264783"
},
{
"path": "docs/v3/play/assets/d3ro-voice-round-icon-source.svg",
"viewBox": "0 0 512 512",
"sha256": "978BEB618DDC8BC691090AC779CDB8177C62E70BEF538C407D0FE599D7126874"
}
],
"vectors": {
"foreground": {
"path": "apps/mobile-rn/android/app/src/main/res/drawable/d3ro_launcher_foreground.xml",
"sha256": "F2123246C93C1D11ED2DE530F17203C4A8F258DF244BC24146CDE0E09737345D"
},
"monochrome": {
"path": "apps/mobile-rn/android/app/src/main/res/drawable/d3ro_launcher_monochrome.xml",
"sha256": "035F9599E46E4AB34F30EAA73A586DFAB0C086C7A653122EE3C33307E908A650"
}
},
"adaptiveIcons": [
{
"path": "apps/mobile-rn/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml",
"monochrome": false
},
{
"path": "apps/mobile-rn/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml",
"monochrome": false
},
{
"path": "apps/mobile-rn/android/app/src/main/res/mipmap-anydpi-v33/ic_launcher.xml",
"monochrome": true
},
{
"path": "apps/mobile-rn/android/app/src/main/res/mipmap-anydpi-v33/ic_launcher_round.xml",
"monochrome": true
}
],
"legacyIcons": [
{
"density": "mdpi",
"pixels": 48,
"iconPath": "apps/mobile-rn/android/app/src/main/res/mipmap-mdpi/ic_launcher.png",
"iconSha256": "82C702747E3BBF2A03826989D093CA99C3CBB8A125B81F2F0631FF66A2F536EA",
"roundPath": "apps/mobile-rn/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png",
"roundSha256": "202002E1C9A68035C2A2C7F1313EB73E1F0CF0578D0228F9FBCEDDA809B5D891"
},
{
"density": "hdpi",
"pixels": 72,
"iconPath": "apps/mobile-rn/android/app/src/main/res/mipmap-hdpi/ic_launcher.png",
"iconSha256": "AB5FE36F55A2E58FCB5DDEC58493D21B8A10EFC9324E1D272FCFEFD25DDB7901",
"roundPath": "apps/mobile-rn/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png",
"roundSha256": "7D73AEA182A82DAD88595FAB97A95C142E708993FAD806BBDE48E7A2B2B6F088"
},
{
"density": "xhdpi",
"pixels": 96,
"iconPath": "apps/mobile-rn/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png",
"iconSha256": "E563FA0698BB5013837C4AFF4152BF180F48997410A57986FDD02CE4F52D5818",
"roundPath": "apps/mobile-rn/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png",
"roundSha256": "1FD9924F6A201FD182A1B67FBAC8C81683A6D2450CABD02EF2EEED3D9B8B5F80"
},
{
"density": "xxhdpi",
"pixels": 144,
"iconPath": "apps/mobile-rn/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png",
"iconSha256": "5347ABF45AA423A63E60638D28310F15929BAF768E0584CA414B1B23B9B3F8F5",
"roundPath": "apps/mobile-rn/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png",
"roundSha256": "A9996374E5ED94F05DD0501BF02259B40C8EEA2F0373A85809921BD75EA1704F"
},
{
"density": "xxxhdpi",
"pixels": 192,
"iconPath": "apps/mobile-rn/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png",
"iconSha256": "A84BC25E362397527AD048EF931816021AD3C1482982FFA2E4F1F8DF52FFFB33",
"roundPath": "apps/mobile-rn/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png",
"roundSha256": "144564057C9962CC50989B3A4FCA1691B964D8EE69FF47EA37FD65F474A568A1"
}
]
},
"ios": {
"source": "docs/v3/play/assets/d3ro-voice-play-icon-source.svg",
"contents": "apps/mobile-rn/ios/D3ROVoice/Images.xcassets/AppIcon.appiconset/Contents.json",
"project": "apps/mobile-rn/ios/D3ROVoice.xcodeproj/project.pbxproj",
"targetedDeviceFamilies": [1, 2],
"bitDepth": 8,
"colorType": 2,
"alphaChannel": false,
"icons": [
{
"idiom": "iphone",
"size": "20x20",
"scale": "2x",
"filename": "AppIcon-iphone-20@2x.png",
"pixels": 40,
"sha256": "750DB19CBEC82017CA68D622FA4DF86F9A7E11EEE49390CEBEEC283C0AB10496"
},
{
"idiom": "iphone",
"size": "20x20",
"scale": "3x",
"filename": "AppIcon-iphone-20@3x.png",
"pixels": 60,
"sha256": "4715F000171E6CA1CD4F31C1BB5215F91FD86F414BFB288E42F0708474E2652B"
},
{
"idiom": "iphone",
"size": "29x29",
"scale": "2x",
"filename": "AppIcon-iphone-29@2x.png",
"pixels": 58,
"sha256": "1A13D610E1EEB1B508D496A017B611F36307EFBC50681613DADD634D415BFC75"
},
{
"idiom": "iphone",
"size": "29x29",
"scale": "3x",
"filename": "AppIcon-iphone-29@3x.png",
"pixels": 87,
"sha256": "F8A6A88020CEC4446A9B295C8696EF2D32838F9E4074C3FCF3E0A283F1A7246E"
},
{
"idiom": "iphone",
"size": "40x40",
"scale": "2x",
"filename": "AppIcon-iphone-40@2x.png",
"pixels": 80,
"sha256": "DA0796E96389EEE5D36CC390EA5850FF2DF3FC5D1B291D57BB43053FBEAC9F49"
},
{
"idiom": "iphone",
"size": "40x40",
"scale": "3x",
"filename": "AppIcon-iphone-40@3x.png",
"pixels": 120,
"sha256": "56FB0B823D72C4133E4BF1E24BBB8FA9E24E8C3721A8EF608BBF1A1097052CA7"
},
{
"idiom": "iphone",
"size": "60x60",
"scale": "2x",
"filename": "AppIcon-iphone-60@2x.png",
"pixels": 120,
"sha256": "56FB0B823D72C4133E4BF1E24BBB8FA9E24E8C3721A8EF608BBF1A1097052CA7"
},
{
"idiom": "iphone",
"size": "60x60",
"scale": "3x",
"filename": "AppIcon-iphone-60@3x.png",
"pixels": 180,
"sha256": "1A2843E454496520359D740450C699636435D641717BA963D751D817BE79F8F6"
},
{
"idiom": "ipad",
"size": "20x20",
"scale": "1x",
"filename": "AppIcon-ipad-20@1x.png",
"pixels": 20,
"sha256": "399D5A67D13569E04725DA466AAE45419595D51828C286A4424DB204C8202D7F"
},
{
"idiom": "ipad",
"size": "20x20",
"scale": "2x",
"filename": "AppIcon-ipad-20@2x.png",
"pixels": 40,
"sha256": "750DB19CBEC82017CA68D622FA4DF86F9A7E11EEE49390CEBEEC283C0AB10496"
},
{
"idiom": "ipad",
"size": "29x29",
"scale": "1x",
"filename": "AppIcon-ipad-29@1x.png",
"pixels": 29,
"sha256": "BF07A8DB710655D650F102ABA31A74BD68BA26C10A4DB1E22D6743908CDCA61A"
},
{
"idiom": "ipad",
"size": "29x29",
"scale": "2x",
"filename": "AppIcon-ipad-29@2x.png",
"pixels": 58,
"sha256": "1A13D610E1EEB1B508D496A017B611F36307EFBC50681613DADD634D415BFC75"
},
{
"idiom": "ipad",
"size": "40x40",
"scale": "1x",
"filename": "AppIcon-ipad-40@1x.png",
"pixels": 40,
"sha256": "750DB19CBEC82017CA68D622FA4DF86F9A7E11EEE49390CEBEEC283C0AB10496"
},
{
"idiom": "ipad",
"size": "40x40",
"scale": "2x",
"filename": "AppIcon-ipad-40@2x.png",
"pixels": 80,
"sha256": "DA0796E96389EEE5D36CC390EA5850FF2DF3FC5D1B291D57BB43053FBEAC9F49"
},
{
"idiom": "ipad",
"size": "76x76",
"scale": "1x",
"filename": "AppIcon-ipad-76@1x.png",
"pixels": 76,
"sha256": "460B8F8AF51D947CEA6A40A39CA10DC4E7D774846DC4AE20275402B9B25439D6"
},
{
"idiom": "ipad",
"size": "76x76",
"scale": "2x",
"filename": "AppIcon-ipad-76@2x.png",
"pixels": 152,
"sha256": "47E8DA09603F931E25E92AF77405C7C55B4CD56EA3E35DCAE3A423CE82F625B1"
},
{
"idiom": "ipad",
"size": "83.5x83.5",
"scale": "2x",
"filename": "AppIcon-ipad-83.5@2x.png",
"pixels": 167,
"sha256": "8EC9EEE448DAAD188AA6F730BCC80D14D1BD7707207A7573CF04E232F7E9C0D7"
},
{
"idiom": "ios-marketing",
"size": "1024x1024",
"scale": "1x",
"filename": "AppIcon-marketing-1024@1x.png",
"pixels": 1024,
"sha256": "E0D0357BAB6EB61628AF8FA50892BFA80D5F0293419A19E1E94A652B0037B1B0"
}
]
},
"pixelLauncherProof": {
"path": "docs/v3/play/assets/proof/d3ro-icon-pixel-launcher-20260824.png",
"width": 1080,
"height": 1920,
"sha256": "7A2DA876FBFD54089B783A7FD45C2472476ED47DCEABA08AB305B7B01A18D430"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 KiB