Mechanismy sestavení pro iOS

V této příručce se dozvíte, jak časovat aplikace a jak používat metody, které je možné použít pro rychlejší sestavení pro všechny konfigurace sestavení.

Vývoj skvělých aplikací je více než jen psaní kódu, který funguje. Dobře napsaná aplikace by měla obsahovat optimalizace, které provádějí rychlejší sestavení s aplikacemi, které jsou menší a rychlejší. Výsledkem těchto optimalizací bude nejen lepší prostředí pro uživatele, ale také pro vás nebo pro vývojáře, kteří na projektu pracují. Je důležité zajistit, aby při práci s aplikací bylo vše často načasované.

Mějte na paměti, že výchozí možnosti jsou bezpečné a rychlé, ale nejsou optimální pro každou situaci. Kromě toho může řada možností zpomalit nebo urychlit vývojový cyklus v závislosti na jednotlivém projektu. Například nativní prokládání nějakou dobu trvá, ale pokud se získá velmi malá velikost, čas strávený odstraněním se neobnoví rychlejším nasazením. Na druhou stranu nativní prokládání může aplikaci výrazně zmenšit, v takovém případě bude rychlejší nasazení. Liší se mezi projekty a jediným způsobem, jak to zjistit, je testovat.

Rychlosti sestavení Xamarinu mohou být ovlivněny také různými kapacitami a možnostmi počítače, než může ovlivnit výkon: schopnosti procesoru, rychlosti sběrnice, velikost fyzické paměti, rychlost disku, rychlost sítě. Tato omezení výkonu jsou nad rámec tohoto dokumentu a jsou zodpovědností vývojáře.

Aplikace časování

Povolení výstupu nástroje MSBuild diagnostiky v rámci Visual Studio pro Mac:

  1. Klikněte na Visual Studio pro Mac > Předvolby...
  2. V zobrazení levého stromu vyberte Sestavení projektů > .
  3. Na pravém panelu nastavte rozevírací seznam Podrobností protokolu na Diagnostiku: Setting the Log verbosity
  4. Klikněte na tlačítko OK.
  5. Restartování Visual Studio pro Mac
  6. Vyčištění a opětovné sestavení balíčku
  7. Kliknutím na tlačítko Výstup sestavení zobrazte diagnostický výstup na panelu Chyb (Zobrazit > chyby výpadek > ).

Časování mtouch

Pokud chcete zobrazit informace specifické pro proces sestavení mtouch, předejte --time --time argumenty mtouch v možnostech projektu. Výsledky najdete ve výstupu sestavení vyhledáním MTouch úlohy:

Setup: 36 ms
Resolve References: 982 ms
Extracted native link info: 987 ms
...
Total time: 1554 ms

Připojení ze sady Visual Studio s hostitelem sestavení

Nástroje Xamarin technicky fungují na všech počítačích Mac, které můžou spouštět OS X 10.10 Yosemite nebo novější. Vývojářské prostředí a časy sestavení ale mohou bránit výkonu Macu.

V odpojeném stavu Visual Studio ve Windows provádí pouze fázi kompilace jazyka C# a nepokoušá se provést propojení ani kompilaci AOT, zabalí aplikaci do sady .app Bundle nebo podepíše sadu aplikací. (Fáze kompilace jazyka C# je zřídka kritickým bodem výkonu.) Pokuste se určit, kde se v kanálu build zpomaluje, a to tak, že sestavíte přímo na hostiteli sestavení Mac v Visual Studio pro Mac.

Jedním z nejběžnějších míst pro zpomalení je také síťové připojení mezi počítačem s Windows a hostitelem buildu Mac. Důvodem může být fyzická překážka v síti, použití bezdrátového připojení nebo cesta přes nasycený počítač (například cloudová služba pro Mac).

Triky simulátoru

Při vývoji mobilních aplikací je nezbytné rychle nasadit kód. Z různých důvodů, včetně rychlosti a nedostatku požadavků na zřizování zařízení, se vývojáři často rozhodnou nasadit do předinstalovaného simulátoru nebo emulátoru. U výrobců vývojářských nástrojů se rozhodnutí o poskytnutí simulátoru nebo emulátoru liší mezi rychlostí a kompatibilitou.

Apple poskytuje simulátor pro vývoj pro iOS a podporuje rychlost kompatibility vytvořením méně omezujícího prostředí pro spouštění kódu. Toto méně omezující prostředí umožňuje Xamarinu použít kompilátor Just In Time (JIT) pro simulátor (na rozdíl od AOT na zařízení), což znamená, že sestavení je zkompilováno do nativního kódu za běhu. Vzhledem k tomu, že mac je mnohem rychlejší než zařízení, umožňuje to lepší výkon.

Simulátor používá spouštěč sdílených aplikací, který umožňuje opětovné použití spouštěče, a ne k tomu, aby se sestavoval pokaždé, jak je potřeba na zařízení.

Při zohlednění výše uvedených informací poskytuje následující seznam několik informací o krocích, které je potřeba provést při sestavování a nasazování aplikace v simulátoru, aby byl zajištěn nejlepší výkon.

Tipy

  • Pro buildy:
    • De-select the Optimize PNG images option in the Project Options. Tato optimalizace není nutná pro sestavení v simulátoru.
    • Nastavte linker na Ne linker. Zakázání linkeru je rychlejší, protože jeho provádění trvá poměrně dlouho.
    • Zakázání spouštěče sdílených aplikací pomocí příznaku --nofastsim způsobí, že sestavení simulátoru budou mnohem pomalejší. Odeberte tento příznak, pokud už ho nepotřebujete.
    • Použití nativních knihoven je pomalejší, protože sdílený hlavní spustitelný soubor simlauncher nelze v takových případech znovu použít a pro každé sestavení musí být zkompilován spustitelný soubor specifický pro aplikaci.
  • Pro nasazení
    • Simulátor vždy udržujte spuštěný, pokud je to možné. Spuštění simulátoru může trvat až 12 sekund.
  • Další Tipy
    • Před sestavením upřednostňujte sestavení, protože před sestavením se znovu sestaví. Čištění může trvat delší dobu, než odebere odkazy, které je možné použít.
    • Využijte výhod skutečnosti, že simulátor nevynucuje sandbox. Velké prostředky, jako jsou videa nebo jiné prostředky zahrnuté do projektu, můžou při každém spuštění aplikace v simulátoru vytvářet nákladné operace kopírování souborů. Vyhněte se těmto nákladným operacím umístěním těchto souborů do domovského adresáře a odkazováním na ně v aplikaci úplnou cestou k souboru.
    • Pokud máte pochybnosti, použijte --time --time příznak k měření změny.

Následující snímek obrazovky ukazuje, jak nastavit tyto možnosti simulátoru v možnostech iOSu:

Screenshot shows Project Options, including Linker behavior, Additional mtouch arguments, and Optimize P N G images.

Triky zařízení

Nasazení do zařízení se podobá nasazení do simulátoru, protože simulátor je malá podmnožina sestavení používaného pro zařízení s iOSem. Vytváření zařízení vyžaduje mnoho dalších kroků, ale má výhodu poskytování dalších příležitostí k optimalizaci aplikace.

Konfigurace sestavení

Při nasazování aplikací pro iOS je k dispozici celá řada konfigurací sestavení. Je důležité mít dobrý přehled o jednotlivých konfiguracích, abyste věděli, kdy a proč byste měli optimalizovat.

  • Ladění
    • Toto je hlavní konfigurace, kterou byste měli použít, když je aplikace ve vývoji, a proto by měla být co nejrychlejší.
  • Vydání
    • Buildy vydaných verzí jsou ty, které se dodávají vašim uživatelům, a nejdůležitější je zaměřit se na výkon. Při použití konfigurace vydané verze můžete chtít použít LLVM pro optimalizaci kompilátoru a optimalizaci souborů PNG.

Je také důležité pochopit vztah mezi sestavením a nasazením. Čas nasazení je funkce velikosti aplikace. Nasazení větší aplikace trvá delší dobu. Minimalizací velikosti aplikace můžete zkrátit dobu nasazení.

Minimalizace velikosti aplikace může také zkrátit dobu sestavení. Důvodem je to, že odebrání kódu z aplikace trvá méně času, než nativně kompiluje kód, který se nebude používat. Menší soubory objektů znamenají rychlejší propojení, které vytvoří menší spustitelný soubor s menším počtem symbolů, které se mají vygenerovat. Úspora místa má proto dvojitou výplatu, což je důvod, proč je sada Link SDK výchozím nastavením pro všechna sestavení zařízení.

Poznámka:

V závislosti na používaném integrovaném vývojovém prostředí (IDE), které se používá, se může zobrazit možnost Propojit sady SDK pouze jako sady SDK link framework nebo propojení sestavení SDK.

Tipy

  • Budovat:
    • Vytvoření jedné architektury (např. ARM64) je rychlejší než binární soubor FAT (např. ARMv7 + ARM64)
    • Vyhněte se optimalizaci souborů PNG při ladění
    • Zvažte propojení všech sestavení. Optimalizace každého sestavení
    • Zakázání vytváření symbolů ladění pomocí .--dsym=false Měli byste si ale uvědomit, že zakázání tohoto stavu znamená, že na tomto počítači, který aplikaci sestavil, může být symbolické pouze v případě, že aplikace nebyla odstraněna.

Některé věci, kterým byste se měli vyhnout, jsou:

  • Binární soubory fat (ladění)
  • Zakázání linkeru --nolink
  • Zakázání prokládání
    • Symboly --nosymbolstrip
    • IL (uvolnění) --nostrip.

Další tipy

  • Stejně jako v simulátoru upřednostňujte sestavení před opětovném sestavením.
    • Sestavení AOT (soubory objektů) se ukládají do mezipaměti.
  • Ladění buildů trvá déle kvůli symbolům, spuštění nástroje dsymutil a vzhledem k tomu, že se na zařízení nahraje větší čas navíc.
  • Sestavení vydaných verzí budou ve výchozím nastavení provádět pruhy il sestavení. To trvá jen trochu času a pravděpodobně se vrátí zpět při nasazení menšího .app do zařízení.
  • Vyhněte se nasazování velkých statických souborů v každém sestavení (ladění)
    • Použití UIFileSharingEnabled (info.plist)
      • Prostředky lze nahrát jednou
  • Pokud máte pochybnosti, použijte --time --time příznak k měření změny.

Následující snímek obrazovky ukazuje, jak nastavit tyto možnosti simulátoru v možnostech iOSu:

Screenshot shows Project Options, including Linker behavior, Supported architectures, and other settings.

Použití linkeru

Při vytváření aplikace používá mtouch linker pro spravovaný kód, který odebere kód, který aplikace nepoužívá. Teoreticky to poskytuje menší a rychlejší buildy. Další informace o linkeru najdete v průvodci propojením v iOSu.

Při používání linkeru zvažte následující možnosti:

  • Výběrem možnosti Nevypojovat pro sestavení zařízení trvá delší dobu a také se vygeneruje větší aplikace.
    • Apple odmítne aplikace, pokud jsou větší než limit velikosti. Závisí na tom MinimumOSVersion, že to může být tak malé jako 60 MB.
    • Je zahrnut nativní spustitelný soubor.
    • Použití příkazu Ne link je pro sestavení simulátoru rychlejší, protože se používá kompilace JIT (na rozdíl od AOT na zařízení).
  • Výchozí možností je sada SDK odkazu.
  • Propojení Vše nemusí být bezpečné pro použití, zejména pokud používáte kód, který není vaším vlastníkem, jako jsou NuGety nebo komponenty. Pokud se rozhodnete, že nebudete propojit všechna sestavení z těchto služeb, budou součástí vaší aplikace, potenciálně vytvářet větší aplikace.
    • Pokud ale zvolíte Možnost Propojit všechny aplikace, může dojít k chybovému ukončení, zejména pokud se používají externí komponenty. Důvodem je, že některé komponenty používají Reflexe ion u určitých typů.
    • Statická analýza a odraz nefungují společně.

Pomocí atributu můžete dát pokyn, aby se věci v aplikaci zachovaly.[Preserve]

Pokud nemáte přístup ke zdrojovému kódu nebo ho vygeneruje nástroj a nechcete ho změnit, můžete ho přesto propojit vytvořením souboru XML, který popisuje všechny typy a členy, které je potřeba zachovat. Příznak pak můžete přidat --xml={file.name}.xml do možností projektu, které zpracovaly kód přesně tak, jako kdybyste používali atributy.

Částečné propojení aplikací

Je také možné částečně propojit aplikace, aby se optimalizoval čas sestavení aplikace:

  • Použití Link All a přeskočení některých sestavení

    • Dojde ke ztrátě některých optimalizací velikosti aplikace.
    • Není vyžadován žádný přístup ke zdrojovému kódu.
    • Například --linkall --linkskip=fieldserviceiOS .
  • Použijte Link SDK možnost a použijte [LinkerSafe] atribut u sestavení, která potřebujete.

    • Vyžaduje se přístup ke zdrojovému kódu.
    • Říká systému, že sestavení je bezpečné propojit a zpracovává se, jako by se jednalo o Xamarin SDK.

Objective-C Vazby

  • Použití atributu [Assembly: LinkerSafe] u vazeb může ušetřit čas a velikost.

  • SmartLink

    • Hotovo na nativní straně
    • Použití atributu [LinkWith (SmartLink=true)]
    • To pomůže nativnímu linkeru eliminovat nativní kód z knihovny, se kterou vytváříte propojení.
    • Všimněte si, že dynamické vyhledávání symbolů s tím nebude fungovat.

Shrnutí

Tato příručka prozkoumala, jak načasovat aplikaci a možnosti pro iOS, které jsou závislé na konfiguraci a možnostech sestavení projektu.