[Musik]
Holger, Nico!
Hallo Holger, ich höre dich!
Sehr gut, Nico, ich habe einen neuen Podcast zu veröffentlichen.
Ja?
Kannst du den verarbeiten?
Verarbeite ich!
Danke!
Ja, da kommen wir heute auch schon in die neue Folge von "Empster Tagebuch".
Wir reden heute über Datenfluss oder Dataflow.
Ja, so die Kommunikation innerhalb einer App.
Quasi kann man das nennen, ne?
Richtig, da gibt es verschiedene Konzepte, aber da wollen wir jetzt noch nicht sofort drüber reden,
sondern wir haben ja auch...
Jetzt gibt es auch mal wieder Neuigkeiten aus der Apple-Welt oder vielleicht sogar erst aus der App Store Tagebuch-Welt.
Was haben wir denn da Neues?
Ja, wir hatten lange das Problem, dass der App Store Tagebuch nicht bei Castro zu finden war.
Und es ist noch nicht so hundertprozentig gelöst, aber er ist jetzt immerhin bei Castro zu finden.
Richtig, du hast mir gesagt, ich sollte es fixen und habe einfach bei der Domain die IPv6-Adresse gelöscht.
Und anscheinend war das jetzt der Fix oder der temporäre?
Ja, temporärer Fix.
Also irgendwie, der Server kann zwar IPv6, aber ich habe der Apache nicht richtig eingestellt.
Ich habe auch keine Ahnung, wie ich das jetzt mache.
Ich habe viel versucht, viel kaputt gemacht und dann war ich einfach so, okay, dann mache ich jetzt mal keinen v6. Und inzwischen war das sogar so, dass ich den Server jeden Tag neu starten würde. Der Server hat sich jeden Tag aufgehängt und ich musste jeden Tag neu starten.
Und irgendwann, ja, jetzt geht es und...
Ja, spätestens wenn IPv4 abgestattet wird, dann sollten wir nochmal drauf gucken.
Dann sollten wir nochmal drauf gucken.
Ja, dann gibt es noch was. Jetzt kommen wir mal zu Apple-Themen.
Das Apple hat ja sein Detail zurückgefordert, also das Development Transition Kit, was sie an die Entwickler großzügigerweise für 500 Euro oder Dollar herausgegeben haben,
damit Entwickler Apps für den neuen M1-Max bauen können.
Und hat erstmal eine sehr aufruhrbereitende E-Mail an alle rausgeschickt und gesagt, ja, wir hätten gerne das jetzt bald zurück.
Suchst du mal den Karton?
Genau, suchst du mal den Original-Karton. Den habe ich noch, aber nicht mit diesem Verpackungs-Karton, sondern der war ja in so einem grauen Papierkarton.
Also, nicht grau, sondern braunen Papierkarton. Den habe ich natürlich nicht mehr.
Ja, und wir haben gesagt, toll, dass du es gemacht hast, hier hast du noch einen 200 Dollar-Gutschein, um dir einen neuen M1-Max bis Ende März zu kaufen.
Und dann ging es erstmal los auf Twitter.
Ja, und irgendwie der Schlimme war ja nicht so die 200 Euro, glaube ich, sondern dass diese 200 Euro so limitiert waren, weil die Entwickler, die halt gerne einen M1-Max haben möchten, die haben sich halt schon längst eingekauft.
Und die anderen warten halt bis zur zweiten Generation wahrscheinlich. Und dann ist halt Ende März ein scheiß Zeitraum.
Ja, also ich habe mir das Ding auch nur, sag ich mal, geholt in der Hoffnung, dass ich gepokert habe, hey, vielleicht kriege ich einen witzigen Max.
Ja, nach der Meldung kam jetzt erstmal so das Gefühl so, hm, ja toll, jetzt kriege ich, sag ich mal, noch einen teureren Max.
Weil im Prinzip muss ich mir den Max kaufen, damit die 200 Dollar nicht verloren gehen und habe noch mal 300 Euro dazugezahlt.
Also im Prinzip habe ich mit dem Max 300 Euro zu viel gezahlt.
Ich habe damit eigentlich schon gerechnet, also ich habe, als ich die Nachricht von Apple damals bekomme, mit der Bestellung habe ich schon gewusst, okay, die 500 Euro, das ist jetzt Zock, Spielgeld.
Und wenn es schlimm ist, dann ist es weg, wenn es was gibt, ist es auch cool.
Ja, Apple hat es ein bisschen schon wieder zurückgerudert, nachdem es natürlich einen Riesenaufschrei auf Twitter gab und hat gesagt, hey, ihr kriegt 500 Dollar.
Also das, was man reingesteckt hat. Und ihr habt bis Ende des Jahres Zeit.
Also vielleicht, wenn es dann schon neuere Max gibt, also mit M2 Prozessor oder irgendwelche größeren Geräte, dann kann man die hoffentlich vielleicht da rein tun.
Oder ich weiß gar nicht, ist das jetzt auf M1-Max begrenzt oder kann man sich davon auch einen iPhone shoppen?
Also ich würde jetzt erstmal davon ausgehen, dass es einfach so store credit ist. Aber ich bin ja nicht involviert.
Ich habe mich damals gegen das DTK entschieden. Ich wollte auch erst so pokern wie du, weil bei der letzten Transition 2005 oder 2006, damals alle Leute so einen iMac bekommen, der eigentlich ganz gut ausgestattet war.
Richtig. Ja, und dann hat er auch übernügtig.
Ja, so habe ich dann auch gedacht. Ja, ist, naja, doch, im Prinzip habe ich nichts verloren. Aber wie gesagt, ich muss mir Zeit irgendwas davon kaufen. Die Kohle kriegt er sowieso. Mal sehen.
Mal sehen, was sie jetzt jetzt in Anführungszeichen zur WDTC verstellen. Vielleicht ist ja was dabei dann im Sommer. Also ich glaube, der Gutschein soll jetzt bis Ende des Jahres halten.
Ja, soll er. Kann man sich nach der WDTC irgendwie ein neues Macbook Pro oder so was holen vielleicht.
Mal gucken, abwarten.
Neue Consumer-Features wurden auch ausgeräut. Wenn du eine Apple Watch hast und ein relativ aktuelles iPhone, dann kannst du jetzt mit der Apple Watch dein iPhone entsperren.
So ähnlich wie das bei Mac auch schon möglich ist. Das heißt, wenn du zu einer Mac gehst und den startest, dann will er nicht unbedingt ein Passwort haben, sondern wenn du eine Apple Watch hast, dann geht er so auf.
Und wenn jetzt dein Gesicht nicht erkennt, weil du eine Maske aufhältst, dann geht es offensichtlich jetzt auch so aus.
Aber du musst einmal auf der O-Tipp. Also du bist nicht so wie beim Mac, das ist automatisch, weil du siehst, du bist in der Nähe, sondern du musst schon einmal auf die Uhr gucken und einmal anlocken.
Was? Ja, ganz cool. Ich weiß nicht, ob es schneller geht, den Passwort einzugeben.
Kommt auf jeden Fall drauf an.
Ich wollte es vorhin noch mal ausprobieren. Hat aber gemerkt, mein Handy ist breit unabgedeckt, aber mein Uhr irgendwie noch nicht. Obwohl ich eigentlich immer dachte, die macht das irgendwie nachts selber.
Aber anscheinend hat sie noch das noch nicht selber gemacht. Muss jetzt nochmal anstoßen. Ich gehe mal davon aus, dass es funktioniert.
Manchmal brauchen die so eine Woche. Ich glaube, die werden so von Apple über eine Woche verteilt, angetrackert, die Geräte zum Update, dass nicht alles auf einmal kommt.
Des auch. Und ich habe immer das, dass ich nachts auch einfach mein Handy auf, nicht stumm, sondern Flugmodus stelle und dann macht er das halt nicht.
Weil ich will halt, weil es nachts nicht rumfungen, während es da irgendwie liegt.
Ja, genau, das war es zu Apple Watch. Und wir hatten ja schon mal darüber gesprochen mit dem iPhone 12 und dem MaxSafe und Herzschritt machen.
Ja, das stellt sich jetzt heraus, genau das passiert. Das iPhone 12, wenn man es in die Busstasse steckt, kann das Probleme mit dem Herzschritt machen haben.
Ich kenne viele ältere Leute, die ihr Telefon oder iPhone so in die Busstasse vom Hemd stecken.
Ja, ich kenne es eigentlich auch nur von älteren Herrn. Oder dann halt diesen, wie man es damals noch kannte, wenn man sein Nokia so in den Gürtelklip gemacht hat.
Warum gibt es sowas eigentlich?
Ohne Scheiß, ne. Als ich mein erstes iPhone gekauft habe, bzw. das hat mir damals meine Tante in Kalifornien gekauft und mitgebracht.
Das war irgendwie im Oktober oder September oder sowas. Da hat sie mir halt auch so eine geile Gürteltasche dazu gekauft, weil sie dachte, das wäre halt voll gut.
Hab ich nie benutzt, diese Gürteltasche.
Ich überlege gerade, ich hatte damals für so meine Nokia-Telefone schon mal sowas, aber das ist auch nie wirklich genutzt, glaube ich. Ja, das ist ein Ding aus Vorzeit, ne?
Ich weiß ja nicht, so ein Gürteltalent will man nicht haben. Was man hingegen haben will, ist Kommunikation in der App. Unser heutiges Thema.
Richtig.
Also, komm, wir haben ja letztes Mal darüber überlegt, was machen wir denn wie, was ist unser nächstes Thema, und da hast du gesagt, lass uns doch mal über den Datenflow in der App reden, mit Delegate und Closure.
Und da habe ich gleich gesagt, haaa, oh nein, halt, stopp, da gibt es ja viel cooleren Scheiß. Aber bevor wir mit dem cooleren Scheiß, mit dem neuen hippen Hipster-Coding anfangen, reden wir doch mal über Delegate und Closure, und was man so alles im Code machen kann.
Weil, davon wissen sollte man auf jeden Fall, und benutzen kann man sie auch immer noch, das ist ja nicht verkehrt, aber es gibt halt auch schon modernere Sachen, die wir dann auch noch reden.
Genau, also das Problem stellte sich mir das erste Mal vor, keine Ahnung, vier, fünf Jahren.
Als, also ganz früh, als ich angefangen habe, das iPhone zu programmieren, habe ich halt alles in den View-Controller reingeschrieben, ne?
Alles, was die App gemacht hat, war halt in einem View-Controller drin, und das ging einfach so ab, und verschiedene Funktionen wurden aufgerufen, und es war so, so, so, so, Aussehen von der App und Funktion von der App war nicht getrennt.
Und dann hat man gelesen irgendwo, man sollte das trennen, weil das gehört sich so. Der View-Controller soll eigentlich nur das machen, was zum Darstellen der Daten da ist, und die Datenverarbeitung soll halt irgendwo anders passieren.
Also ich dachte, okay, das klingt ja sehr gut, aber wie macht man das, dass der View-Controller dann auch mitbekommt, dass da neue Daten da sind, oder wie stößt der denn diese Datenverarbeitung an?
Und da kam halt diese Delegates ins Spiel. Man delegiert an einem anderen Teil der App eine Aufgabe ab.
Also zum Beispiel kann man machen, man macht einen Taschenrechner, der Taschenrechner hat dann ein Eingabefeld und ein Darstellfeld, aber die Rechnung, die geht dann woanders.
Also hier lieber berechnen Teil, rechnen wir mal aus, drei plus fünf und geben aber bitte das Ergebnis zurück. Und das machen wir halt über Delegates.
Ja, also Delegates sieht man ja auch überall im Apple Ökosystem. Also wenn man einen Delegate-View-Controller macht, dann ist man ja Delegate und legt das was von dem lieberlegen UI-Table-View-Controller.
Also dieses Konzept ist überall in Apple Frameworks verteilt und auch über Jahre hinweg so benutzt worden und auch immer noch valide.
Und auch sehr alt. Also das gab es schon bei Objective-C. Das ist also keine Funktion von Swift oder kein Bestandteil der Swift-Sprache, sondern das ist eigentlich was von Coco, glaube ich.
Nicht nur Disney, das gibt es auch in anderen Programmierekonzepten. Also das kann man überall bauen. Ja, was auf jeden Fall Delegates wichtig ist, wichtiges Ding.
Genauso wie Closures. Was sind Closures?
Ja Closures, wenn ich sagen soll, was ähnlich ist, aber Closures, da ruft man eine Funktion auf, wo immer diese Funktion liegt und sagt aber dem Programm, wenn du fertig bist mit der Funktion, dann mache ich hier an dieser Stelle weiter.
Sag mir mal Bescheid und dann mache ich hier weiter.
Ja, sozusagen, also Closure in so ein Faces Closures in anderen Sprachen heißt Callback. Also im Prinzip, ich rufe irgendwo an und ich kriege Rückruf. Also wenn ich hier, weiß ich nicht, lang gehen, da Async Server Call, hol mir bitte Bild, Bild legt runter, ich kriege einen Rückruf und sag hey, Bild ist da, hier zeig es an.
Also das ist so dieses Konzept. Und im Prinzip kann man was selber, was man mit Delegates baut, auch mit Closures bauen.
Hängt immer von davon ab, wie man es am liebsten mag und wo es an welcher Stelle irgendwie Sinn macht.
Ja, da gibt es auf jeden Fall dann, wenn man gerade mit seinem Model oder Viewmodel, mit seinem Viewcontroller redet und sozusagen so eine Verknüpfung schafft von Closures oder Delegates, muss man darauf achten, dass man keine Retains Zeiges baut. Weißt du denn, was das ist?
Nee, hab ich noch nie gehört.
Also Retains Zeiges ist, kannst ja pointer in Programmiersprachen, also ein Objekt zeigt auf ein anderes. Und was du mit so einem Delegates oder Closure produzieren kannst, ist, dass zwei Objekte auf sich gegenseitig zeigen.
Also quasi so eine Endlos-Schleife.
Genau, und das ist ein Teufelskreis.
Ja, genau, davon kriegst du Memory Leaks. Das heißt, du baust Speicher auf, der wird aber nicht mehr abgebaut. Also angenommen, du gehst jetzt in dein View rein, also du drückst um auf ein Table View, drückst auf ein View, in deine Delegation-Controller gehst du einen Schritt weiter, der zeigt irgendwas an, dann gehst du zurück. So, und dann ist zwar dein Viewcontroller weg für dich als User, du siehst ihn nicht mehr, aber dein Speicher wird da weiterhin gehalten, weil zwei Pfeile auf sich zeigen, ich brauch den und der andere sagt, ich brauch den und die wissen, die können nicht mehr sagen, ey, wir sind fertig, wir können aufhören.
Da ist es wichtig, dass man zum Beispiel ein Delegate, man das als Property in seinem View-Model oder Modell oder sonst irgendwas hat, dass der als Weak deklariert wird, also dass das sozusagen eine Weak-Reference wird und der Programmier-Schwein sagt, okay, ich depende nicht so hart drauf, du kannst mich wegschmeißen, wenn die anderen Pointer alle weg sind.
Genau, das ist dann das, wie sozusagen den Views und der unterbasierende Modul-Code wieder abgebaut werden, wenn du aus deinem View rausgehst.
Und das selbe musst du halt auch mit Closures machen. Also wenn du von deiner Closure wieder auf Self zugreift, musst du auch gucken, dass du das ein Weak-Self oder ein Unself machst, um diese Retain-Cycles zu brechen.
Okay, mach ich nicht, glaub ich.
Ja, gut, es funktioniert ja auch meistens und die Geräte haben schon meistens so viel Speicher. Kann halt nur sein, wenn du speicherintensiv diese Dinge machst und immer wieder dann kommst du halt irgendwann in einem sozusagen State, wo du dann auf einmal deinen Rahmenausgabe aufgebraucht hast und das System sagt, hey, ich schieße dich jetzt ab, weil du mir so ein Speicher verbrauchst.
In kleinen Applikationen wahrscheinlich.
Wahrscheinlich nicht, aber gut.
Nicht schaffen, aber man sollte beim Programmieren schon darauf achten, weil ich zum Beispiel auch im Open-Source-Projekt, was ich gemacht hab, wo ich auch Bilder und Videos anzeige, die dann halt schon mal irgendwie von 100, 100 Megabyte mehr in den Speicher reinlegen und dann ein Retain-Cycle passiert, dann hast du dann auf einmal nach einer, ich weiß nicht, 15, 20 Minuten benutzen, der App auf einmal irgendwie 1,5 Gigabyte an Speicher, die du belegst und du dich wunderst, ja, jetzt hab ich die Retain-Cycles alle gebrochen und dann bin ich bei 60, 70 Megabyte so konstant. Du siehst mal kurz hoch gehen, runter, hoch, runter, hoch, runter.
Aber wenn du, das ist auch immer ein schönes Ding, wie man das eigentlich herausfinden kann, wenn du deinen, in Xcode gibt's da, wenn du die laufende App hast, immer den Speicherauslastung und Prozessorauslastung und so weiter. Da kann man auch immer gucken, ob der Speicher nach oben geht, ob der auch irgendwie wieder abbaut, wenn du ins und ins und reingehst, wieder rausgehst, rein, raus, rein, raus und weiter.
Ja, der sollte wieder zurückfallen.
Der sollte wieder zurückfallen, auf weise, das sind 80 Megabyte vorgewiesen sein, dann gehst du auf 85 hoch, dann gehst du wieder raus und bist bei 80, wenn du da über 85 bleibst, dann kann dir das ein Indikator sein, so hm, okay, sollte man vielleicht das machen.
Das könnte sein, warum meine Fotos hat ab und zu mal crasht.
Das könnte sein, da läufst du innen, da vielleicht rein, mal gucken. Gibt's auch schöne Tools, um das zu debuggen, von, wie heißt der Gram jetzt, die Instruments in Xcode, die gibt's in Memory Leak Tool, die können dann sowas entdecken und geht auch noch nicht nur mit Instruments, sondern mit dem neuen Memory Graph, den's glaube ich sei, da ist es von der 13 in Xcode gibt.
Ah, 149 für mich, das können wir gar nicht jetzt sagen.
Das muss ja noch ein bisschen durchhängen.
Auf jeden Fall wichtig darauf zu achten, weil es einfach zu Problemen führen kann, die man dann, wo man dann nicht mehr weiß, was die Sache ist.
Ja, genau, das sind auch jetzt die zwei Dinge, die man altbewerbt gemacht hat, um seine App und sozusagen seinen Model Code mit dem View Code zu verbinden und abzudecken.
Aber da gibt's jetzt was ganz, ganz Neues, naja, ganz, ganz Neues auch wieder übertrieben, aber seit August 13 und das nennt sich Combine.
Sag dir Combine was, Holger.
Ne, also ich hab, ich hab heute, du weißt gar nicht, ich soll mich unbedingt ansehen, ansehen, da reden wir heute drüber.
Ich hab da reingelesen, aber ich hab vorher auch davon noch nie gehört.
Okay, dann hast du aber doch schon mal von Reaktive oder Reactive Programming gehört.
Ich hab schon mal gehört, dass es Reactive Programming gibt, ja.
Okay, kannst du dir dann mal vorstellen.
Reactive und Native. Also das sind dann so, auf jeden Fall die hippen Sachen, die man immer so aus der Entwickler-Community, naja, alles muss Reactive sein. Ja.
Also was ich halt davon, was ich jetzt verstanden habe, ist, dass das System halt so ein bisschen dafür sorgt, dass die Programme, die Teilprogramme oder die Teile des Programms miteinander reden.
Und zwar, dass sie so eine Art Vermittlerstelle aufbauen.
Also ein Teil vom Programm sagt, ich möchte gerne was sagen und ein anderes Programm sagt, ah hier, das interessiert mich, da möchte ich gerne zuhören und da möchte ich gerne was machen.
Grob kann man sich das auf jeden Fall so vorstellen.
Also im Prinzip geht's um eine Bereitstellung von Werten und das Verknüpfen von Werten zu Wertflüssen.
Ja, das klingt komisch.
Aber ja, es ist im Prinzipien kümmerst du dich nicht mehr darum, wie dieses Ganze, ich konekte mich mit irgendwie, weiß nicht, Delegate, Closure Setup und sonst irgendwas, sondern also ein elementales Konzept in Combine, es sind Publisher und Subscriber.
Und wie das schon sagt, Publisher, veröffentlicht Werte und Subscriber abonniert Werte.
Quasi, wenn wir bei unserem Beispiel von dem Taschenrechner bleiben, dann muss ich gar nicht mehr sagen, dass der Taschenrechner UI, die soll bitte dieses Rechenelement benutzen, um die Sachen auszurechnen, sondern sagt einfach hier, ich bin die Taschenrechner UI, du gibst was ein und der annoucet halt, was er eingegeben hat.
Und im Hintergrund ist halt so eine Rechner UI, die hört auf alles, was eingegeben wird und sagt dann irgendwann, ey, ich hab ein Ergebnis und die Taschenrechner UI hört wieder auf das Ergebnis und zeigt das an.
Prinzipiell ja, in Combine ist das selber noch nicht drin, dass es Reactive UI Komponenten gibt.
Das musst du noch selber verknüpfen oder kann man sich auch selber bauen.
Weiß nicht, ob du was denkst, das wird irgendwann kommen, weil in anderen Sachen gibt es das auch, also ich kenne es aus einem anderen Framework, Bond heißt das, aus einem Swift Framework.
Und da hast du dann zum Beispiel ein UI Text Field oder Label oder sonst was und die haben dann einen Punkt Reactive und da kannst du dann sozusagen so ein Publisher und dein Label oder so, was ein Subscriber ist, direkt damit verbinden.
Also das heißt, was wirklich sozusagen ein Caller sagt, verbinde meinen Subscriber mit Publisher und wenn Publisher irgendwas ändert, dann wird es sofort angezeigt.
Und was auf jeden Fall dadurch sehr cool ist, ist, dass man in sehr wenig Code und einfach zu verstehen, wenn man mal verstanden hat, wie es funktioniert, kann man das sehr einfach lesen und deutlich weniger Fehler dadurch machen.
Ich benutze es viel auch im Arbeitskontext jetzt dort.
Also ich habe auch erst Combine über Kamele zusammen mit SwiftUI und wird auch sehr mit SwiftUI zusammen benutzt und Apple, sag ich mal, gibt die auch als Entwickler vorher hin, nutzt das und auch mit SwiftUI sind sehr viele Dinge dran, die mit Combine funktionieren und macht sie halt auch einfach sozusagen.
View und Daten in Sync zu halten.
Hat es auch schon viele Foundation Sachen eingefacht, wie zum Beispiel ein Timer oder URL Session.
Kennst du noch zum Beispiel wie man so ein Timer auslässt? Dann sagst du Timer, Punkt Schedule, Timer und dann gibt es aber da jetzt schon einen Publisher Timer und dann kann man halt auch so ein Publisher Timer das selbe machen wie vorher, aber viel eleganter, ohne dass man irgendwie sagen muss.
Ja, du musst jetzt deine Objective-C Methode definieren und dann da, was eigentlich altbankender Kram ist, der noch von Objective-C kommt.
Das wäre es auf jeden Fall zu Combine, aber mit Combine kann man auf jeden Fall noch viel, viel mehr machen. Also man kann mit einer Vielzahl an Operatoren, also die Daten bevor oder während sie der Publisher, also raus schickt, raus schicken, wie kann man diese verarbeiten und zwar mit verschiedenen Dingen.
Also ich kann zum Beispiel ein Array, ein Array hat automatisch einen Publisher, du kannst einen Array definieren, das wird mal ABC sein und du machst den als Punkt Publisher.
Das ist automatisch ein Publisher und darauf kannst du zum Beispiel einen Map aufhören, dann kannst du sagen Punkt Map und du kannst die Daten, die in dem Array sind, dann steht da ABC und dann kannst du sagen ok und jetzt mach ich jeden Buchstaben und füge mir einen, einen Eins in.
Dann sagst du, da steht A1, B1, C1 und so kannst du das halt immer weiterführen mit verschiedenen Operatoren, die du anfügst.
Zum Beispiel kannst du filtern und sagen, jetzt filtern wir alle mit B1 raus und dann kriegst du nur noch A1, C1 raus. Kannst du, also es gibt eine Vielzahl, also da gibt es bestimmt 30 Stück an Operatoren, mit denen man seine Daten vorher verändern kann.
Zum Beispiel jetzt mit Strings oder so, ist das natürlich, wie brauch ich das jetzt, muss man halt auch immer in dem Fall sehen, wie man es dann am Schluss braucht, was auf jeden Fall einer der wichtigsten ist oder am coolsten finde ich, ist du kannst halt mehrere Publisher angenommen, du hast jetzt zwei Calls, die zu irgendeinem Server gehen und sagen, ja ich hole bitte die Daten und das Bild und dann kannst du solche Publisher zusammenstecken.
Du kannst sagen ok, er sagt, hey ich hab die Daten runter gelernt, aber das Bild ist noch nicht da und dann wartet er auf das Bild und dann gibt er das zusammen zurück und das kann man dann zum Beispiel mit Flatmap zusammen, so zwei Publisher kombinieren, daher kommt auch irgendwie dieses Konterganama kombinieren wahrscheinlich und dann an deine UI zurückgeben.
Das ist voll praktisch, also ich hätte vorher wissen sollen, bevor ich meine neue App da gebastelt habe.
Ja genau und im Prinzip, was man mit Combinebot ist, ist halt so ein Pipeline, durch die Werte fließen und diese Werte fließen direkt sozusagen an deine UI und du musst dich nicht drum kümmern und am Ende dieser Pipeline steht dann halt in der Sync, also das heißt auf deutsches Sync, die dann den ermittelten Wert final dir weiter gibt und du hängst ihn dann an deine UI und hast dann sozusagen die Wahrheit über dir stehen.
Ja wenn ich mir überlege, was ich vorher mit Close Shots für Monstern teilweise geschaffen habe, da klingt das, auch wenn das jetzt auf den ersten Blick und das ist ja häufig so bei Sachen, die man neu lernt, sehr überwältigend ist, klingt das so, als könnte man damit viel saubere Sachen schreiben.
Auf jeden Fall, das habe ich auch selber schon gemerkt, also da kann man, was ich mit z.B. Combine habe ich jetzt im privaten Projekt noch nicht benutzt, da habe ich Bond benutzt, bevor ich vorhin schon erzählt habe.
Was ich z.B. gemacht habe, ist, dass du einen Slider, der etwas verändert, einen String verändert und direkt in ein Textfeld reinmachst, also ich konnte den Slider ziehen und im Textfeld hat sich der Text verändert, du konntest das sozusagen wirklich mit einer Zeile verbinden und das ist dann halt schon, mit anderen Systemen brauchst du halt ein bisschen 6, 7 Zeilen, Methoden, sonst irgendwas Verbindung, alles Potenziale Dinge, mit denen du Fehler machen kannst und Combine hilft dir halt gerade solche Fehler mit, sag ich mal tedious tasks, die du dir als Entwickler da irgendwie, du musst an Dinge denken, die du falsch machen könntest und aufpassen und nimm dir das halt alles ab.
Und auch, wir werden auch nochmal auf das Combine Framework verlinken, da gibt es auch einen Artikel von Apple z.B.
Da kann man dann auch, was Apple gibt, da gibt es einen Artikel, was Apple dir vorschlägt, was man, wie man Dinge ersetzen kann und da wird auch vorgeschlagen z.B. Closures mit Futures zu ersetzen.
Futures ist auch nur ein Publisher, der in Zukunft einen Wert rausgeben könnte.
Kannst du dann genauso machen und ein Future hat dann halt auch benutzt den neuen Swift 5 Result Type, womit du dann halt einfach in deinem Result Type, also Result Type ist eigentlich nur der sagt, ok es hat geklappt, Success oder Failure mit einem Error.
Und du musst halt nicht mehr irgendwie so einen Quatsch schreiben wie, ja du hast eine Completion mit deinem Wert und dann ein Optional Error, sondern der gibt dir halt ein Ding zurück und das kannst du dann halt drüber switchen über dein Result und gucken.
Also macht auf jeden Fall deutlich elegantere Code.
Ja und gerade dieses Verbinden mit Operatoren, wenn man das mal verstanden hat und man ein bisschen mit rumgespielt hat und das auch, sag ich mal, in einem richtigen App-Kontext mit verschiedensten Dingen gemacht hat, wird man sehen, wie cool das eigentlich ist und wie viel Spaß es macht.
Das wurde eingeführt letztes Jahr, oder?
Mit SwiftUI zusammen kam das.
Also es ist, ja das muss man natürlich beachten, also wenn man das jetzt benutzt, dann kann man das nur bei neuen IOS 13.
Genau, wenn du dabei gehen willst, musst du IOS 13 mit SDK haben sozusagen.
Ja ist aber auch, denk ich mal, ich wüsste es nicht, ob man das von Kunden, die es potenziell haben würden.
Also ich glaube, da sind wir schon mittlerweile unter 5% die noch unter IOS 13 sind.
Also sehe ich keine Probleme und ich finde auch nicht, dass man sich von so was aufhalten lassen sollte.
Ja, wenn man eine große Firma ist, dann sollte man nicht so viele möglich einbinden, aber ich meine, als IOS 13 muss man auch weitergehen und ist halt leider so.
Cool, das ist ein Scheiß.
Ich habe ja auch vorher privat darüber geredet, dass ich auch einen Kunden hatte, der sich beschwert hat, warum. Weil ich die Apple Watch 1 ausgeschlossen habe, weil ich, ich glaube, WatchOS 6 für eine App vorausgesetzt hatte.
Und er hat gesagt, der hat die Apple Watch 1, die muss 5 glaube ich.
Also ich habe gesagt, ich habe die gekauft, warum geht die nicht mehr hin?
Ich habe gesagt, sorry, es tut mir leid, ich meine, meine Software geht voran und die ganze Welt geht voran und ich kann nicht irgendwie irgendwas unterstützen.
Und normalerweise kann man ja auch eine alte Version installieren, wenn die neue Version nicht mehr auf seinem Gerät läuft im App Store.
Ja, das habe ich auch mal gehört, ich habe es aber noch nie gesehen, dass es funktioniert.
Ich habe es auch, ich weiß man kann es irgendwie abschalten, ich habe aber nie was abgeschaltet.
Ich selber habe das noch nicht, ich habe auch noch nicht reingelaufen, dass es irgendwie so alt ist.
Ich habe noch so ein altes 32-Bit-iPhone hier und da kann ich noch Software installieren, also ich kann Software installieren, die es eigentlich nicht mehr im App Store gibt, weil die nur 32-Bit-iPhone, die ich rausgenommen habe.
Ja, also ich muss auch mal mit meinem alten iPad, was in so einem sehr coolen State ist, finde ich, mit einem riesen jayrockigen iPad, alles modifiziert, aber es läuft gut.
Aber es ist schön, schön, schön, eine schöne Konservierung von dem State damals, ich weiß nicht, was war.
Das ist schon, das ist noch einiges fünf oder so drauf, sieht noch alles sehr lustig aus und es ist einfach schön, dieses Ding einfach anzumachen und ich bin auch noch so krass davon.
Also dieses Ding, ich las einmal im Monat auf und es steht da im Stand-by mit WLAN an, mit allem und sonst irgendwas.
Es läuft einfach, ist das so? Dieser Akku ist einfach, ich verstehe es nicht, der weiß es nicht, aber es ist jayrockig, ich müsste denken, so jayrockig und dann läuft der Prozess, dann heißt das bestimmt nichts, alles cool.
Ich muss mal gucken, ich meine, mein allererstes iPhone noch irgendwo, das muss auch irgendwo liegen.
Ja, das ist wahrscheinlich Goldschatz.
Nein, das ist sehr kaputt, das ist mir auf dem Rock-Kanzei drunter gefallen und das wurde drauf von mir geschehen.
Stimmt, die Scherze hat sich schon erzählt, Herr, ich erinnere mich, war das nicht in einer unserer ersten Folgen?
Das kann sein.
Ja.
So, jetzt bin ich mal mit Singen dran, oder?
Du bist mit mir mit Singen dran, genau.
Ich wollte so ein bisschen Schiedi-Flut nachmachen.
Genau, ich benutze ab und zu, ich habe ab und zu das Problem, dass mein Mac sehr voll wird.
Ich habe so 512 GB Speicher und das ist manchmal ein bisschen wenig.
Und dann habe ich ein Programm gefunden, mit dem ich so ein bisschen aufräumen kann und zwar das nennt sich Def Cleaner for Xcode, kostenfrei im Mac App Store zu finden.
Und dem muss man Zugriff geben auf seinen Developer-Folder und dann sucht es Sachen, die man eigentlich nicht mehr braucht und bietet die an, die zu löschen.
Zum Beispiel alte Archive, also wenn man eine App in den App Store schieben möchte, dann muss man eine Archive erstellen und dann wird das hochgeladen.
Aber dieses alte Archiv, was dann erstellt wurde, nimmt halt Speicherplatz ein auf der Festplatte oder auf der SSD.
Und das bleibt verliegen, wenn man es nicht löscht.
Oder alte Versionen von dem SDK oder von den Simulatoren, die nehmen halt Speicherplatz ein.
Und wenn man jetzt keine große Firma ist, die sich erstellen möchte, dass alles noch abwärtskompatibel ist, sondern einfach nur den heißen Scheiß benutzen möchte, so wie wir heute, dann braucht man diese ganzen alten Versionen gar nicht mehr.
Und da hilft ein dieses Def Cleaner Tool eigentlich ganz gut. Ist kostenfrei und fang ich sehr hilfreich.
Ja, vor allem man kann auch immer wieder die alten Xcode-Versionen runterziehen und bekommt dann sowieso immer wieder die alten Simulatoren und Symbol-Files und was auch immer mitkommt.
Ja, aber auf jeden Fall, jedes Xcode legt erstmal irgendwie nochmal 5 GB irgendwie ab.
Dann kommt noch dazu, dann hast du noch einen Apple Watch, dann hast du einen iPad.
Das heißt, der zieht immer von allem diesen Symbol-Files runter, die du halt zum Diebanken brauchst, zieht halt immer runter.
Ich habe jetzt einen Terabyte auf meinem Rechner, ich bin bei 500 GB.
Ich habe schon länger nicht mehr nachgeguckt.
Ich meine, wenn man halt so ein Chibo bist wie du, das hat nur 120 GB Speicher, dann läuft man da halt ständig rein.
Es sind 512 GB, aber 300 davon sind voll mit Fotos, die ich selber geschossen habe. Ja, wenn man halt nicht so ein Geringverdiener ist und sich einen Terabyte holen kann.
Ich mache nur Spaß. Ich glaube, da hat er ziemlich viel gekauft, aber war das größte, was man kaufen konnte.
Ja, ich habe es auch benutzt. Ich hatte auch meinen Gogi mit 256 GB und da läuft man ständig rein.
Also immer wieder Platz haben, um neue Xcode drauf zu tun.
Ich habe das Tool auch schon selber benutzt.
Ich glaube, da war das ganz frisch irgendwie.
Irgendwie auf Twitter mal rum. Das auch untergeladen habe.
Hab auch das im Firmchat geshared. War ganz cool.
Und dann habe ich das aber jetzt vorhin hier gesehen.
Und ich habe nämlich letztens daran gedacht, ein Arbeitskollege hat mich auch etwas geschickt.
Und zwar auf der Speicherverwaltung von Abixxer. Das ist nämlich bei Mac OS drin.
Also auch eine Developer Option. Da musst du mir sagen, ich bin noch nicht auf Abixxer.
Ich weiß, da ist auf jeden Fall etwas drin, das man Symbol files und so weiter löschen kann.
Genau, das heißt Storage Management. Das tut jederzeit auf Englisch.
Und das hat dann auch so einen Developer. Also das ist ein normaler... Links und rechts ist da was.
Auf der linken Seite kann man halt auch Developer auswählen.
Und dann sagt ihr ja auch Xcode, Cache, Project Build und Data Indexes.
Und dann iOS 14.4 und iOS 14.3 habe ich jeweils hier noch drin.
Ok, also da haben sie auch schon, die haben gesehen, aha, da besteht Bedarf für und warum nicht das gleiche System einbauen macht auf jeden Fall Sinn. Ich glaube, der Developer kann noch zwei Sachen mehr. Auf jeden Fall anschaunswert. Ihr findet den Link in den Show Notes.
Ganz genau. Und damit sind wir am Ende des heutigen Eintrags im Tagebuch.
Ja, das ist ja fast gar nicht zu glauben. Nach 37 Minuten und drei Sekunden.
Und ja, wie immer, wenn ihr Themenvorschläge habt, wenn ihr Fragen habt, schickt uns die gerne per Twitter, per Voice Message, per E-Mail, per...
Ihr findet schon irgendwie einen Weg. -Brieftaube. -Brieftaube.
Morst uns die hier wachsen. Macht hier so auch Zeichen. Dosen-Telefon ist auch immer sehr beliebt.
Wir freuen uns auf Anmerkungen und Hinweise und vielen Dank.
Genau und was wir das nächste Mal machen, das wissen wir glaube ich noch nicht. Aber ich denke, wir werden noch ein bisschen über Programmierthemen reden.
Wir haben jetzt schon sehr highlevel über App-Entwicklung geredet.
Das bedeutet auch leider für mich ein bisschen Vorarbeit mit Recherche. Auch wenn ich das jetzt kombiniert habe, benutze ich möchte nicht wie der letzte Toto dastehen und hier Quatsch erzählen.
Deswegen muss ich mich jetzt auch ein bisschen mit dem Vorhinein noch mal tiefer dieend beschäftigen.
Da habe ich ja auf Rayvendorlich, kennt man ja bestimmt, einen kompletten Videokurs reingezogen, um mir noch ein bisschen mehr Combined Background-Wissen reinzuziehen.
Ja und da werden wir dann auch noch mal gucken, was wir das nächste Mal machen. Wir finden was.
Richtig und dann sagen wir Tschüss.
Ciao.
[Musik]
Das App Store Tagebuch-Adbriet von Nico und Holger. Die Links zu dieser Sendung wie auch den Link zu dem Intro von Luke Hash findet ihr auf App Store - Tagebuch.de