Udostępnij za pośrednictwem


Osadzone struktury w środowisku Xamarin.iOS

W tym dokumencie opisano, jak deweloperzy aplikacji mogą osadzać struktury użytkowników w swoich aplikacjach.

Dzięki systemowi iOS 8.0 firma Apple umożliwiła utworzenie osadzonej platformy do udostępniania kodu między rozszerzeniami aplikacji a główną aplikacją w środowisku Xcode.

Platforma Xamarin.iOS 9.0 dodaje obsługę korzystania z tych osadzonych struktur (utworzonych za pomocą środowiska Xcode) w aplikacjach platformY Xamarin.iOS. Nie będzie można tworzyć platform osadzonych na podstawie dowolnego typu projektów platformY Xamarin.iOS, używać tylko istniejących platform natywnych (Objective-C).

Istnieją dwa sposoby korzystania ze struktur na platformie Xamarin.iOS:

  • Przekaż strukturę do narzędzia mtouch, dodając następujące elementy do dodatkowych argumentów mtouch w opcjach kompilacji systemu iOS projektu:

    --framework:/Path/To/My.Framework
    

    Należy to ustawić dla każdej konfiguracji projektu.

  • Dodawanie odwołań natywnych z menu kontekstowego

Kliknij prawym przyciskiem myszy pozycję Projekt i przejdź do pozycji Dodaj odwołania natywne

Select Add native references in Visual Studio for Mac

Będzie to działać dla wszystkich konfiguracji.

W przyszłych wersjach Visual Studio dla komputerów Mac i narzędzi Xamarin Tools for Visual Studio będzie możliwe korzystanie ze struktur z poziomu środowiska IDE (bez ręcznego edytowania plików projektu).

Kilka przykładowych projektów można znaleźć w witrynie github

Ograniczenia

  • Osadzone struktury są obsługiwane tylko w projektach Unified .
  • Osadzone struktury są obsługiwane tylko w projektach z docelowym wdrożeniem co najmniej systemu iOS 8.0.
  • Jeśli rozszerzenie wymaga osadzonej platformy, aplikacja kontenera musi również mieć odwołanie do struktury, w przeciwnym razie struktura nie zostanie uwzględniona w pakiecie aplikacji.

Środowisko uruchomieniowe Mono

Wewnętrznie platforma Xamarin.iOS korzysta z tej funkcji w celu połączenia ze środowiskiem uruchomieniowym Mono jako platformy, a nie statycznego łączenia środowiska uruchomieniowego Mono z każdym rozszerzeniem i aplikacją kontenera.

Jest to wykonywane automatycznie, jeśli aplikacja kontenera jest aplikacją Unified, zawiera rozszerzenia, a docelowe wdrożenie to iOS 8.0 lub nowszy.

Aplikacje bez rozszerzeń będą nadal łączyć się ze środowiskiem uruchomieniowym Mono statycznie, ponieważ istnieje kara za użycie struktury, jeśli istnieje tylko jedna aplikacja odwołująca się do niej.

To zachowanie może zostać zastąpione przez dewelopera aplikacji, dodając następujący argument jako dodatkowy argument mtouch w opcjach kompilacji systemu iOS projektu:

  • --mono:static: Linki ze środowiskiem uruchomieniowym Mono statycznie.
  • --mono:framework: Łączy ze środowiskiem uruchomieniowym Mono jako strukturą.

Jednym ze scenariuszy łączenia ze środowiskiem uruchomieniowym Mono jako strukturą nawet dla aplikacji bez rozszerzeń jest zmniejszenie rozmiaru pliku wykonywalnego, aby wyeliminować wszelkie ograniczenia rozmiaru wymuszane przez firmę Apple w pliku wykonywalnym. Do celów referencyjnych środowisko uruchomieniowe Mono dodaje około 1,7 MB na architekturę (w wersji Xamarin.iOS 8.12, jednak różni się między wersjami, a nawet między aplikacjami). Struktura Mono dodaje około 2,3 MB na architekturę, co oznacza, że dla aplikacji z jedną architekturą bez żadnych rozszerzeń, dzięki czemu łącze aplikacji ze środowiskiem uruchomieniowym Mono zmniejszy plik wykonywalny o ok. 1,7 MB, ale dodaj platformę ~2,3 MB, co spowoduje ok. 0,6 MB większej aplikacji.