[Musik]
Nico, wir müssen über Max reden.
Ja, es ist jetzt eine schlechte Anspielung auf die Friction.
Ein bisschen, ja. Es gibt einen neuen Max.
Durchaus, ja.
Hier ist natürlich das App Store Tagebuch.
Mit Folge 26.
Es wurde ein neues Max vorgestellt. Hast du ihn eingekauft?
Nee, hab ich noch nicht. Ich werde mir auch erst mal keinen holen, weil ich natürlich meinen 16 Zoll Intel MacBook Pro noch hab.
Es wird jetzt zwei Jahre alt, glaube ich.
Es reicht eigentlich auch noch dicke. Es fängt mal das Lüften an. Ja, der Akku wird zügig leer, aber es tut seinen Job.
Und es wäre jetzt unvernünftig, sich ein neues MacBook zu holen.
Also ich kann es verstehen, wenn man riesen Projekte hat.
Bei uns in Arbeit haben wir Projekte mit ein paar Hunderttausend Zeilen an Code, wenn nicht sogar Millionen schon.
Wir kompilieren mal drei, vier Minuten lang da. Macht das dann schon Sinn, wenn man sagt, okay, man kann die Compile-Time halbieren?
Meine Prodatenprojekte kompilieren fast alle unter 30 Sekunden.
Ja, geht. Also ich komme damit noch klar.
Aber ist schon ganz schön krass, was Apple da verspricht mit den neuen Prozessoren.
An Geschwindigkeit und auch die ersten Berichte, das hört sich ja alles sehr vielversprechend an. Ja, vor allem nicht nur verspricht, sondern auch einhält.
Ich habe jetzt auch diverse Tweets gesehen, das Android Studio oder generell Android Projekte auch doppelt so schnell kompilieren.
Und dass alle Leute glücklich sind und Apple endlich wieder vernünftige Laptops baut.
Ich finde ja die zusätzlichen oder die geänderte Port-Konfiguration finde ich nicht so glücklich.
Mit welcher? Mit der neuen Port-Konfiguration, dass man halt ein Thunderbolt-Port weniger hat, sondern nur noch drei hat.
Das kann man ja mit einem HUB lösen. Ja, aber das nervt doch.
Aber das heißt doch jetzt wieder MagSafe und SD-Karten-Slot und HDMI. Ja, und das ist HDMI und MagSafe habe ich zurzeit auch.
MagSafe natürlich nicht, aber HDMI und Power habe ich zurzeit in einem Kabel und da ist auch noch mein USB-Hub mit drin.
Das ist alles mit Display integriert und da müsste ich jetzt, wenn ich nicht trotzdem USB-C benutzen könnte, müsste man halt irgendwie dafür drei Kabel benutzen.
Das ist für mich, ich glaube, das ist ein Rückschritt.
Naja, ich meine, ich glaube, das lässt sich gut verschmerzen. Du kannst jetzt nicht deswegen sagen, nein, deswegen kaufe ich es mir nicht.
Genau, das ist einfach so. Du als Apple-Panboy.
Einmal so der Preis natürlich und ich habe hier noch einen 2016er Macbook Pro. Viele mögen dieses Ding ja nicht, wegen der Touchbar und so und wegen der Tastatur. Ich bin mit dem Booker aber eigentlich sehr zufrieden und habe mir deswegen natürlich einen Mac gekauft. Bestellt.
Aber kein ganz neuen Mac, sondern ich habe tatsächlich einen Mac Mini bestellt vom letzten Jahr über Ebay und da warte ich schon seit zwei Wochen drauf. Ich glaube, der kommt nicht. Ich glaube, der hat irgendwie bei der falschen Person bestellt.
Naja, du hast ja da noch Sicherheit bei Ebay, also von dem kann ich nicht schief gehen, außer dass es deine Zeit gekostet hat.
Ja, wie du schon sagtest, Touchbar ist weg. Das ist ja glaube ich das größte Eingeständnis von Apple überhaupt, dass die Touchbar einfach Krawatscher ist.
Ja.
Und keine Sau benutzt, außer du vielleicht um einen Code auszukommentieren.
Nein, ja, genau, dafür darf ich die ja tatsächlich benutzt.
Tollere Spielerei.
Genau, die kann man auch mit dem Tastenkürzel machen. Genau, die Idee fand ich auch nett, aber tatsächlich in der Praxis nicht so brauchbar. Und ich glaube auch, ein Grund warum sie nicht so brauchbar ist, weil man halt nichts auf der Touchbar festpinnen kann, sondern es ist immer nur das Programm, was sowieso gerade im Vordergrund ist, kann diese Touchbar bedienen. Du kannst sie also nicht irgendwie, keine Ahnung, im Mediaplay auf die Touchbar legen, während du deinen Xcode machst, weil Xcode übernimmt dann die Touchbar.
Ich meine auch jetzt mit dem neuen Monterey, wo Kurzbefehle auf Mac kommen, da wäre es dann super geil, wenn du sagst, okay, du hast immer deine Kurzbefehle im Schnellzugriff.
Im Schnellzugriff, egal wo du bist, einfach nein, zeig mir diese zehn Dinge an und dann kannst du halt immer Actions machen. Cool, das ist schon. Jetzt wird das wahrscheinlich, weiß ich gar nicht, ob ich noch nicht Monterey hab, das Touchbar sofort hat, wäre natürlich cool. Aber auch in Zukunft, glaube ich, wird es.
Ja, das wird zu viel draus gelingen.
Warte mal, an den Macbook erst war ja die Touchbar noch drin, oder?
Ich glaube nicht.
Nicht?
Ich bin mir aber nicht sicher.
Mal gucken, ob die wirklich komplett gestorben ist. Ich traue ihr auf jeden Fall nicht groß nach.
Ja, es gab ein paar lustige Spielereien dafür, aber die können wir auch nur benutzen, wenn die Touchbar im Vordergrund war und der Rest von der Bildschirm nicht mehr benutzt war, weil die Action spielt sich auf der Touchbar ab.
Apropos trauern, du trauerst ja immer noch in UIKit hinterher und möchtest immer noch alles in UIKit machen und ich sage dir jetzt nochmal, mach SwiftUI.
Ich weiß. Und wenn man das machen möchte, dann gibt es eine tolle Seite, die nennt sich fucking SwiftUI. Ich glaube, es gibt so wie alle, was es irgendwie im Apple-Oversum gibt, gibt es eine fucking irgendwas, fucking UIKit, fucking was weiß ich, fucking Blocksyntax, fucking was weiß ich, jetzt habe ich schon ein paar Mal fucking gesagt.
Du musst dich in den explicit-Tag gleich setzen.
Genau. Auf dieser Seite sieht man, dass es wie in Almanach über alle möglichen Dinge sein, die man aus UIKit kennt und in SwiftUI machen möchte mit kleinen Beispielen und ob das schon so geht, was man sich aus UIKit kennt, ob es das auch schon in SwiftUI gibt, zum Beispiel so was wie UI Page-Controller gibt es noch nicht, ist auch schön aufgelistet.
Ja, es ist halt ein super Nachschlagewerk, um schnell herauszufinden, wie ein UI-Element funktioniert in SwiftUI.
Zum Beispiel, ja, UI-Button ist ersetzt durch einen Button. UI-Page-Controller gibt es nicht mehr oder gibt es noch nicht?
Richtig.
Ja, muss ich mal mit anfangen.
Ja, das ist auch mal wirklich, glaub's mir, es lohnt sich. Ich erzähle auch noch später was darüber, ich habe auch in den letzten Wochen viel Refactored, viel UIKit-Code rausgeschmissen und nochmal um Fuck zu sagen, Fuck, ja, ist das wenig Code geworden, wie ich es zuvor hatte.
Aber ich dachte, man wird in Zeiten, in Zeiten, in Kode bezahlt. Je mehr Kode, desto besser. Je mehr man benutzt, desto besser ist es.
Gut, den Arbeitgeber möchte ich finden. Ist das bei Airbus so?
Nein.
Wir müssen da die Flugzeuge unnötig schleifen fliegen.
Ich werde für Anwesenheit bezahlt.
Anwesenheit auch nicht schlecht.
Anpropos Anwesenheit, um irgendwelche Brücken zum nächsten Thema zu schlagen. AirPods haben zwar nicht viel mit Anwesenheit zu tun, aber AirPods kennen ja die Pro-Dinger, haben ja den Accelerometer drin und auch dieses 3D-Audio mittlerweile drin.
Und das kann auch mal recht störend sein, wenn man sich irgendwie bewegt, weil dann Telefon und sonst irgendwas nicht genau wissen, wo vorne ist.
Und das kann man auch jetzt über das Control-Center deaktivieren, also durch einen Long- oder Force-Tap auf dem Control-Center auf die Lautstärke, glaube ich, ist das was, da kann man dann einstellen, dass man entweder Off, Head-Tracked oder Fixed hat, diese 3D-Sound.
Und dann findet sich, wirkt das weniger störend oder kann störend wirken, wenn man rumläuft damit.
Ich habe es ja selber noch nicht benutzt, 3D-Sound. Heißt das nicht Special Audio?
Ja, Special Audio. Ich glaube sogar im Ding ist es unter "Let me look".
Ich kann mir keine Situation vorstellen, wo ich das haben möchte. Absolut keine.
Es ist schon, du hast, es steht ja gut zum 3D. Das heißt, dieser 3D-Sound ist schon ganz cool, wenn man so ein Film guckt. Du hast schon wirklich ein Kinosal-Feeling.
Ja, aber ich weiß eigentlich nicht, ob ich Kinosal-Feeling haben möchte.
Genau, das ist ja die Frage, ob man das haben möchte. Es klingt ganz cool und wenn man den Kopf dreht, hat man immer das Gefühl, ja, das kommt immer aus der vorne Richtung.
Aber ich glaube, das finde ich ja schon beim normalen Fernsehen nervig. Ich finde es ja besser, wenn ich beim normalen Fernsehen auch mit Kopfhörern immer alles gut hören könnte.
Gut, und der Witz an Special Audio, wenn das auch mit Dolby-Up-Mus und so weiter ist, dass du halt auch, so wie zum Beispiel in Virtual Reality spielen oder auch bei Counter-Strike oder sonst wo, da hörst du ja die Leute von hinten kommen und die gings und dreht so.
Genau, das ist glaube ich ganz cool.
Und da macht es auch richtig Sinn dann, glaube ich.
Ich muss jetzt noch mal einen Schluck aus dem Bier nehmen und meinen Mund besser, um jetzt wieder zurück zu Zwift zu kommen. Das hätten wir eigentlich mal umsortieren sollen, hätte ich besser gesagt.
Auf Hacking für Zwift bin ich auch noch mal auf einen Zwift Quick Tips Artikel gestoßen. Das sind 10 Tipps für Dinge, die man in Zwift machen kann, von denen man vielleicht noch nicht wusste.
Zum Beispiel wie man einen Rollover bei U-N8 macht oder so.
Und dann ist es auch ganz interessant, dass man plus ist gleich oder plus, und plus, das geht auch in Zwift. Zum Beispiel kann man sich mal durchlesen, das ist ganz interessant, fand ich ganz lustig und da ist mir auch gekommen, weil ich weiß, wo ich das notiert habe, ist den Not-Operator, das ist dann das Ausrufezeichen.
Und wenn man gibt es ja Leute, die sagen, das mag ich nicht, weil man sieht, das ist ein kleines Ausrufezeichen, nicht immer davor.
Und dann kann man sich was definieren, das ist nämlich, so wie ich es auch aus C++ kenne, kann man sich ein Not, also ausgeschrieben "Not" definieren.
Und dann kann man sozusagen sagen "if not logged in", also "if not" auflogged in, dann wird es ein wenig lesbarer dadurch.
Ich weiß, die Geister scheinen sich und manche sagen "ne, das ist absoluter Quatsch und was soll das?" Ich finde es aber eigentlich ganz gut.
Und das ist ja auch eine der schönen Sachen von Zwift, dass Zwift solche Sachen halt erlaubt.
Das heißt aber an der Programmierung sprach nicht, dass solche Funktionen, das sind ja keine Funktionen, sondern solche, Alias, wie man sie auch mal nennen mag.
Ja, ne, es sind eigentlich Funktionen. Prefix und infix und suffix sind Operatoren.
Genau, und da erlaubt Zwift ja echt, ja doch eine, also Zwift kann sich sehr dem Programmierer anpassen, sagen wir es so oder der Programmierer kann sich Zwift so anpassen, dass er damit gut arbeiten kann.
Und wenn jetzt jemand ein Ausrufezeichen nicht sieht oder auch gerne bei Zwift, wenn du das hinten hast, ist das ja ein Auspacken von Option Notes und da kann es ja auch mal zu einem Crash führen, wenn da nichts drin ist.
Und deswegen möchte ich eigentlich zum Beispiel vermeiden, ein Ausrufezeichen in meinem Quotex zu haben.
Und was ich auch häufig mache, ist, ich suche mal nach einem Ausrufezeichen und gucke, ob das an der Stelle wirklich nötig ist.
Und wenn man dann so ein Notoperator austauschen kann gegen eine andere Möglichkeit und dann auf das Ausrufezeichen zu verzichten, hilft das an der Stelle auch.
Ja, durchaus. Es gibt aber auch Dinge, also ja, ich würde auch auf deine Meinung auf jeden Fall ein Ausrufezeichen vermeiden.
Es gibt die Aussage, auch kleine Kätzchen sterben, wenn du sowas machst. Aber es gibt Punkte, wo du das auf jeden Fall machen sollst.
Also wenn du als Entwickler dir, ich meine du sagst dem Compiler, hey, das ist da angenommen, du lachst im Essays-Kanalog dieses Image-Ausrufezeichen.
Das kannst du ruhig machen und solltest du auch machen, weil wenn es nicht da liegt, dann weißt du, du hast so ein Silent-Fail und du möchtest eigentlich, dass dein Bild angezeigt wird, weil es ist auf der Platte, das wird nicht einfach weg sein.
Ja, ja, aber sowas, ja, absolut, ja, es ist gut möglich. Es kann auch sein, dass du das auf irgendeinem obskuren Bildschirm hast, den du nicht getestet hast und dann hast du vergessen, das Bild reinzupacken und dann crash die App, deswegen, wenn du in den Settings-Screen gehst, deswegen würde ich halt, also wie ich das machen würde, ich würde halt ein E-Flat machen und dann testen, ob das Bild da ist. Und wenn es nicht da ist, zeigst du halt kein Bild an. Also ich würde ja sagen, lieber die App läuft ohne Bild, anstatt dass die App crasht.
Ja, aber dann mag es halt sein, dass dir sowas durch die Lampe geht. Du solltest natürlich deine App bevorderlich testen brauchen.
Ich nicht.
Dann lieber so. Okay, kommen wir mal zum Hauptthema. Du weißt es jetzt schon.
Ja, es ist eine sehr große News. Also wenn du mir das erzählt hast, irgendwie per iMessage, da war ich ein bisschen, ich bin nicht sagen geschockt, aber es war ein, ja, ein Schock trifft es nicht, also es ist ein positiver Schock.
Genau.
Das ist ein großer Schritt, was du da gleich erzählen wirst.
Richtig, ich habe nämlich meinen Job gekündigt.
Ja.
Und jetzt fragst du dich jetzt, warum hast du denn deinen Job gekündigt? Ja, ich mache jetzt ein Casino auf.
Ja, verkauzt Bitcoin oder Schlumpf werden.
Natürlich nicht.
NFC v.iPhone jetzt mit Schlumpf werden.
Ich werde mich selbstständig machen, zwar so komplett und wie es dazu eigentlich kam, ist, dass du weißt ja noch, vor einigen Monaten ging es damit los, dass irgendjemand auf Reddit mal über NFC v.iPhone irgendwas geschrieben hatte.
Seitdem gehen meine Einnahmen, was die Werbeeinnahmen angeht, steil nach oben bis, also jetzt gut halten, dass ich, es gibt so eine kleine Unternehmerregelung in Deutschland, die geht bis 22.000 Euro.
Und wenn du die überschreitest, möchte Vater Staat irgendwann eine neue Geschäftsform von dir sehen, dann kannst du es nicht mehr einfach als kleiner Unternehmer mit auf Lohnsteuer machen, Lohnsteuerkarte so ungefähr, sondern er möchte eine neue Geschäftsform von dir sehen.
Entweder freiberuflich oder eine GmbH oder UG oder Gbr oder darüber, was es da für Geschäftsformen gibt, möchte er haben.
Ja, und ich war dann eh schon so in diesem, ja irgendwie auch in dem, ich meine ich bin jetzt seit 7 Jahren in der Firma, wo ich arbeite, habe dort als Werkstufe angefangen, habe dort viel gelernt.
Sehr coole Firma, übrigens Quadit Mobile kennt man auch aus den aktuellen Werbungen von Bits und so.
Genau.
Werbung kriegt Leon heute gratis.
Wie gibt es jetzt noch einen neuen, der aber es braucht an deine Stelle wieder zu befüllen?
Vielleicht ja.
Genau, ich meine ich bin da auch super glücklich in der Firma gewesen, ist eine coole Firma und macht auch riesen Spaß da zu arbeiten, aber irgendwann möchte man halt auch was Neues machen, erleben und dann hat sich für mich die, also meine Einnahmen haben mir den Mut dazu gegeben, dass ich jetzt sage, ok, bevor ich das jetzt irgendwie so sage, ja ich mache jetzt halb 20 Stunden die Woche und den Rest für mich, dann habe ich gesagt ok, um nochmal auf den Anfang zurück zu kommen, fuck it, ich schmeiße jetzt meinen Job hin und mache das jetzt komplett selbstständig.
Und erstmal herzlichen Glückwunsch zu dem Schritt.
Danke.
Ich finde das sehr cool.
Auch, auch das ich hoffe, dass ich dich auf dieser Journey begleiten kann noch ein bisschen.
Ich glaube, das wird sehr interessant.
Hast du da einen schon einen gewissen Plan?
Also oder möchtest du hauptsächlich mit deiner NFC für iPhone und eventuell anderen Apps, also wirklich nur für dich selber Apps machen und die dann verkaufen oder auch irgendwie Auftragsarbeiten von wenn jetzt deine alte Firma sagt, hey wir brauchen noch mal jemanden, der uns eine Watch Extension programmiert, kannst du den Auftrag für uns übernehmen?
Das wäre auch eine Möglichkeit.
Also ja, ich habe mir da schon Gedanken gemacht und ganz allererst muss ich sagen, ich bin halt schon so ein Freigeist und irgendwie habe ich auch keinen Bock mir irgendwer von irgend wem, soll ich mal anschaffen, lass mich ja hier, mach mal das, von 9to5 und dann kannst du Freie abmachen.
Sondern ich bin noch eher schon, ich möchte eigentlich, ich möchte aufstehen, wenn ich will, ich möchte erstmal, weiß ich nicht, Frühstück machen, Fitnessstudio und dann arbeite ich, wenn ich Bock habe und ich will irgendwelche Termine sagen, du musst es machen, sondern den einzigen Leuten, den ich mir rechenschaft und gegenüberstehen möchte, ist die Kunden, die meine App unterlassen.
Ja, ich habe auch darüber nachgedacht, Auftragsarbeit zu machen.
Erstmal, nee, würde ich nicht machen wollen und da kommen wir jetzt dann auch gleich auf die verschiedenen Geschäftsformen, die da rankommen oder dazukommen.
Ist ja, ob ich irgendwie auch in Zukunft Mitarbeiter haben möchte oder ob ich mehr Sachen entwickeln will.
Ja, meine Cash Cow ist momentan die NFC für iPhone App plus meine anderen Apps dazu, die machen zwar auch ein bisschen was, aber im Wesentlichen die kleineren Teil.
Und ja, ich möchte das auch, ich meine die NFC von iPhone, die wird nicht meine komplette Arbeitszeit ausfüllen, ich möchte neue Projekte angehen, neue Ideen umsetzen, Dinge sind in der Pipeline, was genau wird, weiß ich noch nicht.
Ja und gedanklich ist auch irgendwo ein Hinterkopf, weil ich meine, ich weiß ja, wie es ist, wenn man eine App entwickelt, da ist es nicht nur mit Leuten, also viele Leute können entwickeln und haben auch Bock daran, aber dann gibt es halt auch so Dinge wie Steuern, Marketing, also nicht, Dinge, die einfach keinen Spaß machen, aber die einfach dazugehören, sonst geht das nicht.
Ob man nicht so eine Art Publisher irgendwann draus macht, weil eine Firma richtig GmbH mit dir als Publisher auftritt und sagt, hey, pass auf, du kleiner Entwickler, wir übernehmen deine App bei uns auf, kümmern uns um, du kümmerst dich um deine Entwicklung und gibst halt einen gewissen Prozentsatz davon, was damit verdient wird ab.
Würde natürlich, also klar, die ganzen Unannehmigkeiten fallen weg plus Marketing und ich meine, wenn man dann irgendwie schon mal sich ein gewisses Netzwerk aufgebaut hat und auch ein bisschen irgendwie Cross Promotion zwischen den Apps machen kann und wenn man als Publisher da irgendwie auftritt, dann weiß man, okay, die machen coole Sachen, da gibt es sowas, da gibt es ja schon auch da draußen in dieser Apps-Dowell.
Ja, finde ich das eigentlich ganz cool und dann, wenn man dann lauter so Freigeister zusammenbringt und sagt, ja, komm, cool, entwickle was und wir übernehmen dir die Scheißarbeit, warum nicht?
Aber das steht noch in den Sternen, das ist erstmal noch nicht so angedacht.
Erstmal überlege ich jetzt, welche Geschäftsform ich annehme, gibt es verschiedene GmbH, UG, Gbr, Holding.
Ich glaube, da würde ich schon aufgeben, weil ich keine Lust hätte, mich damit zu beschäftigen.
Ja, man findet gute Artikel im Internet darüber, muss man halt durch ein bisschen lesen.
Ich bin eigentlich auch über ein YouTube-Video gestolpert, der hat auch über Firmengründungen GmbH und UG und hat verglichen, was die Unterschiede sind, im Prinzip, die UG ist die 1€ GmbH.
Die haben sie, glaube ich, gestartet damals, weil viele haben hier britische Limited-Filme gegründet und dann hat Deutschland diese UG dann ins Leben gerufen, um den zu kontaktieren, oder eine gleich ähnlichwertige Alternativschaffung.
Ja, und auch die Limited ist weiterhin auch eine Möglichkeit, um eine Firma zu gründen.
Auch nach dem Brexit noch?
Ja, auch nach dem Brexit noch und ich weiß noch nicht, ob man das jetzt will, weil du hast einfach einmal eine Firma in England und Brexit und so weiter.
Ich glaube nicht, dass vieles kaputt wird.
Aber wir haben auch, wenn du schon sagst, anders Land, wir haben in der europäischen Union ja die Freiheit, eine Firma zu gründen, wo du möchtest.
Also ich kann auch in Spanien oder in Polen oder in wherever I want und es gibt natürlich auch unterschiedliche Steuerungen von den Ländern und da gibt es natürlich auch Steueroasen in Europa. Man schaut nur nach Madeira, Zypern oder Madeira.
In Madeira zahlt man zum Beispiel 5% Steuersatz und das ist halt schonmal noch ein ganzer Unterschied zu Deutschland, wo man mit einer GmbH bei, ich glaube, was Maximum 32% ist, wo du aber auch sag ich mal, heißt, meine Firma nimmt das Geld an, einen zahlt 32% Steuern und dann darf ich mir als Geschäftsführer, darf ich mir Gehalt auszahlen, dann komme ich nämlich so ungefähr bei 50% Steuern aus.
Was natürlich auch heftig ist, wenn man sich überlegt, was zahlt so ein Spitzensteuersatz, irgendwie 45%, 42%, das ist halt nochmal mehr auf einmal.
Und da gibt es dann schon wieder so Tricks, die man dann auch machen kann mit einer Holding und das ist viel lohnt sich für Softwareunternehmen auch, dass man so eine Holding macht und dann diese Holding halt als sozusagen Töchterfirmen aufmacht.
Und wie das alles genau funktioniert, weiß ich auch noch nicht. Ich bin mich dann noch am durchlesen und ich hatte noch ein bisschen mit diversen Leuten reden und vielleicht auch Steuerberatern und überlegen, wie ich es am besten anstelle, weil man kann mit so einer Holding auch irgendwie rauskommen, dass du irgendwie vielleicht nur 5% Steuern zahlst.
Deswegen macht das ja auch so, wie die Metro Group macht das ja auch so eine Holding und da hängt dann ein Media Markt und Saturn und Metro selber und die hängen ja da mit drin. Deswegen zieht man solche Firmenstrukturen auf, damit man halt Steuern sparen kann.
Ja und auch so Sachen wie Starcapital, bei der GmbH musst du ja ein großes 25.000 Euro mitbringen?
Ja, du kannst mit 12.500 anfangen, musst aber den Rest ansparen. Das ist jetzt nicht das Problem bei mir, also ich würde wahrscheinlich auch nicht mit der UD anfangen, weil, sagen wir mal Starcapital habe ich schon und ich weiß jetzt nicht warum.
Das Starcapital kann ja auch in Gütern sein, also du kannst ja dein Laptop, kann teile Starcapital sein.
Richtig, da kommen dann auch so Sachen dazu, also ich kann dann mein Laptop an die Firma verkaufen und so weiter und der geht dann in den Firmenbesitz über und es ist teile Starcapitals.
Richtig, weil man bei so einer Firma bedenken muss, man kann sich nicht einfach Geld aus der Firma nehmen, man ist eine juristische Person und ich bin eine Person, kann es nicht einfach hergehen, dass ich jetzt nur 5.000 Euro aus meiner Firma nehme, sondern da muss man erstmal das verrechnen und sonst immer, da ist viel Zeug, was keinen Spaß macht.
Genau, viel overhead, wenn du alleine bleibst, also wenn du tatsächlich eine Einzelperson bist und keine Angestellten hast, dann ist das auch viel overhead, wo du wirklich überlegen musst, ob man den nicht mehr vermeiden kann.
Okay, gut, dass du das sagst, ja, da habe ich mir schon Gedanken gemacht, ich habe ja schon ein Geschäftskonto bei Contest, wurde auch schon diverses Mal in verschiedenen Podcasts beworben, ich glaube, über irgendeinen bin ich auf dieses Konto gekommen und habe mir einfach mal eins gemacht und dieses Geschäftskonto hängt dann auch mit LexOffice zusammen, das ist so eine Buchhaltungssoftware, LexOffice und Contest zusammen, das heißt, sobald irgendwie Geld ein oder ausgeht aus meinem Konto, wird sofort bei LexOffice, wird dort, sag ich mal, getriggert, hey, hier hängen meine Rechnungen an und so weiter, du kannst da direkt der PDFs anhängen und sonst irgendwas und du kriegst Lifestats zu deinen Einnahmen und Ausgaben und das habe ich jetzt auch für 2020, werde ich jetzt noch normal auf Lohnsteuerkarte machen, 2021 wird dann nächstes Jahr versteuert,
und da werde ich schon wahrscheinlich als Firma auftreten, deswegen habe ich auch schon 2021 komplett in dieses Tool eingepflegt, heißt, wenn ich Einnahmen bekomme, muss ich halt, da muss man halt sofort dran denken, es ist fast automatisiert, den Rest muss ich halt noch machen, ich muss halt sagen, okay, hier ist PDF mit Rechnungen, LexOffice, scannt das alles ab, also auch mit OCR und sonst was, das ist schon ganz gut gemacht, scannt das ab, ordnest es ein und das kannst du dann gleich direkt auch mit deinem Steuerberater verbinden und hoffentlich möglichst wenig Arbeit damit haben. Und das kann halt auch solche Geschichten, wenn man in einer Firma ist, muss man Umsatzsteuer zahlen und so weiter, Umsatzsteuer, Voranmeldung und solche Geschichten machen und Einnahmen, Überschuss, Rechnungen und ich gucke mal, wie es läuft, ich hoffe, es nimmt mir viel Scheißarbeit ab.
Da kommt dann noch oben drauf, das Einzige, wo ich gerade viele Rechnungen bekomme, ist Apple Search Ads, weil Apple Search Ads einfach komplett beschissen da drin ist, die kommen dann auch immer so und schicken die auch immer so, hey, wir haben dir irgendwas abgebucht, hier 20 Cent Rechnung, du hast eine 20 Cent Abrufung, 20 Cent Rechnung, 20 Cent Rechnung, also die haben dann schon auch mal höhere Rechnungen, aber es ist dann anscheinend, Search Ads werden ja pro Land gemacht, das heißt, die werden pro Land, wenn deine Ads ausgelegt werden, ich habe über die letzten vier Monate ungefähr 50 Rechnungen, die ich da einsortieren musste, wenn man das mal halt irgendwie eine Zeit lang ignoriert hat, dann ist es schon ein bisschen Arbeit gewesen, bis man da durch ist.
Ja, vor allem, dass wenn die so rechnen, so für so ein paar Cent schicken, ist doch nervig.
Ja, ist halt auch das Abbrachungssystem davon und ist natürlich halt auch, da musst du auch sehen, für die EU zahle ich 90 Prozent Steuer, wenn ich in Amerika Werbung zahle, zahle ich keine Steuern, kann ich mir auch keine Steuern wiederholen.
Ja, so viel hast du noch Fragen zur Firmengründung?
Ja, wie weit bist du denn damit jetzt? Also, Recherche habe ich festgestellt, hast du, oder bist du dabei oder abgeschlossen vielleicht sogar schon?
Nee, also ich bin noch in der Recherche und Findungsphase von...
Gekündigt hast du.
Bisschen Druck. Also ich meine, die Firmengründung, man sagt so vier bis acht Wochen kann das durch sein, wenn man sich ranhält. Da habe ich jetzt nicht so die Angst vor, dass ich das nicht, ich meine, ich muss ja auch nicht sofort, wenn ich kündigt habe, muss ich sofort hier mal stehen, sondern mein auch Vaterstaat lässt dann da so ein bisschen Spielraum. Ich glaube nicht, dass mir da sofort jemand aufs Dach steigt.
Ich meine, das wird ja sowieso, erst mit Steuererklärung 2021 wird wahrscheinlich vom Finanzamt, oder würde vom Finanzamt kommen, hey, bitte machen wir was anderes jetzt.
Das heißt, der Druck ist noch nicht ganz so groß.
Ja, die von der Planungsphase geht es hoffentlich bald in die Umsetzungsphase.
Noch möchte ich mir ein bisschen Informationen einholen, mit diversen Personen sprechen, die schon Erfahrung und sowas haben.
Ok.
Lesen, Videos gucken, Gedanken machen, wie gesagt, GmbH Holding Struktur.
Ich würde dir vorstellen.
Richtig, Firmenname ausdenken.
Nikos famose Computerfabrik, dann hast du den NFC wieder.
Das habe ich ja groß gemacht.
Ja durchaus, aber irgendwie ist der Name ein bisschen zu lang.
NFC GmbH, könnte man machen.
Ich habe schon ein paar Dinge im Kopf aufgeschrieben, aber genau was will ich da noch sagen.
Domainregisterieren, Twitter-Account sichern.
Ja, und die Sachen, die ich mir ausgesucht habe, ich meine, das ist halt auch nicht einfach, einen Namen zu finden.
Domains sind registriert, das glaubt man gar nicht und ein bisschen schwierig alles.
Und da musst du dir auch noch überlegen, ich möchte nicht erstmal in die Brille kommen und sagen, ja hier, namensrecht streitbar,
du kriegst erstmal die Anwaltskosten, möchte ich am liebsten umgehen, deswegen muss es schon irgendwas Unikes sein.
Deswegen haben doch auch viele Firmen den Namen von dem Grund damit drin, damit das auf jeden Fall Unikes ist.
Ja, guter Punkt.
Ein Freund von mir hatte da auch Bedenken, der hat nämlich Bier gebraut, also er war Bierbrauer, und in seiner Firma hieß Pauls Spezialitäten.
Und sein Bier hieß Elb Paul und er hatte Angst, dass er ärgert von Paulana.
Aber er hieß halt auch Paul mit Namen.
Aber sein Bier heißt Elb Paul. Hat er Probleme damit bekommen?
Nein, hat er keine Probleme damit bekommen.
Also ich meine auch, da ist weit genug auseinander.
Also wenn es El Paulana heißt, dann würde ich mit ihm Probleme kriegen.
Ja, soviel zur Firmengründung.
Ja, dann kommen wir mal zu, genau, das ist das, was nämlich jetzt auch die Entscheidung zur Firmengründung bei mir gemacht hat,
ist, dass man riesen Motivationen aufkam und ich dachte so, ja jetzt Ärmel hoch, jetzt mach ich richtig geil alles.
Und dann hab ich mir gedacht, ok, jetzt machst du erstmal Qualitätsoffensive NFC, Crashes entdecken und Crashes lösen und Probleme lösen.
Und dann hab ich mir mal gemacht, also hab ich mir ein eigenes Crash Detection Tool plus Crash Reporting gebaut.
Was dir sowas wie Trip-Anbieter anbieten, zum Beispiel sowas wie Instabug, das nehmen wir in der Arbeit,
ist so ein Framework, was die Webseite zusammen, das hat die Crashes einsammelt und Feedback von Usern, hab ich mir quasi selber gebaut.
Ist gar nicht so schwierig. Im Prinzip tut man zwei Dinge zusammen.
Ich hab mal in den Show Notes, gibt's ein Framework, das ist eine Klasse eigentlich, die nennt sich Crash Eye.
Die hab ich erstmal, vom Code her, ja ich hab mich davon inspirieren lassen, aber ich hab im Prinzip meinen eigenen Code geschrieben, wie man Crashes erkennt.
Ist ein bisschen C-Code dazwischen, also man geht schon ein bisschen low-levelig runter, aber im Prinzip gibt's ja verschiedene Crash-Signale im System.
Sieht man vielleicht mal, wenn man einen Crash hat, auch im Debugger, weiß ich nicht, sowas wie SIGA-ABRT, also SIG-A-Aboard und SIG-ILL und SIG-SEV und SIG-BUS und SIG-Pipe und SIG-TRAP, das sind verschiedene Arten von Crash-Signalen.
Also zum Beispiel ein SIG-ABRT ist Abnormal Termination Condition, heißt irgendwo ist wirklich, weiß ich nicht, er abgeschwirrt.
Was dieses Ding eigentlich macht, ist Detected, also du kannst dir vom System noch eine letzte Nachricht bekommen lassen, so hey, ich werd jetzt gleich crashen.
Und du, was du eigentlich machst, schreibst dir deine User-Defaults rein, hey, ja, did crash last time, yes, schreibst du dir rein und dann weißt du beim nächsten Start, hey, es ist gecrashed, zeig den User mal irgendeinen Info-Dialog an, der kommt bei mir jetzt auch und sagt, hey, oh, tut mir leid, App ist gecrashed, um dir dabei zu helfen, blablabla, kannst du mir jetzt Crashreports senden.
Dann kommen wir da schon zum nächsten, da hab ich mir komplettes Logging eingebaut und da ist eigentlich Industriestandard in der iOS-Welt, den nenn ich CocoaLambda-Check, gibt's schon aus Objective-Z-Zeiten, super maintaines Ding, ich glaube in jeder großen App da draußen zu finden.
Schon seit über 7 Jahren gibt's dieses Projekt, 8 Jahre sogar, und ja, durchaus cooles Ding, dieses Framework zieht man sich rein und dann baut man sich eine Logger-Klasse und diese Logger-Klasse sieht folgendermaßen bei mir aus als 60 Zeichen.
Dort schreibt man sich drei Funktionen, einmal eine Log, also ich hab hier zum Beispiel einen Singleton, das gibt's so einen Sharelogger rum und dann machst du die drei Funktionen, einmal den LogError, LogInfo, LogDebug, Error ist halt irgendwas schiefgegangen, Info ist, ja, irgendwas weiß ich nicht, User hat da hingeklickt oder User weiß nicht, irgendwas Info-mäßiges und Debug ist halt so technischer Schnickschnack, nicht vielleicht 100% wichtiges, das versieht man halt mit verschiedenen Emojis am besten, also einmal der Error mit dem X und der Debug mit dem Schraubenschlüssel und das Info mit dem Info-i, dann sieht man das auch schön in den Log-Dateien, wenn man sie sich dann anguckt.
So, das ist im Prinzip alles und dann gibt's auch in dem Sample-Code von CocoLumberjack, wie man das aufbaut ungefähr und dann hat man einen File-Logger unten, einen Konsole-Logger, also dass alle Logs auch in die Konsole unten kommen und zusätzlich in den File geschrieben werden.
So, und der liegt, da hab ich jetzt zum Beispiel eingestellt, man kann hier den File-Logger eine Rolling-Frequency geben von 60 x 60 x 24, heißt alle 24 Stunden wird neue Logs angelegt, das heißt, der schreibt regelmäßig mit, aber wenn mir irgendjemand einen Crash Report schickt, krieg ich sozusagen die Logs der letzten 24 Stunden.
Und man kann ihm sagen, ok, die Maximum-Nummer auf Logfiles ist auf sieben, also sieben Logfiles, wenn die 24 Stunden, sieben Logs da sind, dann krieg ich die auch.
Und dann hab ich dann eingebaut sozusagen, wenn dann jederjenige auf diesen Popup-Druck sagt, ja, ich möchte die Logfiles schicken, dann werden alle diese Logfiles zusammen in einen Logfile geschrieben, sozusagen konkratiniert und dann wird dieses an einem E-Mail steht, also an diesem, ich weiß gar nicht mehr wie er heißt.
An das normale Apple-E-Mail.
Ein E-Mail, wo ich so ein bisschen Text noch reingeschrieben hab, den manche Leute ausfüllen, so, ich hab reingeschrieben, hey, dass die User auch raffen, hey, das ist ein E-Mail, du kannst hier so, was hast du gemacht, welchen NFC-Tag hast du benutzt, also ein bisschen basic Information, die meisten ignorieren es aber, die meisten sagen, ja, ich möchte sie schicken, schicken, so.
Du kriegst schon ein paar davon zugeschickt.
Ganz ehrlich gesagt, ich werde zugeschissen mit Logfiles.
Du glaubst gar nicht, ich meine, ich hab 750.000 aktive User, seitdem ich das gemacht hab, ich hab bestimmt hunderte Mails gekriegt, wo ich auch...
Hast du auch eine eigene E-Mail-Adresse dafür?
Ja, ich hab sofort eine eigene E-Mail, hab gemerkt, okay, das geht nicht auf meinem... sondern ich hab sofort eine eigene E-Mail-Adresse dafür gemacht, die rein für die Crashreports ist. Genau, also ich werd regelrecht zugeschissen damit und hab's jetzt auch schon wieder ein bisschen in Ruhe reingebracht, weil ich doch dann ein paar Fehler gefixt hab, die, ja, dank der Crashreports mir sichtbarer wurden.
Weil man halt einfach weiß, okay, was hat der User kurz davor gemacht, was ist schiefgegangen.
Und was man halt auch machen kann, ist, dass man dem User dank der E-Mail nochmal in den Rückfang stellen kann, sagen, hey, weißte, viele schreiben das leer, dann hacken wir nochmal nach, hey, welchen NFC-Tag hast du benutzt und so weiter, oder mach mal das und das, oder...
Weiß ich nicht. Musst du dir das gleich noch ein Ticketsystem dahinter bauen?
Tja, momentan arbeite ich noch mit To-Do-Listen, aber ich seh schon kommen, dass das alles noch passiert, dass ich ein ganzes Gyro brauche und sonst irgendwas, aber halten wir's mal noch ein bisschen flach.
Kommt alles zu weit. Genau, zu den Logfiles, was da ganz interessant ist, wie man, das ist jetzt in CocoaLambaJack nicht drin, es gibt ja auch in Swift, ich weiß nicht, ob du das gesehen hast.
Eine Sache, also man kriegt ja auch bei Apple beim App Store Connect, kannst du dir auch die Crashes anzeigen lassen von anderen Leuten, wenn die da ob/in gemacht haben?
Ja.
Hilft dir das auch weiter, oder ist dieses CocoaLambaJack so viel wertvoller?
Also diese Crashreports müssen ja, was der Vorteil bei Apple ist, die müssen ja symbolikated werden, das heißt du, wenn ich so ein Crashreport von den Leuten bekomme, seh ich den eigentlichen Crash-Tag nicht.
Das heißt, ich seh dann nur irgendwelche Objektnummern und, warte mal, ich muss jetzt selber dann gucken, wie's aussieht, du siehst halt nur Objektnummern, keine Ahnung, ich seh halt jetzt zum Beispiel hier in CoreData und dann 0x00000000 und dann irgendeine lange IT.
Mit dem kann ich nicht viel anfangen, also genau das ist das, was ich noch machen müsste, ich müsste diesen Crash-Tag symbolikaten, das heißt, du musst deine Symbols rausholen, die werden ja beim Archiving, glaub ich, angelegt und die kannst du dann darauf mappen und dann kannst du auch anzeigen, okay, das war die Methode, die line.
So, das macht ja xcode für dich in dem, aber was xcode hier nicht macht, ist, was ist davor passiert, was hat der User versucht zu drücken, weiß ich nicht, welches iPhone, ach doch, siehst du sogar, aber viele Dinge, die du einfach nicht siehst, das kommt halt darauf an, was man sich halt lockt.
Klar, man muss sich da klar sein, also ich mein, steht auch drin, ich mein, ich sag freiwillig, dass du mir die locks hinstellst, es wird nichts automatisch getan, nichts verlassest, wenn du's nicht willst, können da auch sensitive Daten drinstehen.
Ja, muss man sich auf jeden Fall Gedanken machen und muss man natürlich auch in der Privacy Policy angeben und sagt, okay, gleich Crash-Tags können, ich lock jetzt da nichts gravierendes, dass ich sag, okay, da wüsste ich jetzt irgendwas über die Person.
Und jetzt, wo wollte ich weiter reden? Du wolltest mir sagen, warum die mehr wertvoller sind als das, was du bei Apple bekommst. Na ja, im Prinzip weißt du, was davor und danach passiert, das ist das Wertvolle daran.
Genau, und auch so selber zum Debuggen angenommen, du weißt ja nicht, man ist ja nicht immer ein Debugger, man spielt selber mit der App rum und man crashs und denkst, ach fuck, und jetzt bist du nicht am Rechner und interessiert sich da noch, was hab ich noch zusätzlich in die App eingebaut, hab ich mit die eigenen Debug-Settings eingebaut, ich hab jetzt Debug-Settings mit denen, kann ich mir die Crash-Locks direkt in der App angucken.
Heißt, in meinem Settings-Screen, den sieht man jetzt, wenn man die App runterlegt, nicht, sieht man, wenn man ganz runter scrollt, dann hier Show Lock Files und diese Show Lock Files kommen zum nächsten, zeichnet Quick Look an, das ist das Quick Look Framework von Apple.
Das ist die QL framework und dann sagt man zum Beispiel mein Taper Controller. Das ist der QL Preview Controller und dann gibt's den Lockfiles und eher die URL zu den Lockfiles.
Du kannst die einzelnen Lockfiles im Minimum implementieren. Du hast ja einen echten Lockfiles, den kannst du dir in der App angucken, scrollen und sonst immer.
Das kann man natürlich selber noch geiler machen, zum Beispiel, dass man in den Lockfiles suchen kann oder das sich noch schön aufbereitet.
Das habe ich jetzt erstmal noch nicht gemacht, weil mir reicht das erstmal. Man kann viel mit Emojis arbeiten. Das hilft schon mal visuell, sich durch diese Lockfiles durchzustappen.
Zum Beispiel, wenn ein User irgendeinen Screen anzeigt, mache ich eine halbe Auge. Showing, Setting Screen, Showing, whatever Screen.
Zusätzlich kommt noch, wo ich gerade war, kennst du in Swift zum Beispiel die Hashtag File oder Hashtag Function und Hashtag Line?
Ich glaube nicht.
Genau, das kannst du nämlich in meinen Lockmethoden, also in meiner Glassfunk error message, also wo ich die error message logge, logge ich, sind noch drei weitere Parameter.
Ich nenne es sich einmal FileName, Doppelpunkt String ist gleich Hashtag File, dann dasselbe mit FunctionName, Hashtag Function, dasselbe mit Line, Hashtag Line.
Das heißt, ich kriege in meinen Lock steht dann drin die und die Uhrzeit, in so und so viele Millisekunden, in File, FunctionName, LineNumber.
Also du siehst sofort, auf welcher Line wurde der Lock gerade gemacht oder ist der Crash entstanden und so weiter.
Was dir dann auch beim herausfinden mehr Informationen gibt, wo was passiert ist.
Also du kannst dann von deiner Lockfile sofort in deine File, in SwiftFile gehen und sagen, ah ja, die Zeile, da war es.
Da waren wir bei.
Genau, dann habe ich noch, um das Ganze zu testen, baut man sich dann natürlich auch in sein Settings-Menü einfach mal einen Force-Crash-Button ein, damit man auch sagt, ok, kann man seinen ganzen Kram testen, macht man sich einfach hinter den Knopf ein vater Error, schon crash deine App und schon hat auch dieser Crash-Detektor in die User-Defaults geschrieben, hey, ich bin gecrashed.
Und dann kannst du am nächsten Mal einfach deine UI anzeigen für, hey, ich bin gecrashed.
Achso, ok, damit du die, um zu testen, der UI.
Genau, damit du einfach selber für dich testen kannst, verstehe deine Crash-Logik.
Genau, man weiß ja nicht immer, wie man seine App zum Crash-Bringen kriegt, weil, ja, da muss man sich halt so einen Knopf anbauen und dann ist es auch gut.
Wenn man dieses Quick-Look, dass man sich das nicht selber anguckt, kann man auch, das ist nämlich ein schönes iOS 15 Feature mit dem Drag-and-Drop, das probiert man gar nicht so aus, das habe ich auch mal ver-Twittert, das hast du auch, glaube ich, schon gesehen.
Man kann ja diese, wenn man aus diesem E-Mail schiebt, kann man diese Log-File nehmen, draggen und dann kann man wirklich, man hält sozusagen die einen Finger, die Log-File fest und dann schreibst du so, dass du auf den Homescreen kommst.
Und während du die File hältst, kannst du wirklich auf deinen Homescreen gehen und du hältst weiter diese File und kannst andere Apps öffnen und dort die File droppen.
Das kannst du dann einfach machen, nimmst die Log-File raus, drags sie, home, Notizen-App, drocks sie in die Notizen-App, so kann man halt auch sich die Logs einfach in den anderen Apps angucken. Ja, das ist ganz cool. Brauche ich jetzt nicht mehr, weil ich kann es natürlich selber anzeigen.
Aber einfach auch nur ein schöner Hinweis, dass sowas in iOS geht und man gar nicht so bewusst ist. Das ist schon ein Power-User-Feature und wenn du das alle wirklich in der App unterstützt, ist das halt schon sehr cool.
Ja, hast du noch Fragen zu Crash Reporting?
Nee, ich gucke mir die selber wenig an, aber ich finde es sehr interessant. Gerade wenn man so viele User hat, ist es natürlich wichtiger als ich bei meinen Sachen. Ich hatte das bei der App für den Einschlafen-Podcast, die ich auch mache.
Da haben die Leute dann Tobi geschrieben, der Moderator, der im Einschlafen-Podcast, und ich habe gesagt, ich benutze hier die iOS-App und die Crash ab und zu mal.
Und dann war das das einzige, was ich gehört habe. Tobi hat mir geschrieben, die Crash, guck dir das mal an.
Und dann habe ich versucht mit den Informationen, die ich über Apple bekomme, da ranzubringen und hat ein bisschen geholfen, aber es ist halt nicht so angenehm wie das, was du erzählt hast, wo du halt wirklich logisch was die Leute gemacht haben und dann ist es ja viel einfacher den Back zu finden.
Durchaus ja. Ja, auf jeden Fall eine sehr coole Sache und ich kann es eigentlich auch, ich würde sowas bei neuen Projekten fast schwer empfehlen, sowas zu machen. Also wirklich gar nicht, gar nicht, gar nicht außer Acht lassen, sondern gleich einbauen, weil es hilft massiv.
War das nicht schwer, das nachträglich einzubauen?
Nee, wirklich. Also ich hätte auch nicht gedacht, dass es so einfach ist.
Also du musst nicht an jeder Stelle, wo der User was machen könnte, was einen Crash verursacht, irgendwie eine Funktion nochmal aufrufen.
Nein, nein, nein, das ist nicht das. Das ist nur der Kante, der deine Logs setzen muss. Aber im Prinzip, wenn du eh schon Prints im Code hast, dann machst du halt deinen Logger.
Aber dann kannst du schon an die richtigen Stellen empfangen.
Genau, die Logs musst du schon machen. Das ist jetzt natürlich deutlich mehr geworden, aber exzessives Locken hilft halt auch.
Wie ein Archäologe, umso mehr Knochen er findet oder Scherben oder Münzen, umso eher kann er irgendwas herausfinden.
Ja, das hilft sehr, sehr dabei.
Ja, und dann im nächsten Zuge habe ich dann in meiner App, um es jetzt vielleicht chronologisch zu halten, was jetzt nicht in den Genres ist, das habe ich eine Speech Synthesizer Funktion eingebaut.
Das heißt, ich habe einen Blinder hatten wir geschrieben aus den USA und hat gesagt, hey, ich habe vielleicht schon eine Platten-Sammlung und der möchte gerne das ganze mit Ncht Text beschrieben.
Möchte sich vorlesen lassen, was eine Platte anhand hat.
Und dann habe ich mir gedacht, okay, das klingt ganz cool, weil er meinte, das Screen Reader Feature funktioniert so mäßig, was er über Apple Accessibility benutzt.
Dann habe ich mir gedacht, okay, guck mal in die, das ist in AV Foundation mit drin und gucke mal, wie das so funktioniert.
Und dann habe ich dann einen, naja, du kannst jetzt alle möglichen Stimmen auswählen.
Das bietet ja irgendwie 15, 20 verschiedene Stimmen aus verschiedenen Sprachen. Die kannst du dir auswählen und dann kannst du, dann kann man, was kann man noch, einen Pitch Rate einstellen und Speed Rate glaube ich, also ob die ein bisschen höher und schneller redet, kannst du das einstellen.
Ich wollte es halt auch so machen, dass es nicht irgendwie versteckt ist und für nur Blinde, sondern für jeden.
Dieses Feature habe ich jetzt auch, ich habe mir gesagt, okay, ich bin auch gefragt, hey, was bereite ich auf drei Euro zu zahlen, weil das ist ja ein Logo, wenn du das machst.
Irgendwie muss ich auch meine Arbeit bezahlen und ich bin mir ziemlich sicher, dass da nicht so viele kaufen.
Aber ich habe mir ja selber an sich gedacht, das ist cool und dann habe ich mir gedacht, okay, verkaufe du das.
Man kann sich jetzt einfach QR-Codes und NFC-Text, die eine Textnachricht haben, also keine URL oder irgendwie sonst irgendwas kritisches Text haben, das wird nicht vorgelesen, das ist nur reiner Text. Wenn Text entsteht, wird er vorgelesen.
Für Blinde schon glaube ich unglaublich praktisch.
Das ist jetzt ein separater In-App-Kauf.
Das ist ein In-App-Kauf, das kostet 3, 3 oder 3,50. Ja und hat Spaß gemacht zu entwickeln. Mal gucken, mal gucken, wie viel bei der, ich glaube nicht so viel, aber mal gucken, besser, besser als nichts.
Genau und da kamen wir dann irgendwann, weil ich dann irgendwie schon immer die ganze Zeit in meine Settings, Settings-Screen, der ganz rechts ist, irgendwie die ganze Zeit, und ich nehme die Dinge einbauen und hier, neue Switches und so weiter.
Das war schon genervt, ich habe ja dieses, ich habe da schonmal drüber geredet über das Static Framework, das ist dieses Statue-to-the-Table-Views in UI-Kit mit einer relativ deklarativen Sprache oder demaienspezifik Languages einfach.
Das habe ich mir gedacht, das muss jetzt weg.
Ich habe alles eingerissen und habe es durchs UI gemacht und ich bin heilfroh, dass ich das getan habe, weil es sieht viel besser aus, es ist viel, viel weniger Code, es ist eine ganze Dependency weniger, es ist supergeil maintainable.
Jetzt waren ein paar Dinge, wo ich sage, okay, das war nicht ganz einfach, man muss ein bisschen rumhacken, vielleicht weiß der eine oder andere, Navigation-Links führen dich meistens zu einem Screen, aber wenn du irgendeine Action haben willst auf einen Table-View-Tab, der jetzt nicht zu einem neuen Ding führt, sondern irgendeine Action nur macht, dann muss man halt so ein bisschen hacken, habe ich dann auch hinbekommen.
Genau und da bin ich dann auch dazu gekommen, habe ich meine kompletten Settings, also wie ich auf die User-Defaults zugreife, gibt es halt einfach das 14-jährige App-Storage-Property-Wrapper, der hat nochmal bestimmt 50 Zeilen Code gespart, weil du machst einfach App-Storage-Var, mein Setting und sagst, weiß ich nicht, mein Setting ist gleich False oder True, gibst du den Default-Value und dann kann man den setzen.
Super-Simple, den kann man über Combine ansprechen, man kann den in allen Kliniken und alles packen, also das ist super easy.
Genau, das habe ich alles umgebaut, ist jetzt super schick geworden, was ein kleiner Drawback ist, ich habe ein paar SF-Simples benutzt, die man nur auf iOS 15 sieht, auf iOS 14 sieht man sie nicht, an ein paar Stellen sieht man halt keinen Icon, da habe ich mir gedacht, okay, bevor ich das jetzt fixe, ich lasse es einfach, das stört nicht groß.
Ja, solange man noch nicht kennt, was gemeint ist, also das ist...
Na ja, es ist nur ein Icon und dahinter steht Text, da ist es ja okay.
Ich versuche ja auf Text zu verzichten und nur auf Simples zu benutzen, dann ist das problematisch.
Das würde ich auch gerne, aber es geht leider nicht ganz ohne Text. Aber da kommen wir auch später noch dazu, wie ich das als kleinen Teaser für in den nächsten, keine Ahnung, Viertel bis halbe Stunde, die Folge ist vollgepackt mit Dingen, die ich in der App-Infektionswelt erlebt habe.
Genau, so weit zum, genau, noch um, weil ich auch in dem Zuge habe ich auch neue Interpaces gemacht, wie sozusagen den Speech Simplifier und noch irgendwie, ich musste ja meinen Settings-Screen nochmal testen, okay, machst du nochmal zwei App-Icons neu und irgendwie einen Theme, habe ich dazu gepackt und dann, weißt du, man muss ja beim einreichen, muss du sagen, hier App einreichen, dann musst du die Interpaces auch nochmal einpacken.
So, und seit kurzem meint Apple, ja, App-Update-Review, aber Interpaces sind nö.
Wie nö?
Ja, dann haben sie dann einfach weiter auf warten auf Prüfung. Normalerweise war das immer so, wenn App-Update angeguckt wurden, die Interpaces zeitgleich angeguckt.
Genau, die sollen ja auch normalerweise zeitgleich auch released werden.
Richtig, macht ja auch irgendwie wenig Sinn, dass du sagst, hey, hier ist mein App-Update, aber Interpaces ist broken. Was ist jetzt halt passiert?
Der Blinder hat mir auch gleich geschrieben, ich kann nicht kaufen. Und ich dann auch erst dachte, so in der Deeper-App-Prosse funktioniert das, weil du auf den Sandbox-Server gehst, aber in der Production-Server ist das natürlich nicht da.
Und dann guck ich selber nicht mehr, naja, dann guck ich in App-Store-Connect und denke mir, hey, steht noch warten auf Prüfung. Dann hab ich einfach noch mein App-Update nachgeschoben, dachte mir, das kommt bestimmt dann.
Hast du die In-App-Käufe hart in der UI integriert oder lädst du die direkt vom Server?
Also was ich mache, ist, ich lag die halt immer vom Server. Und wenn die jetzt noch nicht von Apple freigegeben worden wären, dann würden die halt auch gar nicht in der UI auftauchen.
Okay, ne, das mache ich nicht.
Ich öffne meine Shop-Seite und dann mach ich ein Request an Apple und dann, App Store, gib mir mal bitte alle In-App-Purchases, die hier gerade valide sind, dann krieg ich die In-App-Purchases zurück und dann zeig ich die erst in der UI an.
Okay, ne, das mache ich nicht. Ich arbeite ja mit Switchy StoreKit. Hab ich mich jetzt auch nur nicht, weil ich seh, der jetzt auch schon StoreKit tut, sollte ich mich vielleicht auch mal reinhängen.
Hab ich mich noch nicht, also bei mir sind die Hardcodes drin, die Identifier davon.
Und man kann es jetzt auch gerade noch live sehen, weil ich auch noch mal schreiben musste für den Speech-Intesizer, hab ich ihn geschrieben.
Also ich weiß ja, man macht zwei App-Updates, wo ich dachte, okay, schieb ich mal kurz den Fix nach und guck, ob es irgendwie mit Review wurde oder nicht mit Review.
Dann hab ich den, hab ich den kontaktiert und den geschrieben, hab gesagt, hier, pass mal auf, warum, ja, kam eine Mail zurück.
Sie hätten, ja, die werden, weiß nicht, irgendwie, werden zu einem späteren Zeitpunkt Reviewed, blablabla, aber wir haben den Fall eskaliert und haben da jetzt jemanden drauf angesetzt.
Okay, das haben wir nicht gemacht.
Doch, sie haben es dann anscheinend reviewt und dann ging es auch so. Und dasselbe ist jetzt aber auch, ich hab dann auch wieder In-App-Purchases halt für zwei App-Icons gemacht, die sind jetzt in der App drin und die zeigen halt, der Purchase-Screen geht auf, der Text und der Subteil kommt nicht und der Preis kommt auch nicht.
Und dann drückst du auf den Knopf und dann sagt der Purchase, Error, Purchase Identifier was not found, so ungefähr. Also man kriegt eine Error Message gerade.
Ich hab den dann nochmal geschrieben, das ist irgendwie neu, was soll der Quatsch, das war doch vorher nicht so, warum ist das so, es macht doch keinen Sinn irgendwie ein App-Update zu releasen mit einem Feature, das man anpreist und das Feature ist nicht kaufbar.
Irgendwas läuft da ganz schief, keine Ahnung was, hoffentlich tutsich das wieder.
Genau, so weit so gut zum Settings-Screen und jetzt, da hab ich noch einen Punkt eingebaut, da hab ich dich ja schon vorher drauf hingewiesen, Alter, Alp-Update in der App, jetzt musst du mal reingucken und jetzt scrollen wir runter zum Punkt, was ist drin?
Nee, ich bin noch nicht so im Moment im Laden, warte, ja, ich hab die App auf.
So, jetzt gehen wir an den Settings-Screen, also der heißt jetzt "More" oder "Mehr" und jetzt scrollen wir runter bis zum Punkt "Friends for NFC". Oh, da steht mein Name.
Und wenn du da draufdimmst, dann kommt man... Meine App Store-Seite geht auf. Ja, ich mach dich jetzt zusätzlich mitreich.
Und da ist der Holger drin und meine Tante mit ihr, die macht auch so ein bisschen Business nebenbei.
Und dann muss ich dich auch bei meinen einbeißen.
Richtig, das ist auch das, was ich damit promoten will, lasst uns doch alle gemeinsam sowas machen, wir machen uns alle irgendwie so in irgendeinem Settings-Screen oder, muss ja nicht ultra präsent sein, aber wer sich auch immer dafür interessiert, lasst uns doch da irgendwie so Cross-App-mäßig uns gegenseitig promoten.
Ich meine, ich bin... Ich weiß, es ist als Kleiner Entwickler schwierig und ich bin auch gerne bereit, andere Leute irgendwie mitzupromoten und sagen "Hier, guck mal rein" und das Einzige, was ich erwarte, ist, mach das auch bei dir in die App rein.
Ich hab das natürlich jetzt für dich als... Weil du mein Podcast-Kollege bist, sag ich mal, in Vorleistung, in der Hoffnung, dass du auch irgendwann das machst.
Ja.
Sonst müssen wir alle deine Apps abdecken.
Genau, genau. Denn dein Settings-Screen sieht auch so viel besser aus als meiner.
Ja, ja, das ist auch, ich glaub mir, das ist ein Traum mit Swift, ja, das ist wirklich... Try it. Du musst ja nicht alles machen, mach mal mit nur einem Screen.
Ja, den Settings-Screen kann ich mal echt mal, den muss ich sowieso mal machen.
Und gerade da macht das für alle so viel Sinn, weil du halt echt super schnell einfach... Ich könnte auch sofort einfach umsortieren und sagen "Hey, die Section da oben, das ist der Punkt, da brauch ich... Weiß nicht, das ist super geil.
So, jetzt ist schon ein bisschen Zeit ins Land gegangen. Wow, eine Stunde und drei. Weil das Framework der Woche wird heute auch noch ein bisschen...
Das Framework der Woche.
Fuck yeah. Oh man, ich glaub heute steht irgendwie "ficken" oder "fuck yeah" im Titel oder irgendwas.
Ja, das Framework der Woche nennt sich "Barty Crouch". Ich hab's heute auch vom Arbeitskollegen irgendwie erst mitgekriegt. Hat irgendeine Harry Potter-Referenz... Keine Ahnung, wer Barty Crouch ist, ich hab mich nur bewundert. Warum das so komisch heißt?
Ja, Barty Crouch, ich bin auch mit einem Arbeitskollegen, haben wir schon mal so drüber geredet, was mich an Lokalisierung und Strings nähert und so weiter.
Und ich würde ja gerne meine App automatisch übersetzen. Und es gibt ja diverse Übersetzungstools im Internet, das ist Google Translate sein. Oder DeepL.com, kennt man.
Da hab ich mal so ein bisschen rumgekramt im Internet und auf GitHub und so nach DeepL gesucht und DeepL in Swift und so weiter und dann bin ich auf Barty Crouch gestoßen.
Das ist ein Tool, was dir verspricht, dass du deine Swift-File nicht mal verlässt und komplett deine App lokalisieren kannst. Also automatisiert lokalisieren.
Sieht folgendermaßen aus. Das ist ein bisschen was, was man sich aufsetzen muss. Ich hab jetzt zum Beispiel gestern meine komplette App in zwei Stunden französisch übersetzt und jede weitere Sprache, die ich jetzt mache, wird mich nur noch Minuten kosten.
Klar, das ist automatische Übersetzung, klar, da steht wahrscheinlich auch Quatsch drin. Aber was man damit macht, man installiert sich über Homebrew, eine Barty Crouch und man tut sich in seine Runscript-Face in sein Projekt etwas rein.
Was man erstmal anfängt und guckt sich alle Strings-Files, Strings-Files sind dein Projekt an. Dann fängt es an, sortiert alle Strings-Files alphabetisch, macht die hübsche ein bisschen auf, sucht dir empty Übersetzung raus.
Also viele Übersetzungen, wo du neue Umfänge eingefüllt hast und die du nicht übersetzt hast.
Genau, leg die nach ganz unten in die File, zeigt sie dir mit der Warning an und sagt hier, guck mal, fehlt was.
In dem Falle, dass man nicht automatisch translatet. Das war so der erste Step, den ich gemacht hab.
Sondern dann hab ich gesehen, ah, das sind ja zwei Strings auf, ich weiß gar nicht, was war, was auf Kinesisch oder sonst was, die nicht übersetzt waren.
Und dann schmeißt man sich ein Enum in die App rein und dieses Enum ruft man dann auf und zwar das sieht folgendermaßen, und hier ist noch mal kurz schicken.
Es nennt sich Enum Barty Crouch und dann hat man da verschiedene supported languages drin und eine Statistikfunktion, die heißt translate.
Und dann sagst du translate und die hat den ersten Parameter, also den Key, den du dafür haben willst. Lass es sein bei mir nfc_settings_blablabla. Und dann hast du translations unten im Comment noch als Ding.
Translation sagst du, ich möchte dieses Ding jetzt in, ich weiß nicht, du sagst, du gibst den deinen String auf Englisch, sagst das ist .en und sagst den String auf Englisch.
Und dann was er dann macht ist, unterschreibst du dir so einen Code und dann drückst du Command B und dann läuft dieses Skript rüber und ersetzt dir deine Zeile mit Strong Typed Swift Code, der auf deine Stringfiles rüber geht und setzt es automatisch in alle Stringfiles rein, den Key.
Und dann läuft der Translator an, der ruft die DeepL API auf und sagt, hey, ich hab den deutschen Text, das Haus ist blau, bitte, französisch, chinesisch, portugiesisch, weisigarnisch, englisch hätt ich das gern und zack zack zack hast du es auf einmal alles in deinen Stringfiles drin und du hast deine Stringfile nicht verlassen.
Das heißt du hast keinen Kontextwechsel, du musst es nicht irgendwie kies kopieren oder äh.
Also selbst wenn man nur eine Sprache supportet oder zwei, unglaublich geiles Ding, wenn man sich das einmal zusammengebastelt hat, was wie gesagt in zwei Stunden hatte ich das.
Was man sich dazu machen muss ist, man muss sich einen DeepL Account machen, DeepL.com, man kriegt 500.000 Zeichen pro Monat gratis, das ist nicht wenig, das muss man erstmal voll kriegen.
Ich hab gestern mal auf französisch übersetzt, waren ungefähr 15.000 Zeichen, jetzt kann man sich mal überlegen, wieviel ich noch übersetzen kann.
50.000 darfst du?
15.000 Zeichen.
Und 50 darfst du pro Monat?
500, 500 Millionen, okay.
Also dann kommst du unglaublich weit, man, auch dieses Tool lädt auch immer nur den Diff hoch, also das ist nicht, dass es jedes Mal sagt hier übersetzt mal, sondern auch, was schon übersetzt ist, fahrst du nicht an.
Also wenn du dann sagst, okay, wenn du, nein, wenn du, nein, kriegst du von dem französischen User deine Rückmeldung hier, die Übersetzung ist nicht ganz gut, schreib das mal lieber so und so, dann kannst du das mal anpassen und dann überschreibt er dir das auch nicht wieder.
Und natürlich sollte man das auch immer schön mit haben, damit man auch, also ich hab's auch stepweise committed, dass ich sehe, okay, was hat das Tool jetzt gemacht, das hat meine Übersetzung, die schon da war, der guckt nur, ist ein leerer String irgendwo zu einem Kider.
Ja, dann suche ich den Englischen dazu raus oder was aber dann veränderbar ist.
Genau, dann suche ich halt den passenden dazu raus, ich mein, DeepL bietet bei sich nicht 20, 25 Sprachen, also nicht alle, aber es gibt die gängigsten, 26, die gängigsten Sprachen bietet es.
Und ja, noch zu die, die will die Karte haben, auch für den Fried hier, weil einfach aus Fraud Detection die wollen nicht, dass du dir unnötig viele Accounts machst und halt irgendwie mehrere Karten haben, aber du kannst auf eine Karte nur eine Karte haben. Sie berechnen nichts, sie wollen einfach nur Daten dafür haben. Haben sie jetzt gekriegt von mir, finde ich auch nett und fair. Ich meine, sehr schön, dass nichts kostet und die Übersetzung ist verdammt gut. Also ich hab selber, wenn man das mal nur von deutsch auf englisch probiert, das ist fast ohne Korrektur, würde ich sagen, wow, also es ist schon und ich würde auch in der App anfangen auf deutsch zu schreiben, weil was halt gerne die macht, ist, wenn du deinen User mit "du" anredest, dann macht er auf deutsch gern "sie" draußen und so, das ist formal und dann lieber dann "die" draußen.
Dann lieber mit deutsch anfangen und auf "du" schreiben, weil dann wird es auch auf englisch und sonstiges Sprachen eher nicht formal.
Muss man wissen, wie man seine Kundschaft anreden will, ob es formal ist oder nicht. Ich bin da eher so, so wie es Apple macht, bisschen duzen.
Ja, gibt es auch noch, also verlinken wir den Genre, da gibt es auch noch einen Artikel zu, wie man sich das alles aufsitzt, Medienartikel.
Mein Ziel ist für meine Firma, ich möchte das so weit weg automatisieren und halt auch skalieren, dass ich da nicht mehr viel tun muss, sondern mich eher auf das konzentrieren, was mir Spaß macht, nämlich Apps entwickeln, Steuern zahlen.
Steuern zahlen, natürlich auch, Steuern vermeiden, was mir Spaß macht, Apps entwickeln und nicht mich in blöde Lokalisierung zu können.
Weil, wenn man will, ich habe das auch so gemacht, dass meine Stringfiles liegen im offenen Git, jeder, der möchte, kann auch gerne nach verbessern.
Hatt ich auch schon, dass mir ein Chineser gesagt hat, ey, du, da sind zwei, drei Sachen, die klingen echt ein bisschen schief, soll ich mal so, dann hat er alle auch gesehen, hat so ein Kumpel gemacht, hat er echt irgendwo ein paar Zeichen verändert, wo er meinte, du hast es besser, keine Ahnung.
Da muss man sich nicht mehr vertrauen, ne? Aber kann man ja auch irgendwie auch verletzen. Ich meine, wenn ich schon freiwillig ankomme, sag ich, komm, ich mach das. Ich meine, selbst in Französisch hab ich gesehen, da hat er auch so ein paar komische Sachen gemacht, so wie bei Lesen hat er einmal E-Krie, oder Schreiben, E-Krie, und dann irgendwie Redaktion rausgemacht, aber Redaktion macht überhaupt keinen Sinn, und dann hab ich auch nochmal nach verbessert. Also ich kann ja auch noch so ein bisschen Französisch, oder er hatte aus, einmal aus Donné mit R, das ist ja die, also wenn du spendest, Donné, gibt's mit Z und mit R, weiß gar nicht mehr, welche Formen das waren, aber die E-R-Form ist ja die Du-Form und die andere ist die höfliche.
Genau, dann hat er zwei Formen mit R gemacht und die dritte mit Z. Und ich dachte so, hä, warum? Du hast die anderen zwei richtig vor, übersetzt, und dann machst du die höfliche Form.
Also ich hab das schon drübergelesen, ich sag mal, alles was nicht, ich meine, wenn auf einmal in deinem Text "Puta Madri" drinnen steht, dann sollte man sich vielleicht überlegen, ob das von da rein gehört. Man sollte ja einmal drüberlesen, ob das von hier alles im Hand ist. Ich hab ja natürlich auch, man kann ja in den IOS-Settings für seine App, kann man in den App-Settings, wenn man da ganz runter scrollt, kann man ja auch die Sprache ändern, kann man sich dann gucken, okay, die nennt man App auf Französisch aus.
Ja, also, also, das geht ja noch. Interessant wird das dann, wenn du Arabisch hast, wo dann der Schrift von rechts nach links ist oder andere Sprachen, wo das auch so ist.
Weiß ich gar nicht, ob es so wichtig ist. Also klar, wahrscheinlich gibt es auch im arabischen Raum viele, die nicht Englisch sprechen. Bloß die, die am lautesten bei mir geblökt haben, waren jetzt die Franzosen und die Deutschen.
Das war nämlich das erste, als ich meine App rausgebracht hab, die ich erst auf Englisch rausgebracht hab. Und dann kam gleich ein Kommentar, du bist auf Deutsch, warum machst du deine App nicht auf Deutsch?
Ah, der war vollkommen recht, war halt im ersten Moment, hab ich gedacht, nee, ich mach das jetzt nur auf Englisch.
Ist ja auch erstmal richtig, weil jede Übersetzung kostet Zeit, und du hast ja einen viel größeren Markt, wenn du die erstmal auf Englisch machst. Und du kannst dann immer noch die Zeit investieren, die dann immer noch mal zu...
Genau, und ich hab halt auch letztes Mal noch einen Kommentar von einer Französin bekommen, die auch meinte, je ne sais pas, bla bla bla. Und dann hab ich gedacht, okay, wie krieg ich dieses Translationproblem weg?
Und auch wenn man jetzt sich ein neues Projekt aussetzt, sofort mit Partycrouch arbeiten, spart so viel Lager, so viel Zeit, und zack, kannst du auch einmal deine App in 15 Sprachen raushauen.
Und natürlich muss man, das hab ich dann auch gleich gemacht, die ganzen Store-Texte auch in so eine String-File packen, also die auch dann übersetzen und so weiter.
Weiß nicht, es gibt verschiedene Strings, die du noch im Store brauchst, am besten noch die Strings, die du für die Screenshots brauchst, mit reinpacken.
Wir müssen dein Githafile-Account verlinken, damit die Leute die Strings-Files anpassen können, übersetzen können.
Ja, mich findet man unter nick@gith, also n-i-c-k-a-t-gith, ist mein Usernämter. Also, ich, Französisch könnte ich nochmal...
Könntest du ja mal drüber gucken.
Bien sûr.
Bien sûr. Ich bin ja auch eine Glasrottwein.
Mein Französisch ist ja nicht so gut, dass ich da mehr zu tun habe.
Nee, aber du könntest ein Obvious Error schon spotten.
Ja, das fehlt das vielleicht.
Bon, c'est ça?
Ah ouais.
Ja, ich bin mal gespannt, wenn wir uns das nächste Mal hören, wie weit dann die Firmengründung ist.
Ja, dann schließe ich schon die Mark Zuckerberg da und hab... Nicoverse.
Das wäre ein geiler Name, Nicoverse.
Mal gucken. Kommt in die Liste.
Gut, dann, schön haben noch. Bis zum nächsten Mal.
Bis zum nächsten Mal.
Tschüss.
Ciao.
[Musik]