This post is meant to be read in the context of its parent post "Lessons Learned on a React-Native Project". If you've stumbled on this particular page randomly, I'd recommend jumping over to that post and starting from there.

Remember that story I mentioned in the "React-Native is not a silver bullet"? It's story-time!

As I was talking about in the "Understanding the underlying build tools" section, our iOS project got into such a messed up state we ended up having to rebuild the project from the ground up, re-integrate and link everything, and plop it over our broken code and let Git do its thing. Yay for source control!

Unfortunately, when I did the project rebuild I didn't specify the version of React-Native to initialize with, so it just grabbed the latest version. And sadly, this latest version was different to the version we'd been using which was working just fine on both Mac and Windows. Initially I didn't see any issues as I was happily compiling and running on my Mac and everything worked swimmingly (even the dependencies I'd been having trouble with!). Euphoric, we merged the code and high-fives were had by all.

That was until my poor colleague tried building on Windows for Android.

We spent several hours trying to narrow down on the causes of these build errors. We tried all the steps the packager was telling us, tried nuking various caches to no avail. An interesting thing to note is, when React-Native is giving you steps to try when things fail, it normally suggests Mac-specific commands/utilities. Not much help on a Windows PC.

We eventually tracked down the issue to an underlying React-Native dependency used for when building Android was now broken on Windows, and had been introduced with React-Native 0.56. Which just happened to be the version we'd dragged in from my project rebuild.


As timelines were already tight for this project, we didn't have time to go back and either downgrade (which comes with its own complications) or rebuild again from scratch, we decided to make a (what I like to think was pragmatic?) decision to continue developing purely on a Mac for the remainder of the project. Which then had the knock-on effect of neither of us had really used Macs before, so we had another thing to learn on the fly, along with everything else. Good times.

So yeah, everything from the error messages React-Native will throw, to the processes of React-Native developers themselves take, revolve around Mac. It was hilariously, frustratingly, eye-rakingly bad timing that we just happened to drag in something that broke Windows development, but its worth nothing that (in my opinion at least) if you're gonna do a React-Native project, do your development on a Mac.

Oh and... you know... specify the version of the libraries you're using if you have to rebuild ;)

Next Section -> "Read the documentation. All of it. React-Native, React, Fetch, Gradle and XCode. All of it."