BUG: 4.10.4 Configurations Not Making it to iOS Device via Remote Build

We have created our app in windows 10 and have successfully remote compiled/deployed using DeltaCopy and the UE4 4.10.4 source code. Our team has been doing this for a while now and are not new to the process. Our problem right now is that we have noticed that none of our config settings have made it onto the device. Our goal is to get the TapJoy plugin executing.

Along the way we have taken all of the documented steps to set up an account and put in the proper config settings like so:

Project/Config/DefaultEngine.ini

[Advertising]
DefaultProviderName=IOSTapJoy
 
[TapJoy]
AppID=our_app_id
SecretKey=our_secret_key
CurrencyString=USD ($)

Project/Config/IOS/DefaultIOSEngine.ini

[Advertising]
DefaultProviderName=IOSTapJoy

[Plugins]
+EnabledPlugins="IOSTapJoy"

We’ve even made sure to enable the plugin and have verified the build process picks it up while compiling. What we can’t figure out is why (after we pull the logs from the device) the devices’ Application/Saved/Config directory is completely empty but the Application/Saved/Config/IOS directory has files such as Engine.ini and Game.ini that are completely blank.

My best guess was that our file locations for our project (DefaultXXX.ini, etc) were off and that we should have put them in Project/Config/IOS rather than Project/Config. So we did that and rebuilt/deployed/ran and still receive the following log warning from the device:

[2016.03.04-20.05.32:356][456]LogAdvertising:Warning: Failed to find Advertising provider named IOSAdvertising.

So, it is obvious to me that the configuration settings that I specified above are not being deployed properly at all. Please fix and advice in the meantime how I can overcome this issue. We wanted to roll very soon!

Thanks,

Edit: Added image to help visual people like myself! =)

So having been working with you the last few days, this is a code project and not a content-only project, correct? There is a bug in 4.10, fixed in 4.11 where the ini files for content-only projects are sometimes not being read. However, that usually exhibits much earlier during the build process.

That being said, I feel like I have something similar to this in the last couple of weeks when working with some of our internal projects. The ini files will be empty as everything should be coalesced in to DefaultEngine.ini and such in the Content directory. But, I too have experienced not everything showing up in the coalesced ini file.

As a workaround in the short term. Put all of the IOS ini sections in your Game/Config/DefaultEngine.ini and remove the DefaultProviderName from the Engine/Config/IOS/IOSEngine.ini. The one in the Engine is just overriding what you set in your DefaultEngine.ini because of the way we coalesce things.

-Pete

This is a code project. Correct. I will do what you suggested and get back to you. So you are saying I don’t need an IOS sub directory in my project / config directory at all? I thought that was required back in 4.8ish =)

I also don’t know what you mean by “content” directory unless you are referring to the project/config directory.

Well, you don’t need it if you don’t have anything to put into it. Normally, that is where the Project Settings IOS data is placed, so I wouldn’t just get rid of it. But do all of the advertising items in the DefaultEngine.ini for now until I can figure out what is up.

I went ahead and did what you said and removed the [Advertising] section from the Engine/Config/IOS/IOSEngine.ini. Still nothing. When I use the iPhonePhonePackager to pull all documents (Backup Documents button) and look in the config directory. I have several ini files and ALL of them are completely black. I’m not even sure how it throws the warning that it could not find the IOSAdvertising provider since all of the config files are empty…

Those are always going to be empty. The actual files that it reads are in the Content directory which you don’t have access to getting off of the phone because it isn’t in the Documents directory. It’s in the installed application location. You need to look at the staging directory. Game/Saved/StagedBuilds/IOS/cookeddata/gamename/config is where they will reside unless you are using pak files in which case they will be in the pak files.

If you removed everything and did a build and package, then something is not updating correctly because the staging directory is wiped on every package and recreated (except for Launch On which is its own beast).

Post a log of your package process and I’ll see if something jumps out.

-Pete

After you mentioned where the consolidated configuration files are located I cracked it opened and checked it out. It looks good (attached) and all of my settings seemed to have merged. However, the logs off of the device (attached) still seem to give the warning about not finding the default IOSAdvertising provider. I’m at a loss as to where it is picking it up. I’m not sure where to go from here…
[link text][1]

81102-keepinitwheel.log (24 KB)

Should I open a new issue for this? I need someone from Epic to try and do a remote build (C++) with a project that enables TapJoy. It does not appear to be picking up the configuration settings even though the directory shows valid configurations.

I’ll take a look in the next day or so. I’m just about through all of the high priority issues for the next release, so I’ll add this one to it.

You don’t have to look into TAPJOY per say. I wasn’t aware that IOS had iAd. I’m trying to go with that now and followed all of the directions provided by the [link text][1]match3 documentation (including the code to include the modules) in the build file. I still get the following error from the device logs:

Warning: ModuleManager: Module 'HTTPChunkInstaller' not found - its StaticallyLinkedModuleInitializers function is null.
Warning: ModuleManager: Module 'OnlineSubsystemIOS' not found - its StaticallyLinkedModuleInitializers function is null.
Warning: ModuleManager: Module 'OnlineSubsystemNull' not found - its StaticallyLinkedModuleInitializers function is null.
Warning: ModuleManager: Module 'IOSAdvertising' not found - its StaticallyLinkedModuleInitializers function is null.

Added staged configuration files one resides in the config directory while the other resides in the config/ios directory since I followed the match3 example.link text

81685-iosengine_ini.txt (363 Bytes)

Did the match3 team do a c++ remote build option like I am?

Could you provide us with the full output error logs that display these errors? Also double check our [documentation][1] and make sure that you’ve set up your iOSAdvertising correctly.

Sure. I’ve attached the log as well as our build.cs file. Keep in mind we are building remotely from our windows machine to mac. We’ve gone through all of the steps up until the app submission. We were going to do that soon.

I just created a brand new v11p7 c++ project (using GitHub source) yesterday and brought in my blueprints/source. I will do another build and try it out and report back tomorrow as soon as I can find the iPad =)

Have you been able to replicate this same issue on a new project that was created on Windows and built remotely? I ran tests to demonstrate the same as what you are doing however, I did not run into the same issues that you have.

If you have full reproduction steps, I can run through the process again and if I find the same results, we can get this bug in the system.

Thanks! :slight_smile:

Here is the latest log. What could cause all of the linkages to be null?? [link text][1]

Attaching my android log as well. Verify similar. I must not have something configured or executing correctly…
[link text][2]

82894-keepinitwheel_log.txt (24 KB)
[2]: 82895-keepinitwheel_android_log.txt (36 KB)

FIGURED IT OUT. This thread helped but it sounds like you all have some bugs to work out for C++ source (GitHub) projects…

The ONLY thing that worked was moving all of the [project].Target.cs code into the Project/[project].Build.cs file like so:

using UnrealBuildTool;

public class KeepinItWheel : ModuleRules
{
	public KeepinItWheel(TargetInfo Target)
	{
        PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" });

		PrivateDependencyModuleNames.AddRange(new string[] { "OnlineSubsystem" });

        if (Target.Platform == UnrealTargetPlatform.IOS)
        {
            PublicDependencyModuleNames.Add("OnlineSubsystemFacebook");
            PublicDependencyModuleNames.Add("OnlineSubsystemIOS");
            PublicDependencyModuleNames.Add("IOSAdvertising");
            PublicDependencyModuleNames.Add("MetalRHI");
        }
        else if (Target.Platform == UnrealTargetPlatform.Android)
        {
            PublicDependencyModuleNames.Add("OnlineSubsystemGooglePlay");
            PublicDependencyModuleNames.Add("AndroidAdvertising");
        }
        
        // Uncomment if you are using Slate UI
        // PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });
    }
}