13
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

クラスターAdvent Calendar 2021

Day 16

UnityネイティブプラグインのM1 Mac対応

Last updated at Posted at 2021-12-15

この記事は クラスター Advent Calendar 2021 16日目の記事です。
昨日は@194_alertさんの「ワールド紹介動画の撮影について」でした。

こんにちは。ソフトウェアエンジニアのizumiです。
クラスター社ではiOSとかUnityとか色々やっています。

今回は表題の通りUnityネイティブプラグインのM1 Mac対応についてのお話しです。

Unityネイティブプラグインとは

ネイティブプラグイン とは、C、C++、Objective-C、Javaなどで書かれたWindows、Mac、iOS、AndroidなどのプラットフォームのネイティブコードをライブラリとしてUnity側のC#から呼び出す仕組みです。
この仕組みによって、Unityには提供されていないネイティブの処理やデバイス依存の処理などを実装することができます。

image.png

メタバースプラットフォーム clusterは、Windows、MacOS、iOS、Android、Oculus Quest2のマルチプラットフォーム対応アプリケーションで、オーディオ処理などでネイティブプラグインを活用しています。
しかしながら、M1 Macでは主にこのネイティブプラグインが原因で正常動作ができず、開発機もIntel MacやWindowsを用いるようにしていました。
※M1 Macユーザー向けにはiOS版の利用を推奨していました1

(これは余談ですが、M1 MacではUnity Editorで実行した瞬間にUnityがクラッシュしてしまっていたため、原因の特定や調査が困難でした。)

M1 Mac対応

2021年10月のAppleのオンラインイベントでM1 Pro/M1 Max搭載の新型MacBook Pro発表と同時にIntel製のMacBook Proは販売を終了してしまいました。2
このままではMacBook Proでの開発が継続して行えなくなってしまうため、M1 Mac対応を行いました。

MacOS向けのネイティブプラグインはbundle形式で生成し、Xcodeを使ってbuildします。

image.png

M1 Macに対応するにはBuild Settingsで以下の設定をします。

  • ArchitecturesをStandard Architectures (Apple Silicon, Intel)する
  • Excluded Architecturesを空にする(x86_64/arm64が入ってなければ大丈夫だとは思います)

image.png

また、Build Active Architecture Onlyの設定の通りDebug実行時には対象のアーキテクチャのみしかビルドされないため、ネイティブプラグインとして出力する場合にはConfigurationをReleaseにしてビルドする必要があります。

Static Libraryの対応

基本的には上記設定でM1 Mac/Intel Mac共に動くBundleができるのですが、厄介なのがXcodeを介さずに書かれたStatic Libraryを参照しているケースで、参照しているライブラリについてもM1 Mac対応をする必要があります。
clusterではC++向けのライブラリなどを手元でbuildして利用しているケースがあるため、この手順が必要でした。

image.png

この場合、M1環境とIntel環境(Rosseta)それぞれでライブラリを作成し、lipoコマンドを用いてUniversal Static Libraryにすることで解決します。

.sh
lipo -create libintel.a libarm.a -output libuniversal.a

正しく生成できた場合は、lipo -infoで下記のようにx86_64とarm64の両方が対応されたことが分かります。

.sh
lipo -info libuniversal.a
# Architectures in the fat file: libuniversal.a are: x86_64 arm64

この対応をした後にもう一度Xcodeでbundleを生成してIntel/M1両対応のネイティブプラグインの完成です🎉

おわりに

ネイティブプラグインをM1 Macに対応したことで今後も安心してMacBook Proを使って行けるようになりました。
これにより会社の支給マシンもM1 Max/RAM64GBの特盛マシンになりました!!

エンジニア絶賛募集中ですので、M1 Max使って仕事したい人は是非来てください!3

以上。

明日は@Hashimoto_Mamiさんの「なんか書きます」です。

  1. 一部の環境でMac版が動作しない不具合・M1 Mac対応版のβリリースのお知らせ

  2. さようなら、Intelチップ搭載MacBook Pro

  3. 詳細なスペックは面談等で聞いてください

13
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?