Unreal Engine (UE) 5.3 では、標準 Xcode アプリ プロジェクトと整合性を高めるために、Unreal Engine の Xcode プロジェクト ワークフローを更新しています。新しいプロジェクト設定は Xcode デベロッパーの組織および作業の質を高め、Xcode 内のツールへのアクセスを提供し、次のような共同デザインやプロビジョニングを効率化しています。
-
自動コード署名
-
利用資格の管理
-
.plistファイルの編集 -
標準 Xcode フレームワークの処理
このページでは、以前のバージョンから UE 5.3 以降 (5.3+) に移行するユーザー向けに、変更点をまとめています。
前提条件
更新された Xcode ワークフローは UE 5.3 以降で使用可能で、デフォルトで新しいプロジェクトに対して有効になっています。ただし、手動で有効にする必要がある場合、次の手順に従います。
-
エンジンのインストール ディレクトリを開き、
Engine/Config/BaseEngine.iniを開きます。また、以下の構成変数を設定していることを確認してください。Engine/Config/BaseEngine.ini
[/Script/MacTargetPlatform.XcodeProjectSettings] bUseModernXcode=true -
エンジンとプロジェクト両方の Xcode のプロジェクト ファイルを再生成します。UE のソース ビルドを使用している場合、エンジンのインストール ディレクトリで
GenerateProjectFiles.commandスクリプトを実行して、UE のソース コード用にプロジェクト ファイルを再生成します。プロジェクトのディレクトリに 3 つの Xcode ワークスペース ファイルが表示されます。UE5 (Mac).xcworkspaceUE5 (TVOS).xcworkspaceUE5 (IOS).xcworkspace
これで新しい Xcode 設定を使用する準備ができました。作業していました次のセクションでは、古いプロジェクト設定と比較した新機能について説明します。
プロジェクト、スキームおよびビルド コンフィギュレーション
以前は、UE Xcode プロジェクトでは、スキーム の下で ターゲット と ビルド コンフィギュレーション を結合していました。たとえば、単一のプロジェクト (MyProject) で、ユーザーにはエディタのターゲットの開発ビルドをビルドする「Development Editor」スキームがありました。
UE 5.3 以降では、ターゲット タイプごとに別々の Xcode プロジェクト (同じ Xcode ワークスペース内) を提供しています。たとえば、「MyProject」というタイトルのプロジェクトの Xcode ワークスペースには、MyProjectEditor、MyProjectGame、MyProjectClient、および MyProjectServer に別々のプロジェクトがあります。
各ターゲットにあるのは、サポートされているビルド コンフィギュレーションのみです。たとえば、ほとんどのエディタはテストまたはシッピング コンフィギュレーションをサポートしていないため、これらをエディタのプロジェクトでは使用できません。
更新されたワークスペースには多数のスキームがあります。これらを確認し、[Filter (フィルタ)] と [Recent (最近)] セクションを使用して、必要に応じてリストを絞り込みます。
プラットフォームごとのワークスペース
以前は、UE でプロジェクト ファイルを生成すると、Apple の各プラットフォームのターゲットが含まれるモノリシック ワークスペースが 1 つ作成されていました。
UE 5.3 以降では、UE でプロジェクト ファイルを生成すると、Apple のプラットフォームごとに別々のワークスペースが作成されます。
これにより、ワークスペースとプロジェクトが簡素化します。Xcode で複数のワークスペースを開くことができるため、Command + ` (バッククォート) を押すことで、プラットフォーム間で切り替えることができます。
各ワークスペースにはプラットフォームをサポートするターゲットしか含まれていないため、iOS および tvOS で使用できるスキームは少なくなります。これらには UnrealEditor ターゲットがありますが、正常にビルドすることはできません。これらのターゲットは、ソース コードを検索できるようにするために存在しています。
自己完結型のアプリ
以前は、UE では iOS、iPadOS、および tvOS アプリを実行するのに必要なすべてのデータが各 .app ファイルにバンドルされており、自己完結型になっていました。ただし、macOS プロジェクトでは、「.app」ディレクトリと「Saved/Cooked/Mac」ディレクトリ、Engine ディレクトリとプロジェクト ディレクトリの他の場所間でデータを分けていました。
UE 5.3 以降、すべての Mac プラットフォームで同じワークフローを使用し、必要なデータを 1 つの場所に集め、これを、手動または Xcode で実行できる .app にバンドルしています。これを行うには、クック処理でステージ ステップを使用します。
エディタ ビルドはクックされておらず、ルーズ フォルダに含まれています。
パッケージ化と配布
macOS と iOS/tvOS/iPadOS のパッケージ化処理は、完全に相互に一貫性があります。
.ipa ファイルは macOS では不要で、Windows でのみ使用されるため、UE では iOS の .ipa ファイルが自動的に生成されなくなりました。
配布
Distribution モードでは、ディストリビューション証明書を使用して共同デザインしなくなりました。代わりに、標準 Xcode アーカイブ (.xcarchive) が作成されます。これを使用すると App Store や自分のチームなどさまざまな場所に .app を配布できます。配布ビルドを作成すると、Xcode では .dSYM ファイルも生成して、Xcode アーカイブに配置します。これはクラッシュのデバッグに便利で、Apple に送信してライブ クラッシュをデバッグできます。アプリを Apple にアップロードして送信するときに、.dysm をアプリとともに送信します。
.dSYM の生成には、数分かかります。
正常にパッケージ化するには、Unreal Editor で [Platforms (プラットフォーム)] > [Package Project (プロジェクトをパッケージ化)] をクリックするか、-package -clientconfig=Shipping を BuildCookRun コマンドラインに追加します。
配布用にパッケージ化するには、[Project Settings (プロジェクト設定)] で [Distribution (配布)] チェックボックスを選択するか、-package -clientconfig=Shipping -distribution を BuildCookRun コマンドラインに追加します。
あるいは、Xcode で [Product (製品)] > [Archive (アーカイブ)] をクリックします。
Xcode は標準フローを使用して .xcarchive を生成し、ステージ処理済みディレクトリに配置し、フレームワークを共同デザインします。スキームを開発に設定している場合でも、シッピング コンフィギュレーションが使用されます。
Xcode でアーカイブを使用している場合、[Archives] ウィンドウが自動的に開き、新しいアーカイブが選択されます。他の UE のメソッドを使用してこれを作成する場合、[Window (ウィンドウ)] > [Organizer (オーガナイザー)] をクリックすることで手動でウィンドウを開いて、プロジェクトと左上部の [Archives] を選択する必要があります。
[Archives] ウィンドウ の右側にあるボタンを使用してアプリを 有効化 または 配布 します。これを使用して、各オプションのプロンプトに従って、内部使用のための iOS .ipa ファイルを作成します。App Store の有効化/配布に対して、appstoreconnect.apple.com でアプリのエントリを作成する必要があります。
アプリを配布または有効化するためのプロンプトでは、ディストリビューション証明書を選択するか、他のプロビジョニング手順に従うことが必要になる場合があります。詳細については、Apple のドキュメントを参照してください
シッピングが UE で生成されるスキームでアーカイブ アクションにデフォルトのコンフィギュレーションであるため、Xcode でのアーカイブではシッピングが使用されます。さらに、-package -distribution では、build アクションの代わりにバックグラウンドで archive Xcode アクションが使用されます。
テストに必要な場合、スキームでこれを変更できますが、シッピング ビルドのみを配布することをお勧めします。
macOS でアプリのディスプレイ ネームを設定する
アプリの ディスプレイ ネーム は、アーカイブされたビルドを作成する際の Mac .app の名前です。ディスプレイ ネームは、配布用にパッケージ化する (または Xcode のアーカイブ メニューを使用する) 際に、ユーザーが Finder を使用すると表示される .app の名前です。これが設定されていない場合、.app は .uproject ファイルと同じ名前になります。UE 5.3.2 以降でディスプレイ ネームを変更するには、「MacEngine.ini」ファイルを開いて、ApplicationDisplayName コンフィグ変数を設定します。
MacEngine.ini
[Xcode]
ApplicationDisplayName="Friendly Application Name"
ApplicationDisplayName は iOS で使用されるバンドル ディスプレイ ネームと同じではないため、MacOS と iOS の両方で実行されるアプリに対してこれらを個別に設定する必要があります。
コンテンツ/ブループリントのみのプロジェクト
コンテンツのみ (またはブループリントのみ) のプロジェクトは Xcode プロジェクトまたはビルド ターゲットのソース ファイルがないため、プロジェクト固有のデータと組み合わせて、エンジンから汎用の UnrealGame ターゲットを再利用してビルドを作成します。
標準 Xcode プラクティス
更新された Xcode ワークフローでは Xcode を使用して、次のものを含め、標準 Xcode ワークフローに従ってできるだけ多くのコンポーネントを処理します。
-
共同デザイン。
-
.plistファイル。 -
利用資格ファイル。
-
フレームワーク。
共同デザイン
以前は、iOS/iPadOS/tvOS のみで共同デザインが必要でした。2023年以降も、Apple では macOS の共同デザインが必要です。更新されたワークフローでは、デフォルトですべてのプラットフォームで Xcode の 自動共同デザイン を使用します。
自動共同デザインを使用するには、次の手順に従います。
-
Xcode で Apple Developer アカウントにログインします。
-
[Project Settings] を開いて [Platforms] > [Xcode Projects (Xcode プロジェクト)] を見つけ、次のプロパティを設定します。
| 設定名 | CVar | 説明 |
|---|---|---|
| Use Modern Code Signing (最新のコード署名を使用) | bUseModernCodeSigning |
UE プロジェクトの自動共同デザインを有効にします。次の 2 つの設定が必要です。 |
| Modern Signing Prefix (最新の署名プレフィックス) | ModernSigningPrefix |
企業のリバース ドメイン名。たとえば com.epicgames です。UE では、これとプロジェクト名を結び付けて、ゲームのバンドル ID を作成します (plist でこれをオーバーライドしない場合)。詳細については、以下のメタデータを参照してください。 |
| Modern Signing Team (最新の署名チーム) | `ModernSigningTeam | 署名時にアプリケーションが使用するチーム ID。これは、Xcode の [Signing and Capabilities (署名および機能)] セクションのチーム ID と同じです。詳細については、以下の「チーム ID を検索する」を参照してください。 |
チーム ID を検索する
[Modern Signing Team] 設定のチーム ID を検索するには、Apple Developer ページ を開いて自分のアカウントにログインし、[Membership Details (メンバーシップの詳細)] をクリックします。チーム ID が表示されます。
.plist ファイル
すべてのアプリは、組み込み .plist ファイルを含める必要があります。最終的な .plist ファイルは、通常、Xcode プロジェクト設定に基づいて Xcode で変更される部分 (テンプレート) から作成されます。これは、UE が生成する Xcode プロジェクトのために、複雑な処理になる場合があります。
更新された Xcode ワークフローでは、.plist ファイル処理に対してハイレベルな制御を提供しています。さらに、Xcode の .plist 設定の編集がサポートされています。
デフォルトでは、.plist 設定を編集すると、iOS の変更が失われます。詳細については、後述の「MacOS と iOS」のセクションを参照してください。
テンプレートと事前作成
UE で生成された Xcode プロジェクトから設定を使用して、Xcode でアプリの .plist をファイナライズすることをお勧めします。ただし、UE では、Xcode で変更されない、事前作成された .plist ファイルもサポートしています。これは高度な機能であるため、Xcode のプロジェクト設定には表示されず、コンフィグ ファイルで編集する必要があります。手順については、後述の「事前作成された .plist を使用する」を参照してください。
プロジェクト設定の .plist 設定 (Mac Target Info.plist 項目と IOS Target Info.plist 項目) では、デフォルトのテンプレート .plist、または自分のカスタム テンプレート .plist を指定できます。
Template.plist ファイルのデフォルトの場所は、プロジェクトの Build/IOS ディレクトリにあります。UE でプロジェクト用の Xcode プロジェクトを生成する場合、プロジェクトのテンプレート .plist ファイルがあるかどうか確認されます。これが存在しない場合、エンジンからプロジェクト フォルダに .plist がコピーされます。
Xcode で .plist 設定を編集して、(プロジェクトのディレクトリではなく) UE のインストール ディレクトリの .plist ファイルを指している場合、Xcode ではこれを書き込み可能とマークして変更するため、そのインストールを使用するすべての UE プロジェクトが影響を受けます。そのため、UE ではエンジンの .plist ファイルをプロジェクトにコピーします。デフォルト設定が更新されたかどうかを確認するには、今後のエンジンのバージョンの .plist ファイルを比較する必要があります。
更新された場合は、後述の「.plist をデフォルトに復元する」の手順を参照してください。
UnrealEditor ターゲットには固有の .plist があり、.app はすべてのプロジェクトで共有されます。ほとんどのユーザーはこれに対応する必要がありません。
事前作成された .plist を使用する
事前作成された .plist を使用する場合、「DefaultEngine.ini」ファイルを変更し、使用するファイルへのパスを含む次の設定のいずれかまたは両方を設定します。
DefaultEngine.ini
[/Script/MacTargetPlatform.XcodeProjectSettings]
PremadeMacPlist=(FilePath="/Game/Build/Mac/Resources/MyGameMac.plist")
PremadeIOSPlist=(FilePath="/Game/Build/IOS/Resources/MyGameIOS.plist")
.plist をデフォルトに復元する
[Restore Info.plist to default (Info.plist をデフォルトに復元)] ボタンを使用して、エンジンのディレクトリの Mac デフォルト テンプレート .plist ファイルをプロジェクトに再度コピーし、適切な値を設定することもできます。これは、更新されたデフォルトの .plist ファイルを将来の UE バージョンで使用する場合に役立ちます。
生成されたアプリから .plist ファイルを取得して、これを事前作成された .plist のソースとして使用します。
プライバシーに関するマニフェスト
Xcode は プライバシー マニフェスト によって、アプリケーションがユーザーのどのような種類のデータを収集し、なぜそのデータを収集するのかを要約します。これには、独自のコードによって収集されるデータと、使用している サードパーティ SDK によって収集されるデータが含まれます。アプリケーションを配信すると、Xcode はSDK とアプリケーションのプライバシー マニフェストを単一のプライバシー レポートにまとめます。これにより、アプリケーションのプライバシー慣行に関する透明性の高い情報をユーザーに提供することが容易になります。
UE は、以下の場所でデフォルトのプライバシー マニフェストを提供しています。
- MacOS:
Engine/Build/Mac/Resources/UEMetadata/PrivacyInfo.xcprivacy - iOS、tvOS、iPadOS:
Engine/Build/iOS/Resources/UEMetadata/PrivacyInfo.xcprivacy
追加のプライバシー機能を使用するプロジェクトの場合は、UE のプロジェクト設定によって指定される場所で追加の PrivacyInfo.xcprivacy ファイルを提供する必要があります。デフォルトでは以下の場所です。
- MacOS:
/Game/Build/Mac/Resources/PrivacyInfo.xcprivacy - iOS、tvOS、iPadOS:
/Game/Build/IOS/Resources/PrivacyInfo.xcprivacy
詳細については、プライバシー マニフェストに関する Apple のドキュメントを参照してください。
MacOS と iOS
UBT には iOS .plist ファイルの生成のために組み込まれたロジックがあるため、.plist ファイルの操作は、新しい Xcode ワークフローの macOS と iOS 間で異なっています。プロジェクト ジェネレータ/Xcode に対してロジックを組み込むことはできません。
UBT に対するデフォルト設定を確認すると、/Game/Build/IOS/UBTGenerated/Info.Template.plst** に指定されていることがわかります**。これは、UBT が実行されるたびに iOS .plist の内容が変更される可能性があるということです。
ただし、プロジェクト設定を変更してテンプレート (または事前作成された) .plist ファイルを使用できます。ここで、UBT の生成したものは無視されます。これを行うと、Xcode を使用して .plist ファイルを編集できます。
次に、Mac と iOS .plist ファイルの違いの概要を示します。
| Mac | iOS | |
|---|---|---|
| デフォルトの .plist | Engine のディレクトリからコピーされたテンプレート | UBT で生成されたテンプレート。 |
| Xcode .plist の変更 | 可 | UBT で生成されたものを使用する場合、不可 |
利用資格
すべてのアプリは、共同デザインの一部として利用資格を指定します。利用資格は、GameCenter のサポートや Mac セキュリティのサンドボックスでの実行など、Apple で作成された機能や制限を制御します。
UE の Xcode プロジェクトの生成では、上記の (Mac) .plist ファイルと同様に利用資格を処理します。UE では Xcode プロジェクトを生成します。プロジェクトのデフォルトの場所に利用資格ファイルがない場合、デフォルトが Engine ディレクトリからコピーされます。その後、Xcode (またはテキスト エディタ) を使用して利用資格を変更できます。これらは、プロジェクトの Build/Mac/Entitlements または Build/IOS/Entitlements にあります。
エンドユーザー向けに別のサンドボックスの制限を設定する場合またはシッピング内容を別のものにする場合、シッピングと開発に別の利用資格を設定できます。別々の機能が不要な場合、同じファイルでこれを指定します。
現在、プロジェクト設定に Mac の利用資格のみが表示されています。
次に、macOS と iOS のデフォルトの利用資格の設定を示します。
| 利用資格の設定 | Mac | iOS |
|---|---|---|
| デフォルトの開発 | サンドボックス化され、クライアント/サーバー ネットワーク接続が許可されます。 | 特定の利用資格は設定されていません。 |
| デフォルトのシッピング | サンドボックス化され、クライアント ネットワーク接続が許可されます。 | 特定の利用資格は設定されていません。 |
クラッシュ レポート機能は、サンドボックス利用資格を有効にするパッケージ化されたゲームと互換性がありません (UE 5.3 以降のデフォルト)。
フレームワーク
フレームワークは、ヘッダ、ライブラリ、コンテンツを収集するための Xcode システムです。新しい Xcode ワークフローでは、以前のワークフローのような手動のコピーおよび共同デザインを行うのではなく、標準 Xcode メソッドを使用してフレームワークを処理します。UE で Xcode プロジェクトを生成すると、ビルド システムを使用して、さまざまなビルド ソース ファイルで参照されているフレームワークを検索します。その後、Xcode プロジェクトを設定して、ダイナミック ライブラリとコンテンツをアプリのバンドルにコピーし、必要に応じて共同デザインします。
アクセス ログ
サンドボックスの設定とアプリケーションの実行方法に応じて、ログ ファイルは異なる場所に表示されます。
- サンドボックスが有効な場合:
- xcode で実行している場合: ~/Library/Logs/[project name]
- ダブルクリックまたはターミナルによって実行している場合: ~/Library/Containers/[your app's bundle ID]/Data/Library/Logs
- サンドボックスが無効な場合:
- ~/Library/Logs/[project name]