Migrace vazby na Unified API

tento článek popisuje kroky potřebné k aktualizaci stávající vazby Xamarin Project pro podporu sjednocených rozhraní api pro aplikace xamarin. IOS a xamarin. Mac.

Přehled

Od 1. února 2015 Apple vyžaduje, aby všechny nové odesílání do iTunes a Mac App Storu měly 64 bitové aplikace. V důsledku toho bude muset jakákoli nová aplikace Xamarin. iOS nebo Xamarin. Mac používat novou Unified API místo stávajících rozhraní API pro klasický MonoTouch a MonoMac, aby podporovala 64 bit.

kromě toho musí být všechny vazby xamarin Project taky podporovat nová sjednocená rozhraní api, která se mají zahrnout do projektu xamarin. iOS nebo xamarin. Mac s 64. Tento článek se zabývá kroky potřebnými k aktualizaci existujícího projektu vazby na použití Unified API.

Požadavky

K provedení kroků uvedených v tomto článku jsou potřeba následující:

  • Visual Studio pro Mac – na vývojovém počítači je nainstalovaná a nakonfigurovaná nejnovější verze Visual Studio pro Mac.
  • Apple Mac – pro vytváření projektů vazeb pro iOS a Mac se vyžaduje Apple Mac.

vytváření vazeb projektů není v aplikaci Visual studio v Windowsm počítači podporováno.

Úprava příkazů using

Sjednocená rozhraní API usnadňují sdílení kódu mezi systémy Mac a iOS a také umožňuje podporovat 32 a 64 bitových aplikací se stejným binárním souborem. Vyřazením předpon MonoMac a MonoTouch z oborů názvů se jednodušší sdílení dosahuje v projektech aplikací Xamarin. Mac a Xamarin. iOS.

V důsledku toho bude nutné upravit některou z našich kontraktů vazby (a dalších .cs souborů v našem projektu vazby) a odebrat z našich příkazů předpony .cs a MonoTouch .

Například s ohledem na následující příkazy using ve kontraktu vazby:

using System;
using System.Drawing;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
using MonoTouch.ObjCRuntime;

Vypnuli jsme MonoTouch předponu, která bude vypadat následovně:

using System;
using System.Drawing;
using Foundation;
using UIKit;
using ObjCRuntime;

Znovu to budeme potřebovat pro všechny .cs soubory v našem projektu vazby. V rámci této změny je dalším krokem aktualizace našeho projektu vazby na použití nových nativních datových typů.

Další informace o Unified API najdete v dokumentaci k Unified API . Další informace o podpoře 32 a 64 bitových aplikací a informací o rozhraních najdete v dokumentaci k opatřením týkajícím se 32 a 64 bitové platformy .

Aktualizace nativních datových typů

Objective-C mapuje NSInteger datový typ na int32_t 32 bitových systémů a na int64_t 64 bitových systémů. Aby se toto chování shodovalo, nová Unified API nahradí předchozí použití int (což je v rozhraní .NET definováno jako vždy System.Int32 ) k novému datovému typu: System.nint .

Spolu s novým nint datovým typem Unified API zavádí i nuintnfloat typy a pro mapování na NSUIntegerCGFloat typy a.

V uvedeném příkladu Musíme zkontrolovat naše rozhraní API a zajistit, aby všechny instance a, NSIntegerNSUIntegerCGFloat které jsme předtím namapovali, int a uintfloat aktualizovaly na nové nintnuintnfloat typy a.

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 jsme novou vazbu na:

[Export("add:and:")]
nint Add(nint operandUn, nint operandDeux);

Pokud jsme namapováni na novější verzi knihovny třetí strany, než na kterou jsme původně propojili, musíme zkontrolovat .h soubory hlaviček pro knihovnu a zjistit, jestli je jakékoli ukončení, explicitní volání int ,, int32_tunsigned intuint32_t nebo float byly upgradovány na NSInteger , NSUInteger nebo CGFloat . V takovém případě je nint nutné provést stejné úpravy nuint a nfloat typy i jejich mapování.

Další informace o těchto změnách datových typů naleznete v dokumentu nativních typů .

Aktualizace typů CoreGraphics

Datové typy Point, Size a Rectangle používané s CoreGraphics použitím 32 nebo 64 bitů v závislosti na zařízení, na kterém je spuštěno. Když Xamarin původně naváže rozhraní API pro iOS a Mac, používali jsme stávající datové struktury, ke kterým došlo, aby odpovídaly datovým typům v System.Drawing ( RectangleF například).

Z důvodu požadavků na podporu 64 bitů a nových nativních datových typů bude nutné při volání metod provést následující úpravy stávajícího kódu CoreGraphic :

  • CGRect – použijte místo toho, abyste RectangleF definovali obdélníkové oblasti s plovoucí desetinnou čárkou.
  • CGSize – použijte místo toho, abyste SizeF definovali velikosti plovoucí desetinné čárky (šířku a výšku).
  • CGPoint – použijte místo toho, PointF aby se definovalo umístění s plovoucí desetinnou čárkou (souřadnice X a Y).

V uvedeném příkladu budeme muset zkontrolovat naše rozhraní API a zajistit, aby všechny instance nebo, CGRectCGSizeCGPoint které byly dříve svázané s RectangleFSizeF nebo PointF změněny na nativní typ CGRect , CGSize nebo CGPoint přímo.

Například s ohledem na Objective-C inicializátor:

- (id)initWithFrame:(CGRect)frame;

Pokud předchozí vazba obsahuje následující kód:

[Export ("initWithFrame:")]
IntPtr Constructor (RectangleF frame);

Tento kód by byl aktualizován na:

[Export ("initWithFrame:")]
IntPtr Constructor (CGRect frame);

U všech změn kódu je nyní nutné upravit náš projekt vazby nebo vytvořit soubor pro vazbu s sjednocenými rozhraními API.

Úprava Project vazby

jako poslední krok aktualizace projektu vazby tak, aby používal sjednocená rozhraní api, musíme buď upravit MakeFile , který používáme k sestavení projektu, nebo typu Xamarin Project (pokud se jedná o vazbu z Visual Studio pro Mac), a dát MakeFile pokyn k vytvoření vazby proti sjednoceným rozhraním api namísto klasických.

Aktualizace souboru pravidel

Pokud používáme soubor pravidel k sestavení našeho projektu vazby do .DLL Xamarin, bude nutné zahrnout --new-style možnost příkazového řádku a volat btouch-native místo btouch .

Proto jsou uvedeny 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

Musíme přepínat od volání btouch na btouch-native , proto jsme upravili definici makra takto:

BTOUCH=/Developer/MonoTouch/usr/bin/btouch-native

Aktualizovali jsme volání na btouch a přidali jsme --new-style možnost následujícím způsobem:

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 začít pracovat MakeFile jako normálně a sestavit novou 64 bitovou verzi našeho rozhraní API.

aktualizace typu Project vazby

pokud k sestavení našeho rozhraní API používáme šablonu Visual Studio pro Mac Binding Project, budeme muset aktualizovat na novou Unified API verzi šablony Project vazby. nejjednodušší způsob, jak to provést, je spustit novou vazbu Unified API Project a zkopírovat všechna existující kód a nastavení.

Postupujte následovně:

  1. spusťte Visual Studio pro Mac.

  2. Vybrat soubornovéřešení...

  3. v dialogovém okně nové řešení vyberte Unified APIvazby ios Projectios:

    V dialogovém okně nové řešení vyberte vazby iOS/Unified API/iOS Project

  4. V dialogu Konfigurovat nový projekt zadejte název nového projektu vazby a klikněte na tlačítko OK .

  5. Zahrňte bitovou verzi 64 Objective-C knihovny, pro kterou budete vytvářet vazby.

  6. Zkopírujte zdrojový kód ze stávajícího 32 projektu vazby Classic API (například ApiDefinition.csStructsAndEnums.cs soubory a).

  7. Proveďte výše uvedené změny v souborech zdrojového kódu.

Po všech těchto změnách můžete sestavit novou 64 bitovou verzi rozhraní API, jako by to byla 32 bitová verze.

Souhrn

v tomto článku jsme ukázali změny, které je potřeba provést u stávající vazby Xamarin Project, aby podporovala nová sjednocená rozhraní api a 64 a kroky potřebné k sestavení nové verze rozhraní api kompatibilní s 64 bitovou kopií.