【UE5】iOS実機デバッグ（ログ確認）のやり方

# はじめに
機会はそんなに多くありませんが、ときどきiOSのみで発生するバグに遭遇することがあります。
そんな時は実機デバッグで解析するしかありませんが、いつもやり方を忘れるので備忘録として残しておきます。

### 参考資料
はじめにの項目に入れるくらい、おかずさんの記事を見た方が良いと思ったのでこちらに置かせていただきます。
もっと詳しく見たい方はこちらを見ましょう。

https://pafuhana1213.hatenablog.com/entry/2018/12/13/031332

# 開発環境
- iMac（Sonoma 14.5）
- Xcode 15.3
- iPhone 15
- UE 5.3.2

プロジェクトは弊社が開発しているMelifeを使います。

# 前提
- Xcodeがインストールされている
- Apple Developer Programに登録してあり、iOSパッケージ化ができること

# 手順

### 1. 下準備
#### 1.1.  ModernXcodeをfalseに変更
ModernXcodeをfalseにします。
普段はWindowsのリモートビルドでiOSのパッケージ化をしているため、プロジェクト全体でModernXcodeはfalseに統一している名残ですね。（逆にModernXcode = trueでデバッグするやり方知らないなんて言えない）

Launcher版の方は`/Users/Shared/UnrealEngine/UE_5.3`から変更してください。

```Engine/Config/BaseEngine.ini
[/Script/MacTargetPlatform.XcodeProjectSettings]
bUseModernXcode=false
```

#### 1.2. xcworkspaceの作成
次にxcworkspaceを作成します。
Windowsの場合は.uprojectを右クリックして`Genarate Visual Studio project files`を実行すればソリューションファイルが作成されました。
Macでもそうなのかな？と思って同じことをしても作成されない・・・
しかもなんで2つあってどっちも機能してないねん・・・

![スクリーンショット 2024-11-12 14.36.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987446/3f3f9a69-ad57-10e0-019c-08046db6cd4b.png)

なのでターミナルから作成します。
`/Engine/Build/BatchFiles/Mac/`に移動し、次のコマンドを実行します。

```
sh GenerateProjectFiles.sh -project="/{プロジェクトのパス}/{プロジェクト名}.uproject" -game
```

終わったらプロジェクト名.xcworkspaceが作成されているはずです。

#### 1.3. MacにiPhoneを接続
接続すると自動でデバイスサポートが作成されます。
ターミナルで次のコマンドを実行するとインストール済みのデバイスサポート一覧が表示されるので、自分のiPhoneのものがあるか確認してください。

```
ls ~/Library/Developer/Xcode/iOS\ DeviceSupport/
```

私の場合はiPhone15でiOS18.1です。
接続したまま次に進みます。

![スクリーンショット 2024-11-12 15.32.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987446/c0cb6f93-4b55-c787-debd-f2cdf18cca68.png)



### 2. XcodeからEditorを起動し、パッケージ化
プロジェクト名.xcworkspaceをダブルクリックし、Xcodeを起動します。
Schemeは`プロジェクト名Editor`、対象を`My Mac`にして実行します。

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987446/7954d915-8a12-6617-8361-7c920ddfa16e.png">

Editorが起動したら、プロジェクト設定からdSYMを生成する設定をオンにします。

![スクリーンショット 2024-11-12 15.58.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987446/0db272bc-8e76-e5b5-3eeb-e5c8701c7518.png)

ついでにログ確認用のPrintStringをレベルブループリントに配置しましょう。

![スクリーンショット 2024-11-13 11.16.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987446/25e38a31-1be4-a302-a60f-93b4eb134b61.png)

パッケージ化の設定をしてIOSのDevelopでパッケージ化します。
もしくは接続したiPhoneでQuick LaunchでもOKです。

:::note info
Shippingでデバッグしたい場合はプロジェクト設定のBuild ConfigurationをShippingにしてパッケージ化してください。
ただしPrintStringはログに出てこなくなります。
以降の手順は一緒です。
:::

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987446/980ac0d9-0994-0db1-9e5d-b2ec5d86b53a.png">

Quick Launchの場合は完了するとiPhoneにアプリがインストールされています。

Xcodeの実行ボタンの左にある停止ボタンを押してEditorを閉じます。

### 3. Xcodeからアプリを起動
XcodeからiPhone上でアプリを起動するためのSchemeを追加します。

New Schemeを選択

<img width="250" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987446/769fd4fb-0d4e-4660-88f7-c5077fef6710.png">

Scheme名はわかりやすい名前に

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987446/f8a65be3-bc37-3c7a-01e6-70f9feb160ad.png">

Targetはプロジェクト名のものを選択

<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987446/3037b694-70be-b08e-e6f2-60b07ffb7d3a.png">

作成したら今作成したSchemeでEdit Schemeを選択します。

Executableを先ほどパッケージ化した時に作成された`/Binaries/IOS/Payload/`のアプリにします。
Build Configurationはデフォルトのまま（Debug）で問題ないと思いますが、他のに変えた影響はわかりませんでした。（知ってたら教えてください）

![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987446/add48195-b027-6373-7fce-4f34dee90206.png)



対象をiPhoneにします。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987446/a8d992af-c72f-6f4e-ae36-19e167c77d7f.png">

Product > Perform Action > Run Without Buildingを実行したらiPhoneにアプリがインストールされ、Consoleにログが流れ始めます。

先ほど仕込んだPrintStringがでました。

![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987446/5cbc33a9-8d78-6f53-a0dd-297619aa9cd3.png)

# まとめ
UE5でのiOSデバッグの記事がなかったので書きましたが、UE4の時とほとんど変わってなくてびっくりしました。
UEでモバイル開発もっと流行って欲しいです。

# 参考記事

https://pafuhana1213.hatenablog.com/entry/2018/12/13/031332

https://historia.co.jp/archives/3651/