既存の iOS アプリの更新

次の手順に従って、Unified API を使用するように既存の Xamarin.iOS アプリを更新します。

Unified API を使用するように既存のアプリを更新するには、プロジェクト ファイル自体と、アプリケーション コードで使用される名前空間と API を変更する必要があります。

64 ビットへの道

Xamarin.iOS モバイル アプリケーションの 64 ビット デバイス アーキテクチャをサポートするには、新しい Unified API が必要です。 2015 年 2 月 1 日の時点で、Apple では、iTunes App Store へのすべての新しいアプリの提出で 64 ビット アーキテクチャをサポートしていることを要求しています。

Xamarin には、Classic API から Unified API への移行プロセスを自動化するための、Visual Studio for Mac と Visual Studio の両方向けのツールが用意されています。または、プロジェクト ファイルを手動で変換することもできます。 自動ツールの使用を強くお勧めしますが、この記事では、両方の方法について説明します。

開始前の作業...

既存のコードを Unified API に更新する前に、すべての "コンパイル警告" を排除することを強くおすすめします。 Unified に移行すると、Classic API の多くの "警告" がエラーになります。 Classic API からのコンパイラ メッセージは、更新内容に関するヒントが含まれていることが多いため、開始する前に修正する方が簡単です。

自動更新

警告が修正されたら、Visual Studio for Mac または Visual Studio で既存の iOS プロジェクトを選択し、[プロジェクト] メニューから [Xamarin.iOS Unified API に移行する] を選択します。 次に例を示します。

Choose Migrate to Xamarin.iOS Unified API from the Project menu

自動移行が実行される前に、この警告に同意する必要があります (当然、この冒険に着手する前に、バックアップ/ソース管理があることを確認する必要があります)。

Agree to this warning before the automated migration will run

このツールは基本的に、以下の手動更新に関するセクションで説明されているすべての手順を自動化します。これは、既存の Xamarin.iOS プロジェクトを Unified API に変換するための推奨される方法です。

手動で更新する手順

ここでも、警告が修正されたら、次の手順に従って、新しい Unified API を使用するように Xamarin.iOS アプリを手動で更新します。

1.プロジェクト タイプとビルド ターゲットを更新する

csproj ファイルのプロジェクト フレーバーを 6BC8ED88-2882-458C-8E55-DFD12B67127B から FEACFBD2-3405-455C-9665-78FE426C6842 に変更します。 次に示すように、テキスト エディターで csproj ファイルを編集し、<ProjectTypeGuids> 要素の最初の項目を置き換えます。

Edit the csproj file in a text editor, replacing the first item in the ProjectTypeGuids element as shown

次に示すように、Xamarin.MonoTouch.CSharp.targets を含む Import 要素を Xamarin.iOS.CSharp.targets に変更します。

Change the Import element that contains Xamarin.MonoTouch.CSharp.targets to Xamarin.iOS.CSharp.targets as shown

2.プロジェクト参照を更新する

iOS アプリケーション プロジェクト の [参照] ノードを展開します。 最初は、このスクリーンショットのような *broken- monotouch 参照が表示されます (プロジェクト タイプを変更したばかりであるため)。

It will initially show a broken- monotouch reference similar to this screenshot because the project type changed

iOS アプリケーション プロジェクトを右クリックして参照を編集し、モノタッチ参照をクリックし、赤い [X] ボタンを使用して削除します。

Right-click on the iOS application project to Edit References, then click on the monotouch reference and delete it using the red X button

次に、参照リストの末尾までスクロールし、Xamarin.iOS アセンブリをオンにします。

Now scroll to the end of the references list and tick the Xamarin.iOS assembly

[OK] を押して、プロジェクト参照の変更を保存します。

3.名前空間から MonoTouch を削除する

using ステートメント内の名前空間から、またはクラス名が完全修飾されている場所 (たとえば、MonoTouch.UIKit は単に UIKit になります) から MonoTouch プレフィックスを削除します。

4.型を再マップする

ネイティブ型が導入され、たとえば System.Drawing.RectangleF のインスタンスなど以前に使用されていた一部の型が CoreGraphics.CGRect に置き換えられました。 型の完全な一覧は、「ネイティブ型」ページにあります。

5.メソッドのオーバーライドを修正する

一部 UIKit のメソッドでは、新しいネイティブ型 (nint など) を使用するようにシグネチャが変更されています。 カスタム サブクラスがこれらのメソッドをオーバーライドすると、シグネチャは一致しなくなり、エラーが発生します。 ネイティブ型を使用して新しいシグネチャに一致するようにサブクラスを変更することで、これらのメソッドのオーバーライドを修正します。

例としては、nint を返すように public override int NumberOfSections (UITableView tableView) を変更したり、public override int RowsInSection (UITableView tableView, int section) の戻り値の型とパラメーター型の両方を nint に変更します。

考慮事項

既存の Xamarin.iOS プロジェクトを Classic API から新しい Unified API に変換する場合、そのアプリが 1 つ以上のコンポーネントまたは NuGet パッケージに依存している場合は、次の事項を考慮する必要があります。

コンポーネント

アプリケーションに含めたコンポーネントも Unified API に更新する必要があります。そうしないと、コンパイルの試行時に競合が発生します。 含まれているコンポーネントについては、現在のバージョンを、Unified API をサポートする Xamarin コンポーネント ストアの新しいバージョンに置き換えて、クリーン ビルドを実行します。 作成者によってまだ変換されていないコンポーネントには、コンポーネント ストアに 32 ビットのみの警告が表示されます。

NuGet のサポート対象

Unified API サポートを使用するために NuGet に変更を加えましたが、NuGet の新しいリリースはないため、NuGet に新しい API を認識させる方法を評価中です。

それまでは、コンポーネントと同様に、プロジェクトに含めた NuGet パッケージを、Unified API をサポートするバージョンに切り替えて、後でクリーン ビルドを実行する必要があります。

重要

アプリケーションを Unified API に変換した後、"Error 3 Cannot include both 'monotouch.dll' and 'Xamarin.iOS.dll' in the same Xamarin.iOS project - 'Xamarin.iOS.dll' is referenced explicitly, while 'monotouch.dll' is referenced by 'xxx, Version=0.0.000, Culture=neutral, PublicKeyToken=null'" という形式のエラーが表示されたら、通常は、Unified API に更新されていないコンポーネントまたは NuGet パッケージがプロジェクト内に存在することが原因です。 既存のコンポーネントまたは NuGet を削除し、Unified API をサポートするバージョンに更新し、クリーン ビルドを実行する必要があります。

Xamarin.iOS アプリの 64 ビット ビルドの有効化

Unified API に変換された Xamarin.iOS モバイル アプリケーションの場合、開発者は引き続きアプリのオプションから 64 ビット コンピューター用のアプリケーションのビルドを有効にする必要があります。 64 ビット ビルドを有効にする方法の詳細については、32/64 ビット プラットフォームに関する考慮事項のドキュメントの「Xamarin.iOS アプリの 64 ビット ビルドの有効化」を参照してください。

最後に

自動または手動の方法を使用して Xamarin.iOS アプリケーションを Classic API から Unified API に変換するかどうかに関係なく、さらに手動で介入する必要があるインスタンスがいくつかあります。 既知の問題と回避策については、「Unified API へのコードの更新に関するヒント」のドキュメントを参照してください。