October 24, 2023

Das Jährliche Upgrade Chaos - iOS 17

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.

Neues Iphone, neues iOS

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

Updates, Updates, Updates

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

Hat das vorher keiner getestet?

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.

Was ist hier eigentlich das Problem?

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

Und wir bekommen wir unsere Apps jetzt wieder ans laufen?

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

Das neue Expo Update ist da!

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.

Die ersteReact Native App auf iOS 17  

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!

What’s a Rich Text element?

The rich text element allows you to create and format headings, paragraphs, blockquotes, images, and video all in one place instead of having to add and format them individually. Just double-click and easily create content.

Static and dynamic content editing

A rich text element can be used with static or dynamic content. For static content, just drop it into any page and begin editing. For dynamic content, add a rich text field to any collection and then connect a rich text element to that field in the settings panel. Voila!

How to customize formatting for each rich text

Headings, paragraphs, blockquotes, figures, images, and figure captions can all be styled after a class is added to the rich text element using the "When inside of" nested selector system.

Louis Nell
CEO Knguru Studios
Moin ich bin Louis, kreativer Kopf und Gründer von KNGURU Studios. Wenn wir einmal anfangen über Technik, Startups oder Produktdesign zu quatschen kannst du dir sicher sein, das es so schnell kein halten mehr gibt. Deswegen gibt es auch mittlerweile diesen Blog in dem ich meine Reise als Startup- und Agenturgründer dokumentiere.
#development
#app
#learning
Vera Große
UX Management
Hi, ich bin Vera! Meine Verantwortung liegt im Bereich Projektmanagement und Kundenbetreuung. In diesem Blog teilen wir nicht nur unsere Erfahrungen als Startup- und Agenturgründer, sondern auch unsere Begeisterung für kreative Ideen und visionäre Konzepte.Mit Expertise und Leidenschaft arbeiten wir daran, innovative Projekte zum Leben zu erwecken und gleichzeitig unsere eigene Reise zu dokumentieren.
#development
#app
#learning

Buche deinen kostenlosen Videocall

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!

1
Wie können wir dich erreichen?
2
Akzeptiere unsere Datenschutzrichtlinien.
Oops! Something went wrong while submitting the form.