Creates the app skeleton and the seam everything else in the project hangs off: region-specific data lives in an asset file, not in code, so adding a region later is a new JSON file rather than a refactor. Notable choices: - applicationId and namespace are it.nuvolari.app rather than the doubled it.nuvolari.nuvolari that `flutter create` produces, with the Kotlin package and the iOS bundle identifiers moved to match. - SDK levels are pinned instead of inherited from `flutter.*`. Google Play requires API 36, and that is a release blocker rather than something to let a Flutter upgrade change silently. minSdk 24 is the highest floor the planned dependencies impose. - Riverpod and Dio-free for now, no code generation: see docs/stack-decisions.md. - Italian is the l10n source language, so app_it.arb is the template rather than a translation of an English original. The region parser rejects rather than repairs. An inverted bounding box, a map centre outside its own bounds, an unknown adapter name, a duplicate zone code or an empty attribution list all throw with the offending field named. Each of those would otherwise fail silently and visibly wrong: a swapped latitude and longitude renders the radar in the wrong place, an unknown adapter falling back to mock would show demo frames where live data was expected, and a missing attribution is a licence violation rather than a cosmetic gap. Tests run against the asset that actually ships and against a captured copy of the live ARPA CAP feed, so the eleven zone codes in the config are checked against the eleven the feed really emits rather than against a list retyped from documentation. Verified: dart format clean, flutter analyze 0 issues, 50 tests passing, flutter build appbundle --debug produces an AAB with applicationId it.nuvolari.app, minSdk 24, targetSdk 36. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
123 lines
2.5 KiB
JSON
123 lines
2.5 KiB
JSON
{
|
|
"images" : [
|
|
{
|
|
"size" : "20x20",
|
|
"idiom" : "iphone",
|
|
"filename" : "Icon-App-20x20@2x.png",
|
|
"scale" : "2x"
|
|
},
|
|
{
|
|
"size" : "20x20",
|
|
"idiom" : "iphone",
|
|
"filename" : "Icon-App-20x20@3x.png",
|
|
"scale" : "3x"
|
|
},
|
|
{
|
|
"size" : "29x29",
|
|
"idiom" : "iphone",
|
|
"filename" : "Icon-App-29x29@1x.png",
|
|
"scale" : "1x"
|
|
},
|
|
{
|
|
"size" : "29x29",
|
|
"idiom" : "iphone",
|
|
"filename" : "Icon-App-29x29@2x.png",
|
|
"scale" : "2x"
|
|
},
|
|
{
|
|
"size" : "29x29",
|
|
"idiom" : "iphone",
|
|
"filename" : "Icon-App-29x29@3x.png",
|
|
"scale" : "3x"
|
|
},
|
|
{
|
|
"size" : "40x40",
|
|
"idiom" : "iphone",
|
|
"filename" : "Icon-App-40x40@2x.png",
|
|
"scale" : "2x"
|
|
},
|
|
{
|
|
"size" : "40x40",
|
|
"idiom" : "iphone",
|
|
"filename" : "Icon-App-40x40@3x.png",
|
|
"scale" : "3x"
|
|
},
|
|
{
|
|
"size" : "60x60",
|
|
"idiom" : "iphone",
|
|
"filename" : "Icon-App-60x60@2x.png",
|
|
"scale" : "2x"
|
|
},
|
|
{
|
|
"size" : "60x60",
|
|
"idiom" : "iphone",
|
|
"filename" : "Icon-App-60x60@3x.png",
|
|
"scale" : "3x"
|
|
},
|
|
{
|
|
"size" : "20x20",
|
|
"idiom" : "ipad",
|
|
"filename" : "Icon-App-20x20@1x.png",
|
|
"scale" : "1x"
|
|
},
|
|
{
|
|
"size" : "20x20",
|
|
"idiom" : "ipad",
|
|
"filename" : "Icon-App-20x20@2x.png",
|
|
"scale" : "2x"
|
|
},
|
|
{
|
|
"size" : "29x29",
|
|
"idiom" : "ipad",
|
|
"filename" : "Icon-App-29x29@1x.png",
|
|
"scale" : "1x"
|
|
},
|
|
{
|
|
"size" : "29x29",
|
|
"idiom" : "ipad",
|
|
"filename" : "Icon-App-29x29@2x.png",
|
|
"scale" : "2x"
|
|
},
|
|
{
|
|
"size" : "40x40",
|
|
"idiom" : "ipad",
|
|
"filename" : "Icon-App-40x40@1x.png",
|
|
"scale" : "1x"
|
|
},
|
|
{
|
|
"size" : "40x40",
|
|
"idiom" : "ipad",
|
|
"filename" : "Icon-App-40x40@2x.png",
|
|
"scale" : "2x"
|
|
},
|
|
{
|
|
"size" : "76x76",
|
|
"idiom" : "ipad",
|
|
"filename" : "Icon-App-76x76@1x.png",
|
|
"scale" : "1x"
|
|
},
|
|
{
|
|
"size" : "76x76",
|
|
"idiom" : "ipad",
|
|
"filename" : "Icon-App-76x76@2x.png",
|
|
"scale" : "2x"
|
|
},
|
|
{
|
|
"size" : "83.5x83.5",
|
|
"idiom" : "ipad",
|
|
"filename" : "Icon-App-83.5x83.5@2x.png",
|
|
"scale" : "2x"
|
|
},
|
|
{
|
|
"size" : "1024x1024",
|
|
"idiom" : "ios-marketing",
|
|
"filename" : "Icon-App-1024x1024@1x.png",
|
|
"scale" : "1x"
|
|
}
|
|
],
|
|
"info" : {
|
|
"version" : 1,
|
|
"author" : "xcode"
|
|
}
|
|
}
|