Xamarin.Mac 統合アプリケーションを 64 ビットに更新する
2018 年 1 月の時点で、Apple では新しい Mac App Store 申請が 64 ビットを対象とすることを要求しています。 Mac App Store で既に利用できるアプリは、2018 年 6 月までに 64 ビットをターゲットにするように更新する必要があります。
[ファイル]>[新規] の Xamarin.Mac プロジェクト テンプレートでは、既定で 64 ビット アプリケーションが作成されるため、最近作成されたアプリは既に 64 ビット互換であり、変更は必要ありません。
64 ビットのターゲット設定
Xamarin.Mac アプリの [プロジェクト オプション] ウィンドウを開きます。
[Mac ビルド] を選択し、[サポートされているアーキテクチャ] を x86_64 に設定します。
アプリにネイティブ参照やプロジェクトのバインドなどの外部依存関係がある場合は、64 ビットをターゲットにするように更新します。
エラー
64 ビット サポートでアプリケーションを初めてビルドまたは実行するときに、clang またはランタイムの問題からリンク エラーが発生する可能性があります。 これらのエラーは、サード パーティの依存関係 (Xamarin.Mac のネイティブ参照、プロジェクトのバインド、手動で読み込まれたシステム全体のフレームワークなど) が 64 ビットに更新されていない場合に発生する可能性があります。
ヒント
プロジェクトを 64 ビットに変換することは大きな変更であり、間接的にさまざまなプログラミング エラーが明らかになることがあります。 特に、データ構造のサイズと配置が変更される可能性があります。これは、プロジェクトにリンクされている p/invoke シグネチャとネイティブ コードに影響します。 表示されるビルド警告を確認して、潜在的な問題を把握するために後でアプリケーションを徹底的にテストすることを検討してください。
64 ビットをターゲットにしない、動的にリンクされたサードパーティの依存関係に起因するエラーの例:
ld : warning : ignoring file PATH/ThirdPartyLibrary.framework/ThirdPartyLibrary,
file was built for i386 which is not the architecture being linked (x86_64):
PATH/ThirdPartyLibrary.framework/ThirdPartyLibrary
このエラーは、予期されるハンドルの代わりに IntPtr.Zero
を返して、ランタイムに dlopen
が続く可能性があります。
64 ビットをターゲットにしない、静的にリンクされたサードパーティの依存関係に起因するエラーの例:
Undefined symbols for architecture x86_64:
"_LibraryFunction", referenced from:
-u command line option
ld: symbol(s) not found for architecture x86_64
ビルドして正常に実行するには、これらの依存関係を 64 ビットに更新し、アプリを再コンパイルします。