0
0

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 1 year has passed since last update.

CoreBluetoothForUnityAdvent Calendar 2023

Day 10

【Unity】iOS と macOS の NativePlugin のビルド方法

Last updated at Posted at 2023-12-09

本記事について

この記事は CoreBluetoothForUnity Advent Calendar 2023 の10日目の記事です。

CoreBluetoothForUnity では以下の手順で iOS と macOS の NativePlugin をビルドしています。

  1. プロジェクト直下で make plugins/build を実行
  2. UnityEditor を再起動 (プラグイン再読み込みのために必要)

make plugins/build でやってること、作り方について紹介します。

前提

本記事のやり方は keijiro さんの MEMO に書かれている方法で作られています。

本記事の内容は以下の記事の内容から派生しています。

環境

  • Unity 2022.3
  • CoreBluetoothForUnity 0.4.3

Xcode Project (というかワークスペース)は以下です。

xcode_screen.png

workspace には CB4UNativeApp と CoreBluetoothForUnity の2つが含まれています。

CB4UNativeApp はテスト用のアプリのため、ビルドには関係がありません。
workspace 内の CoreBluetoothForUnity は SwiftPackage で、ここから NativePlugin をビルドします。

ビルドで出力するファイル

keijiro さんの MEMO にある通り、
macOS 向けには .dylib、iOS 向けには .framework を出力します。

対応拡張子

dylib の出力方法

コマンドは keijiro さんのサンプルからそのまま拝借しています。

swift build -c release --arch arm64 --arch x86_64

このコマンドで dylib を生成するためには Package.swift でライブラリタイプを .dynamic にする必要があります。

LibraryType

参考

framework の出力方法

こちらのコマンドは keijiro さんのサンプルを参考にしつつ、改変したものになっています。

framework/build:
	xcodebuild -scheme $(BASE_NAME) -workspace $(WORKSPACE) -configuration Release -sdk iphoneos \
	 -destination generic/platform=iOS -derivedDataPath ./$(BUILD_DIR)/Framework build
  • workspaceはなくても動くけど、あったほうがいいかなと思って入れています
  • ENABLE_BITCODE は非推奨のパラメータのため削除
  • 末尾に action を明示するために build を追加
  • 出力先はFramework専用のディレクトリにする

そして、こちらのコマンドも同様に SwiftPackage のライブラリタイプを .dynamic にしないと生成されません。

xcframework の中のファイルとの比較

こちらの記事では xcframework を生成し、その中の framework を取り出していました。今回は別の方法になっています。

これらは同じファイルかと思いきや framework のサイズが違いました。(75%程度に縮みました)
xcodebuild のオプションでも容量が変わるかを検証してみました。

xcframeworkの中のframework 426KB

- sdk指定なし
(生成されたフォルダの合計容量 86.4MB)
framework 649KB

- sdk指定あり
(生成されたフォルダの合計サイズ 19.3MB)
framework 324 KB
sdk指定したほうが容量減ってる。

- destination指定
容量変わらず

sdk を iphoneos にするとどうなるか
=> 最新バージョンが使われるようです。

ログ

Build settings from command line:
    SDKROOT = iphoneos17.0

結論としては xcodebuild で sdk を指定するのが一番容量の小さい framework が生成できるようです。(理由はわかってないです)

Makefile でまとめて実行

やり方はそのまま Makefile をみていただくのが良いかと思います。

Xcode Project の Makefile

.env ファイルに Native Plugin を配置する絶対パスを記述しておき、ビルドしたらそのディレクトリにコピーするようにしています。

リポジトリ直下の Makefile

make -C によってサブディレクトリの Makefile のコマンドを実行しています。

おわりに

本記事では NativePlugin のビルド方法について紹介しました。
特に library type を dynamic にしないといけないことにたどり着くまでに時間がかかりました。最終的には概ね理想通りのものができたためよかったかなと思っています。
もしもっと良いやり方をご存知でしたら教えていただけると嬉しいです!

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?