From b7f87e05786d0c4ade1340470d6d0e2b28ca0b3b Mon Sep 17 00:00:00 2001 From: Linus Wong Date: Mon, 8 Aug 2022 19:33:30 +0800 Subject: [PATCH 1/5] autogenerate Contents.json for ios appiconsets Also stop generating icons for unsupported iOS versions. --- example/flavor_app/README.md | 17 +- .../ios/Runner/Assets.xcassets/Contents.json | 6 + .../devAppIcon.appiconset/Contents.json | 162 +++++++++--------- .../Icon-App-50x50@1x.png | Bin 879 -> 0 bytes .../Icon-App-50x50@2x.png | Bin 1754 -> 0 bytes .../Icon-App-57x57@1x.png | Bin 907 -> 0 bytes .../Icon-App-57x57@2x.png | Bin 1833 -> 0 bytes .../Icon-App-72x72@1x.png | Bin 1302 -> 0 bytes .../Icon-App-72x72@2x.png | Bin 2568 -> 0 bytes .../prodAppIcon.appiconset/Contents.json | 162 +++++++++--------- .../Icon-App-50x50@1x.png | Bin 879 -> 0 bytes .../Icon-App-50x50@2x.png | Bin 1754 -> 0 bytes .../Icon-App-57x57@1x.png | Bin 907 -> 0 bytes .../Icon-App-57x57@2x.png | Bin 1833 -> 0 bytes .../Icon-App-72x72@1x.png | Bin 1302 -> 0 bytes .../Icon-App-72x72@2x.png | Bin 2568 -> 0 bytes example/simple_app/README.md | 16 +- .../AppIcon.appiconset/Contents.json | 162 +++++++++--------- .../ios/Runner/Assets.xcassets/Contents.json | 6 + lib/cli_commands.dart | 2 + lib/src/ios.dart | 82 ++++++--- lib/utils/template.dart | 35 +++- 22 files changed, 359 insertions(+), 291 deletions(-) create mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/Contents.json delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-50x50@1x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-50x50@2x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-57x57@1x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-57x57@2x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-72x72@1x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-72x72@2x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-50x50@1x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-50x50@2x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-57x57@1x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-57x57@2x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-72x72@1x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-72x72@2x.png create mode 100644 example/simple_app/ios/Runner/Assets.xcassets/Contents.json 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 9a1609d7b302b1a8b1f2843e3a30d486bf9e863c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 879 zcmV-#1CacQP)){90%~HFI&NYBj|t)@nRIBCK@ij#fV}j85CiI&f3Z&hK@6+e$v+0SkrOv z3j1)hUM~JRG+9$3)1449E2ezFbiZDzCV4ArtVxmWN%*sNrbxX^WTM8Jl9`UB85H5@VIYAIcci6_)pw+k)M( zu<_`%f>2>kX%%(Gh3_(J9Z18Z-3!ZmiZ+q4n#%CqkPL$;YRiQM&3k;MCtH)B(Kp-bbs3666rN~BOIfH+R?2~5q7 zOb%I)yy?Q2FqvH)IR&Fc8Z}gD9ow9noU_b)71f{%mg)+j1T4sb0DjUaUm5p{u*@pT(%^^Obe!SY z(Rix$VeIwImf&V5ol)4G9tz;+P4eXtcJBS4G&7_6ICEVaolc*5^zrTO;|@BbvzLd? zp4QEt&!!YVhgNPfT^3KD?u!lFBJPaZC!Zrbs$X6|+SWh3D5>PG(RUE-c|GJ#<6q#!waHfn#|2Kbav{&&_H`jZJ@jaEXcu~!QrlxGbwS+woAp@ zlB^bg9s1uvY~NY|FP9hDFyGiviN_*|$0CWxB8kT$$zM3Jf;qYXF&+Q_002ovPDHLk FV1g{1qqG13 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 f5994b8159c153beb2b211120662c4c80befa323..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1754 zcmbtV>01&895(YlNfB-3L7IkuN6Y0gB^gddMU$*NvJ4ILK+T(lI-2FJscA8fJQKwO zSxwEO2*b<+nn`(~ZB9fKkI?0jbAQ90=RLl>U*6~WJ-;{83*)S+^o^2~l$5Hg3(EVz zga4y~^nvcDNgtMylB;q>IbKLQv^?b>0rb(4UuE!oAH#c;U~&q^Kh8S3=K#0>9FXMo zL&J}*044G*ZpLi3B{H*LSrM#pq&S;}sxYvWd76nj(&XcEJFNsoaEOK&ydxz3ZuguK zyL+SFu6(-u(KOClyKqBY-GXuRNnZ;8cl=0%f=Q995%vnR+k6(2#X6DkKQN%1Rwon) zuDP%couk*3(O-|A6RdUZ3TBu4G`RG0!kS(|<8)dHZ@2|WGA<-;jH|sI zQ?#y-vez?Szku2tk7D$q~hEGb6VMP?oR+*%}$alIPWrtl`m`DkcTTXpSD_uryj{g)qiF?t-JzXe+Pc*xOi)%_}u1 zR?sV~3k>5_L~*1K8S^eV=>&DoY<(GpaBBg_XtyBx#v2_O-Wi8V)>u{1{ClSGdQ=JW zH@c`tCj4e#e<3;mg3@|B@y5=l9~0;VX=Z-vJ+lhG1MIjNMEx5}3)}o2iY|ATor@eJ zq8mypVEeYA?c}rU_Y`5GWuuxFZ0Sv?6J%jJCm(p5dR*68L`7#Oprtvnlk> z-o)d7*sslrE_)>^k&D@X<;t)7Je?bBn6W(HTxXbmDhT5Ec_c~F10CdltX>ch5N%)y z@+38^E2^Hl-U@*qD}>))bU z?$9m7_H}s_ZwjHT?okbLBYRnN(?BLP*KFWE5 zILqS6cx7&=UiODyA-J0Al+OcgmBAxaIXzE5YecXtH6EXvxgwFaj)6u_Y4IqMkYR|~ z!O4N*_{6IasFyEqI62j`nM>-f1vtYDKE!`y?1%*E!;g+#(#-beu{|CQ%uaMORh3`w znrt;j_6&XjZ%OP!^QHtwavJ=^-e2{?REGR4!cRAa!&FDVi^zFA{l{1czF4_G(8;~v zCF;}jkpNrO7g3`98e>pJBBFBp)AzIf)uH0Jc;BjCn(lVBmZR;1-Dg<0`W$bS#{qig z(~_kMEp>!d(H-smQM{Eir*~1f{w+GHk*2SCm}*$=cijSTrd9>@O8IBr=1FzB*!k<_ z0TFxj3Du2Q96ORC5_^(jQEqjr5Zxdg_T`i;OGg+!UqSfC4rdN-Gw|@b`mIXqTypBt z#cj^qu9sZNW#TD?)Vt6oKvHQyk9f-x{V)WPMNU`R3++Y(>K?aEvM$AL&=u5F`T9X@ z`Dq$gPV)X4Bb*-|`!HGYm-M0JzSO(h>-i>_U*dpye)4Z0iGnwh-i)+(PU_g+li2Q zZP9medHJqHdpQMoMEPBSwp~ZU3b`2}3HaumgQv<`^qM0HKEsvF588Ml&T-wmU@ozd zB2E_@L_nmhGl$n1phAWRBbl^@?-O0NZHnInqDzg;K(&h7G0Riqk!(zv`Fgu@qmkED zXs=)-Y@6v^|E@!?if&*mE#GvzM^7;vjAytvyqFOQJlEa{W`HJN$;6(-J* nx?7nCpZO%l2;}&G@b&PC1n|%_?t0+CW=Xj^VNfl|Yvg|c8_G{! 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 a8c6e99664718f6dbd98763a9cd0f3e74d0f9729..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 907 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 M07*qoM6N<$f*&<*I{*Lx 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 1bad46bab62018401a7e86a10dd837d9c65bc85e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2568 zcmcJR=RX^Y8pn;=QCg&_5j{$^(X=AernPERQ3QzkM{wyv_2v|%ZyKT6iG5-wi4Cs6iEm?0l( z>#7rTkK)uE!Z5*x4fMva=i+)Nzv=WE&vDOmgshK)cbOkKd5zUyHQ{hUt@~f5clbZK zoDs9Sd^*)#6;x@h>G#~XQ>8uGl6WfR#ChQVsL?YkV0ZQzW{3AIK|q%x@vF8@z$ro+ z_7#&!a*q8=DRk{T>2!U**d@)uTyGhzvH=*P-;baE$|d7gpmWpg4^THGp;lz{x9xt0{Md~Dm`&4vJhS6EN1|6QH(9_(Vh)()m%x>$TG-wVr^7m z%^-JsPTEwI)Z#)pC?f{d|6(w|Wrf|Poux$Jkli+FzS(w7iGv#|(GoWUT)tEKxq@NZ zTw!QZP7f5CA=QVxiFWFsO05X~$icur{iu-6q~NXGZ%m(7FXS z`&MZunqWD>1Wx&v2>kiFLa&g7ws+6Xg7f=wpgnunB~FMi;w3cpT*yi?ING6C-AK~N ztVX1)Kh%s;@JpCFk5^;zxXrr&^fM*Pm!(w^4xk)y9^=Co(=sm`>i*9&Ix9((wv+d< z2gv5D*yaG$FeceReyObZ{24q zV|>>GBVw#vWuxq3jf7_qqSp|dua$-^xS-u-vvjCo2LWyJ?St|PdcWRs=6ky7r;Buz z@z$3MO*-^P-RIm1Jed{gy+(+X zd5GC%wAO2DGyp{-cw&AwW6*c49U{o4JyL_T{wxbh(y><14r(mdTRQ|QLH{L@ zHHaSQI+u~9B>Otmyg});{9+J#zvX2*P+I7iI?OX9EVdLM9x`-U_}l6}a!L_ZQx%5TPQxGQ4Mh6EygO9kk$a4fb) zmV>Grn>UGiSRik()x-H2#U?4ZJw}xepuL&Wf{YLAngu@jle(V+vXtHTm#|YQZ(5}V z_r~Gj&C$~-fA=mC2m#R#9~|&fkj00!LR~JPyQ-)09AkWqedkNrK5HWSz#z5Vm3;GR z=4i^LJi#cKRX=kQtkqgT2Q#(tyJ>9jJAW%VK=mJX%md!WeB;NQNEguDMC0C9Yz~nh zqu1-#*(*vy*FoU}EU+28xFN4gt6$RL=PF>*(dDHK?H2sdH}gsH+5E=m*Ff$V_hl*X zutY8HaA-`-!EjKsbEWQQmo6=M`Lp^~5)7E8R%a6R!$B&%=@06B5;$(>7pbI1_0TnE zDeo(l4t@P62l8T>O+o1zQP!}YTjZfC&*{q}tyKH;JBQ#l@*)z~3aGui?H!B>^FE z)uwlEJ=${l@n%uh6(%nbTVyl;@VT@`tkctvTl&}Zk1~tY<2f%46TJow1(U`G(ai}* zV*nmF^JBT%MKH$=zcRm4V*Wtj<=;3%>W_7{N=|Q1*?GS*;$4 zht)hKkmrcRo-@>R)Lv+W0`{&8IPPw&hW?)37hlOtrq9xlhIj>7-f%JbeHUITT aJgK_gk){90%~HFI&NYBj|t)@nRIBCK@ij#fV}j85CiI&f3Z&hK@6+e$v+0SkrOv z3j1)hUM~JRG+9$3)1449E2ezFbiZDzCV4ArtVxmWN%*sNrbxX^WTM8Jl9`UB85H5@VIYAIcci6_)pw+k)M( zu<_`%f>2>kX%%(Gh3_(J9Z18Z-3!ZmiZ+q4n#%CqkPL$;YRiQM&3k;MCtH)B(Kp-bbs3666rN~BOIfH+R?2~5q7 zOb%I)yy?Q2FqvH)IR&Fc8Z}gD9ow9noU_b)71f{%mg)+j1T4sb0DjUaUm5p{u*@pT(%^^Obe!SY z(Rix$VeIwImf&V5ol)4G9tz;+P4eXtcJBS4G&7_6ICEVaolc*5^zrTO;|@BbvzLd? zp4QEt&!!YVhgNPfT^3KD?u!lFBJPaZC!Zrbs$X6|+SWh3D5>PG(RUE-c|GJ#<6q#!waHfn#|2Kbav{&&_H`jZJ@jaEXcu~!QrlxGbwS+woAp@ zlB^bg9s1uvY~NY|FP9hDFyGiviN_*|$0CWxB8kT$$zM3Jf;qYXF&+Q_002ovPDHLk FV1g{1qqG13 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 f5994b8159c153beb2b211120662c4c80befa323..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1754 zcmbtV>01&895(YlNfB-3L7IkuN6Y0gB^gddMU$*NvJ4ILK+T(lI-2FJscA8fJQKwO zSxwEO2*b<+nn`(~ZB9fKkI?0jbAQ90=RLl>U*6~WJ-;{83*)S+^o^2~l$5Hg3(EVz zga4y~^nvcDNgtMylB;q>IbKLQv^?b>0rb(4UuE!oAH#c;U~&q^Kh8S3=K#0>9FXMo zL&J}*044G*ZpLi3B{H*LSrM#pq&S;}sxYvWd76nj(&XcEJFNsoaEOK&ydxz3ZuguK zyL+SFu6(-u(KOClyKqBY-GXuRNnZ;8cl=0%f=Q995%vnR+k6(2#X6DkKQN%1Rwon) zuDP%couk*3(O-|A6RdUZ3TBu4G`RG0!kS(|<8)dHZ@2|WGA<-;jH|sI zQ?#y-vez?Szku2tk7D$q~hEGb6VMP?oR+*%}$alIPWrtl`m`DkcTTXpSD_uryj{g)qiF?t-JzXe+Pc*xOi)%_}u1 zR?sV~3k>5_L~*1K8S^eV=>&DoY<(GpaBBg_XtyBx#v2_O-Wi8V)>u{1{ClSGdQ=JW zH@c`tCj4e#e<3;mg3@|B@y5=l9~0;VX=Z-vJ+lhG1MIjNMEx5}3)}o2iY|ATor@eJ zq8mypVEeYA?c}rU_Y`5GWuuxFZ0Sv?6J%jJCm(p5dR*68L`7#Oprtvnlk> z-o)d7*sslrE_)>^k&D@X<;t)7Je?bBn6W(HTxXbmDhT5Ec_c~F10CdltX>ch5N%)y z@+38^E2^Hl-U@*qD}>))bU z?$9m7_H}s_ZwjHT?okbLBYRnN(?BLP*KFWE5 zILqS6cx7&=UiODyA-J0Al+OcgmBAxaIXzE5YecXtH6EXvxgwFaj)6u_Y4IqMkYR|~ z!O4N*_{6IasFyEqI62j`nM>-f1vtYDKE!`y?1%*E!;g+#(#-beu{|CQ%uaMORh3`w znrt;j_6&XjZ%OP!^QHtwavJ=^-e2{?REGR4!cRAa!&FDVi^zFA{l{1czF4_G(8;~v zCF;}jkpNrO7g3`98e>pJBBFBp)AzIf)uH0Jc;BjCn(lVBmZR;1-Dg<0`W$bS#{qig z(~_kMEp>!d(H-smQM{Eir*~1f{w+GHk*2SCm}*$=cijSTrd9>@O8IBr=1FzB*!k<_ z0TFxj3Du2Q96ORC5_^(jQEqjr5Zxdg_T`i;OGg+!UqSfC4rdN-Gw|@b`mIXqTypBt z#cj^qu9sZNW#TD?)Vt6oKvHQyk9f-x{V)WPMNU`R3++Y(>K?aEvM$AL&=u5F`T9X@ z`Dq$gPV)X4Bb*-|`!HGYm-M0JzSO(h>-i>_U*dpye)4Z0iGnwh-i)+(PU_g+li2Q zZP9medHJqHdpQMoMEPBSwp~ZU3b`2}3HaumgQv<`^qM0HKEsvF588Ml&T-wmU@ozd zB2E_@L_nmhGl$n1phAWRBbl^@?-O0NZHnInqDzg;K(&h7G0Riqk!(zv`Fgu@qmkED zXs=)-Y@6v^|E@!?if&*mE#GvzM^7;vjAytvyqFOQJlEa{W`HJN$;6(-J* nx?7nCpZO%l2;}&G@b&PC1n|%_?t0+CW=Xj^VNfl|Yvg|c8_G{! 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 a8c6e99664718f6dbd98763a9cd0f3e74d0f9729..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 907 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 M07*qoM6N<$f*&<*I{*Lx 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 1bad46bab62018401a7e86a10dd837d9c65bc85e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2568 zcmcJR=RX^Y8pn;=QCg&_5j{$^(X=AernPERQ3QzkM{wyv_2v|%ZyKT6iG5-wi4Cs6iEm?0l( z>#7rTkK)uE!Z5*x4fMva=i+)Nzv=WE&vDOmgshK)cbOkKd5zUyHQ{hUt@~f5clbZK zoDs9Sd^*)#6;x@h>G#~XQ>8uGl6WfR#ChQVsL?YkV0ZQzW{3AIK|q%x@vF8@z$ro+ z_7#&!a*q8=DRk{T>2!U**d@)uTyGhzvH=*P-;baE$|d7gpmWpg4^THGp;lz{x9xt0{Md~Dm`&4vJhS6EN1|6QH(9_(Vh)()m%x>$TG-wVr^7m z%^-JsPTEwI)Z#)pC?f{d|6(w|Wrf|Poux$Jkli+FzS(w7iGv#|(GoWUT)tEKxq@NZ zTw!QZP7f5CA=QVxiFWFsO05X~$icur{iu-6q~NXGZ%m(7FXS z`&MZunqWD>1Wx&v2>kiFLa&g7ws+6Xg7f=wpgnunB~FMi;w3cpT*yi?ING6C-AK~N ztVX1)Kh%s;@JpCFk5^;zxXrr&^fM*Pm!(w^4xk)y9^=Co(=sm`>i*9&Ix9((wv+d< z2gv5D*yaG$FeceReyObZ{24q zV|>>GBVw#vWuxq3jf7_qqSp|dua$-^xS-u-vvjCo2LWyJ?St|PdcWRs=6ky7r;Buz z@z$3MO*-^P-RIm1Jed{gy+(+X zd5GC%wAO2DGyp{-cw&AwW6*c49U{o4JyL_T{wxbh(y><14r(mdTRQ|QLH{L@ zHHaSQI+u~9B>Otmyg});{9+J#zvX2*P+I7iI?OX9EVdLM9x`-U_}l6}a!L_ZQx%5TPQxGQ4Mh6EygO9kk$a4fb) zmV>Grn>UGiSRik()x-H2#U?4ZJw}xepuL&Wf{YLAngu@jle(V+vXtHTm#|YQZ(5}V z_r~Gj&C$~-fA=mC2m#R#9~|&fkj00!LR~JPyQ-)09AkWqedkNrK5HWSz#z5Vm3;GR z=4i^LJi#cKRX=kQtkqgT2Q#(tyJ>9jJAW%VK=mJX%md!WeB;NQNEguDMC0C9Yz~nh zqu1-#*(*vy*FoU}EU+28xFN4gt6$RL=PF>*(dDHK?H2sdH}gsH+5E=m*Ff$V_hl*X zutY8HaA-`-!EjKsbEWQQmo6=M`Lp^~5)7E8R%a6R!$B&%=@06B5;$(>7pbI1_0TnE zDeo(l4t@P62l8T>O+o1zQP!}YTjZfC&*{q}tyKH;JBQ#l@*)z~3aGui?H!B>^FE z)uwlEJ=${l@n%uh6(%nbTVyl;@VT@`tkctvTl&}Zk1~tY<2f%46TJow1(U`G(ai}* zV*nmF^JBT%MKH$=zcRm4V*Wtj<=;3%>W_7{N=|Q1*?GS*;$4 zht)hKkmrcRo-@>R)Lv+W0`{&8IPPw&hW?)37hlOtrq9xlhIj>7-f%JbeHUITT aJgK_gk 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 From 299f94a8dfeff7ff89887d1c868e677d30268ed6 Mon Sep 17 00:00:00 2001 From: Linus Wong Date: Mon, 8 Aug 2022 20:24:20 +0800 Subject: [PATCH 2/5] remove unused icons from simple_app --- .../AppIcon.appiconset/Contents.json | 162 +++++++++--------- .../AppIcon.appiconset/Icon-App-50x50@1x.png | Bin 879 -> 0 bytes .../AppIcon.appiconset/Icon-App-50x50@2x.png | Bin 1754 -> 0 bytes .../AppIcon.appiconset/Icon-App-57x57@1x.png | Bin 907 -> 0 bytes .../AppIcon.appiconset/Icon-App-57x57@2x.png | Bin 1833 -> 0 bytes .../AppIcon.appiconset/Icon-App-72x72@1x.png | Bin 1302 -> 0 bytes .../AppIcon.appiconset/Icon-App-72x72@2x.png | Bin 2568 -> 0 bytes 7 files changed, 81 insertions(+), 81 deletions(-) delete mode 100644 example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png delete mode 100644 example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png delete mode 100644 example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png delete mode 100644 example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png delete mode 100644 example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png delete mode 100644 example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png 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 52b3a79..5361129 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": "icons_launcher" + "info" : { + "author" : "xcode", + "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 9a1609d7b302b1a8b1f2843e3a30d486bf9e863c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 879 zcmV-#1CacQP)){90%~HFI&NYBj|t)@nRIBCK@ij#fV}j85CiI&f3Z&hK@6+e$v+0SkrOv z3j1)hUM~JRG+9$3)1449E2ezFbiZDzCV4ArtVxmWN%*sNrbxX^WTM8Jl9`UB85H5@VIYAIcci6_)pw+k)M( zu<_`%f>2>kX%%(Gh3_(J9Z18Z-3!ZmiZ+q4n#%CqkPL$;YRiQM&3k;MCtH)B(Kp-bbs3666rN~BOIfH+R?2~5q7 zOb%I)yy?Q2FqvH)IR&Fc8Z}gD9ow9noU_b)71f{%mg)+j1T4sb0DjUaUm5p{u*@pT(%^^Obe!SY z(Rix$VeIwImf&V5ol)4G9tz;+P4eXtcJBS4G&7_6ICEVaolc*5^zrTO;|@BbvzLd? zp4QEt&!!YVhgNPfT^3KD?u!lFBJPaZC!Zrbs$X6|+SWh3D5>PG(RUE-c|GJ#<6q#!waHfn#|2Kbav{&&_H`jZJ@jaEXcu~!QrlxGbwS+woAp@ zlB^bg9s1uvY~NY|FP9hDFyGiviN_*|$0CWxB8kT$$zM3Jf;qYXF&+Q_002ovPDHLk FV1g{1qqG13 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 f5994b8159c153beb2b211120662c4c80befa323..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1754 zcmbtV>01&895(YlNfB-3L7IkuN6Y0gB^gddMU$*NvJ4ILK+T(lI-2FJscA8fJQKwO zSxwEO2*b<+nn`(~ZB9fKkI?0jbAQ90=RLl>U*6~WJ-;{83*)S+^o^2~l$5Hg3(EVz zga4y~^nvcDNgtMylB;q>IbKLQv^?b>0rb(4UuE!oAH#c;U~&q^Kh8S3=K#0>9FXMo zL&J}*044G*ZpLi3B{H*LSrM#pq&S;}sxYvWd76nj(&XcEJFNsoaEOK&ydxz3ZuguK zyL+SFu6(-u(KOClyKqBY-GXuRNnZ;8cl=0%f=Q995%vnR+k6(2#X6DkKQN%1Rwon) zuDP%couk*3(O-|A6RdUZ3TBu4G`RG0!kS(|<8)dHZ@2|WGA<-;jH|sI zQ?#y-vez?Szku2tk7D$q~hEGb6VMP?oR+*%}$alIPWrtl`m`DkcTTXpSD_uryj{g)qiF?t-JzXe+Pc*xOi)%_}u1 zR?sV~3k>5_L~*1K8S^eV=>&DoY<(GpaBBg_XtyBx#v2_O-Wi8V)>u{1{ClSGdQ=JW zH@c`tCj4e#e<3;mg3@|B@y5=l9~0;VX=Z-vJ+lhG1MIjNMEx5}3)}o2iY|ATor@eJ zq8mypVEeYA?c}rU_Y`5GWuuxFZ0Sv?6J%jJCm(p5dR*68L`7#Oprtvnlk> z-o)d7*sslrE_)>^k&D@X<;t)7Je?bBn6W(HTxXbmDhT5Ec_c~F10CdltX>ch5N%)y z@+38^E2^Hl-U@*qD}>))bU z?$9m7_H}s_ZwjHT?okbLBYRnN(?BLP*KFWE5 zILqS6cx7&=UiODyA-J0Al+OcgmBAxaIXzE5YecXtH6EXvxgwFaj)6u_Y4IqMkYR|~ z!O4N*_{6IasFyEqI62j`nM>-f1vtYDKE!`y?1%*E!;g+#(#-beu{|CQ%uaMORh3`w znrt;j_6&XjZ%OP!^QHtwavJ=^-e2{?REGR4!cRAa!&FDVi^zFA{l{1czF4_G(8;~v zCF;}jkpNrO7g3`98e>pJBBFBp)AzIf)uH0Jc;BjCn(lVBmZR;1-Dg<0`W$bS#{qig z(~_kMEp>!d(H-smQM{Eir*~1f{w+GHk*2SCm}*$=cijSTrd9>@O8IBr=1FzB*!k<_ z0TFxj3Du2Q96ORC5_^(jQEqjr5Zxdg_T`i;OGg+!UqSfC4rdN-Gw|@b`mIXqTypBt z#cj^qu9sZNW#TD?)Vt6oKvHQyk9f-x{V)WPMNU`R3++Y(>K?aEvM$AL&=u5F`T9X@ z`Dq$gPV)X4Bb*-|`!HGYm-M0JzSO(h>-i>_U*dpye)4Z0iGnwh-i)+(PU_g+li2Q zZP9medHJqHdpQMoMEPBSwp~ZU3b`2}3HaumgQv<`^qM0HKEsvF588Ml&T-wmU@ozd zB2E_@L_nmhGl$n1phAWRBbl^@?-O0NZHnInqDzg;K(&h7G0Riqk!(zv`Fgu@qmkED zXs=)-Y@6v^|E@!?if&*mE#GvzM^7;vjAytvyqFOQJlEa{W`HJN$;6(-J* nx?7nCpZO%l2;}&G@b&PC1n|%_?t0+CW=Xj^VNfl|Yvg|c8_G{! 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 a8c6e99664718f6dbd98763a9cd0f3e74d0f9729..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 907 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 M07*qoM6N<$f*&<*I{*Lx 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 1bad46bab62018401a7e86a10dd837d9c65bc85e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2568 zcmcJR=RX^Y8pn;=QCg&_5j{$^(X=AernPERQ3QzkM{wyv_2v|%ZyKT6iG5-wi4Cs6iEm?0l( z>#7rTkK)uE!Z5*x4fMva=i+)Nzv=WE&vDOmgshK)cbOkKd5zUyHQ{hUt@~f5clbZK zoDs9Sd^*)#6;x@h>G#~XQ>8uGl6WfR#ChQVsL?YkV0ZQzW{3AIK|q%x@vF8@z$ro+ z_7#&!a*q8=DRk{T>2!U**d@)uTyGhzvH=*P-;baE$|d7gpmWpg4^THGp;lz{x9xt0{Md~Dm`&4vJhS6EN1|6QH(9_(Vh)()m%x>$TG-wVr^7m z%^-JsPTEwI)Z#)pC?f{d|6(w|Wrf|Poux$Jkli+FzS(w7iGv#|(GoWUT)tEKxq@NZ zTw!QZP7f5CA=QVxiFWFsO05X~$icur{iu-6q~NXGZ%m(7FXS z`&MZunqWD>1Wx&v2>kiFLa&g7ws+6Xg7f=wpgnunB~FMi;w3cpT*yi?ING6C-AK~N ztVX1)Kh%s;@JpCFk5^;zxXrr&^fM*Pm!(w^4xk)y9^=Co(=sm`>i*9&Ix9((wv+d< z2gv5D*yaG$FeceReyObZ{24q zV|>>GBVw#vWuxq3jf7_qqSp|dua$-^xS-u-vvjCo2LWyJ?St|PdcWRs=6ky7r;Buz z@z$3MO*-^P-RIm1Jed{gy+(+X zd5GC%wAO2DGyp{-cw&AwW6*c49U{o4JyL_T{wxbh(y><14r(mdTRQ|QLH{L@ zHHaSQI+u~9B>Otmyg});{9+J#zvX2*P+I7iI?OX9EVdLM9x`-U_}l6}a!L_ZQx%5TPQxGQ4Mh6EygO9kk$a4fb) zmV>Grn>UGiSRik()x-H2#U?4ZJw}xepuL&Wf{YLAngu@jle(V+vXtHTm#|YQZ(5}V z_r~Gj&C$~-fA=mC2m#R#9~|&fkj00!LR~JPyQ-)09AkWqedkNrK5HWSz#z5Vm3;GR z=4i^LJi#cKRX=kQtkqgT2Q#(tyJ>9jJAW%VK=mJX%md!WeB;NQNEguDMC0C9Yz~nh zqu1-#*(*vy*FoU}EU+28xFN4gt6$RL=PF>*(dDHK?H2sdH}gsH+5E=m*Ff$V_hl*X zutY8HaA-`-!EjKsbEWQQmo6=M`Lp^~5)7E8R%a6R!$B&%=@06B5;$(>7pbI1_0TnE zDeo(l4t@P62l8T>O+o1zQP!}YTjZfC&*{q}tyKH;JBQ#l@*)z~3aGui?H!B>^FE z)uwlEJ=${l@n%uh6(%nbTVyl;@VT@`tkctvTl&}Zk1~tY<2f%46TJow1(U`G(ai}* zV*nmF^JBT%MKH$=zcRm4V*Wtj<=;3%>W_7{N=|Q1*?GS*;$4 zht)hKkmrcRo-@>R)Lv+W0`{&8IPPw&hW?)37hlOtrq9xlhIj>7-f%JbeHUITT aJgK_gk Date: Mon, 8 Aug 2022 20:41:52 +0800 Subject: [PATCH 3/5] add some comments --- lib/src/ios.dart | 9 +++++++++ lib/utils/template.dart | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/src/ios.dart b/lib/src/ios.dart index 97a11cc..02c725b 100644 --- a/lib/src/ios.dart +++ b/lib/src/ios.dart @@ -13,6 +13,15 @@ class IosContents { }; } +/// 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] is an array of integers indicating the different scales 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, diff --git a/lib/utils/template.dart b/lib/utils/template.dart index 642bf6c..fc1be24 100644 --- a/lib/utils/template.dart +++ b/lib/utils/template.dart @@ -33,7 +33,7 @@ class IosIconTemplate { /// 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 + /// The targeted display scale for the image, currently one of {1, 2, 3} final int scale; /// Icon file name From 26cc728b1c439e3e41bb8a0f9aed029496693c69 Mon Sep 17 00:00:00 2001 From: Linus Wong Date: Tue, 9 Aug 2022 21:29:00 +0800 Subject: [PATCH 4/5] More comments, skip writing the same file, reorder json lines --- .../devAppIcon.appiconset/Contents.json | 118 ++++++------- .../prodAppIcon.appiconset/Contents.json | 118 ++++++------- .../AppIcon.appiconset/Contents.json | 162 +++++++++--------- lib/src/ios.dart | 17 +- lib/utils/template.dart | 8 +- 5 files changed, 217 insertions(+), 206 deletions(-) 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 52b3a79..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": [ { - "size": "20x20", - "idiom": "iphone", "filename": "Icon-App-20x20@2x.png", - "scale": "2x" + "idiom": "iphone", + "scale": "2x", + "size": "20x20" }, { - "size": "20x20", - "idiom": "iphone", "filename": "Icon-App-20x20@3x.png", - "scale": "3x" + "idiom": "iphone", + "scale": "3x", + "size": "20x20" }, { - "size": "29x29", - "idiom": "iphone", "filename": "Icon-App-29x29@1x.png", - "scale": "1x" + "idiom": "iphone", + "scale": "1x", + "size": "29x29" }, { - "size": "29x29", - "idiom": "iphone", "filename": "Icon-App-29x29@2x.png", - "scale": "2x" + "idiom": "iphone", + "scale": "2x", + "size": "29x29" }, { - "size": "29x29", - "idiom": "iphone", "filename": "Icon-App-29x29@3x.png", - "scale": "3x" + "idiom": "iphone", + "scale": "3x", + "size": "29x29" }, { - "size": "40x40", - "idiom": "iphone", "filename": "Icon-App-40x40@2x.png", - "scale": "2x" + "idiom": "iphone", + "scale": "2x", + "size": "40x40" }, { - "size": "40x40", - "idiom": "iphone", "filename": "Icon-App-40x40@3x.png", - "scale": "3x" + "idiom": "iphone", + "scale": "3x", + "size": "40x40" }, { - "size": "60x60", - "idiom": "iphone", "filename": "Icon-App-60x60@2x.png", - "scale": "2x" + "idiom": "iphone", + "scale": "2x", + "size": "60x60" }, { - "size": "60x60", - "idiom": "iphone", "filename": "Icon-App-60x60@3x.png", - "scale": "3x" + "idiom": "iphone", + "scale": "3x", + "size": "60x60" }, { - "size": "20x20", - "idiom": "ipad", "filename": "Icon-App-20x20@1x.png", - "scale": "1x" + "idiom": "ipad", + "scale": "1x", + "size": "20x20" }, { - "size": "20x20", - "idiom": "ipad", "filename": "Icon-App-20x20@2x.png", - "scale": "2x" + "idiom": "ipad", + "scale": "2x", + "size": "20x20" }, { - "size": "29x29", - "idiom": "ipad", "filename": "Icon-App-29x29@1x.png", - "scale": "1x" + "idiom": "ipad", + "scale": "1x", + "size": "29x29" }, { - "size": "29x29", - "idiom": "ipad", "filename": "Icon-App-29x29@2x.png", - "scale": "2x" + "idiom": "ipad", + "scale": "2x", + "size": "29x29" }, { - "size": "40x40", - "idiom": "ipad", "filename": "Icon-App-40x40@1x.png", - "scale": "1x" + "idiom": "ipad", + "scale": "1x", + "size": "40x40" }, { - "size": "40x40", - "idiom": "ipad", "filename": "Icon-App-40x40@2x.png", - "scale": "2x" + "idiom": "ipad", + "scale": "2x", + "size": "40x40" }, { - "size": "76x76", - "idiom": "ipad", "filename": "Icon-App-76x76@1x.png", - "scale": "1x" + "idiom": "ipad", + "scale": "1x", + "size": "76x76" }, { - "size": "76x76", - "idiom": "ipad", "filename": "Icon-App-76x76@2x.png", - "scale": "2x" + "idiom": "ipad", + "scale": "2x", + "size": "76x76" }, { - "size": "83.5x83.5", - "idiom": "ipad", "filename": "Icon-App-83.5x83.5@2x.png", - "scale": "2x" + "idiom": "ipad", + "scale": "2x", + "size": "83.5x83.5" }, { - "size": "1024x1024", - "idiom": "ios-marketing", "filename": "Icon-App-1024x1024@1x.png", - "scale": "1x" + "idiom": "ios-marketing", + "scale": "1x", + "size": "1024x1024" } ], "info": { - "version": 1, - "author": "icons_launcher" + "author": "icons_launcher", + "version": 1 } } \ No newline at end of file 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 52b3a79..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": [ { - "size": "20x20", - "idiom": "iphone", "filename": "Icon-App-20x20@2x.png", - "scale": "2x" + "idiom": "iphone", + "scale": "2x", + "size": "20x20" }, { - "size": "20x20", - "idiom": "iphone", "filename": "Icon-App-20x20@3x.png", - "scale": "3x" + "idiom": "iphone", + "scale": "3x", + "size": "20x20" }, { - "size": "29x29", - "idiom": "iphone", "filename": "Icon-App-29x29@1x.png", - "scale": "1x" + "idiom": "iphone", + "scale": "1x", + "size": "29x29" }, { - "size": "29x29", - "idiom": "iphone", "filename": "Icon-App-29x29@2x.png", - "scale": "2x" + "idiom": "iphone", + "scale": "2x", + "size": "29x29" }, { - "size": "29x29", - "idiom": "iphone", "filename": "Icon-App-29x29@3x.png", - "scale": "3x" + "idiom": "iphone", + "scale": "3x", + "size": "29x29" }, { - "size": "40x40", - "idiom": "iphone", "filename": "Icon-App-40x40@2x.png", - "scale": "2x" + "idiom": "iphone", + "scale": "2x", + "size": "40x40" }, { - "size": "40x40", - "idiom": "iphone", "filename": "Icon-App-40x40@3x.png", - "scale": "3x" + "idiom": "iphone", + "scale": "3x", + "size": "40x40" }, { - "size": "60x60", - "idiom": "iphone", "filename": "Icon-App-60x60@2x.png", - "scale": "2x" + "idiom": "iphone", + "scale": "2x", + "size": "60x60" }, { - "size": "60x60", - "idiom": "iphone", "filename": "Icon-App-60x60@3x.png", - "scale": "3x" + "idiom": "iphone", + "scale": "3x", + "size": "60x60" }, { - "size": "20x20", - "idiom": "ipad", "filename": "Icon-App-20x20@1x.png", - "scale": "1x" + "idiom": "ipad", + "scale": "1x", + "size": "20x20" }, { - "size": "20x20", - "idiom": "ipad", "filename": "Icon-App-20x20@2x.png", - "scale": "2x" + "idiom": "ipad", + "scale": "2x", + "size": "20x20" }, { - "size": "29x29", - "idiom": "ipad", "filename": "Icon-App-29x29@1x.png", - "scale": "1x" + "idiom": "ipad", + "scale": "1x", + "size": "29x29" }, { - "size": "29x29", - "idiom": "ipad", "filename": "Icon-App-29x29@2x.png", - "scale": "2x" + "idiom": "ipad", + "scale": "2x", + "size": "29x29" }, { - "size": "40x40", - "idiom": "ipad", "filename": "Icon-App-40x40@1x.png", - "scale": "1x" + "idiom": "ipad", + "scale": "1x", + "size": "40x40" }, { - "size": "40x40", - "idiom": "ipad", "filename": "Icon-App-40x40@2x.png", - "scale": "2x" + "idiom": "ipad", + "scale": "2x", + "size": "40x40" }, { - "size": "76x76", - "idiom": "ipad", "filename": "Icon-App-76x76@1x.png", - "scale": "1x" + "idiom": "ipad", + "scale": "1x", + "size": "76x76" }, { - "size": "76x76", - "idiom": "ipad", "filename": "Icon-App-76x76@2x.png", - "scale": "2x" + "idiom": "ipad", + "scale": "2x", + "size": "76x76" }, { - "size": "83.5x83.5", - "idiom": "ipad", "filename": "Icon-App-83.5x83.5@2x.png", - "scale": "2x" + "idiom": "ipad", + "scale": "2x", + "size": "83.5x83.5" }, { - "size": "1024x1024", - "idiom": "ios-marketing", "filename": "Icon-App-1024x1024@1x.png", - "scale": "1x" + "idiom": "ios-marketing", + "scale": "1x", + "size": "1024x1024" } ], "info": { - "version": 1, - "author": "icons_launcher" + "author": "icons_launcher", + "version": 1 } } \ No newline at end of file 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 5361129..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": [ { - "filename" : "Icon-App-20x20@2x.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "20x20" + "filename": "Icon-App-20x20@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "20x20" }, { - "filename" : "Icon-App-20x20@3x.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "20x20" + "filename": "Icon-App-20x20@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "20x20" }, { - "filename" : "Icon-App-29x29@1x.png", - "idiom" : "iphone", - "scale" : "1x", - "size" : "29x29" + "filename": "Icon-App-29x29@1x.png", + "idiom": "iphone", + "scale": "1x", + "size": "29x29" }, { - "filename" : "Icon-App-29x29@2x.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "29x29" + "filename": "Icon-App-29x29@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "29x29" }, { - "filename" : "Icon-App-29x29@3x.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "29x29" + "filename": "Icon-App-29x29@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "29x29" }, { - "filename" : "Icon-App-40x40@2x.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "40x40" + "filename": "Icon-App-40x40@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "40x40" }, { - "filename" : "Icon-App-40x40@3x.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "40x40" + "filename": "Icon-App-40x40@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "40x40" }, { - "filename" : "Icon-App-60x60@2x.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "60x60" + "filename": "Icon-App-60x60@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "60x60" }, { - "filename" : "Icon-App-60x60@3x.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "60x60" + "filename": "Icon-App-60x60@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "60x60" }, { - "filename" : "Icon-App-20x20@1x.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "20x20" + "filename": "Icon-App-20x20@1x.png", + "idiom": "ipad", + "scale": "1x", + "size": "20x20" }, { - "filename" : "Icon-App-20x20@2x.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "20x20" + "filename": "Icon-App-20x20@2x.png", + "idiom": "ipad", + "scale": "2x", + "size": "20x20" }, { - "filename" : "Icon-App-29x29@1x.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "29x29" + "filename": "Icon-App-29x29@1x.png", + "idiom": "ipad", + "scale": "1x", + "size": "29x29" }, { - "filename" : "Icon-App-29x29@2x.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "29x29" + "filename": "Icon-App-29x29@2x.png", + "idiom": "ipad", + "scale": "2x", + "size": "29x29" }, { - "filename" : "Icon-App-40x40@1x.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "40x40" + "filename": "Icon-App-40x40@1x.png", + "idiom": "ipad", + "scale": "1x", + "size": "40x40" }, { - "filename" : "Icon-App-40x40@2x.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "40x40" + "filename": "Icon-App-40x40@2x.png", + "idiom": "ipad", + "scale": "2x", + "size": "40x40" }, { - "filename" : "Icon-App-76x76@1x.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "76x76" + "filename": "Icon-App-76x76@1x.png", + "idiom": "ipad", + "scale": "1x", + "size": "76x76" }, { - "filename" : "Icon-App-76x76@2x.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "76x76" + "filename": "Icon-App-76x76@2x.png", + "idiom": "ipad", + "scale": "2x", + "size": "76x76" }, { - "filename" : "Icon-App-83.5x83.5@2x.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "83.5x83.5" + "filename": "Icon-App-83.5x83.5@2x.png", + "idiom": "ipad", + "scale": "2x", + "size": "83.5x83.5" }, { - "filename" : "Icon-App-1024x1024@1x.png", - "idiom" : "ios-marketing", - "scale" : "1x", - "size" : "1024x1024" + "filename": "Icon-App-1024x1024@1x.png", + "idiom": "ios-marketing", + "scale": "1x", + "size": "1024x1024" } ], - "info" : { - "author" : "xcode", - "version" : 1 + "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 02c725b..7a7cfba 100644 --- a/lib/src/ios.dart +++ b/lib/src/ios.dart @@ -1,15 +1,19 @@ 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 +/// Wrapper to allow generation of the Contents.json file used by the Asset +/// Catalog "App Icon Type": +/// https://developer.apple.com/library/archive/documentation/Xcode/Reference/xcode_ref-Asset_Catalog_Format/AppIconType.html class IosContents { + /// Provide a list of [images] to be created in your Asset set. const IosContents({required this.images}); + /// The meta data for each asset file to create. final List images; + /// For use with a [JsonEncoder] to generate this Asset's Contents.json file. Map toJson() => { 'images': images.map((image) => image.toJson()).toList(), - 'info': {'version': 1, 'author': 'icons_launcher'} + 'info': {'author': 'icons_launcher', 'version': 1} }; } @@ -79,8 +83,13 @@ void _createIosIcons({required String imagePath}) { //..._createIosTemplates(size: 72, scales: [1, 2], idiom: 'ipad'), ]; + final filenames = {}; for (final template in iosIcons) { - _saveImageIos(template, image); + // Multiple idioms 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); + } } _saveContentsJson(IosContents(images: iosIcons)); diff --git a/lib/utils/template.dart b/lib/utils/template.dart index fc1be24..ecd843c 100644 --- a/lib/utils/template.dart +++ b/lib/utils/template.dart @@ -39,11 +39,13 @@ class IosIconTemplate { /// Icon file name String get filename => '$IOS_DEFAULT_ICON_NAME-$sizeName@${scale}x.png'; + /// Used to encode the attributes for this asset file in a corresponding + /// Asset's Contents.json file. Map toJson() => { - 'size': sizeName, - 'idiom': idiom, 'filename': filename, - 'scale': '${scale}x' + 'idiom': idiom, + 'scale': '${scale}x', + 'size': sizeName }; } From 45452aefd151aec8d502f028f8dc7b587cc2d44d Mon Sep 17 00:00:00 2001 From: Linus Wong Date: Wed, 10 Aug 2022 00:21:59 +0800 Subject: [PATCH 5/5] generate Contents.json for mac app icons --- example/flavor_app/icons_launcher-dev.yaml | 2 +- example/flavor_app/icons_launcher-prod.yaml | 2 +- .../AppIcon.appiconset/Contents.json | 90 +++++++++--------- .../AppIcon.appiconset/app_icon_1024.png | Bin 46993 -> 35866 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 3276 -> 3005 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 1429 -> 426 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 5933 -> 6306 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 1243 -> 751 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 14800 -> 15291 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 1874 -> 1515 bytes .../Runner/Assets.xcassets/Contents.json | 6 ++ example/simple_app/icons_launcher.yaml | 2 +- .../AppIcon.appiconset/Contents.json | 90 +++++++++--------- lib/cli_commands.dart | 2 - lib/src/ios.dart | 34 ++----- lib/src/macos.dart | 43 ++++++--- lib/utils/template.dart | 78 ++++++++++++--- 17 files changed, 204 insertions(+), 145 deletions(-) create mode 100644 example/flavor_app/macos/Runner/Assets.xcassets/Contents.json 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/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 3c4935a7ca84f0976aca34b7f2895d65fb94d1ea..d119f4c9c61527e57898622f1c235dc511e0d1a3 100644 GIT binary patch literal 35866 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%0D|0j!QEE1j`9W`r zAw4iK{}iAPYng8GX&!28?sO065gjS~vIIH8F$8D=zWC;dr}rODYi1uvY)jkTd%a91 zI?QA#a)d1!4EDj{5ItBe$n2BfVg}aX4V1AW@SB);N-*W{b zIb@akRNnyHhC62nA!Oxc{YtxM|O%rE!YGM)N&yGX`R0DS6 z?;(yj`EDffFx~#C0qxJj>WtbE&xDg`wJ`Fyk@wMW&m#AONGz9HA7hwg-8=1|EvBP| zw1M(_&m|FcBhEgP=z-12EhfJOAtIQ z%r>R-jI}W9b}y!V9A)DdPRZh^BKef}eb&?|Lud6L!i#fE+ElT|hQV_Hwx3r)tW)Qg z#i)FK&>WL`6zDeMzrJCCq92s)Rf7H!Mp~1&cjw+f|7P@xEkQl^45GgHoPbvR zXV(U8F-sJGG1CT|Ip)nr-g1$&u0r)-w0M}M#6%cqYDESZ6SXYCrXfKHv6@M@~P$};QnJ&HyS|E=%kI&Z_wMp^xmEfKANF^ovgC1rV?d0c=Eo6%T$jrSW znzfm`rR^78kB_WynbaSwbuc>Wg`2}_8#|miZE-pw9>-W8@W0G=e$SZ`K!O^1`zkgV zfW6Vq+s7ZQ0lH%c(2j^6PNO+B4{0{pjIdzR>-oqA&ZL_Tz~;x(jE)gcd-o6}*gcu= zI}sd{Mw7Z^=jGEA@oFuOXx2%en2aN%_ba%m(|+e!oXe~`10`C(^6{My4N!Adpn6b6 zT0Oymj~the^3R(DMyo8mnPxCw&`{YpDOlt~t2hQqADQ}`H`ozBcjn@9WaR-i;f{D{ z>-+2I#vnErn68njDZgy+HIA~p^+5*l23G0$^^Bc4A&@!{dCgU<(=&25{Q(=rjZ}DV zsdvPvI2&RcrCWJBgpIP|d6a{Rw6yJYvvDyWwhAF8NnFLIfWBr0Nnd*wr){=t|Igwb zK+L1FX*9wM8a=HVm602?+QLVUz7!>V&Pt@UxzOA!Q6`lZ(LD6(eaj6X*W8EA?232; z2a`mKdEy%R0V{hx@(O1(Y%YFQa{rQ#O@-;Hv{xgZ{ukv{iVP@Hz{~aT2zi|>bZgL+ z1Bs(eCH=&TL(fkMAp9@5ii1|2=EK7hx~bf_Z@f1aK$6?lJW6P5XkTF`jndhxXv;^& z?Z`1w>M4y4;fp$ys2XCqYU0E6LdPsk7$BMB#0Nt(Y($bK&5ml^#6mTAac3wt0*F*I zPdqSyyPs(DBCq0XS~~$N&HU literal 46993 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 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 ed4cc16421680a50164ba74381b4b35ceaa0ccfc..7e9d0da43f3751811d96cee59eb45dcce1b9c061 100644 GIT binary patch delta 3000 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 ujPHFtJw07*ZEY8tnwtIr6?@p|2mK#;Af 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 FV1jIdyJG+V literal 1429 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>GbI`Jdw*pGcA%L+*Q#&*YQOJ$_%U#(BDn``;rKxi&&)LfRxIZ*98z8UWRslDo@Xu)QVh}rB>bKwe@Bjzwg%m$hd zG)gFMgHZlPxGcm3paLLb44yHI|Ag0wdp!_yD5R<|B29Ui~27`?vfy#ktk_KyHWMDA42{J=Uq-o}i z*%kZ@45mQ-Rw?0?K+z{&5KFc}xc5Q%1PFAbL_xCmpj?JNAm>L6SjrCMpiK}5LG0ZE zO>_%)r1c48n{Iv*t(u1=&kH zeO=ifbFy+6aSK)V_5t;NKhE#$Iz=+Oii|KDJ}W>g}0%`Svgra*tnS6TRU4iTH*e=dj~I` zym|EM*}I1?pT2#3`oZ(|3I-Y$DkeHMN=8~%YSR?;>=X?(Emci*ZIz9+t<|S1>hE8$ zVa1LmTh{DZv}x6@Wz!a}+qZDz%AHHMuHCzM^XlEpr!QPzf9QzkS_0!&1MPx*ICxe}RFdTH+c}l9E`G zYL#4+3Zxi}3=A!G4S>ir#L(2r)WFKnP}jiR%D`ZOPH`@ZhTQy=%(P0}8ZH)|z6jL7 N;OXk;vd$@?2>?>Ex^Vyi 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 bcbf36df2f2aaaa0a63c7dabc94e600184229d0d..a0a06e72f22770db3868e5e0334183f80640987a 100644 GIT binary patch literal 6306 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 S$AKw=jvcW-Tx#hN^M3$opYtRD literal 14800 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 AaR2}S delta 1860 zcmZ{lX;c#U7Qp`?xC?HG8UsQ$Ws2gOnvxnuj+&TT)|B9qX*oJ-32u;y*`u=5$|cu2 zZgUi8G_^zoml@9)lS-Y*r3NZ@N6AXDae2(g_u-v;@44sv?)`nZpYD>@E5x0>YygY( z^!Ehd=K`%Q1{?rj7IpljKLF|90>H@y;HwgG<^i}&0$`C2fNKc==%k0w0^O7Y)kt3| z1?>JC)jjn^N}`c;JUj&eErWjx0?Hm5E1_DdkH5Ftdkwg{otA#at=me`(}&_2%$$6~ zE??yZhZz5ML{c$rP$1^2?PsuW>6Q!=t>XZ5iihcbqpydeZ8!U9D-e(}(9iWmTrE zq*S_x&4Vf1bo7hKh4_$l6{HGkIMI~tm$l<`0>j1AkI-C&jhzeFO~kbbNTykz(YRv6 zVc8)Gb3o(WM0GRNLBxk4ppt#5{{)H3p@4d~`Zm8ZK>Ib*Uxgpdeb#`N%_ zWvs?NBwVEO;g>u<>)b0uhF+f2dhWU6aM<#2@-UCoj>nMgAy;A?rl@SLgu*$vRU0lY zckwvxN}FTtCuA-{OXN9^vFlZo+<*`cNzz#|zYmJEh{^e}kBkrmFGTep)zp)!@$Zw7 z;VNS+VTfV?-ugw5pg7d-iy;R>a-<18IC`UK|F<5+wm5TcfTCWtDj&$&vfNfLs>+F4 zx+rq(M$q*{9}e4G=5A%6cnvkz`AfPzERE8*b8oKbc=9EylkR4Vk49AA%CqY#`K6a( z%F8Z#)gjmpDojy*=rW`?*W410IJj6owHqcCN2*gAKMXM6b)v9d1d$Q>VAs-iN57h8 zYkw`r#6S=w71v{>VV#LFK2a*Wi$l{V|M_((D*(E~rp}kqycT8$>Q<5<0_l^%$YT@* zR?4EIi0Ioxkg$7O4`>!FM|nQyLsKWiq*5&tE$`?fhvk38vbK*Up<7hCuNFqA^twrf zPU7A@nmCVX`M9IhQJP6RvK^n}HGDbedDDmy`E%!1@3Uj$pU@X^59P1-cz|d?V7dXxAref_1okvpGbDqoU}&_cT$e>yul!<3WX7Qk06J^W$)qyB^o z{j##v!YkVoCScZbywzrSQCQf4W@D{FuT3qrwS|cA^fu}!jX7;wu(UaIwr_hwofU@^ z+yjn!HxbMmx+X%^mw)d2+)aqqNhE@?xdk1U3u{1n+BC#>r8AHH{l)-~+E4(sb*FCcQN znzht3_9)7TiMMlurFd~dvT7z$ej6w7KY1wPDp%9$cP$rc3pC>u=Xz?#kbo1A7u#dw z!Dxc9rzFJXU|Ly{=FxIHcpY@#dtbJ6fZq0op7GPgm~m`9u6`*CLAs8Q_SUm zGU{VKxk^gA6c!16%+`bSS_*3J`^FgvAeE&bYo*RM1Pu5JDb{>rgIjTfWHZxCS@BOe zb~1)W_SV_~doE!pl7j$h!B22ajPhdj8)P`B{N7YkS8$~vB9zxkVqO2}`^XQ?lR7u- zJ$44}tg*~pOrmi&-}BS%11EyRxIw%eO)dGxCRF^5C)@kQ?BjX!*0AvkgA4w-!A{@p z%-dt!cox=~AGcy=e=yR82Ufp3lVw6XTV?>BbqwMVjei?Ddee-9zLXeHN~*g0tLCh2 z)82=ozW)j7hnnuksPfXaJ?sdN?O=Wx?<}iiW_^7F=AFGy2QD!%&*vIGR4n3OjoI_< z9y&eO_>R3Wuri`w9SGxw4yl4gS(@S4n zih4Jh7*%vAQ9Bf4vYy-;F*DKKoMXFxtfdWwXBXk=r&ld;-6YM^yZPeLyBr%%qr*9VE-^&e_(Gt_)1y9g5$54^Q+2}{B6N&0)SO`CxlItqW-=wHXT}<$_JhtBJ8FBKcA9C_+2wOS$?M}R4|#Lc69Uy z??7+P-Y&jmDK?|5Z|=LL@2EG1%78 u)sf_CYfB^@awUJ?FoA9ziVt 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/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/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/cli_commands.dart b/lib/cli_commands.dart index b0b1f97..f39d880 100644 --- a/lib/cli_commands.dart +++ b/lib/cli_commands.dart @@ -1,7 +1,5 @@ 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 7a7cfba..8474b21 100644 --- a/lib/src/ios.dart +++ b/lib/src/ios.dart @@ -1,29 +1,11 @@ part of icons_launcher_cli; -/// Wrapper to allow generation of the Contents.json file used by the Asset -/// Catalog "App Icon Type": -/// https://developer.apple.com/library/archive/documentation/Xcode/Reference/xcode_ref-Asset_Catalog_Format/AppIconType.html -class IosContents { - /// Provide a list of [images] to be created in your Asset set. - const IosContents({required this.images}); - - /// The meta data for each asset file to create. - final List images; - - /// 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} - }; -} - /// 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] is an array of integers indicating the different scales for which -/// we will generate images. +/// [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( @@ -85,14 +67,17 @@ void _createIosIcons({required String imagePath}) { final filenames = {}; for (final template in iosIcons) { - // Multiple idioms can use the same file, so check if we already created it. + // 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); } } - _saveContentsJson(IosContents(images: iosIcons)); + AppleAppIconType( + images: iosIcons, assetPath: _flavorHelper.iOSAssetsAppIconFolder) + .saveContentsJson(); CliLogger.success('Generated app icon images', level: CliLoggerLevel.two); } @@ -103,10 +88,3 @@ void _saveImageIos(IosIconTemplate template, Icon image) { '${_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/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 ecd843c..a17d0bc 100644 --- a/lib/utils/template.dart +++ b/lib/utils/template.dart @@ -1,3 +1,6 @@ +import 'dart:convert'; +import 'dart:io'; + import 'package:icons_launcher/utils/constants.dart'; /// Android template @@ -12,12 +15,12 @@ class AndroidMipMapIconTemplate { final int size; } -/// iOS template +/// 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 -class IosIconTemplate { +abstract class AppleIconTemplate { /// Constructor - IosIconTemplate( + AppleIconTemplate( {required this.sizeName, required this.scaledSize, required this.scale, @@ -37,11 +40,27 @@ class IosIconTemplate { final int scale; /// Icon file name - String get filename => '$IOS_DEFAULT_ICON_NAME-$sizeName@${scale}x.png'; + String get filename; /// Used to encode the attributes for this asset file in a corresponding /// Asset's Contents.json file. - Map toJson() => { + 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', @@ -62,15 +81,24 @@ class WebIconTemplate { } /// MacOS template -class MacOSIconTemplate { +class MacOSIconTemplate extends AppleIconTemplate { /// Constructor - MacOSIconTemplate({required this.size, required this.name}); + MacOSIconTemplate( + {required super.sizeName, + required super.scaledSize, + required super.scale, + required super.idiom}); - /// Icon name - final String name; + @override + String get filename => '${MACOS_DEFAULT_ICON_NAME}_$scaledSize.png'; - /// Icon size - final int size; + @override + Map toJson() => { + 'filename': filename, + 'idiom': 'mac', + 'scale': '${scale}x', + 'size': sizeName + }; } /// Windows template @@ -96,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); + } +}