tanaka's Programming Memo

プログラミングについてのメモ。

UnityのプロジェクトをiPhoneSE実機で動かした時にハマったポイント

ようやくスマホで公開してみようという作品が出来たので、Unityプロジェクトを手元のiPhone実機で動かしてみました。動かすまでにあちこちハマったので忘れないうちに備忘録を。

f:id:am1tanaka:20181007135314p:plain

目次

必要なもの

以上です。アプリを配布したり、iCloudを利用したりせず、実機で動作テストがしたいだけなら年間1万円ちょっとのAppleデベロッパーアカウントは必要ありません

バイス向けにビルドするために Apple Developer アカウントは必要ありません。テストの目的であなた自身のデバイスだけにビルドするには、どんな種類の Apple ID でも十分です。(Unity公式マニュアルより)

開発者の登録

開発用にApple IDを作成しておくとよいようです。そのIDに開発者設定を加えます。以下のサイトが参考になると思います。

Appleの開発者登録をする, iOSアプリ作成準備

You’ve already agreed to the Apple Developer Agreement.

みたいなメッセージが表示されればこの手続きは完了しています。

環境構築

  • macXcodeをインストール(Mac App Storeからインストールできます)
  • UnityにiOSビルドパッケージが入っていなかったら、追加でインストール

Unityプロジェクト側でやっておくとよいこと

実機での動作テストの際にやっておくとよさそうな設定や確認事項です。

ターゲットデバイスiOSにする

最初にやっておくとよいです。

  • UnityのFileメニューから、Build Settingsを開きます
  • プロジェクトに必要なシーンをScenes In Build欄にドラッグ&ドロップで加えます
    • 最初に起動したいシーンを先頭にしておきます
  • Platform欄でiOSを選択して、Switch Platformをクリックして切り替えます

実機を接続

これも最初にやっておくとよいです。

  • テストで使いたいiPhoneiPadをUSBケーブルでmacに接続します
  • UnityのEditメニューからProject Settings -> Editorを選択します
  • InspectorビューのDevice欄をクリックすると、接続した端末が列挙されるので選択しておきます

最低限やっておくPlayer Settings

UnityのBuild SettingsPlayer Settingsで呼び出すか、EditメニューからProject Settings -> Playerを選択して呼び出せるプレイヤー設定です。本番用ではもっと必要ですが、とりあえず実機で動かすだけなら以下でいけました。

  • Company Name(会社やチーム、制作者名)
  • Product Name(作品名)
  • Other SettingsBundle Identifierに、半角英数とハイフンとドットでアプリを識別する文字列を設定
    • jp.組織名.作品名という並び
    • 例) jp.yourname.oragasakuhin

あとは自分は縦画面専用なのでResolusion and PresentationDefault OrientationPartraitに変更したぐらいです。

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 ...というエラーが出るはずです。

f:id:am1tanaka:20181007125556p:plain

先に登録したAppleIDを登録します。以下のサイトが参考になると思います。

実機でアプリを確認する, iOSアプリ作成準備

このサイトでいうコーディングが終わっていれば、三角マークをクリック実機でアプリが実行されますという箇所は、すでにUnityでコーディングが終わっているので、指示通り三角マークをクリックして進めて構いません。

問題なくビルドが成功したら、USBで接続している実機に実行ファイルが転送されて、実機での動作が確認できます!

しかし、自分はもう少しエラーを食らいました。

非対応命令の利用

BITCODEOFFにしたのに、以下のエラーがまた出ました。

f:id:am1tanaka:20181007132855p:plain

エラーがどこで発生したのかを確認しないと解決のしようがありません。

  • エラーの場所を右クリック(ダブルタップ)して、Reveal in Logを選択します

f:id:am1tanaka:20181007132928p:plain

  • 詳細が表示されるので、どこでエラーが発生しているかを確認します

f:id:am1tanaka:20181007133137p:plain

スクリーンショットの撮り方が悪くて原因箇所が隠れてしまってますが、_OpenWindowUndefined symbols(定義されていない)ということと、それが_UnityRoomTweetであるということが読み取れます。

そういえば、UnityRoom用のツイートアセットを組み込んだままでした。それが使っているOpenWindowメソッドがiOSでは使えないということですね。

ツイート機能は他のアセットで行う予定なのでこれは不要でした。Unityでアセットを削除するとか、iOSビルド時にはビルド対象から外すなどの処置をして解決できました。

その他

メインの開発やAndroid用ビルドはWin10マシンでやっていて、iPhoneだけmac book airでビルドするという体制でやっています。プロジェクトはGitHubでやり取りしてるのですが、その際にアセットストアのアセットをインポートし忘れてエラーが出ていたというのもやらかしました。

アセットストアのアセットもPackage Managerで管理したい...

まとめ

大体こんなところでした。Appleの公式マニュアルを中心に進めたのですが、要領を得ない説明が多くて難儀しました。実機テストするまでの手順は、素直に書籍やブログをあたった方がよさそうです。

Xcodeを全く使い慣れていないので、アカウントをどうやってプロジェクトに設定するかや、エラーの確認方法を調べるのに時間を食いました。

iPhoneSE買ったものの全然開発に使ってないじゃん、という状況でしたが、ようやく動かせました。よかったよかった。

参考URL