Aktualizace existujících aplikací Xamarin.Forms

Pomocí těchto kroků aktualizujte existující aplikaci Xamarin.Forms tak, aby používala sjednocené rozhraní API a aktualizovala se na verzi 1.3.1.

Důležité

Vzhledem k tomu, že Xamarin.Forms 1.3.1 je první verze, která podporuje sjednocené rozhraní API, měli byste celé řešení aktualizovat tak, aby používalo nejnovější verzi současně s migrací aplikace pro iOS do sjednocené verze. To znamená, že kromě aktualizace projektu iOS pro sjednocenou podporu budete také muset upravit kód ve všech projektech v řešení.

Aktualizace se provádí ve dvou krocích:

  1. Migrujte aplikaci pro iOS do sjednoceného rozhraní API pomocí nástroje pro migraci buildu Visual Studio pro Mac.

    • Pomocí nástroje pro migraci můžete automaticky aktualizovat projekt.

    • Aktualizujte nativní rozhraní API pro iOS podle pokynů pro aktualizaci aplikací pro iOS (konkrétně ve vlastním vykreslovacím nebo závislém kódu).

  2. Aktualizujte celé řešení na Xamarin.Forms verze 1.3.

    1. Nainstalujte balíček NuGet Xamarin.Forms 1.3.1.

    2. App Aktualizujte třídu ve sdíleném kódu.

    3. Aktualizujte AppDelegate projekt v iOSu.

    4. Aktualizujte MainActivity projekt v androidu.

    5. Aktualizujte MainPage projekt windows Telefon.

1. Aplikace pro iOS (sjednocená migrace)

Součástí migrace je upgrade Xamarin.Forms na verzi 1.3, která podporuje sjednocené rozhraní API. Aby se vytvořily správné odkazy na sestavení, musíme nejprve aktualizovat projekt iOS tak, aby používal sjednocené rozhraní API.

Nástroj pro migraci

Klikněte na projekt iOS tak, aby byl vybraný, a pak zvolte Migrace projektu > do sjednoceného rozhraní API Xamarin.iOS... a přijměte souhlas se zprávou upozornění, která se zobrazí.

Choose Project > Migrate to Xamarin.iOS Unified API... and agree to the warning message that appears

Automaticky se to provede takto:

  • Změňte typ projektu tak, aby podporoval sjednocené 64bitové rozhraní API.
  • Změňte odkaz na architekturu na Xamarin.iOS (nahraďte starý odkaz monotouch ).
  • Změňte odkazy na obor názvů v kódu tak, aby se předpona odebrala MonoTouch .
  • Aktualizujte soubor csproj tak, aby používal správné cíle sestavení pro sjednocené rozhraní API.

Vyčistěte a sestavte projekt, abyste měli jistotu, že nejsou k dispozici žádné další chyby, které by bylo potřeba opravit. Žádná další akce by se neměla vyžadovat. Tyto kroky jsou podrobněji vysvětleny v dokumentaci k sjednocenému rozhraní API.

Aktualizace nativních rozhraní API pro iOS (v případě potřeby)

Pokud jste přidali další nativní kód pro iOS (například vlastní renderery nebo služby závislostí), možná budete muset provést další ruční opravy kódu. Znovu zkompilujte aplikaci a přečtěte si pokyny k aktualizaci existujících aplikací pro iOS, kde najdete další informace o změnách, které mohou být vyžadovány. Tyto tipy vám také pomůžou identifikovat požadované změny.

2. Aktualizace Xamarin.Forms 1.3.1

Po aktualizaci aplikace pro iOS na sjednocené rozhraní API je potřeba zbytek řešení aktualizovat na Xamarin.Forms verze 1.3.1. Sem patří:

  • Aktualizace balíčku NuGet Xamarin.Forms v každém projektu
  • Změna kódu tak, aby používala nové třídy Xamarin.Forms Application, FormsApplicationDelegate (iOS), FormsApplicationActivity (Android) a FormsApplicationPage (Windows Telefon).

Tento postup je vysvětlený níže:

2.1 Aktualizace NuGetu ve všech projektech

Aktualizujte předběžnou verzi Xamarin.Forms na verzi 1.3.1 pomocí Správce balíčků NuGet pro všechny projekty v řešení: PCL (pokud je k dispozici), iOS, Android a Windows Telefon. Doporučujeme odstranit a znovu přidat balíček NuGet Xamarin.Forms pro aktualizaci na verzi 1.3.

Poznámka:

Xamarin.Forms verze 1.3.1 je aktuálně v předběžné verzi. To znamená, že musíte v NuGetu vybrat možnost předběžné verze (pomocí zaškrtávacího políčka v Visual Studio pro Mac nebo rozevíracího seznamu v sadě Visual Studio), abyste viděli nejnovější předběžnou verzi.

Důležité

Pokud používáte Visual Studio, ujistěte se, že je nainstalovaná nejnovější verze Správce balíčků NuGet. Starší verze NuGetu v sadě Visual Studio nebudou správně instalovat sjednocenou verzi Xamarin.Forms 1.3.1. Přejděte na Rozšíření nástrojů > a Aktualizace... a kliknutím na seznam Nainstalovaný zkontrolujte, jestli je Správce balíčků NuGet pro Visual Studio minimálně verze 2.8.5. Pokud je starší, kliknutím na seznam Aktualizace stáhněte nejnovější verzi.

Po aktualizaci balíčku NuGet na Xamarin.Forms 1.3.1 proveďte v každém projektu následující změny a upgradujte na novou Xamarin.Forms.Application třídu.

2.2 Přenosná knihovna tříd (nebo sdílený projekt)

Změňte soubor App.cs tak, aby:

  • Třída App nyní dědí z Application.
  • Vlastnost MainPage je nastavena na první stránku obsahu, kterou chcete zobrazit.
public class App : Application // superclass new in 1.3
{
    public App ()
    {
        // The root page of your application
        MainPage = new ContentPage {...}; // property new in 1.3
    }

Zcela jsme odebrali metodu GetMainPage a místo toho jsme nastavili MainPagevlastnost v podtřídě Application .

Tato nová Application základní třída také podporuje OnStart, OnSleepa OnResume přepsání, které vám pomohou spravovat životní cyklus vaší aplikace.

Třída App se pak předá nové LoadApplication metodě v každém projektu aplikace, jak je popsáno níže:

2.3 Aplikace pro iOS

Změňte soubor AppDelegate.cs tak, aby:

  • Třída dědí z FormsApplicationDelegate (místo UIApplicationDelegate dříve).
  • LoadApplication je volána s novou instancí App.
[Register ("AppDelegate")]
public partial class AppDelegate :
    global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate // superclass new in 1.3
{
    public override bool FinishedLaunching (UIApplication app, NSDictionary options)
    {
        global::Xamarin.Forms.Forms.Init ();

        LoadApplication (new App ());  // method is new in 1.3

        return base.FinishedLaunching (app, options);
    }
}

2.3 Aplikace pro Android

Změňte soubor MainActivity.cs tak, aby:

  • Třída dědí z FormsApplicationActivity (místo FormsActivity dříve).
  • LoadApplication se volá s novou instancí App
[Activity (Label = "YOURAPPNAM", Icon = "@drawable/icon", MainLauncher = true,
ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity :
    global::Xamarin.Forms.Platform.Android.FormsApplicationActivity // superclass new in 1.3
{
    protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);

        global::Xamarin.Forms.Forms.Init (this, bundle);

        LoadApplication (new App ()); // method is new in 1.3
    }
}

2.4 Aplikace pro Windows Telefon

Potřebujeme aktualizovat MainPage – JAK XAML, tak kód.

Změňte soubor MainPage.xaml tak, aby:

  • Kořenový element XAML by měl být winPhone:FormsApplicationPage.
  • Atribut xmlns:phone by měl být změněn na xmlns:winPhone="clr-namespace:Xamarin.Forms.Platform.WinPhone;assembly=Xamarin.Forms.Platform.WP8"

Níže je uvedený aktualizovaný příklad – tyto věci byste měli upravit jenom (zbytek atributů by měl zůstat stejný):

<winPhone:FormsApplicationPage
   ...
   xmlns:winPhone="clr-namespace:Xamarin.Forms.Platform.WinPhone;assembly=Xamarin.Forms.Platform.WP8"
    ...>
</winPhone:FormsApplicationPage>

Změňte MainPage.xaml.cs soubor tak, aby:

  • Třída dědí z FormsApplicationPage (místo PhoneApplicationPage dříve).
  • LoadApplication je volána s novou instancí Xamarin.Forms App třídy. Vzhledem k tomu, že systém Windows Telefon má již definovanou vlastní App třídu, může být potřeba plně kvalifikovat tento odkaz.
public partial class MainPage : global::Xamarin.Forms.Platform.WinPhone.FormsApplicationPage // superclass new in 1.3
{
    public MainPage()
    {
        InitializeComponent();
        SupportedOrientations = SupportedPageOrientation.PortraitOrLandscape;

        global::Xamarin.Forms.Forms.Init();
        LoadApplication(new YOUR_APP_NAMESPACE.App()); // new in 1.3
    }
 }

Řešení problému

Občas se po aktualizaci balíčku NuGet Xamarin.Forms zobrazí chyba podobná této chybě. K tomu dochází, když aktualizátor NuGet neodebere úplně odkazy na starší verze ze souborů csproj .

YOUR_PROJECT.csproj: Chyba: Tento projekt odkazuje na balíčky NuGet, které v tomto počítači chybí. Povolte obnovení balíčků NuGet a stáhněte si je. Další informace najdete na webu https://go.microsoft.com/fwlink/?LinkID=322105. Chybějící soubor je .. /.. /packages/Xamarin.Forms.1.2.3.6257/build/portable-win+net45+wp80+MonoAndroid10+MonoTouch10/Xamarin.Forms.targets. (YOUR_PROJECT)

Pokud chcete tyto chyby opravit, otevřete soubor csproj v textovém editoru a vyhledejte <Target prvky, které odkazují na starší verze Xamarin.Forms, například element zobrazený níže. Celý tento prvek byste měli ručně odstranit ze souboru csproj a uložit změny.

  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('..\..\packages\Xamarin.Forms.1.2.3.6257\build\portable-win+net45+wp80+MonoAndroid10+MonoTouch10\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Forms.1.2.3.6257\build\portable-win+net45+wp80+MonoAndroid10+MonoTouch10\Xamarin.Forms.targets'))" />
  </Target>

Po odebrání těchto starých odkazů by se projekt měl úspěšně sestavit.

Důležité informace

Při převodu existujícího projektu Xamarin.Forms z klasického rozhraní API na nové sjednocené rozhraní API je potřeba vzít v úvahu následující aspekty, pokud tato aplikace spoléhá na jednu nebo více komponent nebo balíčků NuGet.

Komponenty

Každá komponenta, kterou jste zahrnuli do aplikace, bude také potřeba aktualizovat na sjednocené rozhraní API nebo při pokusu o kompilaci dojde ke konfliktu. U jakékoli zahrnuté komponenty nahraďte aktuální verzi novou verzí z úložiště komponent Xamarin, která podporuje sjednocené rozhraní API, a proveďte čisté sestavení. Každá komponenta, která ještě nebyla převedena autorem, zobrazí 32bitové upozornění pouze v úložišti komponent.

Podpora NuGetu

I když jsme přispěli změnami NuGetu pro práci s podporou sjednoceného rozhraní API, nebyla k dispozici nová verze NuGetu, takže vyhodnocujeme, jak získat NuGet k rozpoznání nových rozhraní API.

Až do té doby, stejně jako komponenty, budete muset přepnout všechny balíčky NuGet, které jste zahrnuli do projektu, na verzi, která podporuje sjednocená rozhraní API, a následně provést čisté sestavení.

Důležité

Pokud ve formuláři "Chyba 3 nemůže obsahovat monotouch.dll" i "Xamarin.iOS.dll" ve stejném projektu Xamarin.iOS – na Xamarin.iOS.dll se odkazuje explicitně, zatímco "monotouch.dll" se po převodu aplikace na sjednocená rozhraní API odkazuje na xxx, Version=0.0.000, Culture=neutral, PublicKeyToken=null, obvykle je to způsobeno tím, že v projektu, který nebyl aktualizován na sjednocené rozhraní API, buď komponentu, nebo balíček NuGet. Budete muset odebrat existující komponentu nebo NuGet, aktualizovat na verzi, která podporuje sjednocená rozhraní API, a provést čisté sestavení.

Povolení 64bitových buildů aplikací Xamarin.iOS

U mobilní aplikace Xamarin.iOS, která byla převedena na sjednocené rozhraní API, musí vývojář stále povolit sestavení aplikace pro 64bitové počítače z možností aplikace. Podrobné pokyny k povolení 64bitových buildů 64bitových buildů aplikací Xamarin.iOS najdete v dokumentu Věnovaném 32/64bitové platformě.

Shrnutí

Aplikace Xamarin.Forms by se teď měla aktualizovat na verzi 1.3.1 a aplikaci pro iOS migrovanou do sjednoceného rozhraní API (která podporuje 64bitové architektury na platformě iOS).

Jak je uvedeno výše, pokud vaše aplikace Xamarin.Forms obsahuje nativní kód, jako jsou vlastní renderery nebo služby závislostí, může být také potřeba aktualizovat tak, aby používala nové typy zavedené v sjednocené rozhraní API.