From 32a5739d703dcdb288f367ecba447d09734b3643 Mon Sep 17 00:00:00 2001 From: LucaCappelletti94 Date: Mon, 26 Oct 2026 16:26:42 +0100 Subject: [PATCH 1/2] Give the winit and Tauri Android examples the brand launcher icon --- .github/workflows/ci.yml | 2 ++ assets/brand/icon-android-foreground.svg | 13 +++++++++++++ assets/brand/render.sh | 15 ++++++++++++++- assets/brand/tauri-icon.json | 5 +++++ assets/brand/variants.py | 3 +++ examples/tauri/.gitignore | 1 + .../android/app/src/main/AndroidManifest.xml | 2 +- .../main/res/mipmap-anydpi-v26/ic_launcher.xml | 5 +++++ .../app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 1437 bytes .../res/mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 2552 bytes .../app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 947 bytes .../res/mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 1715 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 1954 bytes .../res/mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 3485 bytes .../src/main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 2879 bytes .../res/mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 5102 bytes .../src/main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 3798 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 7074 bytes .../main/res/values/ic_launcher_background.xml | 5 +++++ 19 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 assets/brand/icon-android-foreground.svg create mode 100644 assets/brand/tauri-icon.json create mode 100644 examples/winit/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 examples/winit/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 examples/winit/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 examples/winit/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 examples/winit/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 examples/winit/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 examples/winit/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 examples/winit/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 examples/winit/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 examples/winit/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 examples/winit/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 examples/winit/android/app/src/main/res/values/ic_launcher_background.xml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 767fde9..f27764f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -436,6 +436,8 @@ jobs: run: | export NDK_HOME="$ANDROID_NDK_LATEST_HOME" cargo tauri android init --ci + # The generated project carries Tauri's launcher icon until `tauri icon` writes the brand's into it. + cargo tauri icon ../../assets/brand/tauri-icon.json cargo tauri android build --apk --debug --target x86_64 # Tauri's own files land in the plugin's copy of the module, never in the crate. test ! -e ../../android/.tauri diff --git a/assets/brand/icon-android-foreground.svg b/assets/brand/icon-android-foreground.svg new file mode 100644 index 0000000..796b38f --- /dev/null +++ b/assets/brand/icon-android-foreground.svg @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/assets/brand/render.sh b/assets/brand/render.sh index 54ea6a0..76c4c8c 100755 --- a/assets/brand/render.sh +++ b/assets/brand/render.sh @@ -29,4 +29,17 @@ done # iOS reads the home screen icon from this link and rounds its corners itself. rsvg-convert --width 180 --height 180 "$brand/icon.svg" --output "$public/icons/apple-touch-icon.png" -oxipng --quiet --opt max --strip safe "$brand"/png/*.png "$public"/icons/*.png +# The winit example's Android launcher icon, the adaptive foreground at 108dp and the square icon +# at 48dp that Android 7 shows, per density. +res=$brand/../../examples/winit/android/app/src/main/res +for density in mdpi:1 hdpi:1.5 xhdpi:2 xxhdpi:3 xxxhdpi:4; do + name=${density%%:*} + scale=${density#*:} + mkdir -p "$res/mipmap-$name" + foreground=$(python3 -c "print(round(108 * $scale))") + legacy=$(python3 -c "print(round(48 * $scale))") + rsvg-convert --width "$foreground" --height "$foreground" "$brand/icon-android-foreground.svg" --output "$res/mipmap-$name/ic_launcher_foreground.png" + rsvg-convert --width "$legacy" --height "$legacy" "$brand/icon.svg" --output "$res/mipmap-$name/ic_launcher.png" +done + +oxipng --quiet --opt max --strip safe "$brand"/png/*.png "$public"/icons/*.png "$res"/mipmap-*/*.png diff --git a/assets/brand/tauri-icon.json b/assets/brand/tauri-icon.json new file mode 100644 index 0000000..a956374 --- /dev/null +++ b/assets/brand/tauri-icon.json @@ -0,0 +1,5 @@ +{ + "default": "icon.svg", + "bg_color": "#0e1824", + "android_fg": "icon-android-foreground.svg" +} diff --git a/assets/brand/variants.py b/assets/brand/variants.py index 6218426..1d432d3 100644 --- a/assets/brand/variants.py +++ b/assets/brand/variants.py @@ -39,6 +39,9 @@ def svg(name, width, height, body, view_box=None): svg("icon-macos.svg", 1024, 1024, f'\n {placed(1024, 0.48)}') # A maskable web icon, full bleed, with the mark inside the 80% circle Android crops to. svg("icon-maskable.svg", 1024, 1024, f'\n {placed(1024, 0.56)}') +# The foreground layer of an Android adaptive icon, transparent on a 108dp canvas, with the mark +# inside the 66dp circle every launcher mask keeps. +svg("icon-android-foreground.svg", 1024, 1024, placed(1024, 0.46)) svg("favicon.svg", 64, 64, f'\n {placed(64, 0.78)}') svg( "social.svg", diff --git a/examples/tauri/.gitignore b/examples/tauri/.gitignore index af8350e..939d8cf 100644 --- a/examples/tauri/.gitignore +++ b/examples/tauri/.gitignore @@ -1,4 +1,5 @@ /target /gen +/icons /google-services.json /embedded.provisionprofile diff --git a/examples/winit/android/app/src/main/AndroidManifest.xml b/examples/winit/android/app/src/main/AndroidManifest.xml index 781b4f6..809bc00 100644 --- a/examples/winit/android/app/src/main/AndroidManifest.xml +++ b/examples/winit/android/app/src/main/AndroidManifest.xml @@ -1,7 +1,7 @@ - + + + + + diff --git a/examples/winit/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/winit/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..35c2eaf4bf366a7c691072949229ee73e33d621e GIT binary patch literal 1437 zcmV;O1!DS%P)$PNGn;I4!< zSK;~=_H>LjnDT!NAY^ltaB6_wWw2@u-kzUcJA6ouNgz@J!ulrvlRpiVP)3kD zfBd$f7I!ao8*Q13x#@u%z{BR%;P=a2N6i5c$U)}izg$z-cUfGL;KHJs zJoI?7(UiqJ`T4F3`nEG>aBJ+1S$?A-0f9)F11OenX!Q5>Y9|JjAi``#z7X>X%F-}7 zAE|`5n!M*u+Cf~PpQz_iMS=jpo1;jcGgegdxPd{0t!`j|Q1&1Q?X^5`ui`WlS5D@D z1>dydd3KtaXNkbUHqZ3+F=8@7q#XTyog#w;yU)fKr~7~<`LD)&z>-R+sO^Ls4A|>U-kVJxh$5a6 z^Q0i%X*$8MDn;&WO+7P(0~RTv((@BZ$|addSoAwv)VkYnpS zdN_UfZ)YN5vrSw#*+1B?cDgE#Dh!LlB1;@|=`zHmRa0_5l@M4>7rie0;jiS z@>o&LA9MI+pI-5aL1kQ*vrL?-AeYcNtbTM=pKIc`&BA?^`~KV-Cq%lz;c^)SUh2~=?WI@Le?1m2i&|ZPi%9&XHhvM$Q4E}d(@LK zAjotLTMThLsYR*$d}gwS%KYY)(LMiYJ8ziBnueNn0TTKJX+2+^vsCD!-C`XkTciqw z6o#D>bm%2o}v#H4b+F_=x8IDw}#!LchYkj~muc}uVeW%a* zW=KaEiPJvK_QYoyg<|on&f*mJd+PS28KaocSVCpXRR2-MI4ac2z?Mf@4M;%nk?ia> zs;F!>#9SR`Xn3nt^`cLA4;p(0b$3+f`iHLo{wFK}W&mt4(_0LfHQ@9h-R&8fVFA=r ztk@GKvC!#X;G6ad}6ddyXS^Av>q==K$fKqQ>;E>pie?JQUK?XR;z6loOWP*(KTf-MsaUi>tyN|sqFJC95#{XA_E%8 zpSgBKXvc-piE4$<6;Gw8L^$axFz)!(QvqSM&fc|C??qB@>&TdYWEvnO2-~K(2lSy1 zTIqAe_ph6u_8G%SDzL2{vc7b6ok)kkSyALpZSw40)QErt00i>8RG{P_;os9kSO^PY rAuNQ2un-o)LRbh3VIeGpRWkksp`o-)2Bj7500000NkvXXu0mjfF`B8n literal 0 HcmV?d00001 diff --git a/examples/winit/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/examples/winit/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..f9246102fec8cc894248d8de6ea4de51751cf27b GIT binary patch literal 2552 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 yA)Jxv1q~5xm15a|wQ@QcP?fM6a%J@IV@+sQ@ literal 0 HcmV?d00001 diff --git a/examples/winit/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/examples/winit/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..26e901e9b68a1878e54461ddee2fcdaf423a7f1a GIT binary patch literal 1954 zcmV;T2VMAyP)KoUp-NgxR%fn*X$0!bhVB!MK*Q!3ROT*$clI{hXy zlt3GsN_lIGdht!|eoJ#k)>;DXL;#dF%1qYVk9n$cX3d%a-YU5M``b^%TCEcH&tX(S+= z%wop*?X-bMiMu?YnWsu;)Jy3`0!p<6Kg}3$p_mJT3w0X3p}v{8OyDCR=J1x=&l)TJFxy#alYa~?Y}+y%uhXbQcqu1sp7 z6V?wRqeJHPdl{Q5M>TmW}C$*|3 zhP$BH1r1a0w%bAirGns(F}LTm8)jAxC`2ia>_@YmM}mgZT{{3 z2AkemCZ?>*`XCxm-rnX20F(}c>p7E6Z;cbfT`0JqUDR~sKJP&JR_~V)olS3z6T@97 zxS%X`uRn1td@g}_9bRzx75m$qv35{}ODz+_UC=`=REC;~!~lxZ&2Xa4y_U9?hc)K1 z>4||0id|42dNuJ@i!BBa??ofZ2L6>U`-iMvs&ZoBlI1QaO?|x05)X*iY6lD3og2O8 z-942~3|uJYf_fA8dZ=$Ybb*0*su3NCybn8*w=;SL6T@8|(4^4L#7eg!$eT3I*--fzn;c-ThY}Pye&-X43?W>gnd|~`W7?L0ea$iMWBe34Eab# z8OtcWDeY+3Xg94n-v0#g4FP(i34Klhzhp{qNfdJN+j3Kr%uqj zNW0UDdRp*>1U??q&&=0vrP13C^;!}k%o{1|U#OO}-hp<|XlF>4AaWwEUhvOPi$I>z|~ ze$WQrEe2!L(p`T>y`O?(<)yp5b}q17j^aX#X*Sr*3os0~_Js`JVtynQ3G&MBoX!p~{i&^vhUJO88a&m@OLVJ7 zfc7*JpUdB;yXSFjA^lzds~PoEOkb?BhwWj^8qj3LnUHOwF!MebaOgq%F3oQ-+FI{VMQ0#MW|aceYSem!iw+ft_foE1jVm8aDP-CP|#q7 zTuwIYo!s0}Z=7z{A12}FcD0;z_bjfi=d@(|xV*l`l>A6KT;X_5V9RZ#30rpSB?L>D zmr{cYS{I^zz4XLziLKpW>w@%1*tqGS7fEd(tqixyU((9Q7Vyx4hipAXX7JtTQ7u2M zH(I2!6s`rvLsHgNoz#M@*?Eccl%wY@W+(#ytV-a%9K!i&z22l+g(m%qgKSW8waYNn zSpjrCj`9}M*Q!=&BiYRie_D@3lqa?p!K}=)rzy?`q%6;A)RNy&<&uF6jn@v)%78hv z0Js)&p$S(BP*S(P6{nbU9F=)?KC;G{lyzlES<@4h_T$>F8VbxUM^#;GZN$0>-ENW{ zG^Z41<)3vR>%z1f5m%cq*^EdKa`8!~_#{&R5`Y9C0Z0H65`Y9C0Z0H6fCL}`NB|NN ofCL}`NB|Om1Rw!O0Q$f66C`Qb$!CFS!T@~ literal 0 HcmV?d00001 diff --git a/examples/winit/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/examples/winit/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..bf80cf5510fe01cfa1ad48b11e06573c3bf9896d GIT binary patch literal 3485 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 literal 0 HcmV?d00001 diff --git a/examples/winit/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/examples/winit/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..ec3ebb243dbbcc48b7aa145a62f7fb08f8312291 GIT binary patch literal 5102 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 literal 0 HcmV?d00001 diff --git a/examples/winit/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/examples/winit/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..29e1507173d9d7edae77b1073a436dcfa92a8b59 GIT binary patch literal 7074 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 literal 0 HcmV?d00001 diff --git a/examples/winit/android/app/src/main/res/values/ic_launcher_background.xml b/examples/winit/android/app/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 0000000..963edcd --- /dev/null +++ b/examples/winit/android/app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,5 @@ + + + + #0E1824 + From b85bd2ae4b1e5f8e4f41476c76b2a4023149ffc8 Mon Sep 17 00:00:00 2001 From: LucaCappelletti94 Date: Mon, 26 Oct 2026 16:43:00 +0100 Subject: [PATCH 2/2] Build the Tauri example for iOS and check what the plugin adds to its project --- .github/workflows/ci.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f27764f..c78c419 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -607,3 +607,21 @@ jobs: # An unsigned build applies no entitlements, so check the file the signed build applies. grep -q "com.apple.developer.aps-environment" examples/tauri/entitlements.plist || { echo "no aps-environment in examples/tauri/entitlements.plist"; exit 1; } fi + # The plugin's build script adds the push entitlement and the remote-notification background + # mode to the project `tauri ios init` generates, which only an iOS build exercises. + - name: Build the Tauri app for iOS, unsigned, and check the handler, the background mode, the entitlement and the icon + working-directory: examples/tauri + run: | + command -v xcodegen > /dev/null || brew install xcodegen + cargo tauri ios init --ci + cargo tauri icon ../../assets/brand/tauri-icon.json + cargo tauri ios build --debug --target aarch64 --no-sign + app=$(find gen/apple/build -maxdepth 4 -type d -path "*.xcarchive/Products/Applications/*.app" | head -n1) + test -n "$app" + binary="$app/$(/usr/libexec/PlistBuddy -c 'Print :CFBundleExecutable' "$app/Info.plist")" + nm -gU "$binary" | grep -q ___pushups_background_handler || { echo "no background handler in $binary"; exit 1; } + plutil -extract UIBackgroundModes json -o - "$app/Info.plist" | grep -q '"remote-notification"' || { echo "no remote-notification background mode in $app"; exit 1; } + plutil -extract CFBundleIcons.CFBundlePrimaryIcon.CFBundleIconName raw -o - "$app/Info.plist" | grep -qx AppIcon || { echo "no app icon in $app"; exit 1; } + test -f "$app/Assets.car" || { echo "no compiled asset catalog in $app"; exit 1; } + # An unsigned build applies no entitlements, so check the file the signed build applies. + grep -A1 aps-environment gen/apple/*_iOS/*_iOS.entitlements | grep -q development || { echo "no aps-environment in the generated entitlements"; exit 1; }