VersionInfo
VersionInfo
#Overview
name: VersionInfo
The value of this variable can be defined or overridden in .ini config files. 1
.ini config file referencing this setting variable.
It is referenced in 50
C++ source files. Also referenced in 4
C# build files meaning it may affect the build system logic.
#Summary
#Usage in the C++ source code
The purpose of VersionInfo is to store and manage version information related to different aspects of the Unreal Engine and its components. This variable is used across various subsystems and modules to keep track of version details, compatibility, and build information. Here’s a breakdown of its usage and importance:
-
The VersionInfo variable is used in multiple Unreal Engine subsystems, plugins, and modules, including:
- RigLogic animation system
- Concert multi-user collaboration system
- Blueprint search and indexing
- Platform-specific functionality (iOS, Windows, Linux)
- Network file operations
- HTTP and cURL implementations
-
The value of this variable is typically set during initialization or creation of specific objects or systems. For example, in the iOS runtime settings, it’s set to a default value of “1.0.0” and can be customized by developers.
-
VersionInfo often interacts with other variables related to versioning, such as major, minor, and patch version numbers, as well as build identifiers.
-
Developers must be aware that VersionInfo is crucial for maintaining compatibility between different components of the engine and ensuring proper functionality across various versions of the software.
-
Best practices when using this variable include:
- Keeping it up-to-date with the current version of the component or system it represents
- Using it for version checks to ensure compatibility between different parts of the engine
- Properly serializing and deserializing it when saving or loading data
- Considering it when implementing backwards compatibility features
-
VersionInfo is particularly important in areas such as:
- Plugin and module compatibility checks
- Network communication protocols
- File format versioning
- API versioning and compatibility
-
In some cases, VersionInfo is used to determine the appropriate data format or processing method based on the version of the component or data being handled.
-
For platform-specific implementations (e.g., Windows, Linux, iOS), VersionInfo may be used to determine feature availability or to adjust behavior based on the operating system version.
-
In the context of the Concert multi-user collaboration system, VersionInfo is crucial for ensuring that all participants in a session are using compatible versions of the software.
-
For Blueprint searching and indexing, VersionInfo helps manage the versioning of search data and ensures that outdated search indices are properly updated.
By understanding and properly utilizing VersionInfo, developers can ensure better compatibility, easier maintenance, and smoother upgrades across different versions of Unreal Engine components and related software.
#Usage in the C# source code and build system
The purpose of VersionInfo is to specify the short version string for iOS and tvOS applications built with Unreal Engine 5. This setting is crucial for versioning the application in the App Store and on users’ devices.
This setting variable is primarily relied upon by the iOS and tvOS deployment systems within Unreal Engine. Specifically, it’s used in the following modules:
- UEDeployIOS: Handles deployment for iOS devices
- UEDeployTVOS: Manages deployment for tvOS devices
- XcodeProject: Generates Xcode project files for iOS and tvOS targets
The value of this variable is set in the IOSRuntimeSettings section of the project’s configuration files. It can be modified through the project settings in the Unreal Editor or by directly editing the relevant configuration files.
VersionInfo interacts with other iOS and tvOS specific settings, such as:
- bSupportsMetal: Determines if the Metal graphics API is supported
- bEnableGoogleSupport: Enables Google services integration
- bEnableSimulatorSupport: Allows building for iOS simulator
Developers must be aware that:
- This version string should follow semantic versioning guidelines (e.g., “1.0.0”).
- It needs to be updated for each new release of the application to the App Store.
- The version string affects how updates are handled on user devices and in the App Store.
Best practices when using this variable include:
- Consistently increment the version for each new release.
- Ensure the version string in VersionInfo matches the version number used in other parts of the project (e.g., marketing materials, internal documentation).
- Use a systematic versioning scheme that clearly communicates the nature of updates to users and the App Store.
- Coordinate changes to this variable with your team to maintain consistency across the project.
There is no directly associated variable mentioned in the provided information. However, it’s worth noting that VersionInfo works in conjunction with other iOS and tvOS specific settings to define the characteristics and capabilities of the deployed application.
#Setting Variables
#References In INI files
Location: <Workspace>/Engine/Config/BaseEngine.ini:3002, section: [/Script/IOSRuntimeSettings.IOSRuntimeSettings]
- INI Section:
/Script/IOSRuntimeSettings.IOSRuntimeSettings
- Raw value:
1.0
- Is Array:
False
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Plugins/Animation/RigLogic/Source/RigLogicLib/Public/riglogic/version/VersionInfo.h:7
Scope (from outer to inner):
file
namespace rl4
function struct RLAPI VersionInfo { static int getMajorVersion
Source code excerpt:
namespace rl4 {
struct RLAPI VersionInfo {
static int getMajorVersion();
static int getMinorVersion();
static int getPatchVersion();
static StringView getVersionString();
};
#Loc: <Workspace>/Engine/Plugins/Developer/Concert/ConcertApp/MultiUserClient/Source/MultiUserClient/Private/Widgets/Disconnected/SConcertClientSessionBrowser.cpp:625
Scope (from outer to inner):
file
function void SConcertClientSessionBrowser::PopulateSessionInfoGrid
Source code excerpt:
if (SessionInfo.VersionInfos.Num() > 0)
{
const FConcertSessionVersionInfo& VersionInfo = SessionInfo.VersionInfos.Last();
AddDetailRow(Grid, Row++, LOCTEXT("EngineVersion", "Engine Version:"), VersionInfo.AsText());
}
AddDetailRow(Grid, Row++, LOCTEXT("ServerEndPointId", "Server Endpoint ID:"), FText::FromString(SessionInfo.ServerEndpointId.ToString()));
}
TSharedRef<ITableRow> SConcertClientSessionBrowser::OnGenerateClientRowWidget(TSharedPtr<FConcertSessionClientInfo> Item, const TSharedRef<STableViewBase>& OwnerTable)
{
#Loc: <Workspace>/Engine/Plugins/Developer/Concert/ConcertApp/MultiUserServer/Source/MultiUserServer/Private/Widgets/Browser/ConcertServerSessionBrowserController.cpp:118
Scope (from outer to inner):
file
namespace UE::MultiUserServer
function void FConcertServerSessionBrowserController::CreateSession
Source code excerpt:
SessionInfo.Settings.ProjectName = ProjectName;
}
FConcertSessionVersionInfo VersionInfo;
VersionInfo.Initialize(false /* bSupportMixedBuildTypes */ );
SessionInfo.VersionInfos.Emplace(VersionInfo);
FAsyncTaskNotification Notification(
MakeAsyncNotification(FText::Format(LOCTEXT("CreateSessionFmt.InProgress", "Created Session '{0}'"), FText::FromString(SessionName)))
);
FText FailureReason = FText::GetEmpty();
const bool bSuccess = ServerInstance->GetConcertServer()->CreateSession(SessionInfo, FailureReason) != nullptr;
#Loc: <Workspace>/Engine/Plugins/Developer/Concert/ConcertMain/Source/Concert/Private/ConcertMessageData.cpp:140
Scope (from outer to inner):
file
function FText FConcertSessionInfo::ToDisplayString
Source code excerpt:
if (VersionInfos.Num() > 0)
{
const FConcertSessionVersionInfo& VersionInfo = VersionInfos.Last();
TextBuilder.AppendLineFormat(
NSLOCTEXT("ConcertSessionInfo", "EngineVersion", "Session Engine Version: {0}.{1}.{2}-{3}"),
FText::AsNumber(VersionInfo.EngineVersion.Major, &FNumberFormattingOptions::DefaultNoGrouping()),
FText::AsNumber(VersionInfo.EngineVersion.Minor, &FNumberFormattingOptions::DefaultNoGrouping()),
FText::AsNumber(VersionInfo.EngineVersion.Patch, &FNumberFormattingOptions::DefaultNoGrouping()),
FText::AsNumber(VersionInfo.EngineVersion.Changelist, &FNumberFormattingOptions::DefaultNoGrouping())
);
}
TextBuilder.AppendLineFormat(NSLOCTEXT("ConcertSessionInfo", "ServerEndpointId", "Server Endpoint ID: {0}"), FText::FromString(ServerEndpointId.ToString()));
return TextBuilder.ToText();
}
#Loc: <Workspace>/Engine/Plugins/Developer/Concert/ConcertMain/Source/Concert/Public/ConcertMessages.h:271
Scope: file
Source code excerpt:
UPROPERTY(VisibleAnywhere, Category="Concert Message")
FConcertSessionVersionInfo VersionInfo;
};
USTRUCT()
struct FConcertAdmin_FindSessionRequest : public FConcertRequestData
{
GENERATED_BODY()
#Loc: <Workspace>/Engine/Plugins/Developer/Concert/ConcertMain/Source/Concert/Public/ConcertMessages.h:289
Scope: file
Source code excerpt:
UPROPERTY(VisibleAnywhere, Category="Concert Message")
FConcertSessionVersionInfo VersionInfo;
};
/** Used to copy a live session or restore an archived one. */
USTRUCT()
struct FConcertAdmin_CopySessionRequest : public FConcertRequestData
{
#Loc: <Workspace>/Engine/Plugins/Developer/Concert/ConcertMain/Source/Concert/Public/ConcertMessages.h:316
Scope: file
Source code excerpt:
/** Version information of the client requesting the copy. */
UPROPERTY(VisibleAnywhere, Category="Concert Message")
FConcertSessionVersionInfo VersionInfo;
/** The filter controlling which activities from the session should be copied over. */
UPROPERTY(VisibleAnywhere, Category="Concert Message")
FConcertSessionFilter SessionFilter;
/** True to constrain the session to copy to be an archive (implying a restore operation). */
#Loc: <Workspace>/Engine/Plugins/Developer/Concert/ConcertMain/Source/ConcertClient/Private/ConcertClient.cpp:1198
Scope (from outer to inner):
file
function TFuture<EConcertResponseCode> FConcertClient::InternalCreateSession
Source code excerpt:
CreateSessionRequest.SessionName = CreateSessionArgs.SessionName;
CreateSessionRequest.OwnerClientInfo = ClientInfo;
CreateSessionRequest.VersionInfo.Initialize(GetConfiguration()->ClientSettings.bSupportMixedBuildTypes);
// Session settings
CreateSessionRequest.SessionSettings.Initialize();
CreateSessionRequest.SessionSettings.ArchiveNameOverride = CreateSessionArgs.ArchiveNameOverride;
ConnectionTasks.Emplace(MakeUnique<FConcertClientCreateSessionTask>(this, MoveTemp(CreateSessionRequest), ServerAdminEndpointId));
#Loc: <Workspace>/Engine/Plugins/Developer/Concert/ConcertMain/Source/ConcertClient/Private/ConcertClient.cpp:1244
Scope (from outer to inner):
file
function TFuture<EConcertResponseCode> FConcertClient::InternalJoinSession
Source code excerpt:
FindSessionRequest.SessionId = SessionId;
FindSessionRequest.OwnerClientInfo = ClientInfo;
FindSessionRequest.VersionInfo.Initialize(GetConfiguration()->ClientSettings.bSupportMixedBuildTypes);
// Session settings
FindSessionRequest.SessionSettings.Initialize();
ConnectionTasks.Emplace(MakeUnique<FConcertClientJoinSessionTask>(this, MoveTemp(FindSessionRequest), ServerAdminEndpointId, ResolvedSessionName));
}
#Loc: <Workspace>/Engine/Plugins/Developer/Concert/ConcertMain/Source/ConcertClient/Private/ConcertClient.cpp:1273
Scope (from outer to inner):
file
function TFuture<EConcertResponseCode> FConcertClient::InternalCopySession
Source code excerpt:
CopySessionRequest.bRestoreOnly = bRestoreOnlyConstraint;
CopySessionRequest.OwnerClientInfo = ClientInfo;
CopySessionRequest.VersionInfo.Initialize(GetConfiguration()->ClientSettings.bSupportMixedBuildTypes);
// Session settings
CopySessionRequest.SessionSettings.Initialize();
CopySessionRequest.SessionSettings.ArchiveNameOverride = CopySessionArgs.ArchiveNameOverride;
TUniquePtr<FAsyncTaskNotification> Notification = MoveTemp(OngoingNotification);
#Loc: <Workspace>/Engine/Plugins/Developer/Concert/ConcertMain/Source/ConcertServer/Private/ConcertServer.cpp:1102
Scope (from outer to inner):
file
function TFuture<FConcertAdmin_SessionInfoResponse> FConcertServer::HandleCreateSessionRequest
Source code excerpt:
SessionInfo.SessionName = Message->SessionName;
SessionInfo.Settings = Message->SessionSettings;
SessionInfo.VersionInfos.Add(Message->VersionInfo);
NewServerSession = CreateSession(SessionInfo, CreateFailureReason);
}
// We have a valid session if it succeeded
FConcertAdmin_SessionInfoResponse ResponseData;
if (NewServerSession)
#Loc: <Workspace>/Engine/Plugins/Developer/Concert/ConcertMain/Source/ConcertServer/Private/ConcertServer.cpp:1132
Scope (from outer to inner):
file
function TFuture<FConcertAdmin_SessionInfoResponse> FConcertServer::HandleFindSessionRequest
Source code excerpt:
TSharedPtr<IConcertServerSession> ServerSession = GetLiveSession(Message->SessionId);
const TCHAR* ServerSessionNamePtr = ServerSession ? *ServerSession->GetName() : TEXT("<unknown>");
if (CanJoinSession(ServerSession, Message->SessionSettings, Message->VersionInfo, Message->ConcertEndpointId, Message->OwnerClientInfo, &ResponseData.Reason))
{
ResponseData.ResponseCode = EConcertResponseCode::Success;
ResponseData.SessionInfo = ServerSession->GetSessionInfo();
UE_LOG(LogConcert, Display, TEXT("Allowing user %s to join session %s (Id: %s, Owner: %s)"), *Message->OwnerClientInfo.UserName, ServerSessionNamePtr, *Message->SessionId.ToString(), *ServerSession->GetSessionInfo().OwnerUserName);
}
else
#Loc: <Workspace>/Engine/Plugins/Developer/Concert/ConcertMain/Source/ConcertServer/Private/ConcertServer.cpp:1161
Scope (from outer to inner):
file
function TFuture<FConcertAdmin_SessionInfoResponse> FConcertServer::HandleCopySessionRequest
Source code excerpt:
SessionInfo.SessionName = Message->SessionName;
SessionInfo.Settings = Message->SessionSettings;
SessionInfo.VersionInfos.Add(Message->VersionInfo);
NewServerSession = Message->bRestoreOnly ?
RestoreSession(Message->SessionId, SessionInfo, Message->SessionFilter, FailureReason) :
CopySession(Message->SessionId, SessionInfo, Message->SessionFilter, FailureReason);
}
// We have a valid session if it succeeded
#Loc: <Workspace>/Engine/Plugins/Developer/Concert/ConcertSync/ConcertSyncClient/Source/ConcertSyncClient/Private/ConcertClientTransactionManager.cpp:591
Scope (from outer to inner):
file
function void FConcertClientTransactionManager::ProcessTransactionFinalizedEvent
Source code excerpt:
void FConcertClientTransactionManager::ProcessTransactionFinalizedEvent(const FPendingTransactionToProcessContext& InContext, const FConcertTransactionFinalizedEvent& InEvent)
{
const FConcertSessionVersionInfo* VersionInfo = LiveSession->GetSession().GetSessionInfo().VersionInfos.IsValidIndex(InEvent.VersionIndex) ? &LiveSession->GetSession().GetSessionInfo().VersionInfos[InEvent.VersionIndex] : nullptr;
FConcertLocalIdentifierTable LocalIdentifierTable(InEvent.LocalIdentifierState);
TransactionBridge->OnApplyTransaction().Broadcast(ETransactionNotification::Begin, /*bIsSnapshot*/ false);
CheckEventForSendConflicts(InEvent);
TransactionBridge->ApplyRemoteTransaction(InEvent, VersionInfo, InContext.PackagesToProcess, &LocalIdentifierTable, /*bIsSnapshot*/false);
TransactionBridge->OnApplyTransaction().Broadcast(ETransactionNotification::End, /*bIsSnapshot*/ false);
}
void FConcertClientTransactionManager::ProcessTransactionSnapshotEvent(const FPendingTransactionToProcessContext& InContext, const FConcertTransactionSnapshotEvent& InEvent)
{
const FConcertSessionVersionInfo* VersionInfo = LiveSession->GetSession().GetSessionInfo().VersionInfos.IsValidIndex(InEvent.VersionIndex) ? &LiveSession->GetSession().GetSessionInfo().VersionInfos[InEvent.VersionIndex] : nullptr;
TransactionBridge->OnApplyTransaction().Broadcast(ETransactionNotification::Begin, /*bIsSnapshot*/ true);
TransactionBridge->ApplyRemoteTransaction(InEvent, VersionInfo, InContext.PackagesToProcess, nullptr, /*bIsSnapshot*/true);
TransactionBridge->OnApplyTransaction().Broadcast(ETransactionNotification::End, /*bIsSnapshot*/ true);
}
FConcertClientTransactionManager::FPendingTransactionToSend&
FConcertClientTransactionManager::HandleLocalTransactionCommon(
const FConcertClientLocalTransactionCommonData& InCommonData,
#Loc: <Workspace>/Engine/Plugins/Developer/Concert/ConcertSync/ConcertSyncCore/Source/ConcertSyncCore/Private/ConcertSyncSessionDatabase.cpp:369
Scope (from outer to inner):
file
namespace PackageDataUtil
function int64 EstimatePackageBlobMetaDataSize
Source code excerpt:
int64 EstimatePackageBlobMetaDataSize()
{
// Roughly: VersionInfo + PackageDataOffset + Footer.
return sizeof(uint32) + sizeof(int64) + sizeof(FGuid);
}
bool WillUseMemoryWriter(int64 DataSize)
{
using namespace UE::Concert::Compression;
#Loc: <Workspace>/Engine/Plugins/Developer/Concert/ConcertUI/ConcertSharedSlate/Source/ConcertSharedSlate/Private/Session/Browser/SConcertSessionBrowser.cpp:176
Scope (from outer to inner):
file
namespace UE::SessionBrowser::Private
function static FConcertSessionTreeItem GenerateSessionItem
Source code excerpt:
if (Session.SessionInfo.VersionInfos.Num()>0)
{
const FConcertSessionVersionInfo& VersionInfo = Session.SessionInfo.VersionInfos.Last();
Version = VersionInfo.AsText();
}
return FConcertSessionTreeItem(
GetEType<SessionType>(),
Session.ServerInfo.AdminEndpointId,
Session.SessionInfo.SessionId,
Session.SessionInfo.SessionName,
#Loc: <Workspace>/Engine/Plugins/Experimental/MetaHuman/MetaHumanProjectUtilities/Source/MetaHumanProjectUtilities/Private/MetaHumanImport.cpp:143
Scope (from outer to inner):
file
namespace UE::MetaHumanImport::Private
function TMap<FString, FMetaHumanAssetVersion> ParseVersionInfo
Source code excerpt:
FString VersionInfoString;
FFileHelper::LoadFileToString(VersionInfoString, *AssetVersionFilePath);
TMap<FString, FMetaHumanAssetVersion> VersionInfo;
TSharedPtr<FJsonObject> AssetsVersionInfoObject;
FJsonSerializer::Deserialize(TJsonReaderFactory<>::Create(VersionInfoString), AssetsVersionInfoObject);
TArray<TSharedPtr<FJsonValue>> AssetsVersionInfoArray = AssetsVersionInfoObject->GetArrayField(TEXT("assets"));
for (const TSharedPtr<FJsonValue>& AssetVersionInfoObject : AssetsVersionInfoArray)
{
FString AssetPath = AssetVersionInfoObject->AsObject()->GetStringField(TEXT("path"));
FMetaHumanAssetVersion AssetVersion = FMetaHumanAssetVersion::FromString(AssetVersionInfoObject->AsObject()->GetStringField(TEXT("version")));
VersionInfo.Add(AssetPath, AssetVersion);
}
return VersionInfo;
}
void CopyFiles(const FAssetOperationPaths& AssetOperations, const FImportPaths& ImportPaths)
{
TArray<UPackage*> PackagesToReload;
TArray<UPackage*> BPsToReload;
#Loc: <Workspace>/Engine/Plugins/VirtualProduction/LevelSnapshots/Source/LevelSnapshots/Public/Data/SnapshotVersion.h:70
Scope (from outer to inner):
file
function FArchive& operator<<
Source code excerpt:
void Initialize(const FCustomVersion& InVersion);
friend FArchive& operator<<(FArchive& Archive, FSnapshotCustomVersionInfo& VersionInfo)
{
Archive << VersionInfo.FriendlyName;
return Archive;
}
/** Friendly name of the version */
UPROPERTY()
FName FriendlyName;
#Loc: <Workspace>/Engine/Source/Developer/CrashDebugHelper/Private/Windows/WindowsPlatformStackWalkExt.cpp:167
Scope (from outer to inner):
file
function void FWindowsPlatformStackWalkExt::GetExeFileVersionAndModuleList
Source code excerpt:
if( ExecutableIndex > -1 )
{
VS_FIXEDFILEINFO VersionInfo = {0};
Symbol->GetModuleVersionInformationWide( ExecutableIndex, 0, TEXT( "\\" ), &VersionInfo, sizeof( VS_FIXEDFILEINFO ), NULL );
out_ExeFileVersion.Major = HIWORD( VersionInfo.dwProductVersionMS );
out_ExeFileVersion.Minor = LOWORD( VersionInfo.dwProductVersionMS );
out_ExeFileVersion.Patch = HIWORD( VersionInfo.dwProductVersionLS );
}
else
{
UE_LOG( LogCrashDebugHelper, Warning, TEXT( "Unable to locate the executable" ) );
}
}
#Loc: <Workspace>/Engine/Source/Developer/CrashDebugHelper/Private/Windows/WindowsPlatformStackWalkExt.cpp:343
Scope (from outer to inner):
file
function void FWindowsPlatformStackWalkExt::GetModuleInfoDetailed
Source code excerpt:
CrashModule->SizeOfImage = ModuleParameters.Size;
VS_FIXEDFILEINFO VersionInfo = { 0 };
Symbol->GetModuleVersionInformationWide( ModuleIndex, ModuleBase, TEXT( "\\" ), &VersionInfo, sizeof( VS_FIXEDFILEINFO ), NULL );
CrashModule->Major = HIWORD( VersionInfo.dwProductVersionMS );
CrashModule->Minor = LOWORD( VersionInfo.dwProductVersionMS );
CrashModule->Patch = HIWORD( VersionInfo.dwProductVersionLS );
CrashModule->Revision = LOWORD( VersionInfo.dwProductVersionLS );
// NOTE: The function below was commented because in some occasions (unknown reason), it triggered a search for modules on the user disk,
// scanning all projects assets for each module, taking an unacceptable long time in very large projects. This could be observed with
// SysInternal ProcessMonitor. The original intent for calling ReloadWide() is unknown, but normally, this function is meant
// to control when the modules are reloaded, for example if the .pdb were about to be deleted, we would want to reload and cache the
// symbols before losing them. Since we configured the debug engine with SYMOPT_DEFERRED_LOADS to only load symbols if needed,
#Loc: <Workspace>/Engine/Source/Developer/DesktopPlatform/Private/Windows/DesktopPlatformWindows.cpp:587
Scope (from outer to inner):
file
function int32 FDesktopPlatformWindows::GetShellIntegrationVersion
Source code excerpt:
if (VersionInfoSize != 0)
{
TArray<uint8> VersionInfo;
VersionInfo.AddUninitialized(VersionInfoSize);
if (GetFileVersionInfo(*FileName, NULL, VersionInfoSize, VersionInfo.GetData()))
{
TCHAR *ShellVersion;
::UINT ShellVersionLen;
if (VerQueryValue(VersionInfo.GetData(), TEXT("\\StringFileInfo\\040904b0\\ShellIntegrationVersion"), (LPVOID*)&ShellVersion, &ShellVersionLen))
{
TCHAR *ShellVersionEnd;
int32 Version = FCString::Strtoi(ShellVersion, &ShellVersionEnd, 10);
if(*ShellVersionEnd == 0)
{
return Version;
#Loc: <Workspace>/Engine/Source/Developer/IOS/IOSPlatformEditor/Private/IOSTargetSettingsCustomization.cpp:799
Scope: file
Source code excerpt:
SETUP_PLIST_PROP(BundleName, BundleCategory);
SETUP_STATUS_PROP(BundleIdentifier, BundleCategory);
SETUP_PLIST_PROP(VersionInfo, BundleCategory);
SETUP_PLIST_PROP(bSupportsPortraitOrientation, OrientationCategory);
SETUP_PLIST_PROP(bSupportsUpsideDownOrientation, OrientationCategory);
SETUP_PLIST_PROP(bSupportsLandscapeLeftOrientation, OrientationCategory);
SETUP_PLIST_PROP(bSupportsLandscapeRightOrientation, OrientationCategory);
SETUP_PLIST_PROP(PreferredLandscapeOrientation, OrientationCategory);
#Loc: <Workspace>/Engine/Source/Editor/Kismet/Private/FindInBlueprintManager.cpp:173
Scope (from outer to inner):
file
function uint32 FStreamSearch::Run
Source code excerpt:
{
// If the Blueprint is below the version, add it to a list. The search will still proceed on this Blueprint
if (QueryResult.VersionInfo.FiBDataVersion < SearchOptions.MinimiumVersionRequirement)
{
++BlueprintCountBelowVersion;
}
TSharedPtr< FFiBSearchInstance > SearchInstance(new FFiBSearchInstance);
FSearchResult SearchResult;
#Loc: <Workspace>/Engine/Source/Editor/Kismet/Private/FindInBlueprintManager.cpp:1767
Scope: file
Source code excerpt:
{
using namespace BlueprintSearchMetaDataHelpers;
SearchData.Value = GatherBlueprintSearchMetadata<FFindInBlueprintJsonWriter>(Blueprint, SearchData.VersionInfo.FiBDataVersion);
if (SearchData.Value.Len() > 0)
{
bEnqueueForAsyncIndexing = ShouldFullyIndexAssets();
}
else
#Loc: <Workspace>/Engine/Source/Editor/Kismet/Private/FindInBlueprintManager.cpp:1825
Scope (from outer to inner):
file
function void Tick
Source code excerpt:
{
using namespace BlueprintSearchMetaDataHelpers;
SearchData.Value = GatherBlueprintSearchMetadata<FFindInBlueprintJsonWriter>(Blueprint, SearchData.VersionInfo.FiBDataVersion);
}
}
// Signal that this deferred asset has now been indexed.
SearchData.StateFlags |= ESearchDataStateFlags::IsIndexed;
#Loc: <Workspace>/Engine/Source/Editor/Kismet/Private/FindInBlueprintManager.cpp:2261
Scope (from outer to inner):
file
function bool FFindInBlueprintSearchManager::ProcessEncodedValueForUnloadedBlueprint
Source code excerpt:
const FString& EncodedString = !TempEncodedString.IsEmpty() ? TempEncodedString : SearchData.Value;
if (FiBSerializationHelpers::ValidateSearchDataVersionInfo(AssetPath, EncodedString, SearchData.VersionInfo))
{
// Parse the data into json and then clear the memory
SearchData.ImaginaryBlueprint = MakeShareable(new FImaginaryBlueprint(FPaths::GetBaseFilename(AssetPath), AssetPath, SearchData.ParentClass, SearchData.Interfaces, EncodedString, SearchData.VersionInfo));
SearchData.ClearEncodedValue();
return true;
}
return false;
#Loc: <Workspace>/Engine/Source/Editor/Kismet/Private/FindInBlueprintManager.cpp:2348
Scope (from outer to inner):
file
function void FFindInBlueprintSearchManager::ExtractUnloadedFiBData
Source code excerpt:
// This will be set to 'None' if the data is versioned. Deserialization of the actual version from the tag value is deferred until later.
NewSearchData.VersionInfo.FiBDataVersion = InFiBDataVersion;
// In these modes, or if there is no tag data, no additional indexing work is deferred for unloaded assets.
if (!bDisableDeferredIndexing && !bDisableThreadedIndexing && NewSearchData.HasEncodedValue())
{
// Add it to the list of assets that require a full index rebuild from the metadata. This work will not block the main thread and is decoupled from the search thread.
PendingAssets.Add(NewSearchData.AssetPath);
#Loc: <Workspace>/Engine/Source/Editor/Kismet/Private/FindInBlueprintManager.cpp:2646
Scope (from outer to inner):
file
function void FFindInBlueprintSearchManager::AddOrUpdateBlueprintSearchMetadata
Source code excerpt:
// Update version info stored in database. This indicates which format to use when regenerating the tag value.
SearchData.VersionInfo = FSearchDataVersionInfo::Current;
if (InVersion != EFiBVersion::FIB_VER_NONE)
{
SearchData.VersionInfo.FiBDataVersion = InVersion;
}
// During unindexed/out-of-date caching we will arrive here as a result of loading the asset, so don't remove the IsUnindexedCacheInProgress() check!
if (bForceRecache || bClearCachedValue || IsUnindexedCacheInProgress() || bDisableDeferredIndexing)
{
// Cannot successfully gather most searchable data if there is no SkeletonGeneratedClass, so don't try, leave it as whatever it was last set to
#Loc: <Workspace>/Engine/Source/Editor/Kismet/Private/FindInBlueprintManager.cpp:2661
Scope (from outer to inner):
file
function void FFindInBlueprintSearchManager::AddOrUpdateBlueprintSearchMetadata
Source code excerpt:
// Update search metadata string content
SearchData.Value = GatherBlueprintSearchMetadata<FFindInBlueprintJsonWriter>(InBlueprint, SearchData.VersionInfo.FiBDataVersion);
}
// Mark it as having been indexed in the following cases:
// a) Deferred or multithreaded indexing is disabled. In these cases, indexing will be handled by the search thread.
// b) There is no generated metadata. In this case, there's nothing to search, so there's no need to index the asset.
if (bDisableDeferredIndexing || bDisableThreadedIndexing || SearchData.Value.Len() == 0)
#Loc: <Workspace>/Engine/Source/Editor/Kismet/Private/FindInBlueprintManager.cpp:3301
Scope (from outer to inner):
file
function void FFindInBlueprintSearchManager::CacheAllAssets
Source code excerpt:
for (FSearchData SearchData : SearchArray)
{
if ((SearchData.Value.Len() != 0 || SearchData.ImaginaryBlueprint.IsValid()) && SearchData.VersionInfo.FiBDataVersion < InOptions.MinimiumVersionRequirement)
{
BlueprintsToUpdate.Add(SearchData.AssetPath);
}
}
FText DialogTitle = LOCTEXT("ConfirmIndexAll_Title", "Indexing All");
#Loc: <Workspace>/Engine/Source/Editor/Kismet/Private/FindInBlueprintManager.cpp:3387
Scope (from outer to inner):
file
function void FFindInBlueprintSearchManager::ExportOutdatedAssetList
Source code excerpt:
for (FSearchData SearchData : SearchArray)
{
if ((SearchData.Value.Len() != 0 || SearchData.ImaginaryBlueprint.IsValid()) && SearchData.VersionInfo.FiBDataVersion < EFiBVersion::FIB_VER_LATEST)
{
const FString OutdatedEntry = FString::Printf(TEXT("%s\n"), *SearchData.AssetPath.ToString());
Ar->Serialize(TCHAR_TO_ANSI(*OutdatedEntry), OutdatedEntry.Len());
}
}
#Loc: <Workspace>/Engine/Source/Editor/Kismet/Private/FindInBlueprints.cpp:1245
Scope (from outer to inner):
file
function void SFindInBlueprints::MakeSearchQuery
Source code excerpt:
if (bHasValidSearchData)
{
FImaginaryFiBDataSharedPtr ImaginaryBlueprint(new FImaginaryBlueprint(Blueprint->GetName(), Blueprint->GetPathName(), ParentClass, Interfaces, SearchData.Value, SearchData.VersionInfo));
TSharedPtr< FFiBSearchInstance > SearchInstance(new FFiBSearchInstance);
FSearchResult SearchResult = RootSearchResult = SearchInstance->StartSearchQuery(SearchValue, ImaginaryBlueprint);
if (SearchResult.IsValid())
{
ItemsFound = SearchResult->Children;
#Loc: <Workspace>/Engine/Source/Editor/Kismet/Public/FindInBlueprintManager.h:211
Scope: file
Source code excerpt:
/** Data versioning */
FSearchDataVersionInfo VersionInfo;
/** State flags (see enum) */
ESearchDataStateFlags StateFlags;
FSearchData()
: Blueprint(nullptr)
#Loc: <Workspace>/Engine/Source/Runtime/ApplicationCore/Private/Linux/LinuxPlatformSplash.cpp:769
Scope (from outer to inner):
file
function void FLinuxPlatformSplash::Show
Source code excerpt:
const FText Version = FText::FromString( FEngineVersion::Current().ToString( FEngineBuildSettings::IsPerforceBuild() ? EVersionComponent::Branch : EVersionComponent::Patch ) );
FText VersionInfo = FText::Format( NSLOCTEXT( "UnrealEd", "UnrealEdTitleWithVersionNoGameName_F", "Unreal Editor {0}" ), Version );
AppName = NSLOCTEXT( "UnrealEd", "UnrealEdTitleNoGameName_F", "Unreal Editor" );
GSplashState->SetSplashText( SplashTextType::VersionInfo1, VersionInfo );
}
// Display copyright information in editor splash screen
{
const FText CopyrightInfo = NSLOCTEXT( "UnrealEd", "SplashScreen_CopyrightInfo", "Copyright \x00a9 Epic Games, Inc. All rights reserved." );
GSplashState->SetSplashText( SplashTextType::CopyrightInfo, CopyrightInfo );
#Loc: <Workspace>/Engine/Source/Runtime/ApplicationCore/Private/Mac/MacPlatformSplash.cpp:212
Scope (from outer to inner):
file
lambda-function
Source code excerpt:
const FText Version = FText::FromString( FEngineVersion::Current().ToString( FEngineBuildSettings::IsPerforceBuild() ? EVersionComponent::Branch : EVersionComponent::Patch ) );
FText VersionInfo;
FText AppName;
if( GameName.IsEmpty() )
{
VersionInfo = FText::Format( NSLOCTEXT( "UnrealEd", "UnrealEdTitleWithVersionNoGameName_F", "Unreal Editor {0}" ), Version );
AppName = NSLOCTEXT( "UnrealEd", "UnrealEdTitleNoGameName_F", "Unreal Editor" );
StartSetSplashText( SplashTextType::GameName, AppName);
}
else
{
VersionInfo = FText::Format( NSLOCTEXT( "UnrealEd", "UnrealEdTitleWithVersionWithGameName_F", "Unreal Editor {0} - {1}" ), Version, GameName );
AppName = FText::Format( NSLOCTEXT( "UnrealEd", "UnrealEdTitle_F", "Unreal Editor - {0}" ), GameName );
}
StartSetSplashText( SplashTextType::VersionInfo1, VersionInfo );
// Change the window text (which will be displayed in the taskbar)
GSplashScreenAppName = AppName;
}
// Display copyright information in editor splash screen
#Loc: <Workspace>/Engine/Source/Runtime/ApplicationCore/Private/Windows/WindowsApplication.cpp:884
Scope (from outer to inner):
file
function EWindowTitleAlignment::Type FWindowsApplication::GetWindowTitleAlignment
Source code excerpt:
EWindowTitleAlignment::Type FWindowsApplication::GetWindowTitleAlignment() const
{
OSVERSIONINFOEX VersionInfo;
FMemory::Memzero(VersionInfo);
VersionInfo.dwMajorVersion = 6;
VersionInfo.dwMinorVersion = 2;
VersionInfo.dwOSVersionInfoSize = sizeof(VersionInfo);
DWORDLONG LongConditionMask = 0;
BYTE ConditionMask = VER_GREATER_EQUAL;
VER_SET_CONDITION(LongConditionMask, VER_MAJORVERSION, ConditionMask);
VER_SET_CONDITION(LongConditionMask, VER_MINORVERSION, ConditionMask);
if (::VerifyVersionInfo(&VersionInfo, VER_MAJORVERSION | VER_MINORVERSION, LongConditionMask) != 0)
{
return EWindowTitleAlignment::Center;
}
return EWindowTitleAlignment::Left;
}
#Loc: <Workspace>/Engine/Source/Runtime/ApplicationCore/Private/Windows/WindowsPlatformSplash.cpp:667
Scope (from outer to inner):
file
function void FWindowsPlatformSplash::Show
Source code excerpt:
FText AppName;
FText VersionInfo = FText::Format(NSLOCTEXT("UnrealEd", "UnrealEdTitleWithVersion_F", "Unreal Editor {0}"), Version);
if( GameName.IsEmpty() )
{
AppName = NSLOCTEXT( "UnrealEd", "UnrealEdTitleNoGameName_F", "Unreal Editor" );
}
else
{
#Loc: <Workspace>/Engine/Source/Runtime/ApplicationCore/Private/Windows/WindowsPlatformSplash.cpp:678
Scope (from outer to inner):
file
function void FWindowsPlatformSplash::Show
Source code excerpt:
StartSetSplashText(SplashTextType::GameName, *AppName.ToString());
StartSetSplashText(SplashTextType::VersionInfo1, *VersionInfo.ToString());
// Change the window text (which will be displayed in the taskbar)
GSplashScreenAppName = AppName;
}
// Display copyright information in editor splash screen
#Loc: <Workspace>/Engine/Source/Runtime/Core/Private/Windows/WindowsPlatformMisc.cpp:4110
Scope (from outer to inner):
file
function uint64 FWindowsPlatformMisc::GetFileVersion
Source code excerpt:
if (VersionInfoSize != 0)
{
TArray<uint8> VersionInfo;
VersionInfo.AddUninitialized(VersionInfoSize);
if (GetFileVersionInfo(*FileName, NULL, VersionInfoSize, VersionInfo.GetData()))
{
VS_FIXEDFILEINFO *FileInfo;
::UINT FileInfoLen;
if (VerQueryValue(VersionInfo.GetData(), TEXT("\\"), (LPVOID*)&FileInfo, &FileInfoLen))
{
return (uint64(FileInfo->dwFileVersionMS) << 32) | uint64(FileInfo->dwFileVersionLS);
}
}
}
return 0;
#Loc: <Workspace>/Engine/Source/Runtime/CoreUObject/Private/UObject/UObjectBase.cpp:643
Scope (from outer to inner):
file
function void RegisterCompiledInInfo
Source code excerpt:
{
const FClassRegisterCompiledInInfo& Info = ClassInfo[Index];
RegisterCompiledInInfo(Info.OuterRegister, Info.InnerRegister, PackageName, Info.Name, *Info.Info, Info.VersionInfo);
}
for (size_t Index = 0; Index < NumStructInfo; ++Index)
{
const FStructRegisterCompiledInInfo& Info = StructInfo[Index];
RegisterCompiledInInfo(Info.OuterRegister, PackageName, Info.Name, *Info.Info, Info.VersionInfo);
if (Info.CreateCppStructOps != nullptr)
{
UScriptStruct::DeferCppStructOps(FTopLevelAssetPath(FName(PackageName), FName(Info.Name)), (UScriptStruct::ICppStructOps*)Info.CreateCppStructOps());
}
}
#Loc: <Workspace>/Engine/Source/Runtime/CoreUObject/Private/UObject/UObjectBase.cpp:659
Scope (from outer to inner):
file
function void RegisterCompiledInInfo
Source code excerpt:
{
const FEnumRegisterCompiledInInfo& Info = EnumInfo[Index];
RegisterCompiledInInfo(Info.OuterRegister, PackageName, Info.Name, *Info.Info, Info.VersionInfo);
}
}
/** Register all loaded classes */
void UClassRegisterAllCompiledInClasses()
{
#Loc: <Workspace>/Engine/Source/Runtime/CoreUObject/Public/UObject/ObjectMacros.h:1753
Scope: file
Source code excerpt:
#if WITH_RELOAD
#define CONSTRUCT_RELOAD_VERSION_INFO(VersionInfo, ...) VersionInfo { __VA_ARGS__ }
#else
#define CONSTRUCT_RELOAD_VERSION_INFO(VersionInfo, ...) VersionInfo()
#endif
/*-----------------------------------------------------------------------------
Class declaration macros.
-----------------------------------------------------------------------------*/
#Loc: <Workspace>/Engine/Source/Runtime/CoreUObject/Public/UObject/UObjectBase.h:355
Scope: file
Source code excerpt:
const TCHAR* Name;
FClassRegistrationInfo* Info;
FClassReloadVersionInfo VersionInfo;
};
/**
* Adds a class registration and version information. The InInfo parameter must be static.
*/
COREUOBJECT_API void RegisterCompiledInInfo(class UClass* (*InOuterRegister)(), class UClass* (*InInnerRegister)(), const TCHAR* InPackageName, const TCHAR* InName, FClassRegistrationInfo& InInfo, const FClassReloadVersionInfo& InVersionInfo);
#Loc: <Workspace>/Engine/Source/Runtime/CoreUObject/Public/UObject/UObjectBase.h:388
Scope: file
Source code excerpt:
const TCHAR* Name;
FStructRegistrationInfo* Info;
FStructReloadVersionInfo VersionInfo;
};
/**
* Adds a struct registration and version information. The InInfo parameter must be static.
*/
COREUOBJECT_API void RegisterCompiledInInfo(class UScriptStruct* (*InOuterRegister)(), const TCHAR* InPackageName, const TCHAR* InName, FStructRegistrationInfo& InInfo, const FStructReloadVersionInfo& InVersionInfo);
#Loc: <Workspace>/Engine/Source/Runtime/CoreUObject/Public/UObject/UObjectBase.h:424
Scope: file
Source code excerpt:
const TCHAR* Name;
FEnumRegistrationInfo* Info;
FEnumReloadVersionInfo VersionInfo;
};
/**
* Adds a static enum registration and version information. The InInfo parameter must be static.
*/
COREUOBJECT_API void RegisterCompiledInInfo(class UEnum* (*InOuterRegister)(), const TCHAR* InPackageName, const TCHAR* InName, FEnumRegistrationInfo& InInfo, const FEnumReloadVersionInfo& InVersionInfo);
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/AudioWaveFormatParser.h:60
Scope: file
Source code excerpt:
// Version information of the format
uint32 VersionInfo;
// Subformat-specific setting information
uint8 ConfigData[4];
// Reserved, 0
uint32 Reserved;
#Loc: <Workspace>/Engine/Source/Runtime/IOS/IOSRuntimeSettings/Classes/IOSRuntimeSettings.h:404
Scope (from outer to inner):
file
class class UIOSRuntimeSettings : public UObject
Source code excerpt:
// Specifies the version for the application.
UPROPERTY(GlobalConfig, EditAnywhere, Category = BundleInformation)
FString VersionInfo;
/**
* Choose whether to use a custom LaunchScreen.Storyboard as a Launchscreen. To use this option, create a storyboard in Xcode and
* copy it named LaunchScreen.storyboard in Build/IOS/Resources/Interface under your Project folder. This will be compiled and
* copied to the bundle app and the Launch screen image above will not be included in the app.
* When using assets in your custom LaunchScreen.storyboard, add them in Build/IOS/Resources/Interface/Assets and they will be included.
#Loc: <Workspace>/Engine/Source/Runtime/IOS/IOSRuntimeSettings/Private/IOSRuntimeSettings.cpp:34
Scope (from outer to inner):
file
function UIOSRuntimeSettings::UIOSRuntimeSettings
Source code excerpt:
BundleName = TEXT("MyUnrealGame");
BundleIdentifier = TEXT("com.YourCompany.GameNameNoSpaces");
VersionInfo = TEXT("1.0.0");
FrameRateLock = EPowerUsageFrameRateLock::PUFRL_30;
bEnableDynamicMaxFPS = false;
bSupportsIPad = true;
bSupportsIPhone = true;
bEnableSplitView = false;
bEnableSimulatorSupport = false;
#Loc: <Workspace>/Engine/Source/Runtime/NetworkFile/Private/NetworkPlatformFile.cpp:842
Scope (from outer to inner):
file
function void FNetworkPlatformFile::FillGetFileList
Source code excerpt:
Payload << ConnectionFlags;
FString VersionInfo = GetVersionInfo();
Payload << VersionInfo;
bool bBindAllDummy;
TSharedRef<FInternetAddr> HostAddr = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->GetLocalHostAddr(*GLog, bBindAllDummy);
FString HostAddress = HostAddr->ToString(false);
Payload << HostAddress;
#Loc: <Workspace>/Engine/Source/Runtime/Online/HTTP/Private/Curl/CurlHttpManager.cpp:145
Scope (from outer to inner):
file
function void FCurlHttpManager::InitCurl
Source code excerpt:
if (InitResult == 0)
{
curl_version_info_data * VersionInfo = curl_version_info(CURLVERSION_NOW);
if (VersionInfo)
{
UE_LOG(LogInit, Log, TEXT("Using libcurl %s"), ANSI_TO_TCHAR(VersionInfo->version));
UE_LOG(LogInit, Log, TEXT(" - built for %s"), ANSI_TO_TCHAR(VersionInfo->host));
if (VersionInfo->features & CURL_VERSION_SSL)
{
UE_LOG(LogInit, Log, TEXT(" - supports SSL with %s"), ANSI_TO_TCHAR(VersionInfo->ssl_version));
}
else
{
// No SSL
UE_LOG(LogInit, Log, TEXT(" - NO SSL SUPPORT!"));
}
if (VersionInfo->features & CURL_VERSION_LIBZ)
{
UE_LOG(LogInit, Log, TEXT(" - supports HTTP deflate (compression) using libz %s"), ANSI_TO_TCHAR(VersionInfo->libz_version));
}
UE_LOG(LogInit, Log, TEXT(" - other features:"));
#define PrintCurlFeature(Feature) \
if (VersionInfo->features & Feature) \
#References in C# build files
This variable is referenced in the following C# build files:
Location: <Workspace>/Engine/Source/Programs/UnrealBuildTool/Platform/IOS/UEDeployIOS.cs:627
// short version string
string BundleShortVersion;
Ini.GetString("/Script/IOSRuntimeSettings.IOSRuntimeSettings", "VersionInfo", out BundleShortVersion);
// required capabilities (arm64 always required)
string RequiredCaps = "\t\t<string>arm64</string>\n";
Ini.GetBool("/Script/IOSRuntimeSettings.IOSRuntimeSettings", "bSupportsMetal", out bSupported);
RequiredCaps += bSupported ? "\t\t<string>metal</string>\n" : "";
Location: <Workspace>/Engine/Source/Programs/UnrealBuildTool/Platform/IOS/UEDeployIOS.cs:282
// short version string
string BundleShortVersion;
Ini.GetString("/Script/IOSRuntimeSettings.IOSRuntimeSettings", "VersionInfo", out BundleShortVersion);
// Get Google Support details
bool bEnableGoogleSupport = true;
Ini.GetBool("/Script/IOSRuntimeSettings.IOSRuntimeSettings", "bEnableGoogleSupport", out bEnableGoogleSupport);
// Write the Google iOS URL Scheme if we need it.
Location: <Workspace>/Engine/Source/Programs/UnrealBuildTool/Platform/TVOS/UEDeployTVOS.cs:63
// short version string
string BundleShortVersion;
Ini.GetString("/Script/IOSRuntimeSettings.IOSRuntimeSettings", "VersionInfo", out BundleShortVersion);
// required capabilities
string RequiredCaps = "\t\t<string>arm64</string>\n";
// minimum iOS version
string MinVersionSetting = "";
Location: <Workspace>/Engine/Source/Programs/UnrealBuildTool/ProjectFiles/Xcode/XcodeProject.cs:1800
// short version string
PlatformIni.GetString($"/Script/IOSRuntimeSettings.IOSRuntimeSettings", "VersionInfo", out MarketingVersion);
if (Platform == UnrealTargetPlatform.IOS)
{
bool bEnableSimulatorSupport = false;
PlatformIni.GetBool("/Script/IOSRuntimeSettings.IOSRuntimeSettings", "bEnableSimulatorSupport", out bEnableSimulatorSupport);