This week iOS 14.5 was released and on the React Native Repository is an issue with many comments complaining about compilation issues with the newest Xcode version which is required to work with iOS 14.5 devices. Don't get me wrong, this should have been caught earlier by testing with the Xcode/iOS beta releases. In fact this issue was found with a beta release, but hasn't been prioritised. So this entire situation could have easily been avoided. In this post I want to detail some mitigation strategies which keep you productive in this fast changing environment.
1. Wait with upgrading
Apple gives developers early beta access to test their software against the new OS versions. It's also quite tempting to try out all those new shiny features. Either way I would advise against using the latest beta releases on your main device.
This applies to your mobile devices as well as your Mac. Using React Native you're choosing to add a layer between the devices OS and your code. This layer helps us a great deal abstracting the OS to our known architectures. But with this you're also accepting to wait until new features are supported by React Native. Even though there's a big community involved with the project, it can take time to support upcoming features or fix regressions. Often times exact release dates aren't available either.
This should make you aware that this is the situation and waiting with upgrading your main devices will almost always help you.
2. Use multiple devices
Purpose of the beta releases is that developers can test their software beforehand. You really should be doing this. But how if you should wait with upgrading?
The best way is to use multiple devices. If you're working for a company it should provide testing devices, but even independent developers probably have some of their older devices laying around. Use one of those devices to do you beta testing. There are also ways to install multiple Xcode version and the
xcode-select command helping you changing between Xcode versions. That way you can test your latests build without having to jeopardise your ability to work.
3. Be selective with upgrades
Be aware of what you're upgrading when. Search around the web if there are known issues. Perhaps you're fortunate to have a separate environment for CI which should be clear to be the last to get upgraded. Or split your devices into groups like development, testing, and support. And probably it makes most sense to start with just one test device, to test the new OS version. If issues are found one development device should be upgraded. Support devices should use the OS version most of you customers are using. So they will be the last to upgrade.
iOS apps compiled with earlier OS version also still run on newer version. You don't need to change the app if there aren't any issues found while testing.
Since downgrading devices is very time consuming and sometime not possible at all, you shouldn't blindly upgrade the devices you rely on. Investigate if there are widespread issues and ponder if it's worth the risk.