Hello, iOS – hluboká podrobněa

V průvodci rychlým startem jsme zavedli sestavení a spuštění základní aplikace Xamarin. iOS. Nyní je čas vytvořit hlubší porozumění fungování aplikací pro iOS, abyste mohli sestavovat více propracovaných programů. Tato příručka podrobně popisuje kroky, které najdete v návodu Hello, iOS, aby bylo možné pochopit základní koncepty vývoje aplikací pro iOS.

Tato příručka vám pomůže s vývojem dovedností a znalostí vyžadovaných k vytvoření aplikace pro iOS s jednou obrazovkou. Po práci s ní byste měli mít přehled o různých částech aplikace Xamarin. iOS a o tom, jak se vejdou do sebe.

úvod do Visual Studio pro Mac

Visual Studio pro Mac je bezplatné open source integrované vývojové prostředí (IDE), které kombinuje funkce z Visual Studio a Xcode. Nabízí plně integrovaný vizuální Návrhář, textový editor, který se dokončí pomocí nástrojů refaktoringu, prohlížeče sestavení, integrace zdrojového kódu a dalších. tato příručka zavádí některé základní funkce Visual Studio pro Mac, ale pokud s Visual Studio pro Mac začínáte, přečtěte si dokumentaci Visual Studio pro Mac .

Visual Studio pro Mac postupuje podle Visual Studio praxe uspořádání kódu do řešení a projektů. Řešení je kontejner, který může obsahovat jeden nebo více projektů. Projekt může být aplikace (například iOS nebo Android), podpůrná knihovna, testovací aplikace a další. v aplikaci Phoneword byl nový projekt iPhone přidán pomocí šablony aplikace s jedním zobrazením . Počáteční řešení vypadalo takto:

Snímek obrazovky počátečního řešení

Úvod do Visual Studio

Visual Studio je výkonné integrované vývojové prostředí od microsoftu. Nabízí plně integrovaný vizuální Návrhář, textový editor, který se dokončí pomocí nástrojů refaktoringu, prohlížeče sestavení, integrace zdrojového kódu a dalších. tato příručka zavádí některé základní funkce Visual Studio pomocí nástrojů Xamarin pro Visual Studio.

Visual Studio uspořádá kód do řešení a projektů. Řešení je kontejner, který může obsahovat jeden nebo více projektů. Projekt může být aplikace (například iOS nebo Android), podpůrná knihovna, testovací aplikace a další. v aplikaci Phoneword byl nový projekt iPhone přidán pomocí šablony aplikace s jedním zobrazením . Počáteční řešení vypadalo takto:

Snímek obrazovky počátečního řešení

Anatomie aplikace Xamarin. iOS

Vlevo je panel řešení, který obsahuje adresářovou strukturu a všechny soubory přidružené k řešení:

Panel řešení, který obsahuje adresářovou strukturu a všechny soubory přidružené k řešení

Napravo je Podokno řešení, které obsahuje adresářovou strukturu a všechny soubory přidružené k řešení:

Podokno řešení, které obsahuje adresářovou strukturu a všechny soubory přidružené k řešení

V návodu Hello, iOS jste vytvořili řešení s názvem Phoneword a umístili do něj projekt iOS – Phoneword_iOS dovnitř. Mezi položky uvnitř projektu patří:

  • Odkazy – obsahuje sestavení nutná k sestavení a spuštění aplikace. Rozbalte adresář pro zobrazení odkazů na sestavení .NET, jako jsou System, System. Core a System.Xml, a také odkaz na sestavení Xamarin. iOS.
  • balíčky – adresář balíčků obsahuje předem připravené NuGet balíčky.
  • Prostředky – ve složce Resources (prostředky) se ukládají další média.
  • Main. cs – obsahuje hlavní vstupní bod aplikace. Chcete-li spustit aplikaci, je předán název hlavní třídy aplikace, AppDelegate .
  • AppDelegate. cs – tento soubor obsahuje hlavní třídu aplikace a zodpovídá za vytvoření okna, sestavení uživatelského rozhraní a naslouchání událostem z operačního systému.
  • Main. scénář – scénář obsahuje vizuální návrh uživatelského rozhraní aplikace. Soubory scénáře se otevřou v grafickém editoru s názvem Návrhář pro iOS.
  • Soubor viewcontroller. cs – kontroler pro zobrazení řídí obrazovku (zobrazení), kterou uživatel vidí a dotkne. Kontroler zobrazení zodpovídá za zpracování interakce mezi uživatelem a zobrazením.
  • Soubor viewcontroller. Designer. cs jedná se o automaticky generovaný soubor, který slouží jako připevňování mezi ovládacími prvky v zobrazení a jejich reprezentacemi kódu v kontroleru zobrazení. Vzhledem k tomu, že se jedná o interní soubor instalace, integrované vývojové prostředí (IDE) přepíše jakékoli ruční změny a většinu času, který tento soubor může ignorovat.
  • Info. plist – soubor info. plist je místo, kde jsou nastaveny vlastnosti aplikace, jako je název aplikace, ikony, spouštěcí obrázky a další. Toto je výkonný soubor a vyčerpávající Úvod k němu je k dispozici v průvodci práce se seznamy vlastností .
  • Oprávnění. plist – seznam vlastností oprávnění nám umožňuje určit Možnosti aplikace (označované také jako technologie App Storu), jako je například iCloud, PassKit a další. Další informace o oprávněních najdete v průvodci práce se seznamy vlastností . Obecný úvod do oprávnění najdete v průvodci zřizováním zařízení .

Základy architektury a aplikací

Předtím, než může aplikace pro iOS načíst uživatelské rozhraní, je potřeba, aby byly na svém místě dvě věci. Nejprve aplikace musí definovat vstupní bod – první kód, který se spustí při načtení procesu aplikace do paměti. Za druhé musí definovat třídu pro zpracování událostí v rámci aplikace a interakci s operačním systémem.

V této části se prostudují vztahy znázorněné v následujícím diagramu:

V tomto diagramu jsou znázorněné vztahy architektury a základy aplikací.

Metoda Main

Hlavní vstupní bod aplikace pro iOS je Application Třída. ApplicationTřída je definována v hlavním souboru Application a obsahuje statickou Main metodu. Vytvoří novou instanci aplikace Xamarin. iOS a předá název třídy delegáta aplikace , která bude zpracovávat události operačního systému. Kód šablony pro statickou Main metodu se zobrazí níže:

using System;
using UIKit;

namespace Phoneword_iOS
{
    public class Application
    {
        static void Main (string[] args)
        {
            UIApplication.Main (args, null, "AppDelegate");
        }
    }
}

Delegát aplikace

V iOS třída delegáta aplikace zpracovává systémové události; Tato třída je v AppDelegate. cs. AppDelegateTřída spravuje AppDelegateaplikace. Okno je jediná instance UIWindow třídy, která slouží jako kontejner pro uživatelské rozhraní. Ve výchozím nastavení aplikace získá pouze jedno okno, do kterého se má načíst obsah, a okno je připojeno k obrazovce (jedna instance), která poskytuje ohraničovací obdélník odpovídající rozměrům obrazovky fyzického zařízení.

AppDelegate je také zodpovědný za přihlášení k odběru aktualizací systému o důležitých událostech aplikace, například při spuštění aplikace nebo při nízké velikosti paměti.

Kód šablony pro AppDelegate je zobrazen níže:

using System;
using Foundation;
using UIKit;

namespace Phoneword_iOS
{

    [Register ("AppDelegate")]
    public partial class AppDelegate : UIApplicationDelegate
    {
        public override UIWindow Window {
            get;
            set;
        }

        ...
    }
}

Jakmile aplikace definuje své okno, může začít načítat uživatelské rozhraní. V další části se seznámíte s vytvořením uživatelského rozhraní.

Uživatelské rozhraní

Uživatelské rozhraní aplikace pro iOS se podobá prezentace – aplikace obvykle získá jedno okno, ale může okno vyplnit s tolika objekty, které potřebuje, a objekty a uspořádání se dá změnit v závislosti na tom, co aplikace chce zobrazit. Objekty v tomto scénáři – to, co uživatel uvidí – se nazývají zobrazení. Aby bylo možné v aplikaci vytvořit jednu obrazovku, zobrazení jsou v hierarchii zobrazení obsahu navzájemně navrstvená v hierarchii zobrazení obsahua tato hierarchie se spravuje pomocí jediného kontroleru zobrazení. Aplikace s více obrazovkami mají v různých hierarchiích zobrazení obsahu, z nichž každý má vlastní kontroler zobrazení, a v okně zobrazení umístění aplikací k vytvoření jiné hierarchie zobrazení obsahu na základě obrazovky, na které je uživatel zapnutý.

Další informace o vytváření uživatelského rozhraní pomocí scénářů najdete v části návrh scénářů v tématu Přehled Xcode v knihovně pro vývojáře v iOS společnosti Apple.

Následující obrázek znázorňuje vztahy mezi oknem, zobrazeními, podzobrazeními a kontroler zobrazení, které přinášejí uživatelské rozhraní na obrazovku zařízení:

Vztahy mezi oknem, zobrazeními, podzobrazeními a kontroler zobrazení

V další části se dozvíte, jak pracovat se zobrazeními v kódu a Naučte se programovat na interakci uživatelů pomocí řadičů zobrazení a životního cyklu zobrazení.

Zobrazit řadiče a životní cyklus zobrazení

Každá hierarchie zobrazení obsahu má odpovídající kontroler zobrazení pro interakci s uživatelem. Role kontroleru zobrazení je správa zobrazení v hierarchii zobrazení obsahu. Kontroler zobrazení není součástí hierarchie zobrazení obsahu a není to element v rozhraní. Místo toho poskytuje kód, který slouží jako interakce uživatele s objekty na obrazovce.

Zobrazit řadiče a scénáře

Kontroler zobrazení je reprezentován ve scénáři jako pruh v dolní části scény. Výběrem kontroleru zobrazení se zobrazí jeho vlastnosti v oblast vlastností:

Výběr kontroleru zobrazení zobrazí v podokně vlastností jeho vlastnosti.

Třída kontroleru vlastního zobrazení pro hierarchii zobrazení obsahu reprezentované touto scénou se dá nastavit úpravou vlastnosti Class v části Identitaoblast vlastností. Například naše aplikace Phoneword nastaví jako kontroler zobrazení pro naši první obrazovku, jak je znázorněno na následujícím snímku obrazovky:

Aplikace Phoneword nastaví soubor viewcontroller jako kontroler zobrazení.

Kontroler zobrazení je reprezentován ve scénáři jako pruh v dolní části scény. Výběrem kontroleru zobrazení se zobrazí jeho vlastnosti v podokně vlastnosti:

Výběr kontroleru zobrazení zobrazí v podokně vlastností jeho vlastnosti.

Třída kontroleru vlastního zobrazení pro hierarchii zobrazení obsahu reprezentované touto scénou se dá nastavit úpravou vlastnosti Class v části Identita v podokně vlastnosti. Například naše aplikace Phoneword nastaví jako kontroler zobrazení pro naši první obrazovku, jak je znázorněno na následujícím snímku obrazovky:

Aplikace Phoneword nastaví soubor viewcontroller jako kontroler zobrazení.

Tím se propojí reprezentace kontroleru zobrazení ve scénáři na ViewController třídu jazyka C#. Otevřete ViewController.cs soubor a kontroler zobrazení oznámení je ViewController.csUIViewController , jak je znázorněno v následujícím kódu:

public partial class ViewController : UIViewController
{
    public ViewController (IntPtr handle) : base (handle)
    {

    }
}

ViewControllerNyní zařídí interakce hierarchie zobrazení obsahu přidružené k tomuto kontroleru zobrazení ve scénáři. V dalším kroku se dozvíte o roli kontroleru zobrazení v části Správa zobrazení tím, že zavádíte proces nazvaný životní cyklus zobrazení.

Poznámka

Pro obrazovky, které nevyžadují interakci s uživatelem, může být vlastnost Class v oblast vlastnostíponechána prázdná. Tím se nastaví záložní třída kontroleru zobrazení jako výchozí implementace UIViewController , což je vhodné, pokud neplánujete přidat vlastní kód.

Zobrazit životní cyklus

Kontroler zobrazení má za následek načítání a uvolňování hierarchií zobrazení obsahu z okna. Pokud se k zobrazení v hierarchii zobrazení obsahu stane něco důležitého, operační systém upozorní kontroler zobrazení prostřednictvím událostí v životním cyklu zobrazení. Přepsáním metod v životním cyklu zobrazení můžete pracovat s objekty na obrazovce a vytvořit dynamické a reagující uživatelské rozhraní.

Jedná se o základní metody životního cyklu a jejich funkci:

  • ViewDidLoad – volá se jednou , když kontroler zobrazení načte hierarchii zobrazení obsahu do paměti. To je vhodné místo pro počáteční nastavení, protože je v případě, že jsou první zobrazení v kódu k dispozici.
  • ViewWillAppear – volá se pokaždé, když se chystá přidání zobrazení kontroleru zobrazení do hierarchie zobrazení obsahu a zobrazí se na obrazovce.
  • ViewWillDisappear – volá se, když se chystá odebrání zobrazení řadiče zobrazení z hierarchie zobrazení obsahu a zmizí z obrazovky. Tato událost životního cyklu se používá pro vyčištění a uložení stavu.
  • ViewDidAppear a ViewDidDisappear – volá se, když se přidají nebo odeberou zobrazení v hierarchii zobrazení obsahu (v uvedeném pořadí).

Když se vlastní kód přidá do jakékoli fáze životního cyklu, musí se tato základní implementace této metody v životním cyklu přepsat. Toho je možné dosáhnout klepnutím na existující metodu životního cyklu, která má nějaký kód již k němu připojen, a jeho rozšířením na další kód. Základní implementace je volána v rámci metody, aby se zajistilo, že se původní kód spustí před novým kódem. Příklad tohoto příkladu je znázorněn v následující části.

Další informace o práci s řadiči zobrazení najdete v tématu Průvodce programováním kontroleru zobrazení společnosti Apple pro iOS a odkaz na UIViewController.

Reakce na interakci s uživatelem

Nejdůležitější role kontroleru zobrazení reaguje na interakci s uživatelem, jako je například stisknutí tlačítek, navigace a další. Nejjednodušší způsob, jak zpracovat interakci s uživatelem, je navázání ovládacího prvku pro poslech vstupu uživatele a připojení obslužné rutiny události pro reakci na vstup. Například tlačítko může být kabelové, aby reagovalo na událost dotykového ovládání, jak je znázorněno v aplikaci Phoneword.

Pojďme si prozkoumat, jak to funguje. V Phoneword_iOS projektu se přidalo tlačítko s názvem TranslateButton do hierarchie zobrazení obsahu:

Do hierarchie zobrazení obsahu se přidalo tlačítko s názvem TranslateButton.

Když se odkaz na výstup vytvoří pomocí Interface Builder Xcode, Xcode synchronizace ho automaticky namapuje na ovládací prvek v soubor viewcontroller. Designer. csa zpřístupní ho uvnitř ViewController třídy. Ovládací prvky jsou nejprve k dispozici ve ViewDidLoad fázi životního cyklu zobrazení, takže se tato metoda životního cyklu používá k reakci na dotykové ovládání uživatele:

public override void ViewDidLoad ()
{
    base.ViewDidLoad ();

    // wire up TranslateButton here
}

Aplikace Phoneword používá dotykovou událost, která je volána TouchUpInside k poslechu dotyku uživatele. TouchUpInside naslouchat události dotykového ovládání (prstem, který se dotýká obrazovky) uvnitř hranice ovládacího prvku. Opakem TouchUpInside je TouchDown událost, která je aktivována, když uživatel stiskne ovládací prvek v ovládacím prvku. TouchDownUdálost zachytí velké množství hluku a dává uživateli možnost zrušit dotyku posunutím prstu mimo ovládací prvek. TouchUpInside je nejběžnější způsob, jak reagovat na TouchUpInside dotykového ovládání a vytvořit prostředí, které uživatel očekává při stisknutí tlačítka. Další informace najdete v pokynech pro lidské rozhraní iOSod společnosti Apple.

Aplikace zpracovala TouchUpInside událost pomocí lambda, ale delegát nebo obslužná rutina pojmenované události mohla být také použita. Poslední kód tlačítka se podobá následujícímu:

public override void ViewDidLoad ()
{
    base.ViewDidLoad ();
    string translatedNumber = "";

    TranslateButton.TouchUpInside += (object sender, EventArgs e) => {
      translatedNumber = Core.PhonewordTranslator.ToNumber(PhoneNumberText.Text);
      PhoneNumberText.ResignFirstResponder ();

      if (translatedNumber == "") {
        CallButton.SetTitle ("Call", UIControlState.Normal);
        CallButton.Enabled = false;
      } else {
        CallButton.SetTitle ("Call " + translatedNumber, UIControlState.Normal);
        CallButton.Enabled = true;
      }
  };
}

Další koncepty představené v Phoneword

Aplikace Phoneword představila několik konceptů, které nejsou zahrnuty v tomto průvodci. Patří mezi ně:

  • Změnit text tlačítka – aplikace Phoneword ukázala, jak změnit text tlačítka voláním na tlačítko a předáním do nového textu a stavu ovládacího prvkutlačítka. Například následující kód změní text CallButton na "Call":

    CallButton.SetTitle ("Call", UIControlState.Normal);
    
  • Tlačítko Povolit a zakázat tlačítkatlačítka mohou být ve stavu nebo. Zakázané tlačítko nereaguje na vstup uživatele. Například následující kód zakáže CallButton :

    CallButton.Enabled = false;
    

    Další informace o tlačítkách naleznete v příručce k tlačítkům .

  • Zavřít tuto klávesnici – když uživatel klepne na textové pole, iOS zobrazí klávesnici, aby uživatel mohl zadat vstup. Bohužel není k dispozici žádná integrovaná funkce pro zavření klávesnice. Následující kód se přidá do, TranslateButton Chcete-li tuto klávesnici zavřít, když uživatel stiskne klávesu TranslateButton :

    PhoneNumberText.ResignFirstResponder ();
    

    Další příklad pro chybějící klávesnici najdete v návodu k jeho zavření .

  • místo Telefon volání s adresou url – v aplikaci Phoneword se ke spuštění aplikace system Phone používá schéma Apple URL. Vlastní schéma adresy URL se skládá z předpony "tel:" a přeloženého telefonního čísla, jak je znázorněno v následujícím kódu:

    var url = new NSUrl ("tel:" + translatedNumber);
    if (!UIApplication.SharedApplication.OpenUrl (url))
    {
        // show alert Controller
    }
    
  • Zobrazit výstrahu – když se uživatel pokusí o telefonní hovor na zařízení, které nepodporuje volání – například simulátor nebo iPod touch – zobrazí se dialogové okno s upozorněním, které uživateli ví, že telefonní hovor nejde umístit. Následující kód vytvoří a naplní řadič výstrahy:

    if (!UIApplication.SharedApplication.OpenUrl (url)) {
                    var alert = UIAlertController.Create ("Not supported", "Scheme 'tel:' is not supported on this device", UIAlertControllerStyle.Alert);
                    alert.AddAction (UIAlertAction.Create ("Ok", UIAlertActionStyle.Default, null));
                    PresentViewController (alert, true, null);
                }
    

    Další informace o zobrazení výstrah pro iOS najdete v receptu na řadič výstrahy.

Testování, nasazení a dokončíní vylepšení

Visual Studio pro Mac i Visual Studio poskytují mnoho možností pro testování a nasazení aplikace. Tato část obsahuje informace o možnostech ladění, předvádí testování aplikací na zařízeních a zavádí nástroje pro vytváření ikon a spouštěcích imagí vlastních aplikací.

Ladicí nástroje

Někdy problémy v kódu aplikace je obtížné diagnostikovat. Pro usnadnění diagnostiky složitých problémů s kódem můžete nastavit zarážku, krokovat kódnebo výstupní informace do okna protokolu.

Nasazení do zařízení

Simulátor iOS je rychlý způsob, jak otestovat aplikaci. Simulátor má řadu užitečných optimalizací pro testování, včetně geografického umístění, simulace pohybua dalších. Uživatelé ale nepoužijí konečnou aplikaci v simulátoru. Všechny aplikace by se měly testovat na skutečných zařízeních včas a často.

Pro zařízení je čas zřídit a vyžaduje účet Apple Developer. Průvodce zřizováním zařízení poskytuje podrobné pokyny k tomu, aby zařízení bylo připravené k vývoji.

Poznámka

V současné době je nutné mít v důsledku požadavku od společnosti Apple certifikát vývoje nebo podpisovou identitu k sestavení kódu pro fyzické zařízení nebo simulátor. Nastavte tuto možnost podle pokynů v průvodci zřizováním zařízení .

Jakmile je zařízení zřízené, můžete k němu nasadit jeho nasazení, a to tak, že změníte cíl na panelu nástrojů sestavení na zařízení s iOS a stisknete Start ( Přehrát), jak je znázorněno na následujícím snímku obrazovky:

Stisknutí klávesy Start/Play

Stisknutí klávesy Start/Play

Aplikace se nasadí do zařízení s iOS:

Aplikace se nasadí do zařízení s iOS a spustí se.

Generování vlastních ikon a spouštěcích imagí

Nikdo nemá k dispozici Návrhář pro vytváření vlastních ikon a spouštěcích imagí, které musí aplikace vystupovat. Tady je několik alternativních přístupů k vygenerování vlastní kresby aplikace:

  • Pixelmator – univerzální aplikace pro úpravu obrázků pro Mac, která má náklady na $30.
  • Fiverr – vyberte si z nejrůznějších návrhářů, abyste pro vás vytvořili sadu ikon, počínaje od $5. Může být úspěšný nebo neúspěšný, ale dobrý prostředek, pokud potřebujete ikony navržené průběžně.
  • Visual Studio – můžete použít k vytvoření jednoduché sady ikon pro aplikaci přímo v integrovaném vývojovém prostředí (IDE).
  • Fiverr – vyberte si z nejrůznějších návrhářů, abyste pro vás vytvořili sadu ikon, počínaje od $5. Může být úspěšný nebo neúspěšný, ale dobrý prostředek, pokud potřebujete ikony navržené průběžně.

Další informace o velikostech a požadavcích bitových kopií a požadavcích najdete v příručce práce s obrázky.

Souhrn

Blahopřejeme! Nyní máte plnou znalostí o komponentách aplikace Xamarin. iOS i k nástrojům, které se používají k jejich vytvoření. V dalším kurzu v Začínáme Seriesrozšíříte naši aplikaci tak, aby zpracovala více obrazovek. Podél toho, jak implementujete navigační kontroler, získáte informace o scénáři přechody a zavedení vzoru model, View, Controller (MVC), jak rozšíříte aplikaci tak, aby zpracovala více obrazovek.