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

  • 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

  • Xamarin iOS: FirebaseMessaging NuGet frissítés

    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.

    Hibajelenség: Az alkalmazás lefordul, és deployolódik az iOS-t futtató telefonra, de az indítás után azonnal bezárul, és a debugger nem veszi ezt észre.

    Hibaüzenet az OutputWindow-ban

    dyld: symbol '_OBJC_CLASS_$_GULUserDefaults' not found, expected in '/private/var/containers/Bundle/Application/ID/APPLICATIONNAME/Frameworks/GoogleUtilities.framework/GoogleUtilities', needed by '/private/var/containers/Bundle/Application/ID/APPLICATIONNAME/Frameworks/FirebaseMessaging.framework/FirebaseMessaging'
    
    

    Clean solution nem oldja meg a problémát.

    Nálam a bin és az obj mappák manuális törlése megoldotta a problémát a DEBUG buildhez, de akinek továbbra is problémája adódik ezzel az próbálja ki a következő módszereket:
    https://stackoverflow.com/questions/57131541/issue-with-nuget-package-xamarin-firebase-ios-cloudmessaging-3-1-2

    Azonban Release módban ugyanúgy nem működik az alkalmazás.

  • Xamarin Android: SplashScreenActivity létrehozása

    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.

    Ahhoz, hogy legyen egy betöltő Activitynk, ami nem fehér képernyőt jelnít meg akkor amikor az applikáció először töltődik be, ahhozlétre kell hozni egy SplasActivity.cs-t az alábbiak alapján:

    	[Activity(Label = "APPLICATIONNAME", Icon = "@drawable/android_app_icon", Theme = "@style/MainTheme.Splash", MainLauncher = true, NoHistory = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation, ScreenOrientation = ScreenOrientation.Portrait)]
    
    	public class SplashActivity : AppCompatActivity
    	{
    
    		public override void OnCreate(Bundle savedInstanceState, PersistableBundle persistentState)
    		{
    			base.OnCreate(savedInstanceState, persistentState);
    
    		}
    
    		protected override void OnResume()
    		{
    			base.OnResume();
    
    			var mainIntent = new Intent(Application.Context, typeof(MainActivity));
    
    			if (Intent.Extras != null)
    			{
    				mainIntent.PutExtras(Intent.Extras);
    			}
    			mainIntent.SetFlags(ActivityFlags.SingleTop);
    			StartActivity(mainIntent);
    		}
    	}
    

    Az OnResume metódusban át kell adni az intenteket a MainActivitynk számára, hogy pl a Push üzenetek feldolgozásra kerüljenek. Ezekről itt ovlashatsz: https://www.banditoth.hu/2020/01/16/xamarin-android-splashscreenactivity-es-pushnotification-megnyitas-kilott-alkalmazasnal/

    A MainActivity Activity attribútumát a következőképpen kell módosítani:

    [Activity(Theme = "@style/MainTheme", MainLauncher = false, Exported = true,  ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation, ScreenOrientation = ScreenOrientation.Portrait,
            LaunchMode = LaunchMode.SingleTop)]
    

    Ahogy láthatjuk, a SplashActivitynk az alábbi témát fogja használni: “Theme = “@style/MainTheme.Splash””, ezért létre kell hozni a styles.xml-ben egy új style-t az alábbi alapján:

    <style name="MainTheme.Splash" parent ="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@drawable/splash_screen</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowActionBar">true</item>
      </style>
    

    Ez a téma háttérként a “@drawable/splash_screen” resource-t fogja használni, ezért ezt is létre kell hozni a drawable mappa alá az alábbi mintára:

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
      <item>
        <color android:color="@color/splash_background"/>
      </item>
      <item>
        <bitmap
            android:src="@drawable/icon"
            android:tileMode="disabled"
            android:gravity="center"/>
      </item>
    </layer-list>
    

    Az itt használt @color és @drawable iconok változhatnak, csak a bemutatás célját szolgálják.

    https://docs.microsoft.com/en-us/xamarin/android/user-interface/splash-screen

  • Xamarin Android: Hibakeresés kikapcsolása Debug build config kivételével

    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.

    Ahhoz, hogy az ADB-n keresztüli hibakaeresést kikapcsoljuk az Android alkalmazásnál, az Android projekt assemblyinfo.cs kódjába a követekzőt kell beletenni:

    #if DEBUG
    [assembly: Application(Debuggable=true)]
    #else
    [assembly: Application(Debuggable=false)]
    #endif
    

    Forrás:
    https://docs.microsoft.com/en-us/xamarin/android/deploy-test/release-prep/?tabs=windows#protect-the-application

  • Xamarin Forms: iOS Archive fail

    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.
    The "AllowUnsecureUrls" parameter is not supported by the "XamarinDownloadArchives" task. Verify the parameter exists on the task, and it is a settable public instance property.
    

    Nem lehet archiválni a projektet a fenti hibaüzenet miatt.

    Megoldás: VS Clean Solution, VS Exit, bin és obj mappák törlése, rebuild, majd archive.

    bin és obj mappák rekurzív törlése OSX-en (sh):

    find . -name 'bin' -type f -delete
    find . -name 'obj' -type f -delete
    

    Rekurzív törlés Windowson (bat):

    FOR /F "tokens=*" %%G IN ('DIR /B /AD /S bin') DO RMDIR /S /Q "%%G"
    FOR /F "tokens=*" %%G IN ('DIR /B /AD /S obj') DO RMDIR /S /Q "%%G"