DAS SWIFT-HANDBUCH APPS PROGRAMMIEREN FÜR MACOS, IOS, WATCHOS UND TVOS BUCH-UPDATE: HANSER KUNDENCENTER
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Thomas Sillmann Das Swift-Handbuch Apps programmieren für macOS, iOS, watchOS und tvOS Buch-Update: Kapitel 42 „Einstieg in iPadOS“
Der Autor: Thomas Sillmann, Aschaffenburg www.thomassillmann.de Alle in diesem Kapitel enthaltenen Informationen, Verfahren und Darstellungen wurden nach bestem Wissen zusammengestellt und mit Sorgfalt getestet. Dennoch sind Fehler nicht ganz aus zuschließen. Aus diesem Grund sind die im vorliegenden Kapitel enthaltenen Informationen mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Autor und Verlag übernehmen infolgedessen keine juristische Verantwortung und werden keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieser Informationen – oder Teilen davon – entsteht. Ebenso übernehmen Autor und Verlag keine Gewähr dafür, dass beschriebene Verfahren usw. frei von Schutzrechten Dritter sind. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Buch berechtigt deshalb auch ohne besondere Kennzeich nung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz- Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften. Bibliografische Information der Deutschen Nationalbibliothek: Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbiblio grafie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar. Dieses Werk ist urheberrechtlich geschützt. Alle Rechte, auch die der Übersetzung, des Nachdruckes und der Vervielfältigung des Kapitels, oder Teilen daraus, vorbehalten. Kein Teil des Werkes darf ohne schriftliche Genehmigung des Verlages in irgendeiner Form (Fotokopie, Mikrofilm oder ein anderes Verfahren) – auch nicht für Zwecke der Unterrichtsgestaltung – reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden. © 2020 Carl Hanser Verlag München, www.hanser-fachbuch.de Lektorat: Sylvia Hasselbach "Das Swift-Handbuch": Print-ISBN: 978-3-446-45505-4 E-Book-ISBN: 978-3-446-45730-0 E-Pub-ISBN: 978-3-446-46107-9
Inhalt 42 Einstieg in iPadOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 42.1 Änderung der Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 42.2 Multitasking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 42.3 Multiple Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 42.4 Weitere Änderungen und Verbesserungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
42 Einstieg in iPadOS Mit iPadOS erhielt das iPad letzten Herbst sein eigenes Betriebssystem. Das klingt zunächst mächtiger, als es tatsächlich ist. Denn iPadOS basiert auf iOS und somit jenem Betriebssystem, für das Entwickler seit Einführung von Apples Tablet be reits Anwendungen erstellen. Das hat zur Folge, dass sich für iOS-Entwickler zu nächst einmal im Grunde nichts ändert. iPadOS fußt weiterhin auf UIKit und ver wendet bekannte Elemente wie UIViewController und UIView. Man muss iPadOS stattdessen als neue Schicht betrachten, die iOS übergestülpt ist. So verfügt iPadOS über bestimmte Funktionen und technische Möglichkeiten, die sich eben nur auf einem iPad und nicht auf einem iPhone bzw. iPod touch nut zen lassen. Dieses Kapitel fungiert sowohl als Einstieg wie auch als kleine Übersicht für iPadOS. Ich stelle euch im Folgenden die wichtigsten Neuerungen im Vergleich zu iOS vor und gebe eine Einführung, wie ihr diese in euren eigenen Apps nutzen könnt. 42.1 Änderung der Architektur Zunächst einmal ist es wichtig, die Neuerungen in puncto App-Architektur zu ver innerlichen. Die gelten nämlich nicht nur für das neue iPadOS, sondern greifen auch bei Apps ab iOS 13. Werfen wir dazu zunächst einmal einen Blick auf den Aufbau einer iOS-App bis iOS 12. Den Startpunkt stellt hier der App-Delegate dar, der für alle Belange rund um den Lebenszyklus einer Anwendung verantwortlich ist. Er ist es auch, über den eine UIWindow-Instanz erzeugt wird. Hierbei handelt es sich um das Fenster des Programms, in dem typischerweise Views und View-Controller dargestellt werden. Jenes UIWindow verfügt entsprechend über einen Root-View-Controller, jener An sicht, die das Fenster anzeigt.
2 42 Einstieg in iPadOS Mit iOS bzw. iPadOS 13 spielt der App-Delegate noch immer eine wichtige Rolle, jedoch wurde ein großer Teil seiner Aufgaben in ein anderes Element ausgelagert: dem sogenannten Scene-Delegate. Und hier kommen wir zugleich auch zu einer der größten Neuerungen in iPadOS, die erst dank des Scene-Delegate überhaupt mög lich werden. Denn iPadOS erlaubt das Erstellen und Anzeigen mehrerer Fenster für eine einzige App (siehe hierzu auch Abschnitt 42.3, „Multiple Windows“). Um die Darstellung mehrerer Fenster zu ermöglichen, führt Apple in iOS und iPadOS 13 mehrere neue Elemente ein, die allesamt unter dem Begriff Scene fir mieren. Eine Scene fasst alle Elemente genau eines Windows zusammen. Gleich zeitig kann eine App unter iPadOS mehrere solcher Scenes besitzen. So lassen sich – wenn eine Anwendung das unterstützt – mehrere Fenster parallel öffnen. Innerhalb eines Xcode-Projekts machen sich diese Scenes vor allen Dingen durch eine neue Klasse bemerkbar, die automatisch bei neuen Projekten erzeugt wird. Sie trägt den Namen SceneDelegate und stellt eine neue Ergänzung zur bereits bekannten AppDelegate-Klasse dar. Der Scene-Delegate für die Arbeit mit mehre ren Fenstern verantwortlich. Zudem übernimmt er alle Aufgaben des App-Dele gate, die im direkten Zusammenhang mit dem View-Lifecycle stehen. Und genau jener Aspekt ist auch für iPhone-Apps relevant. Sie unterstützen zwar nicht die Arbeit mit mehreren Fenstern, nutzen aber auch ab iOS 13 den Scene-Delegate. Der Scene-Delegate basiert auf dem neuen UIWindowSceneDelegate-Protokoll, das wiederum vom UISceneDelegate-Protokoll abgeleitet ist. Tabelle 42.1 gibt eine kleine Übersicht verschiedener Methoden aus dem UIApplicationDelegate- Protokoll und dem jeweils zugehörigen Äquivalent des UISceneDelegate. Die genannten Methoden wandern so ab iOS und iPadOS 13 vom App- in den Scene- Delegate. Tabelle 42.1 Auszug verschiedener UIApplicationDelegate-Methoden und deren UISceneDele- gate-Äquivalent Bisherige UIApplicationDelegate-Methode Äquivalent im UISceneDelegate-Protokoll applicationWillEnterForeground(_:) sceneWillEnterForeground(_:) applicationDidBecomeActive(_:) sceneDidBecomeActive(_:) applicationWillResignActive(_:) sceneWillResignActive(_:) applicationDidEnterBackground(_:) sceneDidEnterBackground(_:) Unabhängig davon, ob man mehrere Fenster in einer App unterstützt, ist der Scene-Delegate die neue Anlaufstelle für alle Events rund um den View-Lifecycle. Ergänzend möchte ich euch zudem noch eine weitere und sehr wichtige Methode aus dem UISceneDelegate vorstellen: scene(_:willConnectTo:options:). Sie ist der Startpunkt zum Erstellen einer Scene in iOS bzw. iPadOS. Das System ruft sie auf, sobald eine neue Scene und damit ein neues Fenster für eine Anwendung
42.1 Änderung der Architektur 3 erzeugt wird. Über diese Methode erfolgt dann die gewünschte Konfiguration für die neue Scene. In neu erstellten Xcode-Projekten, die auf SwiftUI basieren, findet sich bereits eine passende (und zugleich sehr simple) Implementierung dieser Methode (siehe Lis ting 42.1). Darin erfolgt die Erstellung der Startansicht mittels SwiftUI sowie die anschließende Zuweisung zu einem UIWindow. Letzteres wird mithilfe des neuen Initializers init(windowScene:) erzeugt, das eine Instanz vom Typ UIWindow Scene als Parameter erwartet; die wiederum mithilfe des scene-Parameters der Delegate-Methode ermittelt werden kann. Listing 42.1 Standardimplementierung des SceneDelegate unter SwiftUI class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { let contentView = ContentView() if let windowScene = scene as? UIWindowScene { let window = UIWindow(windowScene: windowScene) window.rootViewController = UIHostingController(rootView: contentView) self.window = window window.makeKeyAndVisible() } } } Die restliche Implementierung verhält sich ähnlich, wie man es bereits von der Methode application(_:didFinishLaunchingWithOptions:) des UIApplica- tionDelegate kennt. Dank des Scene-Delegate können nun jedoch mehrere Fens ter parallel für eine App genutzt werden. Genau wie die AppDelegate-Klasse wird auch SceneDelegate mittels der Info. plist-Datei für eine App registriert. Dazu dient zunächst ein Schlüssel mit dem Na men Application Scene Manifest. Darin bringt man in Form eines Dictionaries pro Scene die benötigten Infos unter. Dazu gehört der Name der zugehörigen Klasse, die als UISceneDelegate fungiert, sowie ein Bezeichner für jene Scene. Zusätzlich kann ein Storyboard angegeben werden, dessen initialer View-Controller als Start punkt für die Scene dient; diese Einstellung kennt man auch vom Main storyboard file base name-Schlüssel. Erstellt man mittels Xcode ein neues iOS-Projekt, erhält man die genannten Ein stellungen out of the box. Ein Beispiel-Auszug aus der Info.plist mit dem beschrie benen Verweis auf den Scene-Delegate zeigt Bild 42.1.
4 42 Einstieg in iPadOS Bild 42.1 Zum UISceneDelegate-konforme Klassen werden – wie der App-Delegate – über die Info.plist-Datei registriert. Neben dem Scene-Delegate gibt es einige weitere Scene-Elemente, die den Aufbau von iOS-Apps mit Version 13 ändern. Im Folgenden findet ihr eine kleine Über sicht der neuen Elemente. UIScene und UIWindowScene UIScene und dessen Subklasse UIWindowScene repräsentieren genau eine Scene eurer App. UIWindowScene besitzt hierbei einen Verweis auf das zugehörige Win dow, das die Scene anzeigt. Instanzen beider Klassen werden generell vom System selbst erzeugt, sobald dieses eine Scene benötigt (sei es eine zentrale Scene für die Hauptansicht einer App oder eine neue Scene zum Einblenden eines neuen Fensters). Interaktionen mit diesen Elementen finden in der Regel über den Scene-Delegate statt. UISceneConfiguration Eine Instanz vom Typ UISceneConfiguration kommt bei der Erstellung neuer Scenes zum Einsatz. Die Konfiguration enthält Informationen über die zu erzeu gende Scene. Dazu gehört beispielsweise, mit welcher Delegate-Klasse die Scene verknüpft ist oder optional der Verweis auf ein Storyboard, dessen initialer View-
42.1 Änderung der Architektur 5 Controller als Startpunkt einer neuen Scene auf Basis der Konfiguration dienen soll. UISceneConfiguration-Instanzen lassen sich auf zwei Arten erzeugen. Neben dem „klassischen“ Weg über den Code könnt ihr alle gewünschten Konfigurationen auch innerhalb der Info.plist-Datei registrieren und daraus auslesen. Letzteres ist auch der von Apple präferierte Weg zum Erstellen von Konfigurationen. Standardmäßig verfügt ein iOS-Projekt über exakt eine UISceneConfiguration, die schlicht den initialen View-Controller aus dem Main-Storyboard lädt. Nutzt ihr SwiftUI, entfällt der Verweis auf das Storyboard. Stattdessen wird die initiale View im Code innerhalb des SceneDelegate erzeugt. UISceneScession Eine UISceneSession verwaltet eine UIScene und enthält Informationen darüber. Ein solches Session-Objekt wird automatisch vom System für jede Scene erzeugt, beide Elemente sind somit direkt miteinander verknüpft. Neue Scenes inklusive zugehöriger Session lassen sich mithilfe der UIApplication-Klasse erstellen und verwalten. Neben einem eindeutigen Identifier besitzt eine UISceneSession auch die zugrun deliegende Konfiguration in Form einer UISceneConfiguration-Instanz, die als Basis für die Erstellung der Scene dient. Zusammenfassend lässt sich sagen, dass die Einführung des Scene-Delegates in klusive all der vorgestellten neuen Klassen und Protokolle keine dramatischen Auswirkungen auf bestehende Anwendungen hat. Auch für reine iPhone-Apps er gibt sich daraus nicht viel Neues. Stattdessen existiert jetzt eine weitere Schicht, die sich um das Window-Management kümmert. Unterstützt eine App die Arbeit mit mehreren Fenstern nicht, bedeutet das im einfachsten Fall, schlicht die Metho den des Scene-Delegate so zu implementieren, wie es zuvor entsprechend im App- Delegate der Fall war. Statt applicationDidBecomeActive(_:) wandert der zuge hörige Code des App-Delegate nun in die sceneDidBecomeActive(_:)-Methode des Scene-Delegate, genau so verhält es sich mit den anderen genannten Metho den.
6 42 Einstieg in iPadOS 42.2 Multitasking Eine der großen Stärken des iPad besteht darin, mehrere Apps parallel ausführen zu können. Dabei kommen vorrangig zwei Techniken zum Einsatz: Slider Over und Split View. Mit Slider Over legt sich ein Anwendungsfenster über eine andere aktive App und verdeckt so einen Teil von deren Ansicht (siehe Bild 42.2). Slider Over-Fenster sind sehr schmal und vergleichbar mit der Breite von iPhone-Apps im Hochformat. Diese Ansicht ist ideal, um schnell Informationen aus einer App auszulesen oder bestimmte Daten abzugleichen. Bild 42.2 Mittels Slide Over legt sich ein App-Fenster über ein anderes. Mittels Split View erfolgt die Darstellung zweier Fenster parallel nebeneinander (siehe Bild 42.3). Die Größe der beiden Fenster lässt sich mithilfe eines Schiebereg lers in festen Stufen anpassen. So verlieren zwar die Apps, die via Split View dar gestellt werden, einen Teil ihrer Anzeigefläche, dafür kann der Nutzer parallel mit beiden Anwendungen arbeiten und direkt zwischen ihnen wechseln.
42.2 Multitasking 7 Bild 42.3 Die Split View ermöglicht die parallele Nutzung zweier Apps. Es ist auch möglich, beide Darstellungsmöglichkeiten miteinander zu kombinie ren. So lassen sich problemlos zwei Apps mittels Split View nebeneinander dar stellen, während via Slide Over zusätzlich eine dritte App über die beiden Fenster gelegt wird. Damit diese Multitasking-Funktionen des iPad funktionieren, müssen Apps an die dynamische Größe der Fenster angepasst werden. Gleichzeitig muss die Checkbox mit dem Titel „Requires full screen“ deaktiviert sein, andernfalls unterstützt die App weder Slide Over noch Split View auf dem iPad (siehe Bild 42.4).
8 42 Einstieg in iPadOS Bild 42.4 Nur wenn die Checkbox „Requires full screen“ in den Target-Einstellungen einer iPad-App deaktiviert ist, unterstützt sie Multitasking-Funktionen wie Slide Over und Split View. 42.3 Multiple Windows Neu mit iPadOS 13 ist die Möglichkeit, mehrere Fenster für eine App parallel zu öffnen. Das ist beispielsweise für dokumentenbasierte Apps eine wahnsinnig span nende Funktion, da Nutzer so parallel mehrere Dokumente in jeweils einem eige nen Fenster auf dem iPad darstellen und verwalten können. Zusammen mit den Multitasking-Funktionen Slide Over und Split View entstehen so ganz neue Mög lichkeiten, um mit dem iPad effizient zu arbeiten. Es gibt zwei Vorgehensweisen, um aus einer iPadOS-App heraus neue Fenster zu erzeugen. Eine davon ist Drag & Drop. So lässt sich beispielsweise durch Einblen den des Docks und Ziehen eines App-Icons auf die Bildschirmfläche jederzeit ein neues Fenster erstellen (natürlich vorausgesetzt, dass die App den Umgang mit mehreren Fenstern unterstützt). Auch Elemente innerhalb einer App wie Listen einträge oder Symbole, die Drag & Drop unterstützen, können auf die beschriebene Art und Weise neue Fenster erzeugen. Alternativ gibt es die Möglichkeit, Fenster via Code zu erzeugen und einzublenden.
42.3 Multiple Windows 9 Damit eine App die Erstellung mehrerer Fenster unterstützt, muss zunächst die Checkbox mit dem Titel „Supports multiple windows“ in den Target-Einstellungen aktiviert werden (siehe Bild 42.5). Das führt zu einer Aktualisierung des Werts für den Schlüssel „Enable Multiple Windows“ in der Info.plist-Datei. Jener Schlüssel ist Teil des Application Scene Manifest-Dictionaries, in dem auch die Scene-Konfigura tionen unterkommen. Bild 42.5 Über die Checkbox „Supports multiple windows“ aktiviert man die Unterstützung zur Darstellung mehrerer Fenster. Alleine auf Basis dieser Änderung ist es bereits möglich, mehrere Fenster für die zugrundeliegende App zu erstellen. Dazu zieht man (wie bereits beschrieben) das zugehörige App-Symbol aus dem Dock. Die App öffnet sich daraufhin in einem neuen Fenster – ganz so, als hätte man sie ein zweites Mal gestartet. Welche Ansicht bei Erstellung eines neuen Fensters erscheint, hängt von der je weiligen Konfiguration ab. Die Konfigurationen auf Basis der Klasse UISceneCon- figuration fügt man standardmäßig innerhalb der Info.plist-Datei hinzu. Dort fin det sich bereits ein Eintrag mit dem Namen „Default Configuration“, dem als Delegate-Klasse SceneDelegate zugewiesen ist (siehe Bild 42.6). Das bedeutet, dass bei Einblenden eines neuen Fensters auf Basis dieser Konfiguration die Scene Delegate-Klasse bestimmt, welche Ansicht geladen und dargestellt wird.
10 42 Einstieg in iPadOS Bild 42.6 Über Konfigurationen steuert man, welche Delegate-Klasse für das Einblenden eines neuen Fensters verantwortlich ist. Es lassen sich beliebig viele weitere Konfigurationen innerhalb der Info.plist-Datei ergänzen. Durch Einsatz verschiedener Klassen, die konform zum UIWindowScene Delegate-Protokoll sind, lässt sich so das Einblenden verschiedener Fenster steuern. Eine dokumentenbasierte App kann das beispielsweise nutzen, um über eine Kon figuration eine spezifische Datei in einem neuen Fenster zu öffnen (statt einfach die App mit der initialen Startansicht ein zweites Mal einzublenden). Der in der Konfiguration definierte zugehörige Delegate regelt hierbei, welche View zu laden ist und versieht die mit allen notwendigen Informationen (zum Beispiel dem anzu zeigenden Dokument). Zusätzliche Informationen lassen sich hierbei mittels einer NSUserActivity speichern und weitergeben. Um Fenster im Code zu managen, kommen drei neue Methoden zum Einsatz, die allesamt Teil der UIApplication-Klasse sind: requestSceneSessionActiviation(_:userActivity:options:errorHand- ler:): Erzeugt ein neues Fenster und blendet es ein. requestSceneSessionRefresh(_:): Aktualisiert die Inhalte eines Fensters. requestSceneSessionDestruction(_:options:errorHandler:): Schließt ein Fenster.
42.4 Weitere Änderungen und Verbesserungen 11 42.4 Weitere Änderungen und Verbesserungen Neben den genannten Besonderheiten, durch die iPadOS sich von iOS unterschei det, gibt es noch einige weitere Features speziell für iPadOS. PencilKit Unter dem Namen PencilKit fasst Apple verschiedene Funktionen rund um den Apple Pencil zusammen. Anders, als es der Name vermuten lässt, handelt es sich dabei nicht um ein eigenes Framework. Die gesamten unter diesem Begriff zusam mengefassten Funktionen sind Teil von UIKit, lassen sich aber (zumindest bisher) nur im Zusammenspiel mit dem iPad nutzen (dem iPhone fehlt schlicht eine Unter stützung des Apple Pencil). Fonts Mit iPadOS ist es möglich, eigene Fonts auszuliefern, die sich systemweit nutzen lassen (also auch außerhalb einer eigenen App). Dazu steht ein neues Font Picker Interface zur Verfügung. Desktop-Class Browsing Safari macht unter iPadOS einen gewaltigen Sprung nach vorne. Der Browser ver hält sich nun so wie sein Desktop-Pendant auf dem Mac und fordert nicht länger Mobilseiten an, sondern die eigentliche Website, so wie sie auch auf dem Mac ab gerufen wird. Darüber hinaus verfügt Safari über neue Funktionen, unter anderem besitzt der Browser nun – genau wie auf dem Mac – einen eigenen Download-Manager. Ent sprechend lassen sich nun Dateien direkt aus Safari in die native Dateien-App he runterladen.
Der Weg zum erfolgreichen Online-Marketing E-Book inside Weller, Harmanus Content Design Durch Gestaltung die Conversion beeinflussen 416 Seiten. Komplett in Farbe. Inklusive E-Book € 39,–. ISBN 978-3-446-44295-5 Auch einzeln als E-Book erhältlich € 29,99. E-Book-ISBN 978-3-446-44535-2 Lernen Sie, Content und Design zusammenzuführen, um potenzielle Kunden von Ihrem Angebot zu überzeugen. Die Autoren erklären Ihnen, wie Sie mit psychologischen Triggern aus Besuchern Ihrer Website Newsletter-Abonnenten, Leads und Kunden machen und wie Sie durch Content-Optimierung nachhaltig Ihre Umsätze steigern. Das Buch bietet Ihnen eine Übersicht über die Voraussetzungen für erfolgreiches Content Design sowie eine klar strukturierte Einführung in die Gestaltung und Konzeption digitaler Inhalte. Profitieren Sie nicht nur vom Expertenwissen der Autoren, sondern auch von erfahrenen Marketingverantwortlichen bei Facebook, Zalando, Pixum und LogMeIn. Mehr Informationen finden Sie unter www.hanser-fachbuch.de
Sie können auch lesen