Can you avoid recompiling for iOS from Windows when the C++ hasn't changed?

Hello Community,

I’m the lead programmer for a studio that works on a variety of AR/VR projects. One of our needs is to be able to deploy to iOS, and we’d like to avoid requiring all artists/developers to use Macs, since our VR work is done on Windows machines. I’ve set up a Mac as an xcode remote compiling server, and that does work OK when we actually need to compile. However, it seems to take an eternity and a half to do so, which slows workflow down to a snail’s pace. Furthermore, once I introduce C++ into the equation, it seems to take the 10 minute remote compile step, even if I have made no changes to the code. So, question number one:

1. Can you, when deploying to iOS from windows, only recompile when actual source code changes have been made? In other words, can my artists avoid having to recompile when making a blueprint only change?

The second question is related. I’d like to create a plugin with some helpful C++ code that lets the artists use some custom blueprints. For example, right now the ARKit lighting estimate is not exposed to blueprints. I recognize that such a plugin will need to be compiled on the remote server. However, I can’t figure out how to avoid making iOS projects that make use of this project having to recompile every time. Even if they don’t have a line of C++ code, they do the remote compile step. So, question number two:

2. Can you prepare an iOS plugin in such a way that it will not require a recompile when used by a blueprint-only project on Windows? For example, the default UE4 plugins?

Here’s hoping this is all very possible, and that I’m just a bit of a knucklehead not figuring out how. Any clear steps on how to pull this off would be most appreciated.

The first thing to consider is how it determines if a full recompile is necessary. It usually depends on a close-to-root level dependency. If that file is overwritten (or modified) and given a new timestamp then the maker will assume the entire thing needs to be rebuilt. Maybe you need something similar to a .gitignore. Or… Make sure you’re not uploading the entire project each time. Or wiping the intermediate directories before or after each build. In general, I’d look at the file timestamps and see if that is confusing the build process.

We had a similar issue a few versions back when the frontend tool and VS would duel each other and any time one built the project the other would subsequently build it from scratch (it seems to have been fixed).

Building in UE4 is notoriously slow but you should assume that full recompiles every time isn’t the norm. There should be some issue and when it’s fixed you will only need to rebuild the files that have been changed.

When it comes to remote compiling for iOS from Windows, unless you have a pure blueprint project with no non-default plugins, I have never once seen it skip remote compiling. Which is a terrible workflow. It’d be great to have someone confirm that they’ve seen otherwise.

You don’t want it to skip remote compiling if something has changed. You just want it to only build the files that changed. But if the file timestamps are not preserved during the transfer, or the timestamp of a key file in the process changes, the maker will think the entire project has changed and build from scratch. You need to make sure the timestamps are being preserved before you can go any further in this diagnosis. If the timestamps are changing then the remote system is behaving as desired. If not then we can look elsewhere.

As some mods will confirm, I don’t shy away from criticizing Epic. But I doubt they’d intentionally make you recompile from scratch every time. I mean, they have to build for MacOS too. That being said, if this really is what could be the stupidest lack of functionality yet then your only recourse is to have a farm of machines to handle compiling – assuming that’s possible.