7 okt. 2019

Multi-Window-ondersteuning in je iPad-app

Native ontwikkeling voor iPadOS

Vorige maand bracht Apple iPadOS uit, het eerste dedicated operating system voor iPad. Het verschilt van iOS met zijn ondersteuning voor het grotere iPad scherm, inclusief multi / split screen vensters. Ik ontwikkel apps en het was tijd om te profiteren van deze nieuwe mogelijkheden die iPadOS biedt.

Sinds 2016 gebruik ik iPad als mijn hoofdcomputer, het is een geweldige mobiele computer. Het besturingssysteem is echter anders dan dat van de meeste computers. iPadOS is gebaseerd op iOS, dat draait op Apple's populaire mobiele telefoon, de iPhone. Dit maakt de iPad een beetje anders in dagelijks gebruik vanwege de manier waarop apps worden uitgevoerd.

iPad Pro als mijn hoofdcomputer verbonden met een terminal via Blink
iPad Pro als mijn hoofdcomputer verbonden met een terminal via Blink

Vanwege de smartphone-roots van iPadOS, behandelt het besturingssysteem apps zoals een iPhone dat doet: apps draaien volledig scherm, gericht op een enkele taak. Mensen zijn hier dol op bij de iPad, omdat het een geweldige manier is om je geest geconcentreerd te houden op één ding.

Meerdere vensters ondersteuning voor iPad

Er zijn situaties waarin het uitvoeren van meerdere vensters tegelijkertijd erg handig kan zijn, en dit is waar Apple iPadOS heeft verbeterd toen het ondersteuning introduceerde om apps naast elkaar te draaien.

Meerdere vensters ondersteuning op iPad, twee instanties van dezelfde app tegelijk draaien
Meerdere vensters ondersteuning op iPad, twee instanties van dezelfde app tegelijk draaien

Zelfs als je aan één taak werkt, is ondersteuning voor meerdere vensters erg handig omdat het je in staat stelt om meerdere instanties van dezelfde app tegelijk te draaien. Dit maakt verschillende use-cases mogelijk waarbij je inhoud vanuit verschillende hoeken kunt bekijken en bewerken. Zoals het vergelijken van twee verschillende maanden in je agenda, het bewerken van een lang document of het bekijken van de kaart op verschillende schalen tegelijk.

Verschillende maanden vergelijken in de kalender-app
Verschillende maanden vergelijken in de kalender-app
De kaart op verschillende schalen tegelijk bekijken
De kaart op verschillende schalen tegelijk bekijken

Ontwerpintentie

Toen Apple de ondersteuning voor meerdere vensters op iPad introduceerde ontwierpen ze dit met respect voor de mobiele roots van iPadOS. In tegenstelling tot traditionele pc-apps, waar complexe software standaard via meerdere verschillende vensters (en panelen) kan draaien, handhaaft iPadOS de eis dat een app alles vanuit één venster moet kunnen doen.

Het is een ontwerpeis op iPad dat alle app-vensters van dezelfde soort zijn en dat elk venster alles in de applicatie kan doen. De gebruiker kan alles vanuit één venster doen als hij dat wil. Ze zouden alleen meerdere vensters moeten kunnen maken als ze denken dat het nuttig is, maar de app zou dat nooit mogen vereisen. Dit vergemakkelijkt de eenvoudige manier waarop apps op iPadOS draaien, je kunt apps op volledig scherm blijven gebruiken zoals op een smartphone.

Ken Ferry legt het ontwerp van meerdere vensters ondersteuning voor iOS uit tijdens WWDC 2019
Ken Ferry legt het ontwerp van meerdere vensters ondersteuning voor iOS uit tijdens WWDC 2019

App Lifecycle (en codewijzigingen)

Vanuit een technisch perspectief introduceerde Apple UIWindowScene met een corresponderende UISceneSession-abstractie in de UI-structuur. Het zit tussen het UIScreen en UIWindow.

Conceptueel overzicht UI-structuur iPadOS zoals uitgelegd door Steve Holt tijdens WWDC 2019
Conceptueel overzicht UI-structuur iPadOS zoals uitgelegd door Steve Holt tijdens WWDC 2019
Conceptueel overzicht van UISceneSession, die de persistente interface status tussen app-representaties levert (WWDC 2019, Steve Holt, Apple)
Conceptueel overzicht van UISceneSession, die de persistente interface status tussen app-representaties levert (WWDC 2019, Steve Holt, Apple)

Wanneer iPadOS (en iOS) meerdere apps uitvoeren, is het mogelijk dat het besturingssysteem een app op de achtergrond sluit om geheugen en stroom te besparen. Dit is opzettelijk: het houdt het besturingssysteem snel en vriendelijk voor de batterij.

Vanuit het perspectief van de app-levenscyclus betekent dit dat je moet controleren of je app al eerder draaide wanneer deze wordt gestart. Wanneer er een bestaande UISceneSession is, moet de app er opnieuw verbinding mee maken om een ​​persistente interface-status aan de gebruiker te bieden. Als het goed is gedaan, zal de gebruiker niet merken dat de app op de achtergrond werd onderbroken.

Functionele rollen in de levenscyclus van een iPadOS-app (WWDC 2019, Steve Holt, Apple)
Functionele rollen in de levenscyclus van een iPadOS-app (WWDC 2019, Steve Holt, Apple)

Als je de nieuwe UIWindowScene (en UISceneSession) concepten in je app gebruikt, kun je profiteren van de nieuwe multi-window mogelijkheden van iPad. Maar er is nog iets: Apple is van plan om iOS- en iPadOS-apps naar de Mac te brengen. Met de nieuwe UI-concepten zal je app ook geweldig draaien op macOS!

Dezelfde app op iOS/iPadOS en macOS
Dezelfde app op iOS/iPadOS en macOS

In de praktijk

Als ontwikkelaar had ik weinig moeite met het implementeren van de nieuwe UI-concepten in mijn apps. Met relatief weinig moeite kun je veel verschillende use-cases mogelijk maken waarbij dezelfde app meer kracht biedt aan de gebruiker.

Mijn
Mijn "Lemmid (content) Manager" app gebruiken om een blogpost te bewerken terwijl ik de resultaten naast elkaar bekijk
Een DNS-record bewerken met mijn
Een DNS-record bewerken met mijn "Lemmid Domain" app terwijl de context van de gehele DNS-zone behouden blijft
Mijn
Mijn "Lemmid Count" app gebruiken om weergaven en verkeer van een artikel op willem.com te analyseren
Web development op iPad met Inspect en Blink naast elkaar
Web development op iPad met Inspect en Blink naast elkaar

Conclusie

Apple heeft de ondersteuning voor meerdere vensters op iPad niet overhaast, maar heeft de tijd genomen om het goed te ontwerpen. Als je de nieuwe concepten toepast, zal je app krachtiger zijn voor de gebruikers.

Het is altijd een goed idee om de tijd te nemen om de onderliggende interfaceconcepten te begrijpen voordat je begint met ontwikkelen. Doe het goed (en slim) in plaats van snel (en dom)!