ようやくスマホで公開してみようという作品が出来たので、Unityプロジェクトを手元のiPhone実機で動かしてみました。動かすまでにあちこちハマったので忘れないうちに備忘録を。
目次
必要なもの
以上です。アプリを配布したり、iCloudを利用したりせず、実機で動作テストがしたいだけなら年間1万円ちょっとのAppleデベロッパーアカウントは必要ありません。
デバイス向けにビルドするために Apple Developer アカウントは必要ありません。テストの目的であなた自身のデバイスだけにビルドするには、どんな種類の Apple ID でも十分です。(Unity公式マニュアルより)
開発者の登録
開発用にApple IDを作成しておくとよいようです。そのIDに開発者設定を加えます。以下のサイトが参考になると思います。
You’ve already agreed to the Apple Developer Agreement.
みたいなメッセージが表示されればこの手続きは完了しています。
環境構築
- macにXcodeをインストール(Mac App Storeからインストールできます)
- UnityにiOSビルドパッケージが入っていなかったら、追加でインストール
Unityプロジェクト側でやっておくとよいこと
実機での動作テストの際にやっておくとよさそうな設定や確認事項です。
ターゲットデバイスをiOSにする
最初にやっておくとよいです。
- UnityのFileメニューから、Build Settingsを開きます
- プロジェクトに必要なシーンをScenes In Build欄にドラッグ&ドロップで加えます
- 最初に起動したいシーンを先頭にしておきます
- Platform欄でiOSを選択して、Switch Platformをクリックして切り替えます
実機を接続
これも最初にやっておくとよいです。
- テストで使いたいiPhoneやiPadをUSBケーブルでmacに接続します
- UnityのEditメニューからProject Settings -> Editorを選択します
- InspectorビューのDevice欄をクリックすると、接続した端末が列挙されるので選択しておきます
最低限やっておくPlayer Settings
UnityのBuild SettingsのPlayer Settingsで呼び出すか、EditメニューからProject Settings -> Playerを選択して呼び出せるプレイヤー設定です。本番用ではもっと必要ですが、とりあえず実機で動かすだけなら以下でいけました。
- Company Name(会社やチーム、制作者名)
- Product Name(作品名)
- Other SettingsのBundle Identifierに、半角英数とハイフンとドットでアプリを識別する文字列を設定
jp.
組織名.
作品名という並び- 例)
jp.yourname.oragasakuhin
あとは自分は縦画面専用なのでResolusion and PresentationのDefault OrientationをPartraitに変更したぐらいです。
BITCODEをOFF
8425: [xcode] clang: error: linker command failed with exit code 1 (use -v to see invocation)
とかいうエラーがXcodeで出た時の原因No1だと思います。Xcode側で対応もできるのですが、naichiさんがUnity側で対応するスクリプトを用意してくださっているので、こちらを最初からプロジェクトに組み込んでいくとよいです。
このままだと他の環境でビルドする時に怒られるので、コードの最初の行に#if UNITY_IPHONE
、最後の行に#endif
を加えておくとよいです。
ビルド時だけメソッドやプロパティが見つからないと怒られる
Unityで実行できるのに、ビルドの時に以下のようなエラーを食らいました。
Assets/Scripts/Player/PlayerMouse.cs(83,31): error CS1061: Type `RouteManager' does not contain a definition for `WalkDistance' and no extension method `WalkDistance' of type `RouteManager' could be found. Are you missing an assembly reference?
エラーを出しているやつ(この例の場合はWalkDistance
メソッド)が、#if UNITY_EDITOR
と#endif
の中に書かれていて、ビルド時に削除されてました^^; なかなか気付かずにかなりの時間をロスしました。region
を使ってちゃんとブロック分けしないと駄目ですね...
ビルド
以上の対応ができたら、とりあえずビルドしちゃいましょう。あとはエラーが出たら対応ということで。FileメニューからBuild & Runを選択すると、Unityでのビルド、Xcodeを起動してビルド、ビルド成功したら実機へインストールして起動、という一連の動作をしてくれます。
Xcode側
Unity側で問題がなくなったら、Xcodeが起動して、最終的なビルドが実施されます。その際に食らったあれこれです。
ライセンスの設定
まずこのSigning for ...
というエラーが出るはずです。
先に登録したAppleIDを登録します。以下のサイトが参考になると思います。
このサイトでいうコーディングが終わっていれば、三角マークをクリック実機でアプリが実行されますという箇所は、すでにUnityでコーディングが終わっているので、指示通り三角マークをクリックして進めて構いません。
問題なくビルドが成功したら、USBで接続している実機に実行ファイルが転送されて、実機での動作が確認できます!
しかし、自分はもう少しエラーを食らいました。
非対応命令の利用
BITCODEをOFFにしたのに、以下のエラーがまた出ました。
エラーがどこで発生したのかを確認しないと解決のしようがありません。
- エラーの場所を右クリック(ダブルタップ)して、Reveal in Logを選択します
- 詳細が表示されるので、どこでエラーが発生しているかを確認します
スクリーンショットの撮り方が悪くて原因箇所が隠れてしまってますが、_OpenWindow
がUndefined symbols
(定義されていない)ということと、それが_UnityRoomTweet
であるということが読み取れます。
そういえば、UnityRoom用のツイートアセットを組み込んだままでした。それが使っているOpenWindow
メソッドがiOSでは使えないということですね。
ツイート機能は他のアセットで行う予定なのでこれは不要でした。Unityでアセットを削除するとか、iOSビルド時にはビルド対象から外すなどの処置をして解決できました。
その他
メインの開発やAndroid用ビルドはWin10マシンでやっていて、iPhoneだけmac book airでビルドするという体制でやっています。プロジェクトはGitHubでやり取りしてるのですが、その際にアセットストアのアセットをインポートし忘れてエラーが出ていたというのもやらかしました。
アセットストアのアセットもPackage Managerで管理したい...
まとめ
大体こんなところでした。Appleの公式マニュアルを中心に進めたのですが、要領を得ない説明が多くて難儀しました。実機テストするまでの手順は、素直に書籍やブログをあたった方がよさそうです。
Xcodeを全く使い慣れていないので、アカウントをどうやってプロジェクトに設定するかや、エラーの確認方法を調べるのに時間を食いました。
iPhoneSE買ったものの全然開発に使ってないじゃん、という状況でしたが、ようやく動かせました。よかったよかった。