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:
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).
Aktualizujte celé řešení na Xamarin.Forms verze 1.3.
Nainstalujte balíček NuGet Xamarin.Forms 1.3.1.
App
Aktualizujte třídu ve sdíleném kódu.Aktualizujte
AppDelegate
projekt v iOSu.Aktualizujte
MainActivity
projekt v androidu.Aktualizujte
MainPage
projekt Windows Phone.
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í.
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) aFormsApplicationPage
(Windows Phone).
Tento postup je vysvětlený níže:
2.1 Aktualizace NuGetu ve všech projektech
Aktualizujte Xamarin.Forms na předběžnou 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 Phone. 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í a aktualizace nástrojů>... a kliknutím na seznam Nainstalovaný zkontrolujte, jestli je nuGet Správce balíčků pro Visual Studio minimálně verze 2.8.5. Pokud je starší, klikněte na seznam Aktualizace a stáhněte si 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í zApplication
. - 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 MainPage
vlastnost v podtřídě Application
.
Tato nová Application
základní třída také podporuje OnStart
, OnSleep
a 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ístoUIApplicationDelegate
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ístoFormsActivity
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 Phone
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 naxmlns: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ístoPhoneApplicationPage
dříve). LoadApplication
je volána s novou instancí Xamarin.FormsApp
třídy. Vzhledem k tomu, že windows Phone má už 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.