[Musik]
Ja, grüß Sie und herzlich willkommen zu einer neuen Folge vom EPSTO Tagebuch.
Hallo Holger.
Ich glaube mein bayerischer Akzent ist nicht so gut, ne? Hallo Nico.
Nee, nee, den lassen wir mal lieber.
Ich hatte gedacht, ich könnte das ein bisschen imitieren, weil das Oktoberfest muss jetzt
rum sein, da dachte ich, ich könnte das bayerische nach Norddeutschland holen, aber nee, nee, nee.
Ja, so rein offiziell wäre heute der, wenn eine Lise wäre, dann wäre heute der letzte Tag.
Du meinst, letzte Woche als, wie kann ich den Spracher später aufzählen? Egal. Richtig, aber ist egal.
Ja, News haben wir zurzeit gar nicht so viel, weil Apple lässt sich irgendwie Zeit anzukündigen,
wenn sie mal das iPhone rausbringen wollen, ne?
Ja, da ist leider nicht viel zu sagen diese Woche.
Aber nachdem wir eh nicht so zeitnah sind, ist es jetzt eh so.
Genau, ich bin mal gespannt. Es ist ja eigentlich ein Gesetz, das neues iPhone rauskommt, aber so spät wie jetzt war es doch noch nie.
Ja, also auch die Leaks hat man ja schon gesehen und wahrscheinlich wird es wirklich Corona sein und dass,
sag ich mal, auch China und die ganze Lieferkette und Produktionskette dort verlangsamt, verlangsamt wurde,
macht auf jeden Fall was aus, dass Apple selber sagt, sie verschieben sich wahrscheinlich.
Ja, ich finde ja tatsächlich, sie könnten ruhig ankündigen und dann sagen, okay, kommt in den Monat,
weil die Hardcore-Fans, die sich halt aus einer Ankündigung angucken, die wissen ja eh, dass was kommt, ne?
Und alle anderen, denen ist sowieso scheiße, egal, wann sie das Telefon haben.
Ja, aber Apple hat ja mit Ankündigen von Produkten schon schlechte Erfahrungen gemacht.
Also, ich möchte mich mal auf die App abwarten.
Also, Sie sollten es dann doch lieber erst ankündigen, wenn Sie sich sehr sicher sind, dass es bald rauskommt.
Ja, sehr sicher, dass es nicht bald rauskommt, wenn ich mit meiner Game-Collector-App,
da habe ich ja irgendwann mal erzählt, dass wir da so auf eine Beta jetzt gestartet haben,
leider hat sich die API dahinter, die ich benutze, verändert und ich hatte noch keine Zeit, das anzupassen und ja, mal gucken, wann ich das machen kann.
Da kann ich dir was sehr Nettes sagen, das nennt sich JSON for Swift, mehrere Generierungstools.
Falls du, sag ich mal, so einen Sample JSON hast von der Antwort vom Server, kannst du das da reinpisten.
Das ist nicht das Problem, die Antwort vom Server ist nicht das Problem.
Das Verifizieren, dass man Zugriff hat auf die API, also das Autodetentifizieren gegenüber der API, das hat sich sehr stark geändert.
Und das muss ich halt implementieren. Die Antwort vom Server ist immer noch die gleiche.
Ach so, okay.
Aber ich kriege halt bald gar keine Antwort mehr.
Aber kann ich auch noch mal nur jetzt für den Gedeiktenhörer ausführen?
Also man kann auf jeden Fall, wenn man eine JSON-Antwort, JSON ist ein Textformat, was man vom Server zurückkriegt, was strukturell aussagt, was für Daten da gerade kommen,
kann man sich mit Tools aus dem Netz sozusagen Swift-Klassen generieren lassen, die man dann direkt in sein Projekt zieht und sich Haufen Tipparbeit damit sparen.
Okay, das ist gut.
Gibt's, haben wir den Link in den Schaunen, gibt's zwei, drei so gute Generatoren.
Muss man vielleicht so ein bisschen vom Style her noch für sich anpassen, aber meistens funktioniert das ganz gut.
Genau, du hattest ja über Gamecollector gerade gesagt, dass das euch ein wenig verschiebt bei mir.
Ich hab in den letzten Wochen sehr viel Zeit in meine, die neue Version der NFC für iPhone gesteckt.
Da bin ich, also die ist jetzt noch nicht draußen, aber die kommt jetzt dann demnächst, also wenn der Podcast rauskommt, sollte sie wahrscheinlich da sein.
Da bin ich für die, sag ich mal, Pro-User deutlich weit in den NFC-Standard hinuntergegangen und hab in die Keller getaucht.
Ja, sehr, sehr weit auf Low-Level, also Low-Level, Low-Application-Level-Ebene runter.
Und auf, sag ich mal, Bits und Beidebene kann man einen NFC-Text auslesen, einen kompletten Speicher auslesen.
Okay.
Sozusagen einen Expertenmodus für NFC, den hab ich jetzt implementiert und die App verbessert und, sag ich mal, man hat mehr Möglichkeiten, um NFC-Text auszulesen.
Das iPhone kann ja nur bestimmte NFC-Text auslesen, oder?
Nein, tendenziell kann es jeden auslesen oder die gängigsten.
Aber die API, die man normalerweise benutzen sollte, kann du einigen und du hast das jetzt im Gang, oder?
Nee, also da gibt es verschiedene Dinge, die man machen kann. Es gibt verschiedene ISO-Standards, also ISO 14776 und ISO blablabla.
Und dann gibt es von japanisches System, das ist Felica, das ist basierend auf unterschiedlichen Standards.
Das iPhone kann aber mit all diesen umgehen. Also ein iPhone zeigt dir aber, sag ich mal, wenn du das iPhone an irgendeinem Tag hältst, ohne dass du eine Air passt, zeigt es dir nur Daten an, wenn wirklich auch auf diesem NFC-Tag Endeff-Daten, also einen Daten-Container, der vorgibt, hier ist was drauf, dann reagiert das iPhone auch drauf.
So, ich hab jetzt implementiert, auch wenn du diesen Endeff-Container nicht auf diesem Tag hast, kannst du trotzdem den Tag auslesen.
Und die haben ja zum Beispiel eine Seriennummer, die haben verschiedene Dinge einprogrammiert.
Du kannst den Speicher lesen, du kannst gucken, okay, an welcher Stelle, weiß ich nicht, wie sehen die Bites an der Stelle aus?
Du kannst die Komplette sozusagen die Seiten ausgeben lassen, die in so einem Speicher drin stehen.
Das sind halt, weiß ich nicht, bis zu zwei Kilobyte, also nicht viel, aber man kann, ich hab jetzt schon gelernt, sag ich mal, einen NFC-Tag, die Beiz zu lesen und kann dir sagen, ah ja, da steht das, da steht das, da steht das.
Ja, genau, so kann man sich das vorstellen. Das kommt demnächst und ich freu mich schon drauf, das war viel Arbeit und ja, ich freu mich auch über Feedback von den Leuten, die da draußen meine Air benutzen.
Änderst du was an deiner Finanzierungsstrategie, also werden diese Pro-Features kosten dir extra oder sind die halt gleich dabei?
Also ich hab ja sowieso mein werbefinanzierte Modell, plus man kann sich die Werbung wegkaufen. Ich hab überlegt, ob ich das hinter den Invert-Jays mache.
Einerseits, ja, Leute, die die Werbung weggekauft haben, sagen, ja, aber warum soll ich jetzt dafür nochmal extra zahlen? Also ich weiß nicht, ob ich das jetzt erstmal reintue und dann später vielleicht sage, okay, wenn ich jetzt, oder erst wenn ich, wenn ich mir das, ich glaube auch, Apple hat gesagt, man darf das gar nicht, dass man sagt, man nimmt wieder Features weg und tut sich in seine Paywall auf einmal.
Also das sollte ich mir gut überlegen. Andererseits sag ich lieber auch, ich hab ja auch das Spendenmodell bei mir drin, da sag ich, okay, der geneigte User oder der versierte NFC-User, der soll mir zusätzlich zu dem einfach noch was in den Hut schmeißen von ein bis zehn Euro, oder was man da machen kann.
Ich glaube, ich werde das jetzt einfach erstmal so mit reinpacken, weil prinzipiell groß an der App, so wie sie funktioniert, hat sich jetzt nicht viel verändert. Sie hat sich ja erweitert und Funktionsumfang. Klar, irgendwo muss ich auch diese, möchte ich auch die Arbeit irgendwo bezahlt haben.
Aber ich glaube auch, dass ich eh mit meinem Werbewerkaufpreis von fast fünf Euro, ist schon nicht wenig. Ich glaube, das kann ich mal nachschieben, ohne dass ich jetzt sag, ich möchte jetzt nochmal Geld haben.
Aber dann auch für die Werbekunden kriegen, die kriegen das auch.
Genau, die kriegen das auch, die kriegen das auf dem Tab.
Da haben sie so viel Werbung.
Genau, auf der sehen auch nochmal ein Banner angezeigt. Also da habe ich jetzt ein bisschen was erweitert und so weiter. Ich überlege auch noch, ob ich dann alternative Farben, also ich habe das mir, das Themes in meiner App und App-Icon, ob ich die dann noch sage, okay, hier schmeißen Euro rein, kriegst noch die Farbe und schmeißen Euro rein, kriegst noch das App-Logo.
Ja, das ist jetzt aber erstmal, das soll jetzt erstmal raus, weil das hat jetzt eh schon lange genug gedauert. Das soll auf jeden Fall jetzt erstmal raus. Und dann schließen wir das jetzt auch ab und dann würde ich sagen, wir steigen jetzt heute mal in Xcode ein.
Genau, das hatten wir ja letzte Woche schon angekündigt, dass wir mal Xcode aufmachen. Ich hoffe, ihr ganzen Hörer, die hier so ein bisschen mitmachen jetzt, ihr habt euch das runtergeladen bei Apple. Es gibt es doch keine App Store, oder nur auf der Developer Seite?
Nee, es gibt zwei Möglichkeiten, wenn man sich das holt. Das ist einmal über den App Store, da gibt man Xcode ein und lest es runter. Aber sag ich mal, der Pro User wird, dann fängt man an und geht über developer.apple.com/downloads/more und da muss man dann seine Apple ID eintragen und sein Passwort.
Dann kommt man auf eine Download-Seite, wo man jede Xcode-Version, die es gibt und mal gab, runterladen kann und zusätzlich andere Tools noch. Aber so kann man halt mehrere Xcode-Versionen auf seinem Rechner haben, was ganz wichtig sein kann, wenn man mehrere Sachen supporten will. Und ja, was halt gern passiert ist, man hat irgendwie Xcode drauf und hat es aus dem App Store geladen und arbeitet damit und dann update sich der Rechner, wenn man es selbstständig eingestellt hat und dann hat man sich den Xcode verändert und dein Projekt baut nicht mehr. Also kann man machen, jetzt für den Anfang, lade es euch aus dem App Store runter für die Zukunft, glaube ich, eher direkt über die Webseite.
Und wir sprechen jetzt, also wir benutzen jetzt hier Xcode 12. Das ist das mit dem schwarzen Hammer vor dem Logo. Das Logo hat sich so ein bisschen verändert seit der letzten Xcode-Version. Ich glaube, dieser Hammer sieht auf jeden Fall anders aus als vorher.
Also ich hab's auch noch mal das alte Xcode drauf, ich muss das auch noch mal vergleichen. Xcode 11, das schreib ich mir dann auch immer gleich unter, mit sehr unterschiedlichsten. Ja, das ist also von einem eher eckigen Logo mit einem Hammer und einem silbernen Hammerkopf und einem schwarzen Stiel ist es so mit einem schwarzen Stiel und eher so Space Gray Hammer.
Mit eher rundlichem App-Icon-mäßigen Logo. Also so wie jetzt auch eigentlich Mac OS Mixer sich immer mehr an iPad oder iOS anpasst.
Ja, wenn man das aufmacht, dann wird man erstmal begrüßt mit einer Seite, wo auf der rechten Seite, wenn man es ganz neu aufmacht, weiß ich gar nicht, ob da irgendwas ist.
Da steht dann "No Recent Projects".
Genau, da sind so die letzten Projekte, mit denen man gearbeitet hat. Und auf der linken Seite kann man halt ein neues Projekt öffnen.
Genau, da kann man zum Beispiel ein neues Xcode-Projekt starten. Man kann ein Xcode-Projekt klonen, wo wir letztes Mal drüber geredet haben, zum Beispiel, wenn man was online findet, von GitHub oder von Bitbucket oder so.
Genau, und dann kann man auch noch, Holger, was kann man nochmal?
Ich weiß es nicht. Ich hab das Fenster schon weg. Achso, man kann noch ein Projekt öffnen von der Platte. Und dann fangen wir aber jetzt mal an mit dem obersten "Create a New Xcode-Project".
Genau, und da bin ich jetzt auch schon auf der Seite. Da haben wir verschiedene Templates, die man auswählen kann. Also man kann eine App machen. Das ist so eigentlich das Standard wahrscheinlich, was man benutzt.
Genau. Dann gibt es eine Document-App. Das ist, wenn man halt irgendwelche Dateien reinladen möchte, dann kriegt man gleich so ein Macht-Xcode im Hintergrund. Ist gleich fertig, dass man irgendwelche Dateien in die App hineinladen kann.
Das hab ich auch zum Beispiel für meine Spickerapp benutzt. Da hab ich diese Document-App benutzt und du bekommst dann gleich einen kompletten Browser, so wie man aus der Files-App eigentlich kennt. Also Files oder Dateien heißt das auf Deutsch. Das kriegt man als Template und da kann man dann selber noch oben draufbauen.
Genau, also diesen Teil brauchen wir jetzt schon gar nicht mehr programmieren. Dann kann man ein Spiel machen mit einem kleinen Roboter drauf.
Genau, okay.
Augmented Reality-App, ein Sticker-Pack, eine iMessage-App und noch ein paar Frameworks und Libraries, die wir uns jetzt aber auch gar nicht angucken.
Richtig, aber das werden wir bestimmt in der zukünftigen Folge uns nochmal genau angucken.
Ganz oben kann man noch sehen, da haben wir angesprochen, Multiplattform, dann kann man iOS auswählen, MacOS, WatchOS, TVOS und kriegt dann je nach Möglichkeit was anderes. Also für eine WatchOS gibt es eine WatchOS-App, für TVOS gibt es noch so eine TVML-App. Ich glaube, das ist auch nicht das Altes, was irgendwann mal rausfallen wird.
Weiß ich gar nicht, das ist glaube ich so die Geschichte, wenn du da so ein großer TV-Anbieter bist und deine Mediathek, ich glaube, das war doch das so XML, das man mit XML baut oder so was.
Genau, das ist quasi das alte TVOS-App-Modell und ich glaube, das normale App ist zukunftssicherer, wenn ich jetzt ein ZDF bin, dann würde ich lieber eine App bauen als eine TVML-App. Aber ich bin nicht das ZDF, deswegen weiß ich es nicht ganz genau. Wir machen jetzt einfach mal eine iOS-App, also oben bei Multipl... bei der ersten, zweiter, einmal iOS anwählen und dann App. Und dann kommen wir auf den zweiten Bildschirm, wo man eine ganze Menge schon mal eingeben kann.
Richtig, da kann man den, also fängt man erstmal oben an, wenn man sich ein Produkt nimmt. Da schreibt man jetzt einfach rein, was man so... einfach der erste, der erste, beste Idee, wenn ich sage, ich möchte jetzt eine Notiz-App machen, dann mache ich hier meine App-Store-Tagebuch, Notes oder so an, dann nenne ich sie, meine ich nicht, meine Notes oder Super Notes oder Super Notes Plus, wie ich halt möchte, das ist eigentlich völlig egal, das hat damit am Schluss nichts damit zu tun, wie es im App-Store heißt oder aussieht, sondern das ist einfach erstmal für mich, so wie es auf der Platte heißt.
Dann gibt man ein Team an, da bin ich jetzt, also mein Teamname heißt, genauso wie ich, bei mir egal, dann ein Organizer Identifier, da hat sich so eingebürgert, dass man ein umgedrehtes URL-Schema benutzt, also de.orgagroup würde das jetzt bei mir heißen, bei Apple heißt es com.apple.
Kann man aber auch eigentlich, im Prinzip geht es nur darum, dass deine App zweifelsfrei identifizierbar ist für sozusagen, also es kann keine App mit zweimal demselben Organization Identifier oder Bundle Identifier, der sich aus Organization Identifier plus Product Name zusammensetzt, kann es nicht zwei geben, also die App ist dadurch zweifelsfrei identifizierbar und wenn man natürlich seine eigene Domain irgendwie im Rückwärtsformat angibt plus sein Product Name, der erste Name, wird zu größter Wahrscheinlichkeit was eigenständig rauskommen.
Also was man nicht machen sollte, ist bei Product Name iMessage eingeben und bei Organization Identifier com.apple, weil dann wird es wahrscheinlich nicht funktionieren.
Richtig.
So, dann gibt es das Interface, das hat sich jetzt glaube ich vor einem Jahr oder so was geändert, früher gab es immer nur Storyboard und jetzt gibt es halt noch SwiftUI dazu.
Da kommen wir gleich noch zu, aber wir benutzen jetzt erstmal das klassische Storyboard würde ich sagen.
Ich würde auch noch zu Storyboard tendieren, weil man kann sowieso, das was man jetzt hier einstellt, kann man immer noch später verstellen, das braucht man keine Angst haben, das ist jetzt nur der Generier sozusagen das Projekt daraus, man kann da jetzt mehr anklicken, weniger anklicken, aber man kann später zusätzlich immer noch alles einbauen.
Genau, also Storyboard ist das was früher Interface Designer hieß, glaube ich so ein bisschen, also man kann so visuell das Layout von der App designen und bei SwiftUI da programmiert man das Layout von der App eher.
Und ich hoffe das ist richtig so beschrieben oder?
Verständlich.
Dann kann man noch Lifecycle, da kann man nur UIKit App delegate auswählen und bei Language kann man sich überlegen ob man Swift oder Objective-C benutzt, Objective-C ist das ältere, die ältere Programmiersprache, Swift ist die neuere Programmiersprache, die jetzt auch schon im fünften Jahr ist.
Richtig, also man sollte auf jeden Fall Swift auswählen, da sollte man gar nicht erst auf die Idee kommen, SwiftUI einzubauen oder einzufangen, einbauen kann man es dann immer noch.
Also es gibt Use Cases wo man sagt man hat irgendeine Library die irgendwie auf Objective-C basiert oder man möchte irgendwas swizzlen, jetzt mal abgesagt gesehen davon was swizzling ist, das geht halt in Objective-C und in SwiftUI nicht, aber da kann man halt dann sehr Magic mit IOS Geschichten machen.
Aber es wird halt mehr Zukunft als Objective-C, Objective-C hat halt dafür mehr Klammern, vielleicht ein Klammernmark?
Genau, da drunter kommt jetzt noch drei Checkboxen, die eine heißt Use Core Data, die andere heißt Host in Cloud Kit und die dritte heißt Include Test.
Also zu Core Data, Core Data ist sozusagen das Datenbankformat was dir Apple anbietet, also sozusagen das deine App muss sich Daten speichern, dahinter steht eine NoSQL Datenbank.
Man kann dort sich visuell zusammenbauen wie die Datenbank aussehen soll und dann wird ein Code daraus generiert mit dem man dann über verschiedene Klassen interagieren kann und sein Code, also seine Daten speichern und wieder rausholen kann.
Genau, das habe ich tatsächlich das erste Mal benutzt bei meiner Gamecollector App.
Ich habe das auch schon benutzt, es gibt zwei Lager an Leuten die sagen ich hasse Core Data oder ich mag Core Data und ich gehöre eher zu den Personen, ich kann damit leben.
Ich glaube auch umso komplexer wird es, umso schwieriger ist mit Core Data umzugehen, wenn man eine einfache App macht ist das auf jeden Fall wunderbar.
Genau, das praktische ist halt dieses Host in Cloud Kit, dann kann der User halt die Daten die er in der App speichert direkt in seinem eigenen iCloud Portfolio speichern.
Also man muss selber keinen Server bereitstellen, wenn er zum Beispiel zwei Telefon oder ein iPhone oder ein iPad hat, man möchte die gleichen Daten hin und her schieben, dann muss man selber nicht für eine Synchronisationsinfrastruktur sorgen, sondern das macht halt alles Apple für ein.
Das fand ich sehr praktisch, deswegen habe ich das zum Beispiel eingebaut.
Ja, dann der nächste Punkt wäre das in Clue Tests, da kann man also als sag ich mal, umso mehr man sich mit Programmieren beschäftigt, umso eher fängt man an Tests zu schreiben.
Testschreiben hat den großen Vorteil oder hat doch den großen Vorteil, dass man einfach sicher sein kann, dass der Code den man geschrieben hat immer wieder funktioniert, auch wenn man irgendwas verändert hat und dann lässt man seine Tests laufen und merkt, ah hier auf einmal ist was rot, da habe ich an der Stelle was geändert, das hat aber Auswirkungen auf eine andere Stelle gehabt und dann wird man gleich darüber informiert, ey da ist was schiefgegangen.
Aber die Tests muss man selber schreiben?
Die Tests musst du selber schreiben, also im Prinzip, also was man macht, man testet Methoden ab und du hast dann einen Input in der Methode und einen Output angenommen, ich habe eine Methode, die du sagst, addiere zwei Zahlen und da gibt es zwei Integer, die du reingibst, was, was nehme ich, fünf und sieben und die hat einen Return Wert, auch wieder ein Integer.
12.
Dann kannst du sagen, du fängst erstmal mit dem Test an, dass du sagst, ich gebe zwei Wertzahlen rein und ich möchte, dass am Ende das rauskommt und so schreibt man dann halt Test und diese kannst du dann sozusagen mit diesem Test Target abprüfen und dir am Schluss sicher sein, hey funktioniert alles gut.
Ist jetzt aber auch zu viel, den Haken kann man jetzt erstmal rauslassen, man kann das auch am Schluss einfach wieder hinzufügen.
Dann gibt es auf Next kommt der Beachball und dann darf man seinen Ordner auswählen, wo man das ganze sprechen möchte.
Das legen wir jetzt erstmal auf den Schreibtisch.
Genau, da gibt es unten einen Haken Source Control, Create Git Repository on my Mac, über Git haben wir schon mal gesprochen, das ist diese Source Control, das wollen wir auf jeden Fall anhaben, damit wenn wir mal was falsch machen, können wir wieder zurück auf den alten Stand.
Richtig, also ich selber habe das so noch nie benutzt, ich habe das immer selber initialisiert, auch wenn man die Haken vergisst, keine Angst, man kann das alles noch selber machen, man kann das alles über die Command Line selber machen oder man kann auch einfach diesen Kompletten, man kann sich auch dann mit einem anderen Git Kleines und Git erlegen, also man sieht dieses Git Repository immer, wenn man auf dem, jetzt angenommen, wir gehen mal in den Finder, gehen auf unser Projekt, das heißt jetzt bei mir Test und liegt auf dem Schreibtisch, dann geht man auf Shift Command und Punkt und dann sieht man die versteckten Dateien und dann sieht man schon wieder einen Folger, der versteckt ist, der angelegt wurde, da heißt Punkt Git und da sieht man auch dann, was ich gut gemacht habe mit dem Haken.
Ganz mit dem Kram reingelegt.
Aber das ist jetzt auch nicht Thema dieser Sendung gerade, deswegen gehen wir mal weiter.
Genau, dann macht sich halt quasi das Arbeitsfenster von Xcode auf, wo wir uns die meiste Zeit verbringen, wenn wir irgendwie programmieren oder eine App entwickeln.
Kurz sagen, oben ist halt so eine Hellerzeile mit so einem großen Play Button, Stop Button, steht so ein bisschen was über unsere App drin, dann ist ein kleiner Auswahlfeld, wo kann man draufklicken, da steht bei mir jetzt gerade iPod Touch drin, da kann man den Simulator auswählen, wenn man den Play Button drückt, wo diese ganze App gestartet werden soll.
Richtig, Simulator oder natürlich auch dein iPhone.
Genau, oder ein angeschlossenes oder ein konfiguriertes iPhone.
iPhone, iPad, iPod, was auch immer.
Genau, dann noch ein paar Buttons auf der rechten Seite plus zwei Pfeile und einmal so ein Button, um rechts noch so eine Menüzeile auszublenden, also so ein Submenü, wir heißen das Draw.
Ja, das sprechen wir dann gleich nochmal.
Ich würde jetzt eigentlich gerne erstmal auf den, was da uns aufgemacht wurde, wir sind jetzt nämlich da rausgekommen, das oben bei uns im Projekt, mein Projekt heißt jetzt Test, wurde markiert sozusagen das Projekt und dann das Target.
Und das Target ist erstmal das, was wir dann wirklich als App haben, was bei uns auf dem Telefon oder auf dem iPad läuft, wo man dann jetzt auch nochmal von den Dingen, die wir da in diesem Fenster vorher gesehen haben, unsere, weiß ich nicht, Bundle Identifier usw. mit dieser Reverse Domain kann man alles noch mal ändern.
Da kann man Dinge einstellen, wie welche Version möchte ich als Minimum supporten? Möchte ich iPhone? Möchte ich eine iPad? Möchte ich eine Mac App haben? Möchte ich, dass meine iPhone sich drehen kann, wenn ich das Grede drehe, also möchte ich einen Landscape Mode unterstützen.
Das sind so die paar Dinge, die da auf jeden Fall noch machbar sind.
Und da gibt es dann noch viel, viel, viel, viel, viel mehr an den oberen Tabs, die man dann noch machen kann.
Zum Beispiel den einen Tab weiter, der ist noch ganz interessiert, der ist interessant, der Signing und Capabilities, wo man dann Fähigkeiten zu seiner App hinzufügen kann.
Also angenommen, ich möchte Game Center unterstützen oder ich möchte Maps unterstützen oder ich möchte, dann muss man eigentlich erstmal da rein und dann sagen, okay, ich möchte die Capability zu meinem Projekt hinzufügen.
Dann wird ein File angelegt mit dem Apple, dann sieht, okay, du möchtest die und die AP benutzen. Das nennt sich dieses Entitlements File.
Und da steht dann diverse Dinge drin, die jetzt erstmal so nicht wirklich interessant sind, aber das muss drin sein, damit die App dann so funktioniert.
Das wäre es auf jeden Fall zu dem Fenster. So wie du jetzt die linke und die rechte Seite angesprochen hast, das sind die Momente, wo ich sie aufgeschrieben habe.
Also links ist sozusagen der Navigator, da navigiere ich immer eigentlich durch mein Projekt durch.
Genau, und die eine, eine Zeile ist hinterlegt, das ist da, wo unser Name von unserer App auch drin steht.
Und das ist im Öffnen halt dieses, was jetzt gerade in der Mitte ist. Wenn man da drauf liegt, wird halt dieses in der Mitte geöffnet.
Darunter ist halt auch Ordner und ein paar Dateien, da kommen wir gleich noch drauf zu, was diese ganzen Dateien sind.
Oben in der Zeile kann man dann noch durch verschiedene Submenüs oder andere Menüs klicken, also die Fehler, die beim Programmieren oder beim Starten der App entstehen, die kann man sich dort angucken.
Man kann Breakpoints sich angucken, die man gesetzt hat, da kommen wir auch später mal zu.
Das sind Punkte, wo der Code anhält, wenn man die App laufen lässt im Simulator oder auf dem Telefon, wo man dann halt nachgucken kann, was da gerade in der App tatsächlich passiert, bevor man sie veröffentlicht.
Und solche Sachen kann man sich angucken.
Richtig, da ist auf jeden Fall vieles auch noch drin, was man wichtig für die Zukunft auf jeden Fall ist.
Das ist jetzt erstmal, glaube ich, für das erste viel zu viele Informationen. Was, glaube ich, noch wichtig ist, wenn man dann auf die rechte Seite guckt, ist der, das ist sozusagen der Inspektor, wo man einzelne Sachen inspizieren kann, wie schon gesagt.
Also da kann man dann verschiedene Dinge einstellen, zu dem jeweiligen, was man auf der linken Seite ausgewählt hat, kann man auf der rechten Seite dann einstellen.
Genau, wenn man das Projekt oben ganz weiter auswählt, dann sieht man zum Beispiel in dem Inspektor, wenn man den ersten Tab macht mit der kleinen Datei da, mit dem kleinen Papier, dann sieht man zum Beispiel, wo diese Datei liegt.
Genau, man kann auch, wenn man das Projekt da sieht, man kann auch das Projekt einfach umbinden. Das wird dann auch mittlerweile so gemacht, dass es noch alles funktioniert. Wenn man sich mit dem Projektnamen nicht sicher ist, kann das alles ändern.
Genau. Und bei anderen, anderen Dateien, die wir uns noch einmal angucken, da sind halt auch andere Sachen, die man dann ändern kann dort.
Dann kommen wir noch oben. Also es gibt ja auf jeden Fall zu diesen zwei noch, gibt es oben die Menüzelle, so wie sie bei jeder eigentlich Mac App ist, wo man dann zum Beispiel File oder Edit oder View oder Find.
Dort findet man dann noch mehr Funktionen, die einen für das erste wahrscheinlich noch mehr erschlagen.
Da kommen wir dann auf zwei, drei Funktionen später noch drauf ein. Aber das sollte jetzt auch erstmal von dem sein, wie, sag ich mal, Xcode von diesen paar Seiten aussieht.
Und dann würde ich auch sagen, gehen wir einfach mal in den, in unser erster File, die dort liegt, und das ist die App Delegate.
App Delegate. Genau, das ist ein Ordner, der heißt genau wie dein Projekt, wie das Projekt, und darunter ist eine App Delegate. App Delegate, wenn ich das richtig verstanden habe, ist die Datei, die quasi die ganze App steuert oder die als erstes aufgerufen wird und die dann den Rest von der App startet.
Richtig. Das ist sozusagen der Startpunkt meiner Applikation. Da steht auch hier schön in der ersten Zeile, in der zehnten Zeile bei mir, @main. Das ist das, sag ich mal, der Hinweis für iOS oder für, ja doch, für iOS, hier geht mein Programm los.
Genau. Das ist vielleicht, bei Java gab es auch mal so eine Main oder bei C auch immer so eine Main. Das ist immer das, was als erstes gestartet wird.
Genau, und man findet hier in dieser App Delegate die erste Methode, die heißt UiPlication oder Application, didfinished launching with options. Also das heißt, diese Methode wird vom System aufgerufen, wenn es sagt, hey deine Applikation wurde geladen, jetzt bist du der neue Entwickler.
Ja. Und da kann man dann auch schon Dinge tun, wenn man möchte. Muss man aber nicht, kann man aber.
Ich fasse diese App Delegate eigentlich nie an.
Ich fasse diese App Delegate immer an.
Okay.
Ja, aber auch nur weil ich mit dem, wie mir Apple oder Xcode vor, also vorlebe, sag ich mal, wie man so eine App startet, das geht auf jeden Fall besser, meine ich, und angenehmer.
Okay.
Also, was ich hier zum Beispiel, wenn man Google Werbung einbauen will, dann muss man in die App Delegate gehen und hier schon das Google SDK hochfahren.
Ja.
Genau, das ist auf jeden Fall wichtig. Wenn man die App Delegate einfach anfasst und Werbung einbaut, dann muss man auf jeden Fall da mal einbauen.
Genau, wenn man anfängt, seine erste App zu schreiben, dann muss man die App Delegate eigentlich nicht anfassen.
Richtig. Und dann kommen wir auch schon zum nächsten Fall, das ist die Scene Delegate. Das ist jetzt eigentlich erst mit SwiftUI dazugekommen, ich glaube mit Xcode 11, wenn ich mich nicht täusche.
Da ist es erstmal auch für den, für den, für den, sag ich mal, Anfangsentwickler nicht wirklich wichtig. Das ist sozusagen der neue Weg, wie Apple möchtest du mit deiner App einsteigen.
Das ist der alte Weg, das ist der neue Weg. Das hat eigentlich den Grund, wenn du mehrere Fenster supporten willst. Also, dann musst du diesen Weg gehen.
Und für jedes Fenster, was geöffnet wird, wird dann diese Scene Delegate im Hintergrund quasi gestartet. Richtig?
Richtig. Also, ich habe mich jetzt noch nicht so intensiv damit beschäftigt, aber wenn man das supporten will, sollte man den Weg gehen.
Genau. Und da sind auch schon ein paar Funktionen vorgegeben, die man halt editieren kann, wenn man möchte.
Da steht jetzt tatsächlich nichts drin, außer halt auskommentierter Code. Das ist das mit diesen beiden Slashes davor, das ist Code, das ist Text, der nicht als Code angesehen wird und nicht ausgeführt wird.
Aber die Funktionsnamen kann man sich mal angucken. Scene did become active, also dann wurde das ja gerade gestartet.
Wenn man da Scene will enter foreground, wenn man ein Fenster dann offensichtlich aus dem Hintergrund in den Vordergrund holt, dann wird dieses aufgerufen oder Scene did enter background.
Wenn das in den Hintergrund geht, weil der User ein anderes Fenster geöffnet hat, dann wird diese Funktion ausgeführt.
Da könnte man zum Beispiel speichern, also die Dateien oder die Daten, die man in diesem Fenster editiert hat, die können wir dann quasi in dieser Methode speichern.
Zum Beispiel. Aber wie gesagt, am Anfang braucht man das auch nicht anfassen.
Richtig. Und dann würde ich auch schon fast zum nächsten Datei gehen, die nennt sich ViewController. Sehr einfache Name.
Aber das ist eigentlich so da, wo ich als Entwickler anfange, meine ersten Code zu schreiben. Also wenn man normalerweise entweder bezeichnet,
oder man schmeißt weg und macht Command und erlegt neuen Kontrollern. Aber man sollte schon immer irgendwas aussagen.
Das heißt, der sollte nicht wie du kannst, sondern wenn ich sage, meine App fängt an mit einem Start, wie du kannst oder mit einem Wellcome, wie du kannst oder mit einem Login, wie du kannst.
Wenn ich halt ein Login haben will, sollte man auf jeden Fall mit was Aussagekräftigen anfangen.
Vielleicht kann man kurz sagen, was ein View Controller ist, was eine View ist. Eine View ist ein sichtbares Feld auf dem Display.
Das kann aber so ein ganzes Bildschirm abdecken. Das kann aber auch nur ein kleiner Teil von dem Bildschirm sein.
Und der View Controller, der steuert halt genau diesen Bereich, diese View. Und es kann eine Tabelle sein, das ist ein Table View Controller.
Und dieser Table View Controller, der sagt halt dem Telefon, der sagt der Tabelle, hier das sind die Daten, zeig die mal bitte an.
Oder wenn jemand was anklickt, was dann passieren soll. Also der steuert quasi nicht, der soll nicht die Daten repräsentieren, sondern der soll sagen, was passiert, wenn jemand auf etwas, was er sieht, draufklickt oder was er überhaupt sehen soll.
Das ist so, das ist...
Also würde ich mal sagen, fangen wir mit der ersten Zeile an, die da in der View Controller steht, als angenommen, ausgenommen von dem grau kommentierten Code. Also alles, was grau ist, ist auskommentiert.
Bei dir ist die Bände grün.
Wahrscheinlich, ich hab die Standardfarben an, wahrscheinlich sollten die...
Ich auch.
Oder?
Weiß ich nicht.
Auf jeden Fall. Auskommentiert ist das mit den zwei Strichen davor.
Genau, mit dem zwei Slashes.
Dann fangen wir erstmal mit der ersten Zeile an, da steht die Import UI Kit. Das ist eigentlich der, also Import heißt, ich möchte etwas verwenden, einen Framework verwenden.
Und da wird UI Kit importiert, das ist eigentlich das Standard Kit, mit dem UI im Apple-Universum gebaut wird. Also im Apple-iPhone- und iPad-Universum.
Ich will jetzt nicht über Mac reden, da gibt's dann AppKit und so weiter, solche Geschichten. Und mit SwiftUI ist es auch schon wieder anders, aber wir bleiben erstmal dabei.
Das beinhaltet alle Funktionen, die man braucht, um Sachen anzuzeigen auf dem Bildschirm.
Und da kommen wir dann auch schon hinter unser GlassView-Controller steht, Doppelpunkt, UIView-Controller. UIView-Controller ist sozusagen die Klasse, die dazu benutzt wird, um View mit einem Controller zu verbinden, der dann vom System aufgerufen wird und man in diesem View-Controller als Entwickler Dinge tun kann, damit dieser View so aussieht, wie ich es möchte.
Genau, und das Glass ist da wie so ein Keyword, das sagt, ok, was jetzt kommt ist eine Klasse, also quasi eine Sammlung von Funktionen, die zusammengehören.
Und dann dieses erste View-Controller ist der Name der Klasse. Das sollte eigentlich in der Regel genau das gleiche sein wie der Dateiname.
Jedenfalls mach ich das in der Regel, nicht immer, aber in der Regel so.
Also wenn ich jetzt zum Beispiel einen StartView-Controller habe, dann würde ich halt diese Klasse auch StartView-Controller nennen und ich würde auch meine Datei StartView-Controller nennen, damit ich es halt hinterher wieder finde.
Richtig.
Aber wie man es nennt ist es egal, man könnte es auch Karl Heinz nennen, man könnte auch schreiben Glass, Karl Heinz, Doppelpunkt, UIView-Controller.
Wenn man damit glücklich ist, dann sollte man das machen.
Jetzt nur, ich will nur kurz noch was dazu sagen, ist wenn ich jetzt dieses Ding, so wie es ist, auf meinem iPhone starte, sehe ich einfach nur einen weißen Bildschirm, es passiert nichts.
Ja.
Es ist ein weißer Bildschirm, da ist man ja.
Genau.
Also in der Klasse kommt eine geschweifte Klammer, die sagt halt alles, was jetzt in diesen beiden in der geschweiften Klammer bis zu der dazugehörigen schließenden Klammer ist, das gehört alles zu dieser Klasse.
Wenn man kurz dahinterklickt, hinter dieser Klammer, dann leuchtet auch am Ende von dieser Datei, leuchtet die zweite Klammer auf diese schließende Klammer.
Also daran kann man sehen, was halt alles zusammengehört.
Ja, das ist der Scope nennt man das.
Der Scope von dieser Klasse wird zwischen diesen zwei Klammern definiert.
Genau.
Darunter haben wir dann eine Leerzeile und dann haben wir wieder eine Funktion.
Und dann haben wir die erste Funktion, und zwar die Funktion viewDidLoad, das ist eine Standardfunktion von einem UIView-Controller.
Die wird halt aufgerufen, wenn diese View fertig geladen ist. Das heißt nicht, dass sie dann schon dargestellt wurde, da gibt es noch eine viewDidAppear, aber wenn diese im Speicherfang vom Telefon schon mal geladen wurde, dann wird diese Funktion aufgerufen.
Und da kann man dann anfangen, keine Ahnung, Daten aus einer Datei auszulesen oder irgendwelche Konfigurationen zu machen, die halt im Userland angezeigt werden sollen.
Richtig, man kann halt einfach da jetzt schon anfangen, sein Userinterface zu verändern, aufzubauen, sein, man kann eigentlich alles machen, man kann überall Netzwerk-Calls starten, man kann alles möglichen.
Also das ist so, mit dieser Methode fängt man an.
Da steht auch von Apple selber der Kommentar drin "Do any additional setup after loading the View".
Was wichtig ist, das habe ich gemerkt, das wird nur aufgerufen, wenn diese View das erste Mal in den Speicher geladen wird.
Es kann sein, wenn man verschiedene Fenster oder verschiedene Tabs in seiner App hat und man möchte jedes Mal, wenn der Tab aufgerufen wird, möchte man Daten aktualisieren.
Dann sollte man das nicht in dieser Funktion machen, weil diese Funktion kann auch im Hintergrund sein. Dann sollte man das in einer anderen Funktion machen, zum Beispiel in der viewDidAppear.
Oder viewWillAppear, je nachdem wann man das haben möchte.
Genau.
Also viewWillAppear wird, wie es schon sagte, bevor der View wirklich da ist und der nächste, also didAppear wirklich erst, wenn er da ist.
Also wenn man Konfetti runterlegen möchte, dann sollte man das machen in der viewDidAppear, damit der User den Konfetti auch sieht. Und wenn er den nicht sehen soll, dann kommt es auch in der viewWillAppear.
Dann sieht er ihn vielleicht, vielleicht auch nicht.
Er sieht es wahrscheinlich schon.
Aber ja, man sollte gerade Animationszeug in der viewDidAppear machen, weil da ist sichergestellt, dass der User wirklich das Bild schon gerade sieht.
Genau. Viel mehr ist jetzt in dieser Datei auch noch nicht zu sehen.
Also das wieder in die geschreifte Klammer, die Zeit zu dieser viewDidLoad gehört.
Und vor dieser Funktion steht noch ein Override.
Das hat damit zu tun, dass dieses viewDidLoad, die gibt es schon. Und zwar in der Definition von diesem UIViewController.
Und da man ja was anderes möchte als standardmäßig, schreibt man dieses Override da rein.
Man möchte aber trotzdem, dass alle Standardfunktionen abgeschlossen werden oder aufgerufen werden.
Deswegen kommt dieses super viewDidLoad rein.
Damit wird einmal die Standardversion von dieser viewDidLoad geladen und danach kann man dann noch seine speziellen Sachen machen.
Genau. Und jetzt kommen wir eigentlich zu dem lustigen Part. Zu dem MainStoryboard.
MainStoryboard, richtig.
MainStoryboard ist, kennt man vielleicht aus der Filmbranche, so schlecht gekritzelte Skizzen, wo man sieht, was der Schauspieler zu tun hat, um den Film zu machen.
Wie sich die Szene verändert oder was gemacht werden soll.
Das sind nur so Pfeile von einer Szene zur nächsten Szene.
Und genau das Gleiche ist das hier beim Storyboard auch. Man sieht, wenn man da einmal draufklickt, eröffnet sich wieder in der Mitte so ein Fenster, wo dann nochmal so ein zweites Menü ist.
Und da steht viewController Scene. Und dieser viewController Scene ist genau das, was wir in der Mitte auch vom Telefon X kurz sehen.
Nämlich ein iPhone. Sieht man da quasi, ein iPhone Bildschirm.
Ja. Also wenn man das eingestellt hat, also mit der Notch und so weiter, dann ist schon gut erkennbar, ok, das handelt sich hier gerade unten.
Man steht jetzt auch da. View as iPhone 11. Genau, ganz unten.
Das zeigt gerade ein iPhone 11 sozusagen an. Genau.
Unter der unteren Seite. Da kann man das auch umsteigen. Dann kann man auch sagen, View as iPhone 8 zum Beispiel.
Und dann dauert das ein bisschen und dann ist diese Notch weg und dann ist nur noch ein weißes Rechteck da. Oder als iPhone, als iPad oder als was auch immer.
Richtig. Und da sieht man jetzt schon auch neben diesem iPhone Bildschirm, sieht man so ein Pfeil, den kann man auch nehmen und draggen.
Das ist der Einstiegspunkt für dieses Storyboard. Also wenn Xcode oder das Programm läuft, guckt ja an, wo ist der Einstiegspunkt.
Und dann geht er da rein und dann kann man sozusagen, wie heute schon meinte, das ist ja wie so ein Storyboard.
Man kann Storyboard mit ganz, ganz vielen viewController machen und die mit jeweils mit Pfeilen verbinden.
Aber man kann auch mehrere Storyboards machen. Da kommen wir später mal vielleicht noch drauf ein. Ist jetzt auch gerade zu viel dafür.
Aber das ist der Einstiegspunkt. Und wenn man jetzt hier auf diesen Bildschirm klickt, dann wird auch schon in dem Seiten-Tab, wo wir gerade viewController gesehen sind, wird der View ausgewählt.
Also das ist das, meine Arbeitsfläche, wo ich jetzt drauf arbeiten kann.
Und dann kann man, wenn man jetzt oben ganz oben bei Xcode ist, ein Plus. Dann drückt man mal aufs Plus drauf und dann sieht man, werden einem verschiedenste UI Elemente angezeigt, die man dort verwenden kann, um seine UI zu bauen.
Also angenommen, ich habe einen, fangen wir mal mit dem einfachsten an, ein Label. Dann nehme ich jetzt einfach, das kann man jetzt einfach drauf drücken, ziehen und dann in sozusagen auf den weißen Bildschirm einfach ablegen.
Genau, da steht hier, da fährt sich da so blau ein. Und man kann das überall hinlegen.
Und wenn man das genau in die Mitte legt, dann erscheinen auch so Striche, damit man genau weiß, ah hier ist genau die Mitte, da kann ich zum Beispiel schön in die Mitte legen.
Mhm. Richtig. Und dann liegt sozusagen erstmal mein Label da so drin.
Genau. Auf der linken Seite, da sieht man das dann auch in diesem kleinen Baum. Da ist dann unter der View, ist dann eine Safe Area.
Wenn man das anklickt, sieht man auch noch so einen blauen Bereich, das ist der Safe Area, der wurde eingeführt mit dem iPhone X, damit man, wenn man eine UI baut, die da nichts hinter der Nutsch verschwindet und das auch gleichzeitig auf den alten Telefonen gut sichtbar ist. Das ist der Safe Area. Und darunter liegt dann halt das Label.
Und was sich dann auch verändert hat, ist auf der rechten Seite, wo wir ja vorher den Dateinamen und sowas gesehen haben, da sind halt oben noch mehr Button zum Zugriff gekommen in dieser kleinen Zeile. Also neben dieser kleinen Datei, da ist ein Uhr- und Fragezeichen, da ist eine Zeitungsseite, so kleine Reglerchen.
Genau, die Reglerchen, das ist eigentlich so meistens das Interessante. Genau, dann so ein Geodreieck und so ein Halbkreis oder so ein Kreis mit so einem Strich drin.
Genau, die kleinen Reglerchen sind das Interessanteste, genau, da kann man Sachen einstellen, wie sich dieses Label an dieser Stelle jetzt verhalten soll. Also das, was man angeklickt hat, wie sich das verhalten soll.
Wenn man zum Beispiel hochklickt auf dieses View, dann sind dort andere Sachen bei diesen Reglerchen, die man einstellen kann, als bei einem Label. Weil bei einem View kann man zum Beispiel keinen Text eingeben, wenn man jetzt bei diesem Label eingeben könnte.
Genau, richtig, das ist so, dass man dazu sagen kann. Man kann hier dann die Schriftgröße einstellen, oder man kann sagen, soll es zentriert sein oder rechtsbündig, linksbündig.
Man kann einstellen, wie das Label abgeschnitten wird, wenn es zum Beispiel der Text so lang ist, oder man kann einstellen, wie viele Zeilen es einnehmen soll. Aber das ist jetzt auch eigentlich mal basic.
Ich würde jetzt fast eigentlich mal weitergehen mit dem, wie kriege ich jetzt dazu, dass mein Label, wie kann ich das über den Code verbinden. Und da kommt jetzt, sage ich mal, der erste Kniff. Man drückt jetzt die Optionstaste und geht jetzt in den Navigator links und drückt mit gedrückter Optionstaste auf den View Controller.
Und schon bekomme ich, dass sich mein Storyboard und mein View Controller, auf einer Seite der Storyboard und auf der anderen Seite der View Controller befinden.
Und dann nimmt man jetzt, wenn man das so nebeneinander hat, nimmt man das Label und drückt jetzt, man hat das Label ausgedrückt, drückt Control auf dem Keyboard und dann zieht man, dann sieht man schon so, da kommt so ein blauer Strich, den man dann sozusagen in den Code rüberziehen kann.
Dann sieht man schon, ah, steht hier Insert Outlet oder Outlet Collection. Genau, die kann man an verschiedenen Stellen, also solange man den Control Button gedrückt hält und die Maus bewegt, sieht man das an einigen Stellen entsteht halt dieser Insert Outlet Collection und an einigen Stellen halt nicht.
Also man kann zum Beispiel nicht am Anfang von der Datei hinstecken, auch nicht unter dieses Import UI-Kit, sondern in die Klasse. Genau, in der Klasse halt direkt unter diesem View Controller, UI-View Controller und damit der Geschreibklammer und dahinter packt man das so klassisch hin.
Richtig, und dann lässt man das sozusagen los und dann kommt ein Fenster, wo man dann sagt, jetzt kann man den Namen dafür eingeben. Da sag ich jetzt zum Beispiel "Welcome Label", so "Welcome Label" hätt ich da sagen. Und dann ist das...
Und dann drückt man auf Connect oder Enter und dann erscheint ein Zeilecode in der Datei, die heißt @eboutlet, "weakvar welcome label" Doppelpunkt, "UI Label".
"UI Label" ist der Typ von dem, was wir da reingebracht haben. "Welcome Label" ist der Name, "eboutlet", ist "Interface Builder Outlet", das ist noch ein sehr, sehr klassischer Name. Früher waren Xcode und dieser Interface Builder, womit man halt so sein User Interface baut, waren zwei getrennte Programme. Inzwischen ist das vereint und daher hieß er früher "eboutlet".
Richtig, und dann können wir jetzt auch schon mal wirklich diesen Label, was wir da rausgelegt haben, mit unserem Programmierer sozusagen, wir können da jetzt irgendwas machen. Und dann gehen wir zum Beispiel jetzt in unsere ViewDidLoad-Methode unter das SuperViewDidLoad und tippen jetzt einfach mal "Welcome Label" Punkt Text. Und dann kriegen wir schon so die Autovorvorstellung, die sagt uns hier Punkt Text kenn ich und dann sagst du, ich sag gleich, dann macht man ein Führungszeichen und sagt rein "Hallo Leute", "Hallo Welt", ausrutschen. Und dann könnte man jetzt schon oben links bei Xcode auf den Play Button drücken.
Sollten wir machen oder? Ich hab ausgewählt, ich möchte das in dem iPhone 11 Pro Max haben, weil da ist ja viel Kran dahinter, wenn ich einen großen Bildschirm habe. Und dann erscheint in der Mitte ganz oben so ein blauer Balken, das läuft da durch, je nachdem wie schnell der Rechner ist, den man hat. Dann öffnet sich der Simulator. Wenn man das das erste Mal macht, dann dauert das ein bisschen länger, wenn man den schon aufhört, dann geht das ein bisschen schneller. Und jetzt muss ich noch weiter überbrücken, jetzt öffnet sich der Simulator tatsächlich erst. Ganz oben in der Menüzeile von Xcode kann man sehen "Launching", meine App heißt jetzt "App Store Tagebuch" tatsächlich, habe ich sie genannt. Und die wird jetzt installiert hier, hat noch kein Icon, öffnet sich.
Anscheinend habe ich den schnelleren Rechner. Du hast wahrscheinlich den schnelleren Rechner, genau. Öffnet sich. Bei mir steht jetzt schon da, hallo Leute. Ja, bei mir ist noch alles weiß.
Anyway. Aber damit haben wir schon mal jetzt unsere erste App programmiert. Genau. Und das war ja ganz schön schwer. Die App kann jetzt noch nicht viel, die kann starten und ein Label darstellen und halt tatsächlich im Code wird der Text generiert. Also den haben wir nicht vorher in dem Interfacebilder eingebaut. Das kann man auch in einem statischen Text, den kann man halt auch in dem Interfacebilder reinschreiben.
Kann man, kann man, aber wenn man Übersetzung haben will, dann sollte man davon aussehen. Ich habe jetzt tatsächlich das Problem, bei mir ist das jetzt auch gestartet, bei mir steht nur "Halb". Was habe ich denn da gemacht? Da ist glaube ich mein Label zu klein.
Du hast Autolayout, du hast Autolayout. Ich habe Autolayout vergessen und ich habe die Größe von diesem Label nicht angepasst.
Da können wir nochmal in die Storyboard reingehen, können wir nochmal das Label anklicken und dann sehen wir um dieses Label herum sind so vier kleine Quadrate.
Damit kann man so klassisch die Größe verschieben. Das wollen wir aber gar nicht, sondern wir wollen jetzt eigentlich definieren, wie groß das Label ist. Also wir wollen nicht von Hand das verschieben, sondern wir wollen sagen, dieses Label soll eine bestimmte Größe haben.
Zum Beispiel, also unter diesem Teil des Bildschirms auf der rechten Seite, wo dieses View als iPhone steht, das sind so fünf kleine Icons. Das erste ist bei mir ausgerault, dann ist das zweite "Align", dann "Add New Constraints", "Resolve Autolayout Issues" und "Embedded In".
Ich würde jetzt an dieser Stelle "Align" benutzen, weil ich möchte dieses Label an diese View, in der das ganze drin ist, aligning.
Darf ich nochmal kurz reingreifen? Ich würde fast ganz kurz, um es einfacher für alle zu machen. Man geht auf den vorletzten und zwar auf "Resolve Autolayout Issues" und sagt jetzt einfach mal "Reset to Suggested Constraints".
Damit macht AutoAiX Code, dass man von ganz alleine X Code versucht herausfinden, was du vielleicht meinen könntest und macht dir dann auf einmal so Linien hin, die dann das Label definieren, wo es sitzt.
Also bei mir ist es zentriert, das einmal zentriert und das hat...
Wo man das sieht, kann man dann wieder auf dieses kleine Geodreck oben klicken, dann sieht man, was da erscheint.
Genau, da sieht man dann, was für Constraints X Code generiert hat.
Genau.
Um gerade jetzt für diesen Newscase, dass man das Label einfach nur in der Mitte haben möchte, ist das wahrscheinlich das Schnellste.
Genau. Das steht jetzt bei mir unter "Horizontal", das steht "Align to Safe Area = 166".
Also der Anfang von meinem Label soll zu der Kante von dieser Safe Area 166 Punkte entfernt sein.
Dann steht "Align Center X to Superview", also zu dem quasi Superview ist das Telefon, quasi kann man sagen.
Da soll halt die Center von diesem Label sein, für Vertical ähnlich, da ist die Top bei 352 und auch die Y zum Superview.
Da kann man jetzt auf "Edit" klicken und diese 166 könnte ich jetzt zum Beispiel auf 10 setzen.
Dann wird das Label quasi verbreitet, es wird ein Abstand von der Seite von dem Superview zu dem Label von 10 Punkten generiert.
Also ich glaube für den Podcast ist das zu schwierig, das zu erklären.
Auf jeden Fall wird das Label dann breiter.
Also es ist auf jeden Fall, Auto-Layout ist ein wichtiges Werkzeug, wenn man mit UI-Kit und Storyboards arbeiten möchte.
Aber da kann man sich auch viel Schmerzen bereiten, wenn man dann möchte, dass irgendwas richtig angezeigt wird.
Selbst ich, als der schon sehr viel damit gemacht hat, komme immer wieder zu dem Punkt, wo ich sage, ja Gott.
Genau, aber an der Stelle ändert man halt das Layout und die Definition, wie so ein Label sitzt in der View.
Richtig, wenn wir dann jetzt auch nochmal auf "Play" drücken, sollte unser Label hoffentlich nicht mehr abgeschnitten angezeigt werden.
Genau, bei mir steht jetzt linksbündig "Hallo Welt".
Das liegt daran, weil das Text-Label, das ich benutzt habe, linksbündig ist.
Obwohl es in der Mitte ist und wahrscheinlich auch den kompletten Bildschirm ausfüllt, ist der Text linksbündig gesetzt.
Was ich mal gerne mache, vielleicht ist das ein bisschen unprofessionell, aber ich färbe den Hintergrund von solchen Labels oder von anderen Sachen gerne mal ein.
Also das kann man auch in dieser Storyboard-View, wenn man das Label auswählt, mit diesen kleinen drei Reitern, drei Reglern, kann man relativ weit unten die Hintergrundfarbe ändern.
Und da mache ich dann manchmal so ein richtig fieses Pink oder so ein Orange oder so was rein.
Das ist auch unter professionellen Entwicklern ein wertvolles Tool, um zu sehen, wie was sich verhält und wo, wie groß etwas ist.
Da ist es nix, wo was dir peinlich sein müsste.
Auf jeden Fall, wenn ich das dann auf Orange gestellt habe und auf "Play" drücke, weil ich in Xcode und im Simulator mal angucke, dann sehe ich tatsächlich, dass dieses Label, dieses Orange-Feld über den ganzen Bildschirm geht und das "Hallo Welt" nur auf der linken Seite sitzt.
Genau, das alleinwenn von diesem "Hallo Welt", also dass es auch zentriert ist, das kann man zum Beispiel auch unter diesen drei Reglern einstellen.
Und da kann man sehr viel Zeit reinverschwenden, dass das Layout halt so aussieht, wie man es gerne haben möchte.
Richtig. Und ich glaube auch jetzt, das sollte erst mal mit dem Anfang von Xcode sein,
weil ich glaube auch, wir sind jetzt schon bei fast einer Stunde. Ich glaube, wir hatten das auch etwas anders geschätzt.
Wir haben unsere Halbe Stunde auf jeden Fall geknackt und ich dachte eigentlich, wir kommen mit dem durch.
Ich glaube, wir machen eine Doppelfolge.
Wir machen eine Doppelfolge. Genau, an dieser Stelle machen wir ja nächstes Mal weiter.
Ich weiß, das Projekt wurde schon automatisch gespeichert. Ich muss gar nicht selber speichern.
Ja, wir machen an dieser Stelle nächstes Mal weiter und gucken mal, was man hier noch so schönes in Xcode finden kann.
Da bekomme ich dir vollkommen recht.
Genau. Aber vielleicht...
Es ist jetzt glaube ich eh noch zu dem, was jetzt dann oben drauf kommt.
Es gibt sehr viele Keyboard-Shortcuts, die will ich jetzt gar nicht erstmal ansprechen, aber die sind sehr, sehr wichtig.
Wenn man die drauf hat, kommt man auf jeden Fall deutlich schneller durch Xcode durch. Ich glaube eigentlich, wie bei jedem professionellen Tool, ist man mit Keyboard-Shortcuts deutlich besser dran.
Und ich glaube, das sprechen wir einfach nächstes Mal an.
Ja, machen wir.
Und dann noch das Framework der Woche vielleicht.
Ach ja, vor Gott. Oh mein Gott, ich habe das ja fast vergessen. Einen Mal.
One, two, three und...
Das Framework der Woche.
Extrem gut geklappt. Ich bin erstaunt.
Okay, das Framework der Woche. Da haben wir dieses Mal, das nennt sich Static.
Man kennt bestimmt den Use-Case. Ich möchte einen Setting-Screen, eine Einstellung in der Setting-Screen in meiner App haben.
Und dann kommt man wieder, hat eine Liste an Elementen und Schalterchen.
Man kann sich zum Beispiel angucken, wie ich das gemacht habe, in meiner NFC für iPhone.
Wenn man auf die Einstellung geht, sieht man einen Table-View, der verschiedene Schalter hat und verschiedene Sachen.
Und hier besuche ich meine Webseite.
Und hier kannst du mir Geld geben.
Und hier sind die Lizenzen für die Libraries, die ich benutze.
Und da kann man sich eigentlich relativ einfach so einen Screen zusammenbauen.
Sogar so, wie man sieht, macht man das dann auch im Code.
Also man sagt, ich habe die Sektion, ich habe die Zeile und die Zeile und die Zeile.
Und die kann man dann einfach so definieren, ohne dass man irgendwie mit Table-View selbst rummachen muss und mit Delegate und Data Source und schieß mich tot.
Also nimmt einem viel Arbeit ab, macht es relativ einfach.
Wie stehst du zu so was, Wargham? Wie machst du so was bei dir?
Ich mache auch so eine Table-View in meinen Settings.
Und habe dann verschiedene Arrays, wo ich reinschreibe, was ich da haben möchte an diesen Settings.
Also ich habe einen Array für die Sections in der Table-View.
Also dann habe ich keine Basic User Settings und allgemeine Information.
Und dann habe ich für jedes von diesen einzelnen Sections habe ich noch einen Unter-Array, wo dann die verschiedenen Elemente sind.
Und dann habe ich tatsächlich ganz dreckig im Code gelöst.
Also du hast es eigentlich selber gemacht.
Genau, ich habe dann so einen Switch.
Wenn User Settings, dann nehme ich dieses Array.
Wenn Basic Info, dann nehme ich dieses Array.
Kann ich dir nur empfehlen, benutze das.
Also gerade für statische Sachen, die sich nicht ändern.
Sobald sich irgendwie was verändert, nimm das nicht her.
Aber solange es statisch ist, ist es der Weg, weil du dir halt extrem viel Arbeit sparst.
Und das schnell schick aussehen lassen kannst, ohne dass du da groß...
Also ich kann es immer wieder. Man baut so ein Screen, den braucht jeder App.
Wenn man sich gleich daran gewöhnt, kann man sich natürlich selber schreiben.
Wir werden natürlich den GitHub-Link wieder einbauen, dann kann man sich das selber angucken.
Ist alles Open Source. Auf jeden Fall eine sehr coole Sache.
Ich kann das vorher noch nicht. Ich werde es immer wieder angucken.
Ich habe es bis jetzt immer als er oprogramiert und von einer App in die nächste mitgeschleppt.
Das ist jetzt nicht so, was ich jedes Mal neu programmiere.
Aber natürlich muss man sich für jede App ein bisschen anpassen.
Vielleicht ist es doch schneller damit.
Problem aus, das ist wirklich gut.
Gut, dann war es ein sehr detaillierter Einblick.
Ich glaube, das müsst ihr vielleicht wirklich nachvollziehen, was wir gemacht haben.
Wir haben tatsächlich ein neues Projekt angelegt und durchgeklickt, weil nur durch das Hören, ohne das zu sehen, ist es vielleicht nicht ganz so verständlich.
Aber guckt euch das mal an. Es erschlägt manchmal so ein bisschen.
Es sind so viele kleine Texte und so viele Felder, die man anklicken kann und so viele Optionen, die man einstellen kann.
Aber wenn man sich die wichtigen herauspickt, die man immer wieder benutzt, dann ist es eigentlich gar nicht so kompliziert.
Im Nachhinein ist es immer leichter auf jeden Fall.
Ich glaube auch, wir sind jetzt natürlich auch mit unserem Podcast auf einem Experiment.
Und ich glaube auch, dass diese Folge wahrscheinlich besser als Video-Podcast gelaufen wird.
Ich hoffe doch, dass man da vielleicht jetzt was mitgenommen hat.
Auch wenn es wahrscheinlich, gerade wenn man einfach zuhört, schwierig nachvollziehbar ist.
Aber ich denke mal, wir haben unser Bestes gegeben und das sei jetzt auch wirklich mal nur so ein Basic-Überblick.
Aber wir freuen uns auch auf Feedback. Ich weiß nicht, wie könnt ihr uns sagen, wie ihr die Folge fandet.
Dann würde ich sagen, dann war es auch schon für heute.
Genau, und wir sehen uns wieder in zwei Wochen. Bis denn.
Ciao, ciao.
[Musik]
Das App Store-Tagebuch-Projekt von Nico und Holger.
Die Links zu dieser Sendung wie auch den Link zu dem Intro von Luke Hash findet ihr auf appstore-tagebuch.de.