次の方法で共有


既存の Mac アプリの更新

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

64 ビットへの道

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

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

開始前の作業...

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

自動更新

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

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

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

Agree to this warning before the automated migration will run

Xamarin.Mac アプリケーションで Unified API を使用する場合は、次の 2 種類のターゲット フレームワークを選択できます。

  • Xamarin.Mac Mobile Framework - これは、完全なデスクトップ フレームワークのサブセットをサポートする Xamarin.iOS と Xamarin.Android で使用されるのと同じチューニングされた .NET フレームワークです。 これは、リンク動作が優れているため、平均バイナリが小さくなるため、推奨されるフレームワークです。
  • Xamarin.Mac .NET 4.5 Framework - このフレームワークは、デスクトップ フレームワークのサブセットです。 ただし、モバイル フレームワークよりもはるかに少なく完全なデスクトップ フレームワークをトリミングしており、ほとんどの NuGet パッケージまたはサードパーティ ライブラリで "動作する" はずです。 これにより、開発者はサポートされているフレームワークを引き続き使用しながら標準のデスクトップ アセンブリを使用できますが、このオプションを使用すると、より大きなアプリケーション バンドルが生成されます。 これは、Xamarin.Mac Mobile Framework と互換性のないサード パーティの .NET アセンブリが使用されている推奨フレームワークです。 サポートされているアセンブリの一覧については、「アセンブリ」のドキュメントを参照してください。

ターゲット フレームワークの詳細と、Xamarin.Mac アプリケーションの特定のターゲットの選択の影響については、「ターゲット フレームワーク」のドキュメントを参照してください。

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

手動で更新する手順

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

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

csproj ファイルのプロジェクトフレーバーを 42C0BBD9-55CE-4FC1-8D90-A7348ABAFB23 から A3F8F2AB-B479-4A4A-A458-A89E7DC349F1 に変更します。 次に示すように、テキスト エディターで csproj ファイルを編集し、<ProjectTypeGuids> 要素の最初の項目を置き換えます。

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

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

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

<AssemblyName> 要素の後に次のコード行を追加します。

<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<TargetFrameworkIdentifier>Xamarin.Mac</TargetFrameworkIdentifier>

例:

Add these lines of code after the <AssemblyName> element

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

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

It will initially show a broken- XamMac reference similar to this screenshot

XamMac エントリの横にある歯車アイコンをクリックし、[削除] を選択して壊れた参照を削除します。

ソリューション エクスプローラーReferences フォルダーを右クリックし、[参照の編集.] を選択します。 参照の一覧の一番下までスクロールし、Xamarin.Mac 以外のチェックを配置します。

Scroll to the bottom of the list of references and place a check besides Xamarin.Mac

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

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

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

4.型を再マップする

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

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

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

考慮事項

既存の Xamarin.Mac プロジェクトを 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 'monomac.dll' and 'Xamarin.Mac.dll' in the same Xamarin.Mac project - 'Xamarin.Mac.dll' is referenced explicitly, while 'monomac.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.Mac モバイル アプリケーションの場合、開発者は引き続きアプリのオプションから 64 ビット コンピューター用のアプリケーションのビルドを有効にする必要があります。 64 ビット ビルドを有効にする方法の詳細については、32/64 ビット プラットフォームに関する考慮事項のドキュメントの「Xamarin.Mac アプリの 64 ビット ビルドの有効化」を参照してください。

終了しています

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