András Tóth‘s professional blog
banditoth.net

Hey there 👋, I’m banditoth a .NET MAUI developer from Hungary.
I write about software development with .NET technologies.

You can find me on:
LinkedIn | Github | StackOverflow | X / Twitter | Threads

  • Android: Application auto backup ki/be kapcsolása (Xamarin is)

    This content has 5 years. Some of the information in this post may be out of date or no longer work. Please, read this page keeping its age in your mind.

    Android 6.0 óta (API verzió v23) bevezették az Androidba, hogy az alkalmazás fájljairól biztonsági mentést készít az operációs rendszer a felhasználó Google drive-jára. A backupok mérete maximum 25MB lehet, és az Android a JobScheduler API-jával készülnek 24 órás időintervallumban. További információk itt: https://developer.android.com/guide/topics/data/autobackup

    Az érintett fájlok:

    • Shared preferences files
    • Files in the directory returned by getFilesDir()
    • Files in the directory returned by getDatabasePath(String)
    • Files in directories created with getDir(String, int)
    • Files on external storage in the directory returned by getExternalFilesDir(String)

    Mivel a Xamarin Essentials a SharedPreferencesbe teszi a Preferences statikus osztály által tárolt adatokat, ezért azok is mentésre kerülnek.

    A be/ki kapcsoláshoz az AndroidManifest.xml-ben a következő propertyre van szükség az application tagben:

    android:allowBackup="true"
    
  • Xamarin iOS: Nem reagál az alkalmazás az értintésekre

    This content has 5 years. Some of the information in this post may be out of date or no longer work. Please, read this page keeping its age in your mind.

    Konzolban a hibaüzenet található, de az alkalmazás hiba nélkül kifordul, de az iOS 13.4.1-es verziót futtató eszközökön az érintések nem működnek.

    Hiba a konzolban:

    2020-04-12 15:25:09.177 PROJNAME.iOS[521:71276] <_UISystemGestureGateGestureRecognizer: 0x283c60b00>: Touch: Failed to receive system gesture state notification before next touch
    2020-04-12 15:25:09.177 PROJNAME.iOS[521:71276] <_UISystemGestureGateGestureRecognizer: 0x283c60900>: Gesture: Failed to receive system gesture state notification before next touch
    
    

    Megoldás: Visual Studio for Mac 8.5.1-es verzióról (vagy ennél kisebb verzióról) fel kell frissíteni a MacVS-t, a Windowsos verzójában a hiba a 16.5.2-től lett orvosolva.

    https://github.com/xamarin/Xamarin.Forms/issues/10162

  • Android: Alkalmazás aláíró kulcs ujjlenyomatának megtekintése Windowson

    This content has 5 years. Some of the information in this post may be out of date or no longer work. Please, read this page keeping its age in your mind.

    Nyissunk egy ADB.exe-t.

    Keressük meg a .apk kiterjesztésű fájlunkat, és csomagoljuk ki, mintha egy zip állomány lenne. Én a WinRaR programot használtam ehhez. Keressük ki a META/INF mappát, és ott lesz egy .RSA kiterjesztésű fájl. Másoljuk olyan helyre, ahonnan könnyen írhatunk elérési útvonalat hozzá.

    Gépeljük az ADB-be a következőt:

    keytool -printcert -file <elérési út / "C:\good.RSA">
    

    A végeredmény valahogy így néz ki (Nem eltakarva az adatokat):

  • Xamarin: FirebaseMessaging update = breaking production

    This content has 5 years. Some of the information in this post may be out of date or no longer work. Please, read this page keeping its age in your mind.

    Az alapvető probléma az az, hogy az Apple megszünteti Áprilistól a UIWebView használatát, és minden olyan binárist, ami ezt az implementációt tartalmazza, elfogják utasítani a Store-ba való publikálásnál. Erre léptek egyet a Xamarin fejlesztők, és kijelentették, hogy a Xamarin Forms 4.4-től felfelé megváltoztatták WebView implementációt iOS-en , hogy az új iOS VKWebView implementációját használja. Felfrissítettem minden csomagot úgy, hogy 4.4 legyen a Forms verzió, de ez nem hozta a várt eredményt, mert a csomagba ugyanúgy belecsomagolja a fordító a UIWebView-t. Erről egy Microsoftos srác blogján olvastam, hogy a visszafelé kompatibilitás miatt a linkerbe is belekellet nyúlniuk (https://devblogs.microsoft.com/xamarin/uiwebview-deprecation-xamarin-forms/), de hoyg hatása legyen az alkalmazásra csak a Xamarin Forms 4.5 verziójától érvényes. Viszont a Xamarin Forms 4.5-ös verziójába behozták Androidhoz az AndroidX libraryt, aminek a hatására egy csomó androidos szívás jött cserébe, mert a visszafelé kompatibilitás miatt az android 10 alatti libekhez is kellenek NuGet csomagok, és az android 10 és feletti AndroidX könyvtárakhoz is kellenek NuGet csomagok, úgyhogy végtelen NuGet installba kezdtem. Nem maradt már végül olyan csomag a Solutionben, amit ne kellett volna a függőségek miatt updatelni. Ezzel csak az volt a baj, hogy mivel minden csomag frissült, a Xamarin Firebase iOS bindingban pedig el van szúrva jelenleg is valami, méghozzá az, hogy az appokat az apple kapásból visszautasítja, mert olyan metódusnevet használ az egyik Xamarin.Firebase.IOS framework, ami blacklistes az apple szerint, éppen ezért a te appodat élből dobják vissza. Erre persze nekünk a PushNotificationök miatt van szükségünk, ezért nem hagyhatjuk figyelmen kívül a funkcionalitást egy kis időre. Szerencsére mások is észrevették, hogy ez a hiba nem jó így, és a hiba már ki is van javítva, de a pull request ott áll még a Xamarin előtt, mert a srác 16 órája még módosítást eszközölt a kódban. (https://github.com/xamarin/GoogleApisForiOSComponents/pull/388https://github.com/xamarin/GoogleApisForiOSComponents/pull/388)

    Erre még rájött az, hogyha minden csomagot a Pre-Releasere updatelsz, vagy csak szimplán hagyod a 4.5-ös Formsot, a hozzáfrissített Xamarin.IOSFirebase implementációval hogy iOS-re releasebe forduljon, lazán kifordítja az appot, és miután elindul az app kivágja a usert a főképernyőre. Szerencsére debug windowban ott a hiba, hogy : “dyld: symbol ‘OBJC_CLASS$_GULUserDefaults’ not found, expected in ‘/private/var/containers/Bundle/Application/ID/APPLICATIONNAME/Frameworks/GoogleUtilities.framework/GoogleUtilities’, dyld: symbol ‘OBJC_CLASS$_GULUserDefaults’ not found, expected in ‘/private/var/containers/Bundle/Application/ID/APPLICATIONNAME/Frameworks/GoogleUtilities.framework/GoogleUtilities’, ” ami remélhetőleg szintén javítva lesz ebben a pull requestben, mert ez már a Google frameworkje miatt lehet (abból sejtem, mert ezt már maga az XCode mondja, és nem a VisualStudio/Xamarin)

    Úgyhogy egyetlen megoldásunk az maradt, hogy az ügyfélnek úgy tesszük ki testflightra az appokat, hoyg elviseljük az Apple warningjait, hogy deprecated a UIWebView. Aztán mivel ez egy időzített bomba, hamarosan berobban, és majd nem fogják ezeket elfogadni, akkor viszont a Xamarin.IOS.Firebase csomag frissítésétől fogunk függeni.

  • Xamarin Forms 4.5 Update

    This content has 5 years. Some of the information in this post may be out of date or no longer work. Please, read this page keeping its age in your mind.

    Sziasztok. Ebben a posztban a Xamarin Forms 4.5 update tapasztalatokat szeretném veletek megosztani. Mivel ez egy nagy update, az AndroidX libekkel, és iOS fronton a UIWebView deprecation javításával, ezért megérdemel egy posztot.

    Első lépés: Unloadold az Androidos projektjeidet Windowson.
    Lehet hogy ez csak nálam gázos, de amikor a TargetFrameworkot szeretném állítani, belefagy a VisualStudio az állításba. Így én Unloadolom az androidos projektjeimet és átállítom a csoproj fájlban kézzel a target frameworkot. Ez a csproj edit pont kapóra is jön, mert nugeteket is kell hozzáadnunk (nem csak frissítenünk) android esetén.
    10-es TargetFramework beállítása XML-ben:

        <TargetFrameworkVersion>v10.0</TargetFrameworkVersion>
    

    Aztán kelleni fognak akövetkező NuGet-ek, adjuk őket hozzá a csproj fájlba a references headnél:

    <PackageReference Include="Xamarin.AndroidX.Lifecycle.LiveData" Version="2.1.0-rc1" />
     <PackageReference Include="Xamarin.AndroidX.Browser" Version="1.0.0-rc1" />
     <PackageReference Include="Xamarin.Google.Android.Material" Version="1.0.0-rc1" />
     <PackageReference Include="Xamarin.AndroidX.Legacy.Support.V4" Version="1.0.0-rc1" />
    

    Mentés után reloadolhatjuk a Solution Explorerben a projekteket, érdemes ezután egy Restore NuGet packagest nyomni a Solutionre.

    Második lépés: Xamarin Android package update
    Mivel nem fogjuk tudni addig feltelepíteni a Xamarin Forms package-t, ameddig nincs fent a latest Xamarin.Android.* csomagból minden, ezért frissítenünk kell azokat is, ha kell egyesével.. Ha van frissítés a Xamarin.AndroidX csomagokhoz, akkor azokat is érdemes frissíteni.

    2.5: Nincs frissítés conflict nélkül: Teljesen kikészülök ettől a NuGet helltől, ez függ ettől, az attól.. Lényeg a lényeg: Személyes tapsztalatom szerint, ajánlatos, ha nincs consolidate package a solutionben, és azok csak egy verzióra vannak a 4.5-től. Itt beleértve a Xamarin.Essentials, Xamarin.Forms.Maps csomagot is, amiktől igazán rémálom az update.

    3. Lépés: Telepíts ha tudsz! Ideális esetben, Xamarin.Forms csomagon egy frissítés. Ha nem ideális, mert hát miért is lenne az, akkor végigvered egyesével, hogy melyik projekt miért függ ettől a verziótól, és mit kell még frissítened pluszba