ぼっちプログラマのメモ

UE4とかVRとかについて書いたり書かなかったり。

UE4 & iOS開発時の実機デバッグ・プロファイリング方法 まとめ 2018 < ログ確認・抽出編 >

本内容は複数の記事で構成されています。検索などでこの記事に直接飛んできた方はまず以下の記事をご確認ください。
pafuhana1213.hatenablog.com

はじめに

ゲーム中にPrintStringなどで出力したデバッグ情報の確認やクラッシュ時の原因調査など、ログファイルはすごく便利で得られるものも多いです!
ということで、まずはログの確認、ファイル取得から。


実行中のログ確認(Mac)

Macの場合は、UE4エディタのSessionFrontend 又は XcodeのConsole機能を使うことになります。Session Frontendに関してはWindowsでも同じ手順なので後述します。ここでは後者の方法について紹介します。

Open Console機能

XcodeのConsole機能は2通りの使い方があります。まずは、XcodeWindow->Devices and Simulatorsを選択した後に出るウィンドウの”Open Console”を使用する方法です。この方法の利点は、後述のRunやAttachなどの下準備をしなくてもログ出力を確認できるという所にあります。
f:id:pafuhana1213:20181213021655p:plain

ただし、実行中のUE4製アプリ以外の情報も出力されるため、右上にあるフィルタ機能を活用する必要があります。また、ログが細かい粒度で大量に出力されるため、UE4エディタ上で見れるログ出力と同レベルのものを見たい場合には少し不向きです。
f:id:pafuhana1213:20181213020920p:plain

Console Area機能

次に、Xcode上のConsole Areaでログを確認する方法があります。UE4エディタやVisual Studioで見れるログ内容と同じものが出力されるため、単純にログを確認する際はこちらの方が便利かと思います!
f:id:pafuhana1213:20181213021836p:plain

しかし、後述する「実機でアプリ起動後にXcodeからプロセスにアタッチする」方法ではConsole Areaにログは出力されません。( Xcodeの仕様っぽい?
ios - Xcode attach to process doesn't display NSLog - Stack Overflow

そのため、「Xcodeからアプリを実機上で実行する」必要があります。以前にヒストリアさんが解説していましたが、少し状況変わったりしているので補足を入れつつ手順を説明します。

[UE4] 実機でデバックしてみよう!(iOS編)|株式会社ヒストリア
[UE4] 実機のプロファイリング!(iOS編)|株式会社ヒストリア

Xcodeからアプリを実機上で実行する方法

1: Launchを実行, または パッケージ(.ipa)作成

まずは、Xcode経由で実機上でアプリを実行するためにアプリのバイナリデータである .app ファイルを作成する必要があります。といっても、UE4エディタ上でLaunch, またはパッケージングを実行すれば、”[Project Root]\Binaries\Payload” に .appファイルが自動生成されます。かんたん!

余談 .appファイルに対して圧縮を含む変換処理をかけたものが .ipaファイル。
.app→.ipaへの変換について - ほげぐらまの別館

2: Xcodeから実機上で実行する用のSchemeを追加

XcodeにはSchemeというビルドに関する各設定をまとめたものがあり、用途別に使い分けることが可能です。
Xcodeの概要: アプリケーションを構築する

UE4が生成したXcodeのプロジェクトファイル( .xcodeproj )には2つのSchemeUE4, [Project名] )がデフォルトで用意されています。しかし、どちらもDevelopment Editor設定でMac以外を実行対象にできないため、実機上でアプリを実行することができません。
f:id:pafuhana1213:20181213022336p:plain

そのため、実機実行用にSchemeを新規追加します。といっても簡単です。
f:id:pafuhana1213:20181213022417g:plain

3: Xcodeから実機上でアプリを実行

ここまでで準備は終わりました!さて、アプリを実行しましょう!
この際、Product -> Perform Action -> Run Without Buildingで実行することをおすすめします!何故なら、通常のRunだとBuildが走ってしまうので、ビルド待ち時間が増える上にビルド失敗などトラブルの原因になりやすいからです…
f:id:pafuhana1213:20181213022746p:plain

実機上でアプリが無事立ちあがれば、Xcode右下のConsole Areaにログが流れ始めます!更に、既にプロセスにアタッチしている状態で起動するため、後述のBreakPointによるデバッグも可能です!やったね!

実行中のログ確認 (Win)

Windowsの場合は、少し前に触れたSession Frontendを使用することになります。
api.unrealengine.com

ちなみにAndroid実機とSession Frontendの接続に関しては、以下のスライドで紹介しました(p38以降)。

www.slideshare.net

iOSの場合もほぼ同じなのですが…「Project SettingsにあるUDP MessagingのStatic Endpointsに [iOS端末のIPアドレス:6666] を追加する」作業が必要になる点が唯一異なります。
f:id:pafuhana1213:20181213022944p:plain

この設定を入れておかないと、ケーブルで直繋ぎしてもSession Frontendに認識されません。ちなみに、認識されると以下のように端末が表示されます。
f:id:pafuhana1213:20181213023049p:plain

Session Frontendと接続ができれば、実行中のログ確認だけでなく、コンソールコマンドの送信やCPUプロファイラなどの様々な機能が利用可能になります!ぜひ活用していきましょう!

注意:

UE4.20, UE4.21.0の場合、以下の不具合によりSessionFrontendとの接続が失敗する可能性があります。もし不具合が発生した場合はUE4.21.1以上にアップデートするか、URL先にあるFix Commitを適用するようお願いいたします…
UE-65365 Launching on IOS, sessions do not appear in the Session Frontend

実行後のログ確認(Mac)

次は、アプリ実行後に端末に保存されたログを取得する方法について紹介します。Macの場合は、以下の記事で書かれている方法を使うことになります。
qiita.com

.xcappdataのダウンロード後、右クリックメニューの「パッケージの内容を表示」を選択することで、実行中に出力されたログ、プロファイル系のファイルなどを確認することが可能です。ちなみに、ログファイルは、”AppData\Documents\[Project Name]\Saved\Logs” にあります。
f:id:pafuhana1213:20181213024622p:plain

実行後のログ確認(Win)

Windowsの場合は、”Engine\Binaries\DotNET\IOS” にある IPhonePackager.exe を使って、端末から各ファイルを抽出します。手順は以下の通り。

1 .IPhonePackager実行
2. ログを抽出したいアプリの uproject ファイルを指定
3. Advanced Tools の Other Development Tools を選択
f:id:pafuhana1213:20181213023424p:plain
4. 端末を選択し、Backup documentsを選択
f:id:pafuhana1213:20181213023447p:plain
5. アプリのインストール時に使用した .ipa ファイルを選択

端末からの抽出処理が完了すると、“[Project Root]\IOS_backups” 以下に各ファイルが配置されます。ログファイルの場合は、”[Project Root]\[Device Name]\Documents\iOSTest\Saved\Logs” にあります。

(やることが…やることが多い…!!)

最後に

ここまでがログの確認・取得方法についてでした!地味な部分ではありますが、得られる情報は非常に多いです。ただ開発環境によってフローが異なるのでご注意下さい!
次の記事では、デバッグでお馴染みのBreakPointをどうやって使うのかについて。
pafuhana1213.hatenablog.com