diff --git a/example/flavor_app/README.md b/example/flavor_app/README.md index 7f4ad5d..557d258 100644 --- a/example/flavor_app/README.md +++ b/example/flavor_app/README.md @@ -1,16 +1,13 @@ # flavor_app -A new Flutter project. +Demo of `icons_launcher` using flavors. ## Getting Started -This project is a starting point for a Flutter application. +First: `flutter pub get` -A few resources to get you started if this is your first Flutter project: - -- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) -- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) - -For help getting started with Flutter development, view the -[online documentation](https://docs.flutter.dev/), which offers tutorials, -samples, guidance on mobile development, and a full API reference. +Then generate `dev` and `prod` flavors with the commands: +``` +flutter pub run icons_launcher:create --flavor dev +flutter pub run icons_launcher:create --flavor prod +``` diff --git a/example/flavor_app/icons_launcher-dev.yaml b/example/flavor_app/icons_launcher-dev.yaml index 3a52907..4417ad0 100644 --- a/example/flavor_app/icons_launcher-dev.yaml +++ b/example/flavor_app/icons_launcher-dev.yaml @@ -18,7 +18,7 @@ icons_launcher: image_path: 'assets/ic_logo_border.png' favicon_path: 'assets/ic_logo_round.png' macos: - enable: false + enable: true image_path: 'assets/ic_logo_border.png' windows: enable: false diff --git a/example/flavor_app/icons_launcher-prod.yaml b/example/flavor_app/icons_launcher-prod.yaml index 00f42db..cd61f09 100644 --- a/example/flavor_app/icons_launcher-prod.yaml +++ b/example/flavor_app/icons_launcher-prod.yaml @@ -18,7 +18,7 @@ icons_launcher: image_path: 'assets/ic_logo_border.png' favicon_path: 'assets/ic_logo_round.png' macos: - enable: false + enable: true image_path: 'assets/ic_logo_border.png' windows: enable: false diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/Contents.json b/example/flavor_app/ios/Runner/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/example/flavor_app/ios/Runner/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Contents.json b/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Contents.json index d36b1fa..eabd851 100644 --- a/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Contents.json +++ b/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Contents.json @@ -1,122 +1,122 @@ { - "images" : [ + "images": [ { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" + "filename": "Icon-App-20x20@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "20x20" }, { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" + "filename": "Icon-App-20x20@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "20x20" }, { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" + "filename": "Icon-App-29x29@1x.png", + "idiom": "iphone", + "scale": "1x", + "size": "29x29" }, { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" + "filename": "Icon-App-29x29@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "29x29" }, { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" + "filename": "Icon-App-29x29@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "29x29" }, { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" + "filename": "Icon-App-40x40@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "40x40" }, { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" + "filename": "Icon-App-40x40@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "40x40" }, { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" + "filename": "Icon-App-60x60@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "60x60" }, { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" + "filename": "Icon-App-60x60@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "60x60" }, { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" + "filename": "Icon-App-20x20@1x.png", + "idiom": "ipad", + "scale": "1x", + "size": "20x20" }, { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" + "filename": "Icon-App-20x20@2x.png", + "idiom": "ipad", + "scale": "2x", + "size": "20x20" }, { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" + "filename": "Icon-App-29x29@1x.png", + "idiom": "ipad", + "scale": "1x", + "size": "29x29" }, { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" + "filename": "Icon-App-29x29@2x.png", + "idiom": "ipad", + "scale": "2x", + "size": "29x29" }, { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" + "filename": "Icon-App-40x40@1x.png", + "idiom": "ipad", + "scale": "1x", + "size": "40x40" }, { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" + "filename": "Icon-App-40x40@2x.png", + "idiom": "ipad", + "scale": "2x", + "size": "40x40" }, { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" + "filename": "Icon-App-76x76@1x.png", + "idiom": "ipad", + "scale": "1x", + "size": "76x76" }, { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" + "filename": "Icon-App-76x76@2x.png", + "idiom": "ipad", + "scale": "2x", + "size": "76x76" }, { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" + "filename": "Icon-App-83.5x83.5@2x.png", + "idiom": "ipad", + "scale": "2x", + "size": "83.5x83.5" }, { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "Icon-App-1024x1024@1x.png", - "scale" : "1x" + "filename": "Icon-App-1024x1024@1x.png", + "idiom": "ios-marketing", + "scale": "1x", + "size": "1024x1024" } ], - "info" : { - "version" : 1, - "author" : "xcode" + "info": { + "author": "icons_launcher", + "version": 1 } -} +} \ No newline at end of file diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-50x50@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-50x50@1x.png deleted file mode 100644 index 9a1609d..0000000 Binary files a/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-50x50@1x.png and /dev/null differ diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-50x50@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-50x50@2x.png deleted file mode 100644 index f5994b8..0000000 Binary files a/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-50x50@2x.png and /dev/null differ diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-57x57@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-57x57@1x.png deleted file mode 100644 index a8c6e99..0000000 Binary files a/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-57x57@1x.png and /dev/null differ diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-57x57@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-57x57@2x.png deleted file mode 100644 index d6f5239..0000000 Binary files a/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-57x57@2x.png and /dev/null differ diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-72x72@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-72x72@1x.png deleted file mode 100644 index b74e7e9..0000000 Binary files a/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-72x72@1x.png and /dev/null differ diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-72x72@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-72x72@2x.png deleted file mode 100644 index 1bad46b..0000000 Binary files a/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-72x72@2x.png and /dev/null differ diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Contents.json b/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Contents.json index d36b1fa..eabd851 100644 --- a/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Contents.json +++ b/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Contents.json @@ -1,122 +1,122 @@ { - "images" : [ + "images": [ { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" + "filename": "Icon-App-20x20@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "20x20" }, { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" + "filename": "Icon-App-20x20@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "20x20" }, { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" + "filename": "Icon-App-29x29@1x.png", + "idiom": "iphone", + "scale": "1x", + "size": "29x29" }, { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" + "filename": "Icon-App-29x29@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "29x29" }, { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" + "filename": "Icon-App-29x29@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "29x29" }, { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" + "filename": "Icon-App-40x40@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "40x40" }, { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" + "filename": "Icon-App-40x40@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "40x40" }, { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" + "filename": "Icon-App-60x60@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "60x60" }, { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" + "filename": "Icon-App-60x60@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "60x60" }, { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" + "filename": "Icon-App-20x20@1x.png", + "idiom": "ipad", + "scale": "1x", + "size": "20x20" }, { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" + "filename": "Icon-App-20x20@2x.png", + "idiom": "ipad", + "scale": "2x", + "size": "20x20" }, { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" + "filename": "Icon-App-29x29@1x.png", + "idiom": "ipad", + "scale": "1x", + "size": "29x29" }, { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" + "filename": "Icon-App-29x29@2x.png", + "idiom": "ipad", + "scale": "2x", + "size": "29x29" }, { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" + "filename": "Icon-App-40x40@1x.png", + "idiom": "ipad", + "scale": "1x", + "size": "40x40" }, { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" + "filename": "Icon-App-40x40@2x.png", + "idiom": "ipad", + "scale": "2x", + "size": "40x40" }, { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" + "filename": "Icon-App-76x76@1x.png", + "idiom": "ipad", + "scale": "1x", + "size": "76x76" }, { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" + "filename": "Icon-App-76x76@2x.png", + "idiom": "ipad", + "scale": "2x", + "size": "76x76" }, { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" + "filename": "Icon-App-83.5x83.5@2x.png", + "idiom": "ipad", + "scale": "2x", + "size": "83.5x83.5" }, { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "Icon-App-1024x1024@1x.png", - "scale" : "1x" + "filename": "Icon-App-1024x1024@1x.png", + "idiom": "ios-marketing", + "scale": "1x", + "size": "1024x1024" } ], - "info" : { - "version" : 1, - "author" : "xcode" + "info": { + "author": "icons_launcher", + "version": 1 } -} +} \ No newline at end of file diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-50x50@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-50x50@1x.png deleted file mode 100644 index 9a1609d..0000000 Binary files a/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-50x50@1x.png and /dev/null differ diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-50x50@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-50x50@2x.png deleted file mode 100644 index f5994b8..0000000 Binary files a/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-50x50@2x.png and /dev/null differ diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-57x57@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-57x57@1x.png deleted file mode 100644 index a8c6e99..0000000 Binary files a/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-57x57@1x.png and /dev/null differ diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-57x57@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-57x57@2x.png deleted file mode 100644 index d6f5239..0000000 Binary files a/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-57x57@2x.png and /dev/null differ diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-72x72@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-72x72@1x.png deleted file mode 100644 index b74e7e9..0000000 Binary files a/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-72x72@1x.png and /dev/null differ diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-72x72@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-72x72@2x.png deleted file mode 100644 index 1bad46b..0000000 Binary files a/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-72x72@2x.png and /dev/null differ diff --git a/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index a2ec33f..7b4d860 100644 --- a/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,68 +1,68 @@ { - "images" : [ + "images": [ { - "size" : "16x16", - "idiom" : "mac", - "filename" : "app_icon_16.png", - "scale" : "1x" + "filename": "app_icon_16.png", + "idiom": "mac", + "scale": "1x", + "size": "16x16" }, { - "size" : "16x16", - "idiom" : "mac", - "filename" : "app_icon_32.png", - "scale" : "2x" + "filename": "app_icon_32.png", + "idiom": "mac", + "scale": "2x", + "size": "16x16" }, { - "size" : "32x32", - "idiom" : "mac", - "filename" : "app_icon_32.png", - "scale" : "1x" + "filename": "app_icon_32.png", + "idiom": "mac", + "scale": "1x", + "size": "32x32" }, { - "size" : "32x32", - "idiom" : "mac", - "filename" : "app_icon_64.png", - "scale" : "2x" + "filename": "app_icon_64.png", + "idiom": "mac", + "scale": "2x", + "size": "32x32" }, { - "size" : "128x128", - "idiom" : "mac", - "filename" : "app_icon_128.png", - "scale" : "1x" + "filename": "app_icon_128.png", + "idiom": "mac", + "scale": "1x", + "size": "128x128" }, { - "size" : "128x128", - "idiom" : "mac", - "filename" : "app_icon_256.png", - "scale" : "2x" + "filename": "app_icon_256.png", + "idiom": "mac", + "scale": "2x", + "size": "128x128" }, { - "size" : "256x256", - "idiom" : "mac", - "filename" : "app_icon_256.png", - "scale" : "1x" + "filename": "app_icon_256.png", + "idiom": "mac", + "scale": "1x", + "size": "256x256" }, { - "size" : "256x256", - "idiom" : "mac", - "filename" : "app_icon_512.png", - "scale" : "2x" + "filename": "app_icon_512.png", + "idiom": "mac", + "scale": "2x", + "size": "256x256" }, { - "size" : "512x512", - "idiom" : "mac", - "filename" : "app_icon_512.png", - "scale" : "1x" + "filename": "app_icon_512.png", + "idiom": "mac", + "scale": "1x", + "size": "512x512" }, { - "size" : "512x512", - "idiom" : "mac", - "filename" : "app_icon_1024.png", - "scale" : "2x" + "filename": "app_icon_1024.png", + "idiom": "mac", + "scale": "2x", + "size": "512x512" } ], - "info" : { - "version" : 1, - "author" : "xcode" + "info": { + "author": "icons_launcher", + "version": 1 } -} +} \ No newline at end of file diff --git a/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png index 3c4935a..d119f4c 100644 Binary files a/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png and b/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ diff --git a/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png index ed4cc16..7e9d0da 100644 Binary files a/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png and b/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ diff --git a/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png index 483be61..2338424 100644 Binary files a/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png and b/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png differ diff --git a/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png index bcbf36d..a0a06e7 100644 Binary files a/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png and b/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ diff --git a/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png index 9c0a652..05a2e1c 100644 Binary files a/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png and b/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ diff --git a/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png index e71a726..7878c2c 100644 Binary files a/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png and b/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ diff --git a/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png index 8a31fe2..f96b18a 100644 Binary files a/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png and b/example/flavor_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ diff --git a/example/flavor_app/macos/Runner/Assets.xcassets/Contents.json b/example/flavor_app/macos/Runner/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/example/flavor_app/macos/Runner/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/example/simple_app/README.md b/example/simple_app/README.md index 2e00315..f62d36a 100644 --- a/example/simple_app/README.md +++ b/example/simple_app/README.md @@ -1,16 +1,12 @@ # simple_app -A new Flutter project. +Demo of `icons_launcher` using an external config file. ## Getting Started -This project is a starting point for a Flutter application. +First: `flutter pub get` -A few resources to get you started if this is your first Flutter project: - -- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) -- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) - -For help getting started with Flutter development, view the -[online documentation](https://docs.flutter.dev/), which offers tutorials, -samples, guidance on mobile development, and a full API reference. +Then generate icons with the command: +``` +flutter pub run icons_launcher:create --path icons_launcher.yaml +``` diff --git a/example/simple_app/icons_launcher.yaml b/example/simple_app/icons_launcher.yaml index 1e9c2e4..1ec097b 100644 --- a/example/simple_app/icons_launcher.yaml +++ b/example/simple_app/icons_launcher.yaml @@ -18,7 +18,7 @@ icons_launcher: image_path: 'assets/ic_logo_border.png' favicon_path: 'assets/ic_logo_round.png' macos: - enable: false + enable: true image_path: 'assets/ic_logo_border.png' windows: enable: false diff --git a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index d36b1fa..eabd851 100644 --- a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,122 +1,122 @@ { - "images" : [ + "images": [ { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" + "filename": "Icon-App-20x20@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "20x20" }, { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" + "filename": "Icon-App-20x20@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "20x20" }, { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" + "filename": "Icon-App-29x29@1x.png", + "idiom": "iphone", + "scale": "1x", + "size": "29x29" }, { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" + "filename": "Icon-App-29x29@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "29x29" }, { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" + "filename": "Icon-App-29x29@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "29x29" }, { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" + "filename": "Icon-App-40x40@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "40x40" }, { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" + "filename": "Icon-App-40x40@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "40x40" }, { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" + "filename": "Icon-App-60x60@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "60x60" }, { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" + "filename": "Icon-App-60x60@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "60x60" }, { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" + "filename": "Icon-App-20x20@1x.png", + "idiom": "ipad", + "scale": "1x", + "size": "20x20" }, { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" + "filename": "Icon-App-20x20@2x.png", + "idiom": "ipad", + "scale": "2x", + "size": "20x20" }, { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" + "filename": "Icon-App-29x29@1x.png", + "idiom": "ipad", + "scale": "1x", + "size": "29x29" }, { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" + "filename": "Icon-App-29x29@2x.png", + "idiom": "ipad", + "scale": "2x", + "size": "29x29" }, { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" + "filename": "Icon-App-40x40@1x.png", + "idiom": "ipad", + "scale": "1x", + "size": "40x40" }, { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" + "filename": "Icon-App-40x40@2x.png", + "idiom": "ipad", + "scale": "2x", + "size": "40x40" }, { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" + "filename": "Icon-App-76x76@1x.png", + "idiom": "ipad", + "scale": "1x", + "size": "76x76" }, { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" + "filename": "Icon-App-76x76@2x.png", + "idiom": "ipad", + "scale": "2x", + "size": "76x76" }, { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" + "filename": "Icon-App-83.5x83.5@2x.png", + "idiom": "ipad", + "scale": "2x", + "size": "83.5x83.5" }, { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "Icon-App-1024x1024@1x.png", - "scale" : "1x" + "filename": "Icon-App-1024x1024@1x.png", + "idiom": "ios-marketing", + "scale": "1x", + "size": "1024x1024" } ], - "info" : { - "version" : 1, - "author" : "xcode" + "info": { + "author": "icons_launcher", + "version": 1 } -} +} \ No newline at end of file diff --git a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png b/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png deleted file mode 100644 index 9a1609d..0000000 Binary files a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png and /dev/null differ diff --git a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png b/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png deleted file mode 100644 index f5994b8..0000000 Binary files a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png and /dev/null differ diff --git a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png b/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png deleted file mode 100644 index a8c6e99..0000000 Binary files a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png and /dev/null differ diff --git a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png b/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png deleted file mode 100644 index d6f5239..0000000 Binary files a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png and /dev/null differ diff --git a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png b/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png deleted file mode 100644 index b74e7e9..0000000 Binary files a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png and /dev/null differ diff --git a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png deleted file mode 100644 index 1bad46b..0000000 Binary files a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png and /dev/null differ diff --git a/example/simple_app/ios/Runner/Assets.xcassets/Contents.json b/example/simple_app/ios/Runner/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/example/simple_app/ios/Runner/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/example/simple_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/simple_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index a2ec33f..7b4d860 100644 --- a/example/simple_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/example/simple_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,68 +1,68 @@ { - "images" : [ + "images": [ { - "size" : "16x16", - "idiom" : "mac", - "filename" : "app_icon_16.png", - "scale" : "1x" + "filename": "app_icon_16.png", + "idiom": "mac", + "scale": "1x", + "size": "16x16" }, { - "size" : "16x16", - "idiom" : "mac", - "filename" : "app_icon_32.png", - "scale" : "2x" + "filename": "app_icon_32.png", + "idiom": "mac", + "scale": "2x", + "size": "16x16" }, { - "size" : "32x32", - "idiom" : "mac", - "filename" : "app_icon_32.png", - "scale" : "1x" + "filename": "app_icon_32.png", + "idiom": "mac", + "scale": "1x", + "size": "32x32" }, { - "size" : "32x32", - "idiom" : "mac", - "filename" : "app_icon_64.png", - "scale" : "2x" + "filename": "app_icon_64.png", + "idiom": "mac", + "scale": "2x", + "size": "32x32" }, { - "size" : "128x128", - "idiom" : "mac", - "filename" : "app_icon_128.png", - "scale" : "1x" + "filename": "app_icon_128.png", + "idiom": "mac", + "scale": "1x", + "size": "128x128" }, { - "size" : "128x128", - "idiom" : "mac", - "filename" : "app_icon_256.png", - "scale" : "2x" + "filename": "app_icon_256.png", + "idiom": "mac", + "scale": "2x", + "size": "128x128" }, { - "size" : "256x256", - "idiom" : "mac", - "filename" : "app_icon_256.png", - "scale" : "1x" + "filename": "app_icon_256.png", + "idiom": "mac", + "scale": "1x", + "size": "256x256" }, { - "size" : "256x256", - "idiom" : "mac", - "filename" : "app_icon_512.png", - "scale" : "2x" + "filename": "app_icon_512.png", + "idiom": "mac", + "scale": "2x", + "size": "256x256" }, { - "size" : "512x512", - "idiom" : "mac", - "filename" : "app_icon_512.png", - "scale" : "1x" + "filename": "app_icon_512.png", + "idiom": "mac", + "scale": "1x", + "size": "512x512" }, { - "size" : "512x512", - "idiom" : "mac", - "filename" : "app_icon_1024.png", - "scale" : "2x" + "filename": "app_icon_1024.png", + "idiom": "mac", + "scale": "2x", + "size": "512x512" } ], - "info" : { - "version" : 1, - "author" : "xcode" + "info": { + "author": "icons_launcher", + "version": 1 } -} +} \ No newline at end of file diff --git a/lib/src/ios.dart b/lib/src/ios.dart index f2d2798..8474b21 100644 --- a/lib/src/ios.dart +++ b/lib/src/ios.dart @@ -1,5 +1,31 @@ part of icons_launcher_cli; +/// Generates a list of IosIconTemplates according to the parameters: +/// +/// [size] is the image size @1x scale to use in pixels. +/// [sizeName] if not provided will use the naming scheme: '\x\', +/// where \ is the rounded [size] value. +/// [scales] are the different size multiples for which we will generate images. +/// [idiom] is the device family name to use within the Asset Catalog's +/// description of each icon generated. +List _createIosTemplates( + {required double size, + String? sizeName, + required List scales, + required String idiom}) { + final templates = []; + sizeName ??= '${size.round()}x${size.round()}'; + for (int scale in scales) { + final scaledSize = (size * scale).round(); + templates.add(IosIconTemplate( + sizeName: sizeName, + scaledSize: scaledSize, + scale: scale, + idiom: idiom)); + } + return templates; +} + /// Start create ios icons void _createIosIcons({required String imagePath}) { CliLogger.info('Creating iOS icons...'); @@ -20,39 +46,45 @@ void _createIosIcons({required String imagePath}) { } final iosIcons = [ - IosIconTemplate(name: '-20x20@1x', size: 20), - IosIconTemplate(name: '-20x20@2x', size: 40), - IosIconTemplate(name: '-20x20@3x', size: 60), - IosIconTemplate(name: '-29x29@1x', size: 29), - IosIconTemplate(name: '-29x29@2x', size: 58), - IosIconTemplate(name: '-29x29@3x', size: 87), - IosIconTemplate(name: '-40x40@1x', size: 40), - IosIconTemplate(name: '-40x40@2x', size: 80), - IosIconTemplate(name: '-40x40@3x', size: 120), - IosIconTemplate(name: '-50x50@1x', size: 50), - IosIconTemplate(name: '-50x50@2x', size: 100), - IosIconTemplate(name: '-57x57@1x', size: 57), - IosIconTemplate(name: '-57x57@2x', size: 114), - IosIconTemplate(name: '-60x60@2x', size: 120), - IosIconTemplate(name: '-60x60@3x', size: 180), - IosIconTemplate(name: '-72x72@1x', size: 72), - IosIconTemplate(name: '-72x72@2x', size: 144), - IosIconTemplate(name: '-76x76@1x', size: 76), - IosIconTemplate(name: '-76x76@2x', size: 152), - IosIconTemplate(name: '-83.5x83.5@2x', size: 167), - IosIconTemplate(name: '-1024x1024@1x', size: 1024), + ..._createIosTemplates(size: 20, scales: [2, 3], idiom: 'iphone'), + ..._createIosTemplates(size: 29, scales: [1, 2, 3], idiom: 'iphone'), + ..._createIosTemplates(size: 40, scales: [2, 3], idiom: 'iphone'), + ..._createIosTemplates(size: 60, scales: [2, 3], idiom: 'iphone'), + ..._createIosTemplates(size: 20, scales: [1, 2], idiom: 'ipad'), + ..._createIosTemplates(size: 29, scales: [1, 2], idiom: 'ipad'), + ..._createIosTemplates(size: 40, scales: [1, 2], idiom: 'ipad'), + ..._createIosTemplates(size: 76, scales: [1, 2], idiom: 'ipad'), + ..._createIosTemplates( + size: 83.5, sizeName: '83.5x83.5', scales: [2], idiom: 'ipad'), + ..._createIosTemplates(size: 1024, scales: [1], idiom: 'ios-marketing'), + // The following sizes are only for iOS 6.1 or earlier, which flutter does + // not support re: + // https://developer.apple.com/library/archive/qa/qa1686/_index.html + //..._createIosTemplates(size: 57, scales: [1, 2], idiom: 'iphone'), + //..._createIosTemplates(size: 50, scales: [1, 2], idiom: 'ipad'), + //..._createIosTemplates(size: 72, scales: [1, 2], idiom: 'ipad'), ]; + final filenames = {}; for (final template in iosIcons) { - _saveImageIos(template, image); + // Multiple icon variants can use the same file, so check if we already + // created it. + if (filenames.contains(template.filename) == false) { + filenames.add(template.filename); + _saveImageIos(template, image); + } } + AppleAppIconType( + images: iosIcons, assetPath: _flavorHelper.iOSAssetsAppIconFolder) + .saveContentsJson(); + CliLogger.success('Generated app icon images', level: CliLoggerLevel.two); } /// Save ios image void _saveImageIos(IosIconTemplate template, Icon image) { final filePath = - '${_flavorHelper.iOSAssetsAppIconFolder}$IOS_DEFAULT_ICON_NAME${template.name}.png'; - image.saveResizedPng(template.size, filePath); + '${_flavorHelper.iOSAssetsAppIconFolder}${template.filename}'; + image.saveResizedPng(template.scaledSize, filePath); } diff --git a/lib/src/macos.dart b/lib/src/macos.dart index 3fcfe28..c7da6f7 100644 --- a/lib/src/macos.dart +++ b/lib/src/macos.dart @@ -1,5 +1,22 @@ part of icons_launcher_cli; +/// Generates templates according to the parameters: +/// +/// [size] is the image size @1x scale to use in pixels. +/// [scales] are the different size multiples for which we will generate images. +List _createMacTemplates( + {required int size, required List scales}) { + final templates = []; + for (int scale in scales) { + templates.add(MacOSIconTemplate( + sizeName: '${size}x$size', + scaledSize: size * scale, + scale: scale, + idiom: 'mac')); + } + return templates; +} + /// Start create macos icons void _createMacOSIcons({required String imagePath}) { CliLogger.info('Creating macOS icons...'); @@ -12,25 +29,29 @@ void _createMacOSIcons({required String imagePath}) { } final macosIcons = [ - MacOSIconTemplate(name: '_16', size: 16), - MacOSIconTemplate(name: '_32', size: 32), - MacOSIconTemplate(name: '_64', size: 64), - MacOSIconTemplate(name: '_128', size: 128), - MacOSIconTemplate(name: '_256', size: 256), - MacOSIconTemplate(name: '_512', size: 512), - MacOSIconTemplate(name: '_1024', size: 1024), + ..._createMacTemplates(size: 16, scales: [1, 2]), + ..._createMacTemplates(size: 32, scales: [1, 2]), + ..._createMacTemplates(size: 128, scales: [1, 2]), + ..._createMacTemplates(size: 256, scales: [1, 2]), + ..._createMacTemplates(size: 512, scales: [1, 2]), ]; + final filenames = {}; for (final template in macosIcons) { - _saveImageMacOS(template, image); + if (filenames.contains(template.filename) == false) { + filenames.add(template.filename); + _saveImageMacOS(template, image); + } } + AppleAppIconType(images: macosIcons, assetPath: MACOS_DEFAULT_APP_ICON_DIR) + .saveContentsJson(); + CliLogger.success('Generated app icon images', level: CliLoggerLevel.two); } /// Save macos image void _saveImageMacOS(MacOSIconTemplate template, Icon image) { - final filePath = - '$MACOS_DEFAULT_APP_ICON_DIR$MACOS_DEFAULT_ICON_NAME${template.name}.png'; - image.saveResizedPng(template.size, filePath); + final filePath = '$MACOS_DEFAULT_APP_ICON_DIR${template.filename}'; + image.saveResizedPng(template.scaledSize, filePath); } diff --git a/lib/utils/template.dart b/lib/utils/template.dart index 432a4af..a17d0bc 100644 --- a/lib/utils/template.dart +++ b/lib/utils/template.dart @@ -1,3 +1,8 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:icons_launcher/utils/constants.dart'; + /// Android template class AndroidMipMapIconTemplate { /// Constructor @@ -10,16 +15,57 @@ class AndroidMipMapIconTemplate { final int size; } -/// iOS template -class IosIconTemplate { +/// Interface for any templates that use Apple's Asset Catalog App Icon Type. +/// +/// See https://developer.apple.com/library/archive/documentation/Xcode/Reference/xcode_ref-Asset_Catalog_Format/AppIconType.html +abstract class AppleIconTemplate { /// Constructor - IosIconTemplate({required this.size, required this.name}); - - /// Icon name - final String name; + AppleIconTemplate( + {required this.sizeName, + required this.scaledSize, + required this.scale, + required this.idiom}); /// Icon size - final int size; + final int scaledSize; + + /// Icon size name to use in file names. + final String sizeName; + + /// The device type for the image. + /// See https://developer.apple.com/library/archive/documentation/Xcode/Reference/xcode_ref-Asset_Catalog_Format/ImageSetType.html#//apple_ref/doc/uid/TP40015170-CH25-SW2 + final String idiom; + + /// The targeted display scale for the image, currently one of {1, 2, 3} + final int scale; + + /// Icon file name + String get filename; + + /// Used to encode the attributes for this asset file in a corresponding + /// Asset's Contents.json file. + Map toJson(); +} + +/// iOS template +class IosIconTemplate extends AppleIconTemplate { + /// Constructor + IosIconTemplate( + {required super.sizeName, + required super.scaledSize, + required super.scale, + required super.idiom}); + + @override + String get filename => '$IOS_DEFAULT_ICON_NAME-$sizeName@${scale}x.png'; + + @override + Map toJson() => { + 'filename': filename, + 'idiom': idiom, + 'scale': '${scale}x', + 'size': sizeName + }; } /// Web template @@ -35,15 +81,24 @@ class WebIconTemplate { } /// MacOS template -class MacOSIconTemplate { +class MacOSIconTemplate extends AppleIconTemplate { /// Constructor - MacOSIconTemplate({required this.size, required this.name}); - - /// Icon name - final String name; - - /// Icon size - final int size; + MacOSIconTemplate( + {required super.sizeName, + required super.scaledSize, + required super.scale, + required super.idiom}); + + @override + String get filename => '${MACOS_DEFAULT_ICON_NAME}_$scaledSize.png'; + + @override + Map toJson() => { + 'filename': filename, + 'idiom': 'mac', + 'scale': '${scale}x', + 'size': sizeName + }; } /// Windows template @@ -69,3 +124,31 @@ class LinuxIconTemplate { /// Icon size final int size; } + +/// Wrapper to allow generation of the Contents.json file used by Apple's Asset +/// Catalog "App Icon Type": +/// https://developer.apple.com/library/archive/documentation/Xcode/Reference/xcode_ref-Asset_Catalog_Format/AppIconType.html +class AppleAppIconType { + /// Provide a list of [images] to be created in your Asset set, whose + /// Contents.json file can be written out to [assetPath]. + const AppleAppIconType({required this.images, required this.assetPath}); + + /// The meta data for each asset file to create. + final List images; + + /// Where to write out the Contents.json file. + final String assetPath; + + /// For use with a [JsonEncoder] to generate this Asset's Contents.json file. + Map toJson() => { + 'images': images.map((image) => image.toJson()).toList(), + 'info': {'author': 'icons_launcher', 'version': 1} + }; + + /// Writes out the Contents.json file. + void saveContentsJson() { + final file = File('${assetPath}Contents.json'); + const encoder = JsonEncoder.withIndent(' '); + file.writeAsStringSync(encoder.convert(this), flush: true); + } +}