Es ist bei uns schon Tradition, dass wir im Team den Release des neuen iPhones gemeinsam verfolgen. So stand auch dieses Jahr wieder die Apple-Keynote zum IPhone 15 fett im Kalender. Die Neuerungen beim iPhone 15 waren nicht besonders groß, außer dem USB-C Anschluss.
Nur 2 Wochen später haben wir das neue IPhone zum ersten Mal in unseren Händen. Das Design ist das alte, die Anschlüsse sind überarbeitet aber was vor allem neu ist, ist die Software. Denn das neue iPhone wird natürlich Standesgemäß auch mit dem neusten Betriebssystem von Apple ausgeliefert iOS17. Das bedeutete für uns App Updates! Wie viele Probleme uns das noch bereiten sollte, konnten wir in diesem Moment noch nicht erahnen
Natürlich kaufen wir uns das neuste Iphone als App Entwicklungs Agentur nicht einfach nur aus Spaß an der Freude (ok ein bisschen schon, wir finden Technik halt echt geil), sondern vor allem um die Apps die wir entwickeln darauf testen zu können. So können wir sicherstellen das jede App die in den App Store kommt, auch auf den neusten Geräten funktioniert.
Bevor wir aber auch nur eine Zeile Code schreiben können, muss erstmal XCode auf die neuste Version 15 geupdated werden. Aber wie sollte es auch anders sein, so einfach geht auch das nicht. Denn um XCode 15 zu nutzen, muss auch das MacOS Betriebssystem zuerst auf den neusten Stand gebracht werden. Also haben wir kurzer Hand den Mac geupdated, um anschließend XCode zu updaten, um unsere Apps auf dem neuen iPhone mit iOS17 testen zu können - ein ganz schöner Updatemarathon
Nach ca 2 Stunden war es dann vollbracht und jedes unserer Applesysteme das wir nutzen, war auf dem neusten Stand. Also wurde kurzer Hand Visual Studio geöffnet, ein Kundenprojekt geöffnet, die App ausgeführt und ... Error. Die App lies sich nicht ausführen. Fast schon der Klassiker bei der Entwicklung mobiler Apps.
Ok ok zugegeben, das passiert nicht zum ersten mal denn jeder der mir React Native entwickelt hat dieses Szenario bestimmt schon mindestens einmal erlebt. Dadurch das React Native extrem viele Third Party Packages nutzt kommt es des öfteren vor das eine dieser Dependencies nicht mehr up to Date ist. Also einmal alle Pakete auf den neusten Stand gebracht (mehr Updates) und ... es funktioniert immer noch nichts. Spätestens hier wurde uns klar das wir hier vor einem Riesen Problem stehen.
Jetzt standen wir erstmal da mit unseren schicken neuen iPhone und nichts funktionierte mehr, aber woran liegt das eigentlich? Wir begaben uns etwas auf die Suche und konnten relativ schnell den Übeltäter ausmachen: Expo.
Eigentlich ist Expo eine meiner absoluten Lieblingsbundles wenn wir eine App für iOS und android entwickeln. Nicht nur bringt es viele sinnvolle Softwarekomponenten mit sich, sondern es erleichtert auch den Prozess Apps zu testen und zu veröffentlichen ungemein.
Das Problem hierbei war jedoch, das das EXPO Team nicht mitbekommen hat das mit iOS 17 auch ein neues Device Connectivity Protokoll eingeführt wurde namens CoreDevice. Dies sorgt vereinfacht gesagt dafür das der Mac auf dem die Software entwickelt wird, diese auf einem angeschlossenen iPhone ausführen kann. Durch das neue Protokoll, wurden die alten in Expo integrierten Protokolle schlicht nicht mehr Unterstützt
Die erste Idee die man jetzt natürlich nach diese ganzen Problemen haben könnte wäre "Warum entfernt ihr nicht einfach die Updates und nutzt erstmal iOS16 weiter" doch so einfach
ist es leider nicht. Denn weder auf dem Mac noch auf dem iPhone lassen sich Updates einfach so entfernen. Daher war klar das wir eine Lösung für das Problem finden müssen. Also haben wir uns kurzer Hand mit dem Expo Entwickler Team zusammengesetzt und unser Problem in einem GithHub Issue diskutiert.
Generell kann ich jedem der in die React-Native Entwicklung einsteigt nur empfehlen sich immer zuerst dort nach Lösungen für ein Problem umzuschauen denn die Chancen das jemand anderes die selben Probleme wie du hast, sind groß. Zudem werden besonders aktuelle Probleme oft noch nicht bei Google gelistet, weswegen ein Blick in die Issue Sektion des betroffenen Pakets immer Sinn macht
Mit Hilfe der Github Community konnte das Problem recht schnell gelöst werden und ein neuer Expo Patch wurde bereitgestellt. Eben ein Update gemacht und siehe da, schon läuft die App wieder! Hier zeigt sich die wahre Power von Open Source Projekten, da Probleme oft schneller in der Community gelöst werden können als durch einen einzelnen Hersteller.
Jetzt musste die App nur noch durch unsere Cloud Lösung EAS kompiliert werden. Das ist ein Service der dazu dient in der Cloud App Code in fertige Android/iOS Apps zu übersetzen. Leider war auch dieser Service noch nicht auf XCode 15 geupdated, weswegen wir auf lokale Builds zurückgreifen mussten. Das sollte jedoch kein Problem mehr sein, da EAS auch lokale Builds direkt auf dem eigenen System unterstützt - und das hatten wir ja bereits umfangreich mit Updates versorgt.
Nach einigen Änderungen für den lokalen Build haben wir es endlich geschafft. Expo 49 unterstützt nur Gradle 8, aber viele React-Native Packages verwenden noch Gradle 7.
Unsere App war somit jetzt eine der ersten React Native Apps auf iOS 17 Basis und der Kunde konnte wieder mit Updates versorgt werden. Natürlich haben wir die Änderungen gleich auch noch für alle anderen Apps die wir betreuen nachgezogen, denn das ist nun mal der riesige Vorteil, wenn man mit einem Entwicklerteam arbeitet - Learnings aus anderen Projekten, kommen auch direkt deinem Projekt zugute!
Du willst mit unserem Team über dein Projekt quatschen und einfach mal hören, was wir so für dich möglich machen könnten? Dann buche dir jetzt einfach einen kostenlosen Videocall mit uns!