Memigrasikan Pengikatan ke API Terpadu
Artikel ini membahas langkah-langkah yang diperlukan untuk memperbarui Proyek Pengikatan Xamarin yang ada untuk mendukung API Terpadu untuk aplikasi Xamarin.IOS dan Xamarin.Mac.
Gambaran Umum
Mulai 1 Februari 2015 Apple mengharuskan semua pengiriman baru ke iTunes dan Mac App Store harus berupa aplikasi 64 bit. Akibatnya, aplikasi Xamarin.iOS atau Xamarin.Mac baru harus menggunakan API Terpadu baru alih-alih API MonoTouch dan MonoMac Klasik yang ada untuk mendukung 64 bit.
Selain itu, Proyek Pengikatan Xamarin apa pun juga harus mendukung API Terpadu baru untuk disertakan dalam proyek Xamarin.iOS atau Xamarin.Mac 64 bit. Artikel ini akan membahas langkah-langkah yang diperlukan untuk memperbarui proyek pengikatan yang ada untuk menggunakan API Terpadu.
Persyaratan
Berikut ini diperlukan untuk menyelesaikan langkah-langkah yang disajikan dalam artikel ini:
- Visual Studio untuk Mac - Versi terbaru Visual Studio untuk Mac yang diinstal dan dikonfigurasi di komputer pengembangan.
- Apple Mac - Mac Apple diperlukan untuk membangun Proyek Pengikatan untuk iOS dan Mac.
Proyek pengikatan tidak didukung di Visual studio pada komputer Windows.
Mengubah Menggunakan Pernyataan
API Terpadu mempermudah berbagi kode antara Mac dan iOS serta memungkinkan Anda mendukung aplikasi 32 dan 64 bit dengan biner yang sama. Dengan menghilangkan awalan MonoMac dan MonoTouch dari namespace layanan, berbagi yang lebih sederhana dicapai di seluruh proyek aplikasi Xamarin.Mac dan Xamarin.iOS.
Akibatnya, kami perlu memodifikasi salah satu kontrak pengikatan kami (dan file lain .cs
dalam proyek pengikatan kami) untuk menghapus awalan MonoMac dan MonoTouch dari pernyataan kami using
.
Misalnya, mengingat pernyataan penggunaan berikut dalam kontrak pengikatan:
using System;
using System.Drawing;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
using MonoTouch.ObjCRuntime;
Kami akan menghapus awalan MonoTouch
yang mengakibatkan hal-hal berikut:
using System;
using System.Drawing;
using Foundation;
using UIKit;
using ObjCRuntime;
Sekali lagi, kita perlu melakukan ini untuk file apa pun .cs
dalam proyek pengikatan kita. Dengan perubahan ini, langkah selanjutnya adalah memperbarui proyek pengikatan kami untuk menggunakan Jenis Data Asli baru.
Untuk informasi selengkapnya tentang API Terpadu, silakan lihat dokumentasi API Terpadu. Untuk latar belakang lebih lanjut tentang mendukung aplikasi 32 dan 64 bit dan informasi tentang kerangka kerja, lihat dokumentasi Pertimbangan Platform 32 dan 64 bit.
Perbarui ke Jenis Data Asli
Objective-CNSInteger
memetakan jenis data ke int32_t
pada sistem 32 bit dan ke int64_t
pada sistem 64 bit. Untuk mencocokkan perilaku ini, API Terpadu baru menggantikan penggunaan int
sebelumnya (yang di .NET didefinisikan sebagai selalu System.Int32
) ke jenis data baru: System.nint
.
Bersama dengan jenis data baru nint
, API Terpadu memperkenalkan nuint
jenis dan nfloat
, untuk pemetaan ke NSUInteger
jenis dan CGFloat
juga.
Mengingat hal di atas, kita perlu meninjau API kita dan memastikan bahwa setiap instans NSInteger
, NSUInteger
dan CGFloat
yang sebelumnya kita petakan ke int
, uint
dan float
diperbarui ke jenis , nuint
dan nfloat
barunint
.
Misalnya, diberikan Objective-C definisi metode dari:
-(NSInteger) add:(NSInteger)operandUn and:(NSInteger) operandDeux;
Jika kontrak pengikatan sebelumnya memiliki definisi berikut:
[Export("add:and:")]
int Add(int operandUn, int operandDeux);
Kami akan memperbarui pengikatan baru menjadi:
[Export("add:and:")]
nint Add(nint operandUn, nint operandDeux);
Jika kita memetakan ke pustaka pihak ke-3 versi yang lebih baru daripada yang awalnya ditautkan, kita perlu meninjau .h
file header untuk pustaka dan melihat apakah ada panggilan keluar, eksplisit ke int
, int32_t
, unsigned int
, uint32_t
atau float
telah ditingkatkan menjadi NSInteger
, NSUInteger
atau CGFloat
. Jika demikian, modifikasi yang sama pada nint
, nuint
dan nfloat
jenis juga perlu dilakukan pada pemetaannya.
Untuk mempelajari selengkapnya tentang perubahan jenis data ini, lihat dokumen Jenis Asli.
Memperbarui Jenis CoreGraphics
Jenis data titik, ukuran, dan persegi panjang yang digunakan dengan CoreGraphics
penggunaan 32 atau 64 bit tergantung pada perangkat tempat data dijalankan. Ketika Xamarin awalnya mengikat API iOS dan Mac, kami menggunakan struktur data yang ada yang kebetulan cocok dengan jenis data di System.Drawing
(RectangleF
misalnya).
Karena persyaratan untuk mendukung 64 bit dan jenis data asli baru, penyesuaian berikut perlu dilakukan pada kode yang ada saat memanggil CoreGraphic
metode:
- CGRect - Gunakan
CGRect
alih-alihRectangleF
saat menentukan wilayah persegi panjang floating point. - CGSize - Gunakan
CGSize
alih-alihSizeF
saat menentukan ukuran titik mengambang (lebar dan tinggi). - CGPoint - Gunakan
CGPoint
alih-alihPointF
saat menentukan lokasi titik mengambang (koordinat X dan Y).
Mengingat hal di atas, kita perlu meninjau API kita dan memastikan bahwa setiap instans , atau yang sebelumnya terikat ke RectangleF
, SizeF
atau PointF
diubah ke jenis CGRect
asli , CGSize
atau CGPoint
secara langsung.CGPoint
CGSize
CGRect
Misalnya, diberikan inisialisasi Objective-C dari:
- (id)initWithFrame:(CGRect)frame;
Jika pengikatan kami sebelumnya menyertakan kode berikut:
[Export ("initWithFrame:")]
IntPtr Constructor (RectangleF frame);
Kami akan memperbarui kode tersebut ke:
[Export ("initWithFrame:")]
IntPtr Constructor (CGRect frame);
Dengan semua perubahan kode sekarang di tempat, kita perlu memodifikasi proyek pengikatan kita atau membuat file untuk mengikat terhadap API Terpadu.
Mengubah Proyek Pengikatan
Sebagai langkah terakhir untuk memperbarui proyek pengikatan kami untuk menggunakan API Terpadu, kita perlu memodifikasi MakeFile
yang kita gunakan untuk membangun proyek atau Jenis Proyek Xamarin (jika kita mengikat dari dalam Visual Studio untuk Mac) dan menginstruksikan btouch untuk mengikat terhadap API Terpadu alih-alih yang Klasik.
Memperbarui MakeFile
Jika kita menggunakan makefile untuk membangun proyek pengikatan kita ke dalam .DLL Xamarin, kita harus menyertakan --new-style
opsi baris perintah dan memanggil btouch-native
alih-alih btouch
.
Jadi diberikan hal-hal berikut 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
Kita perlu beralih dari panggilan btouch
ke btouch-native
, sehingga kita akan menyesuaikan definisi makro kita sebagai berikut:
BTOUCH=/Developer/MonoTouch/usr/bin/btouch-native
Kami akan memperbarui panggilan ke btouch
dan menambahkan --new-style
opsi sebagai berikut:
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
Kita sekarang dapat menjalankan seperti MakeFile
biasa untuk membangun API versi 64 bit baru.
Memperbarui Jenis Proyek Pengikatan
Jika kita menggunakan Templat Proyek Pengikatan Visual Studio untuk Mac untuk membangun API kita, kita harus memperbarui ke versi API Terpadu baru dari Templat Proyek Pengikatan. Cara term mudah untuk melakukan ini adalah dengan memulai Proyek Pengikatan API Terpadu baru dan menyalin semua kode dan pengaturan yang ada.
Lakukan:
Mulai Visual Studio untuk Mac.
Pilih File>Solusi Baru...>
Di Kotak Dialog Solusi Baru, pilih iOS>Unified API>iOS Binding Project:
Pada dialog 'Konfigurasikan proyek baru Anda' masukkan Nama untuk proyek pengikatan baru dan klik tombol OK .
Sertakan pustaka versi Objective-C 64 bit yang akan Anda buat pengikatannya.
Salin kode sumber dari proyek pengikatan API Klasik 32 bit yang ada (seperti
ApiDefinition.cs
file danStructsAndEnums.cs
).Buat perubahan yang dicatat di atas pada file kode sumber.
Dengan semua perubahan ini, Anda dapat membangun API versi 64 bit baru seperti yang Anda lakukan pada versi 32 bit.
Ringkasan
Dalam artikel ini kami telah menunjukkan perubahan yang perlu dilakukan pada Proyek Pengikatan Xamarin yang ada untuk mendukung API Terpadu baru dan perangkat 64 bit dan langkah-langkah yang diperlukan untuk membangun API versi baru yang kompatibel dengan 64 bit.