こんにちは、エンジニアのオオバです。
結論から話しますと、UnityでiOSフレームワークファイルを自動追加できます。つまり、UnityからXcodeプロジェクトを書き出すと、自動でiOSフレームワークが追加された状態になるということです。
Xcodeのビルド設定にiOSフレームワークを手動で追加するのは本当に面倒くさいですよね。1度ならまだしもゲーム開発中は何度も実機ビルドすることになります。そのたびに手動作業が発生するというのは時間の無駄です。
この記事はUnityからiOSフレームワークをXcodeプロジェクトに埋め込む方法を分かりやすく紹介します。また iOSフレームワークファイルを埋め込む際に使用する元ファイルの格納場所 も解説します。最後まで読んで開発の時短に役立ててください。
👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!
なぜUnity開発でiOSフレームワークが必要なのか?
Unityが提供する機能だけを使ってゲームやアプリの開発をする際は、基本的にiOSフレームワークは不要です。必要になるケースは「Unityが提供しない機能を使う場合」です。
具体的には、iOSが提供するOS機能を使う場合です。Unityは万能ではありません。Unityも内部的にはiOSのOS機能にアクセスしています。それをぼくたちはC#からアクセスしているということです。
つまりUnityが提供していない機能は、独自にネイティブプラグインを開発して、OS機能にアクセスする必要があるのです。そのOS機能を動かすためにフレームワークを必要としているのです。
フレームワークファイルが足りない場合、次の記事で紹介しているエラーが発生することがあります。あわせて読んでみてください。
UnityからiOSフレームワークを自動セットする方法
ではUnityからXcodeビルドする際にiOSフレームワークを自動でセットする方法を紹介します。
結論から話すと上図のとおり「Plugins/iOS」フォルダに格納するだけ。とても簡単です。
昔のUnityは「ポストプロセス」と呼ばれるビルドの後処理を実装する必要がありました。執筆時(Unity2018.3)ではフレームワークファイルを一式「Plugins/iOS」配下に入れるだけでOKです。
しかし、フレームワークの中にはUnityプロジェクトに格納するだけではXcodeに自動セットされないものも存在します。記事後半「【注意】 Unityで自動セットできないフレームワーク」で詳しく解説します。
Xcodeアプリの中身を見る方法
iOSフレームワークを手に入れるためにXcodeの中身を見る必要があります。そもそもアプリの中身を見る方法が分からない方向けに2つ方法を紹介します。
方法①Finderを使用「パッケージの内容を表示」
Applicationフォルダ内の「Xcode.app」を探しましょう。
まずはXcode.appを右クリック。「パッケージの内容を表示」をクリックします。
するとXcodeの中身を確認できます。
方法②ターミナルを使う方法
ターミナルで以下のコマンドを実行すると中身がFinderで開きます。
$ open /Applications/Xcode.app/Contents
Xcodeアプリの中身を確認する方法はFinder、ターミナルどちらでも良いのですが、これから紹介する「iOSフレームワークファイルの探し方」でターミナルを使用します。
そんな訳でターミナルを使ってXcodeの中身を見れるようになっておくことをおすすめします。
iOSフレームワークファイルの探し方
Unityプロジェクトに格納するためには、iOSフレームワークファイルを手に入れる必要があります。
結論、 iOSフレームワークファイルはXcodeアプリの中 です。
例えば「CloudKit.framework」であれば、次のディレクトリに格納されています。
Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/
このように全てのフレームワークファイルがXcode内に格納されています。
【注意】フレームワークによって格納場所は異なる
フレームワークによって格納場所が異なることに注意しましょう。例えば「libz.tbd」です。先ほど紹介した「CloudKit.framework」と場所が違います。
Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
/Developer/SDKs/iPhoneOS.sdk/usr/lib
上記の場所に格納されています。ややこしいですね。
iOSフレームワークの名前を手がかりに探す方法
ターミナルを使って findコマンド で検索します。
# Xcode.appの中に潜る
$ cd /Applications/Xcode.app/Contents
# Xcode.appの中身を検索
$ find . -name ファイル名
このようにiOSフレームワークの格納場所はファイルによってさまざまです。ターミナルを使ってさくっと探し出すことをおすすめします。
【注意】 Unityで自動セットできないフレームワーク
iOSフレームワークはUnityプロジェクトに格納すると自動でXcodeプロジェクトにセットされると解説しましたが、例外があります。
拡張子「.tbd」を持つファイルは、Unityプロジェクトに格納する方法では動きません。
このような例外ファイルを自動化する方法を紹介します。
tbdファイルはPostProcessBuildを使う
結論、従来のPostProcessBuildを実装することで「tbd」ファイルをXcodeに自動でセットします。以下のようなPostProcessBuild処理を実装してみてください。
using UnityEditor;
using UnityEditor.Callbacks;
#if UNITY_IOS
using UnityEditor.iOS.Xcode;
#endif
public static class PostProcessBuild
{
[PostProcessBuild]
public static void OnPostProcessBuild(BuildTarget buildTarget, string path)
{
#if UNITY_IOS
string projectPath = PBXProject.GetPBXProjectPath(path);
PBXProject pbxProject = new PBXProject();
pbxProject.ReadFromFile(projectPath);
string target = pbxProject.TargetGuidByName("Unity-iPhone");
const TbdFile = "hogehoge.tbd";
pbxProject.AddFrameworkToProject(target, TbdFile, false);
pbxProject.WriteToFile(projectPath);
#endif
}
}
まとめ
この記事ではiOSフレームワークをUnityから自動セットする方法を紹介しました。簡単に記事の内容をまとめます。
①iOSフレームワークはUnityが提供しない機能を使うときに必要
②iOS/PluginsにiOSフレームワークを格納するとXcodeに自動セット
③iOSフレームワークはXcodeアプリの中にある
④フレームワークの種類によっては自動セットのためにPostProcessBuildが必要
こんな感じです。
iOSネイティブプラグインを作るときには必要になるテクニックです。
Unityが提供する機能だけでも十分面白いゲームを作ることは可能ですが、少し凝ったことをやる場合はどうしてもネイティブプラグインが必要になります。
もしUnityでネイティブプラグインを開発するときはこの記事を思い出してみて、開発を効率化してみてください。
この記事があなたのゲーム開発に少しでもお役に立てたら嬉しいです。
この記事が気に入ったらフォローしよう
「Unity初心者大学」というUnity初心者向けのYouTube始めました!!
ぜひチャンネル登録をお願いします!
最後まで読んでいただきありがとうございました!
すばらしいXcodeライフをお過ごしください。
- Xcode 10.1
- Unity2018.3