NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Lekce 2 - První .NET MAUI aplikace Nové

V minulé lekci, Úvod do .NET MAUI, jsme si představili .NET MAUI a připravili jsme si Visual Studio.

V dnešním .NET MAUI tutoriálu si vytvoříme svou první multiplatformní aplikaci. Mimo jiné si ukážeme, jak tuto aplikaci spustit na platformách Android, iOS a Windows, a seznámíme se s výchozí strukturou .NET MAUI projektu.

Založení první multiplatformní aplikace

Jako první .NET MAUI aplikaci si vytvoříme klasickou "Hello world" aplikaci, jejímž jediným účelem bude vypsání textu. Otevřeme si Visual Studio a založíme si nový projekt typu .NET MAUI App:

Výběr šablony .NET MAUI projektu - .NET MAUI - Multiplatformní aplikace v C# .NET

Jako název zadáme třeba HelloMaui:

Zadání názvu projektu - .NET MAUI - Multiplatformní aplikace v C# .NET

Framework vybereme ten nejnovější možný a potvrdíme vytvoření projektu:

Výběr verze .NET - .NET MAUI - Multiplatformní aplikace v C# .NET

Vygeneroval se nám .NET MAUI projekt s poměrně jednoduchou ukázkovou aplikací.

Spuštění aplikace

Tím, že tuto aplikaci vyvíjíme na Windows, můžeme ji sestavit a spustit na následujících platformách:

  • Android – v emulátoru nebo na fyzickém zařízení,
  • iOS – pokud máme k dispozici zařízení s macOS nebo iOS,
  • Windows.

Níže jsou uvedeny postupy přípravy prostředí a spuštění aplikace na těchto platformách. Aplikace se vždy sestavuje samostatně pro konkrétní platformu, tedy bez závislosti na ostatních platformách. Aplikaci tak můžeme vyvíjet jen pro ty platformy, které nás zajímají.

Pro spuštění aplikace na macOS musíme vyvíjet přímo na macOS.

  • Android emulátor

    Začneme s přípravou Android emulátoru, který nám umožní spouštět systém Android v rámci Windows (nebo klidně i macOS). Daný systém se pak bude zvenčí chovat, jako by běžel samostatně na fyzickém zařízení. Díky emulátoru tak nemusíme mít k dispozici žádné fyzické Android zařízení.

    Hardwarová akcelerace

    Pro co nejvyšší výkon emulátoru je vhodné mít ve funkcích Windows povolenou hardwarovou akceleraci, pokud ji náš počítač podporuje. Ve Windows vyhledávání si najdeme Zapnout nebo vypnout funkce systému Windows (Turn Windows features on or off) a vybereme tuto možnost. Dále zaškrtneme Platforma hypervisoru Windows (Windows Hypervisor Platform) a potvrdíme:

    Povolení hypervisoru - .NET MAUI - Multiplatformní aplikace v C# .NET

    Počítač bude vyžadovat restartování.

    Bližší informace k hardwarové akceleraci nalezneme v oficiální dokumentaci.

    Vytvoření Android emulátoru

    V horní liště Visual Studia nejprve vybereme cílový framework android:

    Výběr cílového frameworku – Android - .NET MAUI - Multiplatformní aplikace v C# .NET

    Dále vybereme jako cílové zařízení Android Emulator:

    Volba Android Emulator - .NET MAUI - Multiplatformní aplikace v C# .NET

    Nyní klikneme na tlačítko Start Android Emulator - .NET MAUI - Multiplatformní aplikace v C# .NET. Pravděpodobně se nám zobrazí dialog pro potvrzení licenčních podmínek Android SDK (sada knihoven pro vývoj na platformě Android). Podmínky potvrdíme:

    Potvrzení licence Android SDK - .NET MAUI - Multiplatformní aplikace v C# .NET

    Případné následující dialogy o povolení změn na zařízení taktéž potvrdíme. Po potvrzení všech dialogů se nám otevře Android Device Manager s možností vytvoření výchozího emulátoru:

    Vytvoření výchozího emulátoru - .NET MAUI - Multiplatformní aplikace v C# .NET

    Pokud se Android Device Manager neotevřel, znovu klikneme na tlačítko Start Android Emulator - .NET MAUI - Multiplatformní aplikace v C# .NET.

    Vytvoření emulátoru potvrdíme a počkáme, až se emulátor stáhne a nainstaluje:

    Stahování emulátoru - .NET MAUI - Multiplatformní aplikace v C# .NET

    Po dokončení instalace můžeme Android Device Manager zavřít.

    Emulátorů s různými konfiguracemi si můžeme přes Android Device Manager vytvořit libovolné množství. Po instalaci prvního emulátoru otevřeme Android Device Manager volbou ToolsAndroidAndroid Device Manager ve Visual Studiu.

    Spuštění aplikace v Android emulátoru

    Nyní si již můžeme v našem emulátoru spustit aplikaci. Ujistíme se, že máme vybraný Android jako cílový framework a zároveň náš emulátor jako cílové zařízení:

    Výběr nainstalovaného emulátoru - .NET MAUI - Multiplatformní aplikace v C# .NET

    Po stisknutí tlačítka Start Tlačítko Start ve Visual Studiu - .NET MAUI - Multiplatformní aplikace v C# .NET se aplikace sestaví a spustí na emulátoru. První sestavení aplikace bude chvíli trvat:

    Výchozí aplikace v emulátoru - .NET MAUI - Multiplatformní aplikace v C# .NET

    Aplikaci ukončíme klasicky tlačítkem Stop Debugging Tlačítko Stop Debugging ve Visual Studiu - .NET MAUI - Multiplatformní aplikace v C# .NET ve Visual Studiu.

    Fyzické Android zařízení

    Pokud máme k dispozici fyzické Android zařízení, můžeme aplikaci spustit i na něm.

    Povolení debuggování

    Ze všeho nejdříve musíme na našem zařízení povolit ladění (debuggování) přes USB. Přejdeme proto do nastavení zařízení a v sekci O telefonu (About phone) si najdeme Číslo sestavení (Build number). Několikrát na něj klikneme (počet kliknutí se může lišit podle verze Androidu). Systém nás upozorní hláškou, že jsme se stali vývojáři.

    V nastavení nově budeme mít k dispozici sekci Možnosti pro vývojáře (Developer options). Otevřeme ji a aktivujeme Ladění USB (USB debugging):

    Povolení USB debugging - .NET MAUI - Multiplatformní aplikace v C# .NET

    Spuštění aplikace na fyzickém Android zařízení

    Nyní již můžeme zařízení připojit USB kabelem k počítači a případně potvrdit dodatečný dialog o povolení debuggování přes USB. Naše zařízení se zobrazí mezi dostupnými zařízeními ve Visual Studiu:

    Výběr fyzického Android zařízení - .NET MAUI - Multiplatformní aplikace v C# .NET

    Pokud se nám zařízení ve Visual Studiu nezobrazuje, pravděpodobně nemáme v počítači nainstalované USB ovladače pro naše zařízení. Ovladače získáme na webu výrobce zařízení. Více informací případně nalezneme v oficiální dokumentaci.

    Aplikace se sestaví a spustí na našem Android zařízení, když jej vybereme a stiskneme tlačítko Start Tlačítko Start ve Visual Studiu - .NET MAUI - Multiplatformní aplikace v C# .NET:

    Výchozí aplikace na fyzickém Android zařízení - .NET MAUI - Multiplatformní aplikace v C# .NET

    Aplikaci ukončíme tlačítkem Stop Debugging Tlačítko Stop Debugging ve Visual Studiu - .NET MAUI - Multiplatformní aplikace v C# .NET ve Visual Studiu.

  • Spárovaný Mac

    V případě, že chceme vyvíjet aplikace pro iOS, potřebujeme mít k dispozici nějaké Mac zařízení se systémem macOS. Mac potřebujeme k tomu, abychom na něm mohli aplikace spouštět a publikovat na App Store. Jelikož používáme Visual Studio na Windows, musíme si s ním náš Mac tzv. spárovat.

    Na macOS se iOS aplikace spouští v tzv. iOS simulátoru, který nám umožňuje spouštět systém iOS v rámci macOS. Daný systém se pak zvenčí chová, jako by běžel samostatně na fyzickém zařízení. Díky simulátoru tak nemusíme mít k dispozici žádné fyzické iOS zařízení.

    Příprava Macu

    Než s párováním začneme, musíme mít naše Windows zařízení a Mac připojené ke stejné síti. Na Mac si pak musíme nainstalovat:

    • Mono – Zvolíme nejnovější verzi.
    • Vývojové prostředí Xcode – .NET MAUI ne vždy vyžaduje jeho nejnovější verzi. Jakou verzi Xcode máme zvolit k námi používané verzi .NET, zjistíme na GitHub wiki .NET MAUI v sekci Release Versions. Pro instalaci konkrétní verze Xcode doporučujeme použít aplikaci Xcodes, která značně zjednodušuje správu více instalací Xcode na jednom Macu. Alternativně lze konkrétní verzi Xcode stáhnout na xcodereleases­.com.
      • Nainstalované Xcode musíme nakonec ještě spustit, aby se doinstalovaly všechny komponenty. V nastavení Xcode v sekci Platforms může být případně nutné doinstalovat iOS simulátory:
    Získání iOS simulátoru v Xcode - .NET MAUI - Multiplatformní aplikace v C# .NET

    Dále musíme mít v macOS ještě povolenou funkci vzdáleného přihlášení (remote login). V předvolbách systému (System Preferences) přejdeme do sekce Sdílení (Sharing), kde zaškrtneme Vzdálené přihlášení (Remote Login) spolu s plným přístupem a povolíme jej všem uživatelům:

    Povolení vzdáleného přihlášení - .NET MAUI - Multiplatformní aplikace v C# .NET

    Všimněme si IP adresy našeho Macu, tu budeme později potřebovat.

    Spárování macOS s Visual Studiem

    Nyní se již můžeme vrátit zpět do Visual Studia na Windows. V horním menu vybereme ToolsiOSPair to Mac. V nově otevřeném okně buď zvolíme náš Mac a klikneme na Connect…, anebo klikneme na Add Mac… a připojíme se k němu pomocí jeho IP adresy:

    Připojení se k Macu pomocí IP adresy - .NET MAUI - Multiplatformní aplikace v C# .NET

    Budeme vyzváni k zadání přihlašovacích údajů k našemu účtu na Macu:

    Přihlášení se k Macu - .NET MAUI - Multiplatformní aplikace v C# .NET

    Po přihlášení se nám na Mac doinstalují potřebné knihovny a nástroje, což může chvíli trvat. Zda jsme se úspěšně přihlásili, poznáme podle ikony u našeho Macu:

    Připojený Mac - .NET MAUI - Multiplatformní aplikace v C# .NET

    Při každém dalším spuštění Visual Studia stačí pro opětovné spárování zopakovat tento postup.

    Automatické spárování

    V nastavení Visual Studia pak případně můžeme povolit automatické spárování při spuštění Visual Studia. V horním menu vybereme ToolsOptions… a přejdeme do sekce XamariniOS Settings. Zde můžeme zaškrtnout možnost Enable auto connection to known Macs. Taktéž se ujistíme, že máme zaškrtnutou možnost Remote Simulator to Windows, díky níž budeme moci ovládat iOS simulátor přímo z Windows:

    iOS Settings - .NET MAUI - Multiplatformní aplikace v C# .NET

    Podrobný a vždy aktuální návod ke spárování macOS s Visual Studiem nalezneme v oficiální dokumentaci.

    Spuštění aplikace v iOS simulátoru

    Nyní si můžeme aplikaci konečně spustit. V horní liště Visual Studia nejprve vybereme cílový framework ios:

    Výběr cílového frameworku – iOS - .NET MAUI - Multiplatformní aplikace v C# .NET

    Dále vybereme jako cílové zařízení některý z dostupných iOS simulátorů:

    Výběr iOS simulátoru ve Visual Studiu - .NET MAUI - Multiplatformní aplikace v C# .NET

    Po stisknutí tlačítka Start Tlačítko Start ve Visual Studiu - .NET MAUI - Multiplatformní aplikace v C# .NET se aplikace sestaví a spustí na simulátoru. První sestavení aplikace bude chvíli trvat:

    Výchozí aplikace v iOS simulátoru - .NET MAUI - Multiplatformní aplikace v C# .NET

    iOS simulátor je možné si zobrazit i přímo na Macu, stačí jen vyhledat a spustit aplikaci Simulator.app:

    Výchozí aplikace v iOS simulátoru - .NET MAUI - Multiplatformní aplikace v C# .NET

    Aplikaci ukončíme klasicky tlačítkem Stop Debugging Tlačítko Stop Debugging ve Visual Studiu - .NET MAUI - Multiplatformní aplikace v C# .NET ve Visual Studiu.

    Hot restart

    Pokud máme k dispozici fyzické iOS zařízení, můžeme na něj naši aplikaci nahrát pomocí technologie hot restart. Tato technologie má však jistá omezení a navíc vyžaduje placený Apple Developer účet. Více informací nalezneme v oficiální dokumentaci.

  • Spuštění aplikace na Windows

    Spuštění aplikace na Windows je poměrně přímočaré. V horní liště Visual Studia nejprve vybereme cílový framework windows:

    Výběr cílového frameworku – Windows - .NET MAUI - Multiplatformní aplikace v C# .NET

    Po stisknutí tlačítka Start Tlačítko Start ve Visual Studiu - .NET MAUI - Multiplatformní aplikace v C# .NET se aplikace sestaví, nainstaluje a spustí. První sestavení aplikace bude chvíli trvat:

    Výchozí aplikace ve Windows - .NET MAUI - Multiplatformní aplikace v C# .NET

    Vývojářský režim

    Ještě před instalací aplikace pravděpodobně budeme vyzváni k povolení vývojářského režimu, pokud jsme tak ještě neučinili. V nastavení Windows stačí přejít do sekce Systém (System) → Pro vývojáře (For developers) a povolit Vývojářský režim (Developer Mode):

    Povolení vývojářského režimu - .NET MAUI - Multiplatformní aplikace v C# .NET

.NET MAUI je poměrně složitou technologií. Snaží se totiž propojit množství různých komponent, které jsou vyvíjeny nezávisle na sobě různými společnostmi. Není proto překvapením, že se jednou začas mohou objevit nějaké chyby a problémy. Vždy aktuální postup sestavení a spuštění .NET MAUI aplikace nalezneme v oficiální dokumentaci. Pokud máme s čímkoli problém, nahlédneme nejprve tam. Mimo jiné se tam nachází i přehled nejčastěji se vyskytujících problémů a jejich řešení. Přehled uživateli nahlášených chyb a potenciálních řešení nalezneme případně v GitHub repozitáři .NET MAUI.

Struktura .NET MAUI projektu

Když už víme, jak projekt sestavit a spustit, můžeme se podívat, jakými adresáři a soubory je ve výchozím stavu tvořen:

Projekt v Solution Exploreru - .NET MAUI - Multiplatformní aplikace v C# .NET

Pro nás jsou nejzajímavější:

  • Platforms/ – Adresář pro soubory s kódem specifickým pro konkrétní platformu.
  • Resources/ – Adresář pro obrázky, ikony, fonty, styly a další soubory, které chceme v aplikaci používat.
  • App.xaml a App.xaml.cs – Soubory, jejichž obsah reprezentuje celou aplikaci.
  • AppShell.xaml a AppShell.xaml.cs – Soubory, jejichž obsah reprezentuje navigaci aplikace.
  • MainPage.xaml a MainPage.xaml.cs – Soubory, jejichž obsah reprezentuje hlavní stránku aplikace.
  • MauiProgram.cs – Vstupní bod aplikace.

Hlavní stránka MainPage

V .NET MAUI jsou všechny komponenty aplikace typicky tvořeny dvěma soubory:

  • XAML souborem popisujícím vzhled a obsah komponenty pomocí značkovacího jazyka XAML. Tento soubor tedy představuje prezentační část dané komponenty.
  • C# souborem obsahujícím třídu s logikou komponenty – tato třída a její kód se též označují jako code behind.

Každá komponenta je vždy tvořena C# třídou a případně nepovinně ještě jedním XAML souborem.

Code behind

Podívejme se do souboru MainPage.xaml.cs, tedy na code behind hlavní stránky aplikace:

namespace HelloMaui
{
    public partial class MainPage : ContentPage
    {
        int count = 0;

        public MainPage()
        {
            InitializeComponent();
        }

        private void OnCounterClicked(object sender, EventArgs e)
        {
            count++;

            if (count == 1)
                CounterBtn.Text = $"Clicked {count} time";
            else
                CounterBtn.Text = $"Clicked {count} times";

            SemanticScreenReader.Announce(CounterBtn.Text);
        }
    }
}

Vidíme, že v C# kódu je hlavní stránka aplikace reprezentována třídou MainPage, která dědí od třídy ContentPage. S code behind budeme pracovat až v budoucích lekcích. Zatím zde pouze smažeme metodu OnCounterClicked() a atribut count obsahující počet kliknutí:

namespace HelloMaui
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }
    }
}

Metoda OnCounterClicked() řeší změnu obsahu tlačítka při kliknutí. Tlačítko ani tuto metodu však nebudeme potřebovat.

XAML

Nyní si otevřeme soubor MainPage.xaml s XAML kódem stránky:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="HelloMaui.MainPage">

    <ScrollView>
        <VerticalStackLayout
            Padding="30,0"
            Spacing="25">
            <Image
                Source="dotnet_bot.png"
                HeightRequest="185"
                Aspect="AspectFit"
                SemanticProperties.Description="dot net bot in a race car number eight" />

            <Label
                Text="Hello, World!"
                Style="{StaticResource Headline}"
                SemanticProperties.HeadingLevel="Level1" />

            <Label
                Text="Welcome to &#10;.NET Multi-platform App UI"
                Style="{StaticResource SubHeadline}"
                SemanticProperties.HeadingLevel="Level2"
                SemanticProperties.Description="Welcome to dot net Multi platform App U I" />

            <Button
                x:Name="CounterBtn"
                Text="Click me"
                SemanticProperties.Hint="Counts the number of times you click"
                Clicked="OnCounterClicked"
                HorizontalOptions="Fill" />
        </VerticalStackLayout>
    </ScrollView>

</ContentPage>

Vidíme zde elementy:

  • <ContentPage> – samotná stránka,
  • <ScrollView> – umožňuje scrollovat svým obsahem,
  • <VerticalStackLayout> – slouží ke vkládání obsahu pod sebe,
  • <Image> – obrázek,
  • <Label> – textový popisek,
  • <Button> – tlačítko.

XAML a tyto elementy si blíže popíšeme dále v kurzu. Jak již bylo řečeno, v naší jednoduché "Hello world" aplikaci budeme chtít vypsat pouze krátký text Pozdrav z .NET MAUI aplikace. Využijeme k tomu element <Label>, jímž nahradíme výchozí obsah stránky:

<?xml version="1.0" encoding="utf-8"?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="HelloMaui.MainPage">

    <ScrollView>
        <VerticalStackLayout
            Padding="30,0"
            Spacing="25">
            <Label>
                Pozdrav z .NET MAUI aplikace
            </Label>
        </VerticalStackLayout>
    </ScrollView>

</ContentPage>

Výsledek

Aplikaci spusťme, bude vypadat následovně:

  • První aplikace – Android - .NET MAUI - Multiplatformní aplikace v C# .NET
  • První aplikace – iOS - .NET MAUI - Multiplatformní aplikace v C# .NET
  • První aplikace – Windows - .NET MAUI - Multiplatformní aplikace v C# .NET

Máme hotovou svou první .NET MAUI aplikaci, gratulujeme! Zdrojové kódy této aplikace máte případně k dispozici níže ke stažení.

V příští lekci, Jazyk XAML v .NET MAUI, se blíže podíváme na jazyk XAML, který se používá k návrhu komponent v .NET MAUI. Zmíníme elementy, jmenné prostory a entity.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 4x (226.81 kB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

Předchozí článek
Úvod do .NET MAUI
Všechny články v sekci
.NET MAUI - Multiplatformní aplikace v C# .NET
Přeskočit článek
(nedoporučujeme)
Jazyk XAML v .NET MAUI
Článek pro vás napsal Radek Vymětalík
Avatar
Uživatelské hodnocení:
11 hlasů
...
Aktivity