• Es ist wieder soweit: Die WWDC 2022 ist in vollem Gange und mit ihr können wir Entwickler uns auf eine Vielzahl neuer APIs, Beta-Versionen und Updates stürzen. Noch ist es schwer, sich einen kompletten Überblick über all die großen und kleinen Neuerungen zu verschaffen, die uns ab Herbst mit den neuen Versionen von iOS und Co. erwarten. Und auch ich werde einiges an Zeit brauchen, um mich mit den neuesten Updates und Änderungen vertraut zu machen. Was ich aber bisher gesehen habe, gefällt mir immens gut. Persönlich halte ich diese WWDC für eine der stärksten. Das liegt nicht nur an…

  • Speichern von Bildern im Dateisystem Ergänzend zum ersten Teil dieser Reihe zeige ich euch in diesem Artikel, wie ihr Bilder im Dateisystem einer iOS-App speichern und sie über Core Data-Entities referenzieren könnt. Hierbei gehe ich ausschließlich auf die notwendigen Änderungen ein und stelle am Ende beide Verfahren und ihre Vor- und Nachteile gegenüber. Schritt 1: Erstellen eines File-System-Helpers Wie geschrieben sollen die Bilder nun im Dateisystem abgelegt und daraus geladen werden. Zu diesem Zweck binde ich in das Projekt zunächst einen neuen Helper-Typ namens ImageFileHandler ein. Der besitzt eine Typ-Methode, die als Parameter einen Dateinamen erweitern. Als Ergebnis liefert die…

  • Umwandlung von Bildern in Data-Instanzen Eine häufige Anfrage aus der Community bezieht sich auf das Speichern und Auslesen von Bildern mittels Core Data. Aus diesem Grund möchte ich in dieser kleinen Artikelreihe die in meinen Augen zwei typischen Vorgehensweisen erläutern, über die sich Bilder mit Hilfe von Core Data abspeichern und wieder abrufen lassen. Eines vorneweg: Bei diesem Thema geht es nicht ausschließlich um Core Data. Ja, Core Data kommt zum Einsatz, um Bilddaten oder Verweise auf Bilddateien zu speichern. Die Umwandlung eines Bildes in eine Data-Instanz und wieder zurück bzw. den Zugriff auf das Dateisystem muss man aber unabhängig…

  • Aus der Community kam des Öfteren bereits die Frage, wie man in SwiftUI ein Textfeld umsetzen kann, das ausschließlich den Umgang mit Zahlenwerten erlaubt. Ein Beispiel für eine mögliche Lösung für dieses Szenario stelle ich euch in diesem Artikel vor. Herzstück ist ein eigens definiertes Binding auf Basis eines Strings. Ein solches benötigen wir zwingend, da jede TextField-Instanz ein String-Binding voraussetzt. Das von mir bereitgestellte String-Binding besitzt jedoch einen Kniff. Es liefert einen Zahlenwert auf Basis eines Intergers über seinen Getter zurück. Und über den Setter prüfe ich, ob sich die Eingabe des Nutzers in einen Integer umwandeln lässt. Falls…

  • Die sogenannte Batterieverordnung der EU „droht“ Herstellern wie Apple und Samsung, ihre Geräte womöglich grundlegend neu designen zu müssen. Die Verordnung sieht zwei Regeln vor, die zukünftig für alle Smartphones (und auch andere technische Geräte) gelten sollen. So soll USB-C als einheitlicher (Lade-)Anschluss zum Einsatz kommen, und Akkus sollen sich leicht mit einfachem Werkzeug selbst austauschen lassen. Ziel dieser Forderungen: mehr Nachhaltigkeit, mehr Umweltschutz. Es sind hehre Ziele, doch ich frage mich, ob die geplanten Maßnahmen tatsächlich zielführend sind. Meine Gedanken dazu. Die Sache mit USB-C Die Vorstellung, dass alle Smartphones (und ja, ich persönlich schiele hier ganz besonders in…

  • Auf Fotoauswahl reagieren Im ersten Teil dieser Artikelreihe befassten wir uns mit der grundlegenden Implementierung eines PHPickerViewController in SwiftUI. Diese bisherige Umsetzung erweitern wir nun um eine funktionierende Auswahlmöglichkeit eines Fotos, welches wir im Anschluss in unserer Beispiel-App präsentieren. Analog zum Einsatz des UIImagePickerController zum Zugriff auf die iPhone-Kamera nutzt auch PHPickerViewController für die Steuerung der Fotoauswahl einen Delegate. Grundlage dieses Delegates ist das PHPickerViewControllerDelegate-Protokoll. Um die Konfiguration unserer SwiftUI-View also fortsetzen zu können, benötigen wir einen Coordinator, der konform zu jenem Protokoll ist. PHPickerViewControllerDelegate besitzt lediglich eine einzige Anforderung in Form der Methode picker(_:didFinishPicking:). Das nachfolgende Listing zeigt, wie…

  • Grundlegende Konfiguration Ergänzend zur Artikelreihe, die den Zugriff auf die Systemkamera mit SwiftUI behandelte, möchte ich euch nun an dieser Stelle zeigen, wie ihr auf die Foto-Library zugreifen und Fotos für die weitere Bearbeitung innerhalb einer App auswählen könnt. Auch beim Zugriff auf die Foto-Library gibt es (noch) keinen (mir bekannten) direkt in SwiftUI integrierten Weg. Stattdessen nutzt man eine Klasse namens PHPickerViewController und bindet diese als Representable in SwiftUI ein. Die Klasse PHPickerViewController steht seit iOS 14 zur Verfügung und ersetzt den vorherigen Zugriff auf die Foto-Library via UIImagePickerController. Zwar lässt sich auch heute noch ein UIImagePickerController zum Zugriff…

  • Unavailability Condition Swift besitzt bereits seit geraumer Zeit die Möglichkeit, Code erst ab einer bestimmten macOS-, iOS-, watchOS- oder tvOS-Version auszuführen. Die sogenannte Availability Condition ermöglicht es so, neuere APIs für aktuelle Betriebssystemversionen zu nutzen und gleichzeitig eine alternative Implementierung anzubieten, sollte eine App auf einer älteren Plattform genutzt werden. Das folgende Listing zeigt eine simple Variante, wie sich eine solche Availability Condition in Swift umsetzen lässt: Mittels #available führt man die Availability Condition aus und übergibt in runden Klammern die Betriebssysteme inklusive der Version, die mindestens zur Verfügung stehen muss, um den nachfolgenden Code im If-Block ausführen zu können.…

  • Eine meiner ersten Artikelreihen hier auf dem Blog beschäftigte sich mit den unterschiedlichen Mac-Modellen und welche davon speziell für Entwickler geeignet sind. Das scheint eine Ewigkeit zurückzuliegen, damals gab es noch nicht einmal Apple Silicon. Und heute? Heute gibt es kaum noch Macs mit Intel-Prozessoren. Und das offenkundig aus sehr gutem Grund. Das Apples hauseigene Prozessoren mehr als nur konkurrenzfähig sind, bewies bereits die erste Iteration in Form des M1. Ich erinnere mich noch gut, wie ich damals gleichermaßen begeistert und skeptisch war. Begeistert, weil die Performance definitiv zu überzeugen wusste. Skeptisch, da der M1 zunächst lediglich für die „kleineren“…

  • Mac Catalyst-Support Die Klasse UIImagePickerController, die wir in den vorangegangenen Artikeln dieser Reihe (siehe Linksammlung am Ende des Artikels) in SwiftUI eingebunden haben, ist bekanntermaßen Teil des UIKit-Frameworks und so ausschließlich für iOS- und iPadOS-Apps relevant. Dank der Einführung von Mac Catalyst gibt es aber auch die Möglichkeit, unser Representable für den Kamerazugriff in macOS-Apps zu nutzen. Wie geschrieben müssen diese macOS-Apps aber eben auf Mac Catalyst basieren. In den Projekteinstellungen des bestehenden Targets lässt sich in den Deployment Infos die Unterstützung für Mac Catalyst via Checkbox aktivieren. Das Spannende: Im Falle dieses Projekts ist das alles, was nötig ist,…