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/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..52b3a79 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" + "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": "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@1x.png", + "scale": "1x" }, { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" + "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": "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@2x.png", + "scale": "2x" }, { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" + "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@2x.png", + "scale": "2x" }, { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" + "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@1x.png", + "scale": "1x" }, { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" + "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@1x.png", + "scale": "1x" }, { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" + "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@1x.png", + "scale": "1x" }, { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" + "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@1x.png", + "scale": "1x" }, { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" + "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": "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" + "size": "1024x1024", + "idiom": "ios-marketing", + "filename": "Icon-App-1024x1024@1x.png", + "scale": "1x" } ], - "info" : { - "version" : 1, - "author" : "xcode" + "info": { + "version": 1, + "author": "icons_launcher" } -} +} \ 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..52b3a79 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" + "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": "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@1x.png", + "scale": "1x" }, { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" + "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": "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@2x.png", + "scale": "2x" }, { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" + "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@2x.png", + "scale": "2x" }, { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" + "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@1x.png", + "scale": "1x" }, { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" + "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@1x.png", + "scale": "1x" }, { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" + "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@1x.png", + "scale": "1x" }, { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" + "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@1x.png", + "scale": "1x" }, { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" + "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": "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" + "size": "1024x1024", + "idiom": "ios-marketing", + "filename": "Icon-App-1024x1024@1x.png", + "scale": "1x" } ], - "info" : { - "version" : 1, - "author" : "xcode" + "info": { + "version": 1, + "author": "icons_launcher" } -} +} \ 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/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/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index d36b1fa..52b3a79 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" + "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": "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@1x.png", + "scale": "1x" }, { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" + "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": "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@2x.png", + "scale": "2x" }, { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" + "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@2x.png", + "scale": "2x" }, { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" + "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@1x.png", + "scale": "1x" }, { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" + "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@1x.png", + "scale": "1x" }, { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" + "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@1x.png", + "scale": "1x" }, { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" + "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@1x.png", + "scale": "1x" }, { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" + "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": "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" + "size": "1024x1024", + "idiom": "ios-marketing", + "filename": "Icon-App-1024x1024@1x.png", + "scale": "1x" } ], - "info" : { - "version" : 1, - "author" : "xcode" + "info": { + "version": 1, + "author": "icons_launcher" } -} +} \ No newline at end of file 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/lib/cli_commands.dart b/lib/cli_commands.dart index f39d880..b0b1f97 100644 --- a/lib/cli_commands.dart +++ b/lib/cli_commands.dart @@ -1,5 +1,7 @@ library icons_launcher_cli; +import 'dart:convert'; + import 'package:icons_launcher/utils/cli_logger.dart'; import 'package:icons_launcher/utils/constants.dart'; import 'package:icons_launcher/utils/icon.dart'; diff --git a/lib/src/ios.dart b/lib/src/ios.dart index f2d2798..97a11cc 100644 --- a/lib/src/ios.dart +++ b/lib/src/ios.dart @@ -1,5 +1,36 @@ part of icons_launcher_cli; +/// Wrapper to allow generation of the Asset Catalog +/// Format: https://developer.apple.com/library/archive/documentation/Xcode/Reference/xcode_ref-Asset_Catalog_Format/AppIconType.html +class IosContents { + const IosContents({required this.images}); + + final List images; + + Map toJson() => { + 'images': images.map((image) => image.toJson()).toList(), + 'info': {'version': 1, 'author': 'icons_launcher'} + }; +} + +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 +51,44 @@ 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'), ]; for (final template in iosIcons) { _saveImageIos(template, image); } + _saveContentsJson(IosContents(images: iosIcons)); + 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); +} + +void _saveContentsJson(IosContents contents) { + final filePath = '${_flavorHelper.iOSAssetsAppIconFolder}Contents.json'; + final file = File(filePath); + const encoder = JsonEncoder.withIndent(' '); + file.writeAsStringSync(encoder.convert(contents), flush: true); } diff --git a/lib/utils/template.dart b/lib/utils/template.dart index 432a4af..642bf6c 100644 --- a/lib/utils/template.dart +++ b/lib/utils/template.dart @@ -1,3 +1,5 @@ +import 'package:icons_launcher/utils/constants.dart'; + /// Android template class AndroidMipMapIconTemplate { /// Constructor @@ -11,15 +13,38 @@ class AndroidMipMapIconTemplate { } /// iOS template +/// +/// See https://developer.apple.com/library/archive/documentation/Xcode/Reference/xcode_ref-Asset_Catalog_Format/AppIconType.html class IosIconTemplate { /// Constructor - IosIconTemplate({required this.size, required this.name}); - - /// Icon name - final String name; + IosIconTemplate( + {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; + + /// Scale + final int scale; + + /// Icon file name + String get filename => '$IOS_DEFAULT_ICON_NAME-$sizeName@${scale}x.png'; + + Map toJson() => { + 'size': sizeName, + 'idiom': idiom, + 'filename': filename, + 'scale': '${scale}x' + }; } /// Web template