Xamarinは先週,iOS SDK(Xamarin iOS)のバージョン8.6を発表した。同社のiOSとMac用のUnified APIを含む,最初の非ベータ版リリースだ。Unified APIは32ビットのMono TouchとMonoMacを代替するもので,両プラットフォーム間でのコード再利用の実現に加えて,新たに64ビットをサポートする。今回のリリースは,新たに提出するすべてのアプリケーションを64ビット対応する期限としてAppleが設定した,2月1日よりも2週間先んじたことになる。
Xamarinのモバイル開発プラットフォームは,C#によるネイティブなクロスプラットフォームモバイルアプリの開発を可能にする。iOSとAndroid用の互換ランタイムの開発には,オープンソースのMonoツールチェーンを活用している。iOSではAOT(Ahead-of-Time)コンパイラを使用して,C#アプリケーションをネイティブなARMアセンブリコードにコンパイルする。Androidでは,C#は中間言語にコンパイルされた上で,デバイス上でさらにJIT(Just-in-Time)コンパイルされる。これにより,一度開発したアプリケーションをiOSやMac,Android,さらにはWindows Phoneで実行できるようになるのだ。
新しいUnified APIは,旧MonoTouch APIと大きくは違っていないが,クロスプラットフォームなコード再利用と64ビット互換性とを進める目的で,2つの大きな変更が施されている。
- ネームスペースの削除 -iOSおよびMacに特有のネームスペースが廃止され,ひとつのネームスペースに統合された。例えば,これまでのMonoTouchのFoundationフレームワークは,iOSではMonoTouch.Foundation,MacではMonoMac.Foundationというネームスペースであったが,いずれのプラットフォームもFoundationというネームスペースで見付けられるようになった。
- 新しいネイティブタイプ -旧MonoTouchとMonoMac APIでは,NSInteger(32ビットデバイスではint,64ビットデバイスではlong と解釈される)のようなアーキテクチャ非依存の型であっても,常に対応する32ビットの.NETの型にマップされていた。この制限を訂正するためにXamarinは,System.nint, System.nuint, System.nfloatという,3つのネイティブタイプを新たに導入した。それぞれの型は暗黙的に,デバイスのアーキテクチャについて適切なバッキングタイプにマップされる。Unified APIでは.NETのプリミティブタイプに代えて,これらの新しいネイティブタイプが積極的に使用されている。
Unified APIを使用するようにアプリをアップデートしたい開発者は,手作業でそれを行うか,あるいはXamarinのMigration Toolを利用する。Xamarin Studio 5.7の一部として配布されるMigration Toolは,必要なプロジェクト設定と,API参照の更新を自動的に行ってくれるツールだ。別の選択肢として,“Updating Existing iOS Apps”ガイドに示されたステップに従って,アプリを手作業でアップデートする方法も可能だ。Xamarinは双方のアプローチに関する詳しい情報を,今週初めのウェビナでも提供している。その時の録画は,Xamarinのブログで見ることができる。
2014年12月にInfoQがレポートしたように,Xamarinは,サードパーティのライブラリやコンポーネントの開発者を対象として,ベータリリースを配布することで,プロジェクトのアップデートを促進している。ただし,すべてのサードパーティコンポーネントがアップデートを行う訳ではない。この問題を回避するには,開発者自身がプロジェクトビルドの一部分として,これらのコンポーネントのコードの移行とコンパイルを行う必要がある。
開発者はUnified APIを使うことで初めて,64ビット対応のiOSおよびMacアプリをコンパイルできるようになる。この機能が特に関係するのは,iOSアプリを新規開発中の開発者たちだ。10月のAppleの発表によって,新たに開発されるアプリは,2015年2月1日までに64ビット対応しなければならなくなった。すでにAppStoreで公開済のアプリの開発者には,さらに猶予が与えられていて,2015年6月1日までに64ビット対応を追加するアップデートを行えばよい。