Unreal Engine 4 is available for Win10 UWP app dev now

When I include OnlineSubsystemLive in my Build.cs, while debugging, my game doesn’t load, it hangs at the splash icon being displayed. Is my setup below correct?



PublicDependencyModuleNames.AddRange(new string]
        {
            "Core",
            "CoreUObject",
            "Engine",
            "InputCore",
            "InputDevice",
            "AIModule",
            "GameplayTasks",
            "UMG",
            "XmlParser",
            "OnlineSubsystem"
        });

        // Uncomment if you are using Slate UI
        PrivateDependencyModuleNames.AddRange(new string]
        {
            "Slate",
            "SlateCore",
            "OnlineSubsystem"
        });

        DynamicallyLoadedModuleNames.Add("OnlineSubsystemLive");


Additionally, in DefaultEngine.ini I have the following:



[OnlineSubsystem]
DefaultPlatformService=OnlineSubsystemLive


Actually, I forget to enable the Online Subsystem Live plugin. But now I’m getting an unresolved external NtoHS from the UDPEchoImpl class. Searching for it fails too.

I’m having a couple of issues:

  1. If I enable the Online Framework with Online Subsystem, I get unresolved externals for HtoNS, and others.

  2. When I enable Online Subsystem, and OnlineSubsystemLive, the debugger connects to the Cook Server, but the game doesn’t get past the splash screen. The logs does contain some information, which may not be useful:

[2017.06.08-21.05.33:146] 0]LogFileServer : Display: Client Client For UWP connected.

OnlineFramework depends on ICMP, which doesn’t have a complete UWP implementation at the moment. Are you sure you need OnlineFramework? If so, you may have to fill in some gaps yourself. The Windows desktop implementation (in ICmpWindows.cpp) will almost certainly be a good start - it may even just work.

You shouldn’t need OnlineSubsystemLive in your build.cs either - just enabling the plugin should be sufficient. Though I doubt that’s causing your hang.

That line from the server spew is, unfortunately, not very useful. Can you get the output from the client by running it under the VS debugger?

I have OnlineFramework disabled. My setup is as follows:



	PublicDependencyModuleNames.AddRange(new string]
        {
            "Core",
            "CoreUObject",
            "Engine",
            "InputCore",
            "InputDevice",
            "AIModule",
            "GameplayTasks",
            "UMG",
            "XmlParser",
            "OnlineSubsystem"
        });

        // Uncomment if you are using Slate UI
        PrivateDependencyModuleNames.AddRange(new string]
        {
            "Slate",
            "SlateCore"
        });

        //DynamicallyLoadedModuleNames.Add("OnlineSubsystemLive");


It was throwing an exception in FOnlineSubsystemLive::Init()



		// @ATG_CHANGE : BEGIN 
		ApplicationConfig = XboxLiveAppConfiguration::SingletonInstance;
		// @ATG_CHANGE : END


Do you know the specific exception type? Perhaps ClassNotRegistered?

Let me try to get it. It looked odd given that it appeared to be a simple assignment.

Do I need anything in DefaultEngine.ini:

[/Script/Engine.GameEngine]
!NetDriverDefinitions=ClearArray
+NetDriverDefinitions=(DefName=“GameNetDriver”,DriverClassNameFallback=“/Script/OnlineSubsystemUtils.IpNetDriver”)

[OnlineSubsystem]
DefaultPlatformService=OnlineSubsystemLive

That should be enough. Things to check:

  • have you provided your title id and scid in the UWP platform settings? These are what back the XboxLiveAppConfiguration instance you’re trying to load on that line.
  • does your output package layout (in [Project]/Binaries/UWP64/AppX, or [Project]/Saved/StagedBuilds/UWP64) contain an xboxservices.config? This is the file from which that title id and scid are actually read at runtime.
  • does your output package layout contain the file Engine\Plugins\Online\XboxOne\OnlineSubsystemLive\ThirdParty\XSAPI\UWP\build
    ative\lib\x64\v140\release\Microsoft.Xbox.Services.dll?
  • does your output appxmanifest.xml contain a block like the below (note in particular the element for Microsoft.Xbox.Services.XboxLiveAppConfiguration)


		<Extension Category="windows.activatableClass.inProcessServer">
			<InProcessServer>
				<Path>Engine\Plugins\Online\XboxOne\OnlineSubsystemLive\ThirdParty\XSAPI\UWP\build
ative\lib\x64\v140\release\Microsoft.Xbox.Services.dll</Path>
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.XboxLiveContextSettings" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.System.XboxLiveUser" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.Multiplayer.MultiplayerSessionReference" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.System.TitleCallableUI" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.Social.SocialGroupConstants" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.Social.ReputationFeedbackItem" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.XboxLiveAppConfiguration" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.UserStatistics.RequestedStatistics" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.Multiplayer.MultiplayerQualityOfServiceMeasurements" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.Tournaments.TournamentTeamResult" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.Multiplayer.MultiplayerSessionCapabilities" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.Tournaments.TournamentReference" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.Multiplayer.MultiplayerRoleInfo" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.Multiplayer.MultiplayerRoleType" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.Multiplayer.MultiplayerSession" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.Multiplayer.MultiplayerGetSessionsRequest" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.Multiplayer.MultiplayerQuerySearchHandleRequest" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.Multiplayer.MultiplayerSearchHandleRequest" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.Presence.PresenceData" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.TitleStorage.TitleStorageBlobMetadata" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.XboxLiveContext" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.XboxLiveHttpCall" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.Multiplayer.Manager.MultiplayerManager" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.Privacy.PermissionIdConstants" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.Social.Manager.SocialManager" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.ServiceCallLoggingConfig" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.System.XboxLiveServicesSettings" ThreadingModel="both" />
			</InProcessServer>
		</Extension>


Yes, and the information is saved across sessions.

I cleaned the UWP64 binaries folder and rebuilt. Appx isn’t there, but debug executable is UWP64-Debug.exe. More importantly (I think) is that the xboxservices.config has a file size of 0 bytes. Is this okay?

After deleting the binaries and performing a Build from within VisualStudio there is no Engine folder. It may have been there before though. Let me perform a complete rebuild. . .but it will take some time to perform.

Yes, AppxManifest.xml is present (7 KB), and it from a cursory view it looks the same. I will take a detail look at it in a moment. But I can confirm the following are present:



		<Extension Category="windows.activatableClass.inProcessServer">
			<InProcessServer>
				<Path>Engine\Plugins\Online\XboxOne\OnlineSubsystemLive\ThirdParty\XSAPI\UWP\build
ative\lib\x64\v140\release\Microsoft.Xbox.Services.dll</Path>
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.XboxLiveContextSettings" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.System.XboxLiveUser" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.Multiplayer.MultiplayerSessionReference" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.System.TitleCallableUI" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.Social.SocialGroupConstants" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.Social.ReputationFeedbackItem" ThreadingModel="both" />
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.XboxLiveAppConfiguration" ThreadingModel="both" />
				:
				<ActivatableClass ActivatableClassId="Microsoft.Xbox.Services.System.XboxLiveServicesSettings" ThreadingModel="both" />
			</InProcessServer>
		</Extension>


After starting the debugger, the APPX folder was generated, and it does have the two files of interest present:

AppX\xboxservices.config (0 KB)
AppX\Engine\Plugins\Online\XboxOne\OnlineSubsystemLive\ThirdParty\XSAPI\UWP\build
ative\lib\x64\v140\release\Microsoft.Xbox.Services.dll (9,778 KB)
AppX\Engine\Plugins\Online\XboxOne\OnlineSubsystemLive\ThirdParty\XSAPI\UWP\build
ative\lib\x64\v140\release\cpprest140_uwp_2_8.dll (1,310 KB)

And stepping through FOnlineSubsystemLive::Init() threw an Unhandled Exception:

0 bytes for xboxservices.config is not a good sign. Does your output by any chance contain an error something like “Xbox Live Title Id was not in a recognized format. Specify a 32 bit hex number (without leading 0x)”? As for the Appx/Engine folder, that is created as part of the Visual Studio Deploy step. Build on its own wouldn’t create one.

That is funny, because it does ring a bell. Where would I see the message? In the Log\files or Output window?

EDIT: I see it in the Output window

Yes, I noticed that above :slight_smile:

That would show up in the Visual Studio output window during the deploy step (might need to select Deploy explicitly in the Show output from combo). It should also show up in the Unreal Editor output log window when running in-editor deployment. It really should be fatal, but I guess it’s not, and on initial inspection it’s the only code path I see where xboxservices.config gets created but not filled in.

I changed the decimal value for Title Id to hex, without the leading 0x, and retrying.

Thank you , I saw the XboxLive Login Screen :slight_smile:

Now I have to integrate the services into my game. . . That is a good thing.

Hello,

After the previous error I had I resolved it with Visual Studio 2015 and I installed the Windows 8.1 sdk from Visual Studio 2015 itself.

So after trying to generate the project the command prompt thing popped up and it started installing somethings I also saw something about Xbox Live in yellow that
it was not found I personally don’t care about Xbox live so that’s that…

It created a UE4 Visual Studio Solution file on the folder.

Is that all that needs to be done, did it work?

I seem to be having this error when packaging in UE4, any help would be much appreciated.

Helper: Packaging (UWP (x64-64bit)): UWPPlatform.Automation.cs(26,4): error CS0246: The type or namespace name ‘Windows’ could not be found (are you missing a using directive or an assembly reference?) [C:\MICROSOFT_UWP_UNREAL-release_uwp\Engine\Source\Programs\AutomationTool\UWP\UWP.Automation.csproj]
UATHelper: Packaging (UWP (x64-64bit)): UWPPlatform.Automation.cs(26,63): error CS0246: The type or namespace name ‘Windows’ could not be found (are you missing a using directive or an assembly reference?) [C:\MICROSOFT_UWP_UNREAL-release_uwp\Engine\Source\Programs\AutomationTool\UWP\UWP.Automation.csproj]
UATHelper: Packaging (UWP (x64-64bit)): UWPPlatform.Automation.cs(37,63): error CS0103: The name ‘Windows’ does not exist in the current context [C:\MICROSOFT_UWP_UNREAL-release_uwp\Engine\Source\Programs\AutomationTool\UWP\UWP.Automation.csproj]
UATHelper: Packaging (UWP (x64-64bit)): UWPPlatform.Automation.cs(47,68): error CS0103: The name ‘Windows’ does not exist in the current context [C:\MICROSOFT_UWP_UNREAL-release_uwp\Engine\Source\Programs\AutomationTool\UWP\UWP.Automation.csproj]
UATHelper: Packaging (UWP (x64-64bit)): UWPPlatform.Automation.cs(52,58): error CS0103: The name ‘Windows’ does not exist in the current context [C:\MICROSOFT_UWP_UNREAL-release_uwp\Engine\Source\Programs\AutomationTool\UWP\UWP.Automation.csproj]
UATHelper: Packaging (UWP (x64-64bit)): Win.Automation -> C:\MICROSOFT_UWP_UNREAL-release_uwp\Engine\Binaries\DotNET\AutomationScripts\Win.Automation.dll
UATHelper: Packaging (UWP (x64-64bit)): XLocLocalization.Automation -> C:\MICROSOFT_UWP_UNREAL-release_uwp\Engine\Binaries\DotNET\AutomationScripts\XLocLocalization.Automation.dll
UATHelper: Packaging (UWP (x64-64bit)): at AutomationTool.ScriptCompiler.FindAndCompileScriptModules(String ScriptsForProjectFileName, List1 AdditionalScriptsFolders) in C:\MICROSOFT_UWP_UNREAL-release_uwp\Engine\Source\Programs\AutomationTool\AutomationUtils\ScriptCompiler.cs:line 180 UATHelper: Packaging (UWP (x64-64bit)): at AutomationTool.ScriptCompiler.FindAndCompileAllScripts(String ScriptsForProjectFileName, List1 AdditionalScriptsFolders) in C:\MICROSOFT_UWP_UNREAL-release_uwp\Engine\Source\Programs\AutomationTool\AutomationUtils\ScriptCompiler.cs:line 82
UATHelper: Packaging (UWP (x64-64bit)): at AutomationTool.Automation.Process(String] Arguments) in C:\MICROSOFT_UWP_UNREAL-release_uwp\Engine\Source\Programs\AutomationTool\AutomationUtils\Automation.cs:line 500
UATHelper: Packaging (UWP (x64-64bit)): at AutomationTool.Program.MainProc(Object Param) in C:\MICROSOFT_UWP_UNREAL-release_uwp\Engine\Source\Programs\AutomationTool\Program.cs:line 135
UATHelper: Packaging (UWP (x64-64bit)): at AutomationTool.InternalUtils.RunSingleInstance(Func`2 Main, Object Param) in C:\MICROSOFT_UWP_UNREAL-release_uwp\Engine\Source\Programs\AutomationTool\AutomationUtils\Utils.cs:line 704
UATHelper: Packaging (UWP (x64-64bit)): at AutomationTool.Program.Main() in C:\MICROSOFT_UWP_UNREAL-release_uwp\Engine\Source\Programs\AutomationTool\Program.cs:line 59
UATHelper: Packaging (UWP (x64-64bit)): Program.Main: AutomationTool exiting with ExitCode=1 (Error_Unknown)
UATHelper: Packaging (UWP (x64-64bit)): BUILD FAILED

No one is trying to create some basic universal apps for ? I know that API is missing, but you think that Microsoft will provide something usable to integrate with unreal and not just unity? The only app that i can create is a 2D screen with inside my unreal screen but not 3d holographs.

Thanks for answers!

  • that sounds right. When you open the sln, do you have UWP64 and UWP32 configurations available? If so, then you’re in good shape.
  • what commit are you at, and what versions of Visual Studio and the Windows SDK do you have installed? Depending on the answer there are a number of places the missing reference might come from. In particular if you’re on a slightly older commit and building UAT using VS2017 I can see how you’d hit this.
  • I’d suggest taking a look at the new dev_MixedReality branch that’s now part of the UWP fork.