[UE5]WindowsでPlatformsにiOSを出現させる方法
こんな状態です
近々AndroidとiPhone向けにアプリをリリースしようと思っているのですが、そもそもMacの操作に慣れていないので、iOS版はWindowsからリモートビルドすることにしました。
公式ページを見て、iTunesをインストールしたり、SSH Keyでゴニョゴニョしないといけないんだなぁ・・・とブツブツ言いながらProject SettingsのPlatformsを見ると、

ない・・・だと・・・?
なるほど、確かにLauncher版であればインストールオプションからiOSを選択すれば良かったのに対し、ソースコードビルドはまた違いますよねそりゃ。

というわけで、WindowsでのソースコードビルドUEにiOSを出現させる方法を書きます。
完成すると以下のようになります。


開発環境
- Windows11
- UE5.1.0(ソースコードビルド)
- VisualStudio2022
- iTunes(version:12.12.10.1)
作業開始
iTunesをインストールします。下記サイトにアクセスし、赤枠の箇所をクリックしてダウンロードしてください。公式によるとMicrosoftStore版はリモートビルドに邪魔なものが入ってるから論外だそうです。

設定はそのままでインストールします。
インストール先はC:\Program Files\iTunes\です。
次に、エンジンフォルダの、\Engine\Source\Programs\UnrealBuildTool\Platform\Mac\ApplePlatformSDK.Versions.cs
を開きます。
下記画像の赤枠で囲ったMaxVersionの値を1499.0から8999.0に変更します。

なんで8999.0なの?
GetValidVersionRange関数内のif文でMacなのかWindowsなのかを判断し、それに対応するAppleSDKのバージョン範囲を設定しています。
ですが、こちらの記事でスタッフのAdam Kingさんが仰っている通り、Windowsでは実際はAppleSDKのバージョンではなく、iTunesのバージョンをチェックしているそうです。
なので、iTunesのバージョンに対応できるようにMaxVersionの値を大きくしている訳です。
ではなぜiTunesのバージョン12.12.10.1ではなく8999.0なのか?ですが、調べているとどうもiTunesのバージョンではなく、MobileDevice.dllのファイルバージョンを参照しているぽいです。
\Engine\Source\Programs\IOS\MobileDeviceInterface\MobileDevice.csファイルにてバージョンのチェックを行っているのですが、コードにはiTunesではなくMobileDevice.dllを探している記述があります。
下記画像のレジストリデータ値の名前からMobileDevice.dllのパスを取得しているみたいですね。

このMobileDevice.dllが何をするファイルなのかはわかりませんが、
つまり、MobileDevice.dllのファイルバージョンより上の値を設定すればいいだけなので、今回は1643.2.4.1より上の値であればOKです。

変更したら、リモートビルドしたいプロジェクトのuprojectで右クリックし、Generate Visual Studio project filesを実行します。

その後、更新されたVisual Studioのslnファイルを開きます。
ConfigurationをDevelopment Editorに、PlatformはWin64でビルドします。

ビルドが終わったらプロジェクトを開きましょう。
ProjectSettingsのPlatformsを見るとiOSが追加されているはずです。

まとめ
こうやって記事にまとめるとたったこれだけか(´・ω・`)と思いながら、実際手探りでやっていたので、結構時間かかりました。ネットで検索したら数件同じ内容で困っている人もいたので、この記事で自分と同じように悩む人が減ったらいいなと思います。
参考文献
Discussion