It is already a tradition for us to follow the release of the new iPhone together as a team. As a result, the Apple keynote on the iPhone 15 was once again on the calendar. The new features in the iPhone 15 were not particularly big, except for the USB-C port.
Just 2 weeks later, we have the new iPhone in our hands for the first time. The design is the old one, the connections have been reworked but what is new above all is the software. Because the new iPhone is of course also delivered with Apple's latest operating system iOS17. That meant for us App updates! At that moment, we could not have guessed how many more problems this would cause us
Of course we buy the latest iPhone as App development agency Not just for the fun of it (ok a bit, we think technology is really cool), but above all to be able to test the apps we develop on it. In this way, we can ensure that every app that comes to the App Store also works on the latest devices.
But before we can write even one line of code, XCode must first be updated to the latest version 15. But how could it be otherwise, it's not that easy either. Because in order to use XCode 15, the macOS operating system must also be brought up to date first. So we quickly updated the Mac and then updated XCode so that we could test our apps on the new iPhone with iOS17 - a really nice update marathon
After about 2 hours, it was done and every one of our Apple systems that we use was up to date. So I just opened Visual Studio, opened a customer project, ran the app and... Error. The app couldn't be run. Almost the classic when it comes to developing mobile apps.
Ok ok admittedly, this is not the first time this is happening because everyone who developed React Native for me has certainly experienced this scenario at least once. Because React Native uses an extremely large number of third-party packages, it often happens that one of these dependencies is no longer up to date. So once all packages are up to date (more updates) and... it still doesn't work. At this stage at the latest, we realized that we are facing a huge problem here.
Now we were standing there with our fancy new iPhone and nothing worked anymore, but why is that actually? We set out to find something and were able to identify the culprit relatively quickly: Expo.
Expo is actually one of my absolute favorite bundles when we have a App for iOS and Android develop. Not only does it come with many useful software components, but it also makes the process of testing and publishing apps immensely easier.
The problem here, however, was that the EXPO team did not notice that a new device connectivity protocol called CoreDevice was also introduced with iOS 17. In simple terms, this ensures that the Mac on which the software is developed can run it on a connected iPhone. As a result of the new protocol, the old protocols integrated in Expo were simply no longer supported
The first idea that you could of course have now after all these problems would be “Why don't you just remove the updates and continue using iOS16 for now” so simple
Unfortunately it isn't. Because updates cannot be easily removed either on the Mac or on the iPhone. It was therefore clear that we had to find a solution to the problem. So we quickly sat down with the Expo developer team and discussed our problem in a GithHub issue.
In general, I can only recommend anyone who starts React-Native development to always look for solutions to a problem there first because the chances of someone else having the same problems as you are great. In addition, particularly current problems are often not yet listed on Google, which is why it always makes sense to take a look at the issue section of the affected package
With the help of the Github community, the problem was resolved quite quickly and a new Expo patch was provided. Just made an update and lo and behold, the app is running again! This shows the true power of open source projects, as problems can often be solved faster in the community than by a single manufacturer.
Now the app only had to be compiled using our cloud solution EAS. This is a service that is used to translate cloud app code into finished Android/iOS apps. Unfortunately, this service had not yet been updated to XCode 15, which is why we had to resort to local builds. However, that shouldn't be a problem anymore, as EAS also supports local builds directly on its own system - and we had already provided this extensively with updates.
After a few changes for the local build, we finally did it. Expo 49 only supports Gradle 8, but many React-Native packages still use Gradle 7.
Our app was therefore now one of the first React native apps based on iOS 17 and the customer was able to be provided with updates again. Of course, we have also updated the changes for all other apps that we support, because that is the huge advantage of working with a development team - learnings from other projects also directly benefit your project!
Do you want to talk to our team about your project and just hear what we could do for you? Then simply book a free video call with us now!