Migrace vazby na Unified API
Tento článek popisuje kroky potřebné k aktualizaci existujícího projektu vazby Xamarin na podporu sjednocených rozhraní API pro aplikace Xamarin.IOS a Xamarin.Mac.
Přehled
Od 1. února 2015 apple vyžaduje, aby všechna nová odeslání do iTunes a Mac App Store měly být 64bitové aplikace. V důsledku toho bude nová aplikace Xamarin.iOS nebo Xamarin.Mac muset místo stávajících klasických rozhraní MonoTouch a MonoMac používat nové sjednocené rozhraní API, aby podporovala 64bitovou verzi.
Kromě toho musí každý projekt vazby Xamarin podporovat také nová sjednocená rozhraní API, která se mají zahrnout do 64bitového projektu Xamarin.iOS nebo Xamarin.Mac. Tento článek popisuje kroky potřebné k aktualizaci existujícího projektu vazby tak, aby používal sjednocené rozhraní API.
Požadavky
K dokončení kroků uvedených v tomto článku je nutné provést následující kroky:
- Visual Studio pro Mac – nejnovější verze Visual Studio pro Mac nainstalovaná a nakonfigurovaná na vývojovém počítači.
- Apple Mac – K sestavení vazeb projektů pro iOS a Mac se vyžaduje Apple Mac.
Projekty vazeb nejsou v sadě Visual Studio na počítači s Windows podporované.
Úprava příkazů Using
Sjednocená rozhraní API usnadňují sdílení kódu mezi Macem a iOSem a umožňují podporovat 32 a 64bitové aplikace se stejným binárním souborem. Vyřazením předpon MonoMac a MonoTouch z oborů názvů se jednodušší sdílení dosahuje napříč projekty aplikací Xamarin.Mac a Xamarin.iOS.
V důsledku toho budeme muset upravit všechny naše vazbové kontrakty (a další .cs
soubory v našem projektu vazeb), aby se z našich using
příkazů odebraly předpony MonoMac a MonoTouch.
Například vzhledem k následujícím příkazům using ve vazbě kontraktu:
using System;
using System.Drawing;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
using MonoTouch.ObjCRuntime;
Oddělíme předponu MonoTouch
, která bude mít za následek následující:
using System;
using System.Drawing;
using Foundation;
using UIKit;
using ObjCRuntime;
Znovu to budeme muset udělat pro jakýkoli .cs
soubor v našem projektu vazby. Při této změně je dalším krokem aktualizace projektu vazby tak, aby používal nové nativní datové typy.
Další informace o sjednoceném rozhraní API najdete v dokumentaci k sjednocenému rozhraní API . Další informace o podpoře 32 a 64bitových aplikací a informací o architekturách najdete v dokumentaci k 32 a 64bitovým aspektům platformy.
Aktualizace na nativní datové typy
Objective-CNSInteger
mapuje datový typ na int32_t
32bitové systémy a na int64_t
64bitové systémy. Aby toto chování odpovídalo, nahradí nové sjednocené rozhraní API předchozí použití int
(které v .NET je definováno jako vždy System.Int32
) na nový datový typ: System.nint
.
Společně s novým nint
datovým typem zavádí sjednocené rozhraní API i nfloat
nuint
typy pro mapování na typy NSUInteger
a CGFloat
typy.
Vzhledem k výše uvedenému příkladu musíme zkontrolovat naše rozhraní API a zajistit, aby se všechny instance NSInteger
a dříve namapované na int
a uint
float
aktualizovaly se na nové nuint
nint
a nfloat
typy.CGFloat
NSUInteger
Například s ohledem na Objective-C definici metody:
-(NSInteger) add:(NSInteger)operandUn and:(NSInteger) operandDeux;
Pokud předchozí kontrakt vazby měl následující definici:
[Export("add:and:")]
int Add(int operandUn, int operandDeux);
Aktualizovali bychom novou vazbu tak, aby byla:
[Export("add:and:")]
nint Add(nint operandUn, nint operandDeux);
Pokud namapujeme na novější knihovnu třetích stran, než na kterou jsme původně propojili, musíme zkontrolovat .h
soubory hlaviček pro knihovnu a zjistit, jestli nedošlo k int
ukončení, explicitním voláním , int32_t
, unsigned int
nebo uint32_t
float
že byly upgradovány tak, aby byly nebo NSUInteger
NSInteger
CGFloat
. Pokud ano, stejné úpravy nint
nuint
a nfloat
typy budou muset být provedeny i v jejich mapování.
Další informace o těchtozměnách
Aktualizace typů CoreGraphics
Bod, velikost a obdélníkové datové typy, které se používají s CoreGraphics
použitím 32 nebo 64 bitů v závislosti na zařízení, na kterém běží. Když Xamarin původně vázal rozhraní API pro iOS a Mac, použili jsme existující datové struktury, které se stalo, aby odpovídaly datovým typům System.Drawing
(RectangleF
například).
Vzhledem k požadavkům na podporu 64 bitů a nových nativních datových typů bude nutné při volání CoreGraphic
metod provést následující úpravy existujícího kódu:
- CGRect – Použijte
CGRect
místoRectangleF
při definování obdélníkových oblastí s plovoucí desetinou čárkou. - CGSize – Používejte
CGSize
místoSizeF
při definování velikostí s plovoucí desetinnou čárkou (šířku a výšku). - CGPoint – Používejte
CGPoint
místoPointF
při definování umístění s plovoucí desetinou čárkou (souřadnic X a Y).
Vzhledem k výše uvedenému příkladu budeme muset naše rozhraní API zkontrolovat a zajistit, aby všechny instance CGRect
nebo dříve vázané na RectangleF
nativní SizeF
typ nebo PointF
byly změněny na nativní typ CGRect
nebo CGSize
CGPoint
přímo.CGPoint
CGSize
Například při inicializátoru Objective-C :
- (id)initWithFrame:(CGRect)frame;
Pokud předchozí vazba obsahovala následující kód:
[Export ("initWithFrame:")]
IntPtr Constructor (RectangleF frame);
Tento kód bychom aktualizovali na:
[Export ("initWithFrame:")]
IntPtr Constructor (CGRect frame);
Když jsou teď všechny změny kódu zavedené, musíme upravit projekt vazby nebo vytvořit soubor, který se má svázat s jednotnými rozhraními API.
Úprava projektu vazby
Jako poslední krok aktualizace projektu vazby tak, aby používal sjednocená rozhraní API, musíme buď upravit MakeFile
projekt, který používáme k sestavení projektu, nebo typu projektu Xamarin (pokud jsme vázáni z Visual Studio pro Mac) a instruovat btouch k vytvoření vazby s jednotnými rozhraními API místo klasických rozhraní API.
Aktualizace souboru pravidel
Pokud k sestavení projektu vazby do .DLL Xamarinu používáme soubor pravidel, budeme muset místo toho zahrnout možnost příkazového --new-style
řádku a volat btouch-native
btouch
.
S ohledem na následující MakeFile
:
BINDDIR=/src/binding
XBUILD=/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild
PROJECT_ROOT=XMBindingLibrarySample
PROJECT=$(PROJECT_ROOT)/XMBindingLibrarySample.xcodeproj
TARGET=XMBindingLibrarySample
BTOUCH=/Developer/MonoTouch/usr/bin/btouch
all: XMBindingLibrary.dll
libXMBindingLibrarySample-i386.a:
$(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphonesimulator -configuration Release clean build
-mv $(PROJECT_ROOT)/build/Release-iphonesimulator/lib$(TARGET).a $@
libXMBindingLibrarySample-arm64.a:
$(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphoneos -arch arm64 -configuration Release clean build
-mv $(PROJECT_ROOT)/build/Release-iphoneos/lib$(TARGET).a $@
libXMBindingLibrarySample-armv7.a:
$(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphoneos -arch armv7 -configuration Release clean build
-mv $(PROJECT_ROOT)/build/Release-iphoneos/lib$(TARGET).a $@
libXMBindingLibrarySampleUniversal.a: libXMBindingLibrarySample-armv7.a libXMBindingLibrarySample-i386.a libXMBindingLibrarySample-arm64.a
lipo -create -output $@ $^
XMBindingLibrary.dll: AssemblyInfo.cs XMBindingLibrarySample.cs extras.cs libXMBindingLibrarySampleUniversal.a
$(BTOUCH) -unsafe -out:$@ XMBindingLibrarySample.cs -x=AssemblyInfo.cs -x=extras.cs --link-with=libXMBindingLibrarySampleUniversal.a,libXMBindingLibrarySampleUniversal.a
clean:
-rm -f *.a *.dll
Potřebujeme přepnout z volání btouch
na btouch-native
, takže bychom upravili definici makra následujícím způsobem:
BTOUCH=/Developer/MonoTouch/usr/bin/btouch-native
Volání btouch
bychom aktualizovali a přidali následující --new-style
možnosti:
XMBindingLibrary.dll: AssemblyInfo.cs XMBindingLibrarySample.cs extras.cs libXMBindingLibrarySampleUniversal.a
$(BTOUCH) -unsafe --new-style -out:$@ XMBindingLibrarySample.cs -x=AssemblyInfo.cs -x=extras.cs --link-with=libXMBindingLibrarySampleUniversal.a,libXMBindingLibrarySampleUniversal.a
Teď můžeme spustit naši MakeFile
normální verzi a sestavit novou 64bitovou verzi našeho rozhraní API.
Aktualizace typu vazby projektu
Pokud k sestavení našeho rozhraní API používáme šablonu projektu vazby Visual Studio pro Mac, budeme muset aktualizovat na novou verzi sjednoceného rozhraní API šablony projektu vazby. Nejjednodušším způsobem, jak to udělat, je spustit nový projekt vazby sjednoceného rozhraní API a zkopírovat veškerý existující kód a nastavení.
Postupujte následovně:
Spusťte Visual Studio pro Mac.
Vyberte Nové>řešení souboru...>
V dialogovém okně Nové řešení vyberte projekt vazeb rozhraní iOS>Unified API>pro iOS:
V dialogovém okně Konfigurovat nový projekt zadejte název nového projektu vazby a klikněte na tlačítko OK .
Zahrňte 64bitovou Objective-C verzi knihovny, pro kterou budete vytvářet vazby.
Zkopírujte zdrojový kód z existujícího 32bitového projektu vazby rozhraní API Classic (například soubory
ApiDefinition.cs
aStructsAndEnums.cs
soubory).Proveďte výše uvedené změny souborů zdrojového kódu.
Se všemi těmito změnami můžete vytvořit novou 64bitovou verzi rozhraní API stejně jako 32bitovou verzi.
Shrnutí
V tomto článku jsme si ukázali změny, které je potřeba provést v existujícím projektu Xamarin Binding, aby podporovala nová sjednocená rozhraní API a 64bitová zařízení a kroky potřebné k sestavení nové 64bitové kompatibilní verze rozhraní API.