Dit jaar op WWDC onthulde Apple officieel watchOS 3, hun nieuwste update van de kernsoftware van Apple Watch. Hoewel er slechts een paar "headline" gebruikersfuncties werden getoond, opent watchOS 3 veel API's waarmee ontwikkelaars nog functionelere watchOS-apps kunnen maken. Veel van deze API's zijn al meerdere jaren beschikbaar op iOS en zijn nu toegevoegd aan watchOS, waaronder CloudKit, SpriteKit en SceneKit.
In deze zelfstudie laat ik u zien hoe u al deze nieuwe API's in uw watchOS 3-toepassingen kunt gebruiken. Ik zal ook enkele van de belangrijkste toevoegingen aan bestaande watchOS-frameworks laten zien.
Deze tutorial vereist dat u Xcode 8 uitvoert op macOS 10.11 of hoger. Er wordt ook verondersteld dat u vertrouwd bent met de basisprincipes van WatchKit en het ontwikkelen van watchOS-apps. Als je dat niet bent, raad ik je aan een aantal van de volgende tutorials over de basisprincipes van WatchKit te bekijken:
Je zult ook het startersproject van GitHub moeten downloaden.
Twee van de grootste toevoegingen aan watchOS 3 voor ontwikkelaars zijn de SpriteKit- en SceneKit-frameworks. Deze frameworks bieden respectievelijk rijke 2D- en 3D-graphics in Apple Watch-toepassingen. U kunt scènes in uw apps weergeven door de nieuwe te gebruiken WKInterfaceSCNScene
en WKInterfaceSKScene
interface-objecten, die beide subklassen zijn van WKInterfaceObject
. gelijk aan SCNView
en SKView
op iOS bieden deze interfaceobjecten eigenschappen en methoden voor het manipuleren van uw scènes, inclusief afspeel- / pauzefuncties en standaardverlichting.
Open het startersproject en open de Interface.storyboard het dossier. U zult zien dat ik in dit bestand al enkele basisinterfaces voor u heb opgezet. Voor dit deel van de zelfstudie zijn we alleen geïnteresseerd in de bovenste interfacecontroller met een enkele knop. Ga naar de Objectbibliotheek in de rechter benedenhoek van Xcode en sleep in een SceneKit-scène object boven de Speel pauze knop:
Open vervolgens de attributen Inspecteur en wijs het scènebestand toe (Scene.scn) opgenomen in het project bij de Tafereel eigendom van dit interfaceobject:
Om hiermee in onze code te werken, open de SceneKitInterfaceController.swift bestand in de Assistent redacteur en maak en koppel een genoemd verkooppunt sceneItem
voor uw interface-object:
@IBOutlet var sceneItem: WKInterfaceSCNScene!
Houd er rekening mee dat om uw SceneKit-inhoud correct weer te geven, u moet koppel het interface-object in je storyboard met een IBOutlet
in uw code. Op het moment dat deze zelfstudie wordt geschreven, wordt deze nergens vermeld in de documentatie van Apple, maar deze instelling is vereist.
Als laatste, om de afspeel- / pauzefunctionaliteit van onze knop te implementeren, vervangt u de bestaande didPress (button :)
methode met de volgende:
@IBAction func didPress () if let paused = sceneItem.scene? .IsPaused sceneItem? .Scene? .IsPaused =! Paused
Bouw en voer je app uit en je ziet een rode kubus ronddraaien op het scherm:
Druk op de Speel pauze De knop moet stoppen en de animatie van uw scène zo nodig starten.
Hoewel we zojuist dekking hebben geboden voor het weergeven van SceneKit-inhoud in deze zelfstudie, lijkt het toevoegen van ondersteuning voor SpriteKit sterk op elkaar. Het enige grote verschil is dat de activa van SpriteKit moeten worden gebruikt met een WKInterfaceSKScene
object in plaats van een WKInterfaceSCNScene
object voor SceneKit.
Een andere toevoeging met iOS 10 en watchOS 3 is het UserNotifications-raamwerk. Dit kader biedt een eenvoudige manier om te werken met zowel lokale als externe meldingen die door uw toepassing worden verzonden en afgeleverd.
Als je meer wilt weten over dit framework, bekijk dan hier mijn tutorial die het hier behandelt:
Houd er rekening mee dat niet alle API's in het UserNotifications-framework op iOS beschikbaar zijn in watchOS. Degenen die aanwezig zijn, functioneren echter identiek op watchOS en iOS.
Een andere belangrijke toevoeging aan watchOS 3 is de beschikbaarheid van frameworks die voorheen alleen op andere Apple-platforms bestonden, waaronder CloudKit, GameKit, CoreAudio en AVFoundation..
Hoewel de volledige set API's uit deze frameworks niet beschikbaar is in watchOS, werken de klassen en methoden die kunnen worden gebruikt in Apple Watch-apps identiek aan hun iOS- en MacOS-tegenhangers.
Naast het toevoegen van veel nieuwe frameworks, brengt watchOS 3 ook veel veranderingen teweeg in bestaande frameworks - inclusief WatchKit en ClockKit.
De eerste nieuwe functie in het WatchKit-raamwerk waar we naar gaan kijken, is het nieuwe WKCrownSequencer
klasse. Met deze klasse kunt u gedetailleerde gegevens ophalen over de digitale kroon, inclusief de huidige rotatiesnelheid en of deze al dan niet inactief is. Hoewel deze informatie toegankelijk is via eigenschappen op een WKCrownSequencer
object, de WKCrownDelegate
protocol stelt u in staat wijzigingen gemakkelijker te volgen.
Allemaal WKInterfaceController
subklassen hebben nu een crownSequencer
eigenschap, een instantie van de WKCrownSequencer
klasse. Dit betekent dat om wijzigingen in de digitale kroon bij te houden, u alleen een gedelegeerd object hoeft op te geven en de gewenste methoden kunt implementeren.
Open in je project je CrownInterfaceController.swift bestand en maak uw CrownInterfaceController
klasse conform de WKCrownDelegate
protocol:
class CrownInterfaceController: WKInterfaceController, WKCrownDelegate ...
Vervang vervolgens je huidige wakker (withContext :)
methode met de volgende:
override func awake (withContext context: Any?) super.awake (withContext: context) crownSequencer.delegate = self crownSequencer.focus ()
In de bovenstaande code noemen we de focus
methode op de crownSequencer
omdat het anders geen evenementen van de digitale kroon zal ontvangen. Als een item in uw interface gefocust wordt door de gebruiker erop te tikken, dan moet u deze methode opnieuw bellen voor de crownSequencer
om digitale kroonbewegingen te detecteren.
Voeg ten slotte de volgende twee methoden toe aan uw klas:
func crownDidRotate (_ crownSequencer: WKCrownSequencer ?, rotationeelDelta: Double) if let speed = crownSequencer? .rotationsPerSecond label.setText ("Crown \ nspeed: \ n \ (speed)") func crownDidBecomeIdle (_ crownSequencer: WKCrownSequencer? ) label.setText ("Crown \ nis idle")
Zodat deze interface is geladen, open uw Interface.storyboard bestand en sleep de Initiële controller pijl om de onderste interface te selecteren:
Bouw en voer uw app uit en u zult zien dat wanneer de digitale kroon van het horloge wordt verplaatst, het label op het scherm de huidige status weergeeft:
Als u de Apple Watch-simulator gebruikt, kunt u de digitale kroon "draaien" door gewoon te scrollen met de muis of het trackpad van uw Mac.
Naast het detecteren van digitale kroonbewegingen biedt het WatchKit-framework in watchOS 3 ook de volgende klassen voor uw app om gebaren te detecteren zonder interface-items te gebruiken:
WKLongPressGestureRecognizer
WKPanGestureRecognizer
WKSwipeGestureRecognizer
WKTapGestureRecognizer
Zoals hun namen suggereren, werken deze gebarenherkenners erg op dezelfde manier als gebaarherkenners werken op iOS. Deze klassen zijn met name handig om aanrakingen te detecteren als u SceneKit, SpriteKit of een aangepaste op afbeeldingen gebaseerde interface gebruikt om inhoud weer te geven.
watchOS 3 brengt ook enkele nieuwe belangrijke functies voor apps die gebruikmaken van het ClockKit-framework om complicaties op de wijzerplaat te bieden.
Ten eerste, als gevolg van de nieuwe achtergrondverwerkingsfunctionaliteit voor apps in watchOS 3, als een gebruiker een van de complicaties van uw app op de wijzerplaat plaatst, blijft uw app in het geheugen staan en blijft deze in de staat van paraatheid om te worden gestart. Bovendien is uw app gegarandeerd in staat om de inhoud bij te werken als reactie op pushmeldingen tot 50 keer per dag.
Als je meer wilt weten over de nieuwe achtergrond-app-functionaliteit in watchOS 3, heb ik dit onderwerp hier al behandeld:
Vervolgens zijn enkele nieuwe sjablonen toegevoegd aan de extra grote complicatiefamilie, waaronder CLKComplicationTemplateExtraLargeColumnsText
, CLKComplicationTemplateExtraLargeRingImage
, CLKComplicationTemplateExtraLargeRingText
, en CLKComplicationTemplateExtraLargeSimpleImage
.
Ten slotte, de CLKTextProvider
klasse biedt nu een API om een vertaalbare tekstprovider te maken om verschillende tekst te gebruiken voor specifieke apparaatregio's.
Afgezien van deze kleine toevoegingen blijft ClockKit onveranderd ten opzichte van de watchOS 2-release van vorig jaar. Als u meer wilt weten over dit kader en hoe u het zelf kunt gebruiken, kunt u mijn zelfstudie hier bekijken:
Hoewel PassKit al in beperkte vorm beschikbaar was in watchOS 2, biedt watchOS 3 volledige ondersteuning voor in-app Apple Pay-aankopen direct op het horloge. Dit gebeurt via een aantal nieuwe klassen en een protocol, waaronder:
WKInterfacePaymentButton
: gebruikt om een vooraf ontworpen te laten zien Koop met Apple Pay knop.PKPaymentAuthorizationController
: gebruikt om een modelinterface weer te geven met betalingsinformatie die de gebruiker kan bevestigen. Deze klasse vervult dezelfde rol als de PKPaymentAuthorizationViewController
klasse, maar is niet afhankelijk van UIKit. Dit betekent dat de PKPaymentAuthorizationController
klasse kan zowel op iOS als watchOS worden gebruikt.PKPaymentAuthorizationControllerDelegate
: klassen kunnen worden gemaakt om hieraan te voldoen. Met dit protocol kan uw app reageren op de acties van de gebruiker met betrekking tot uw betaling, inclusief wanneer zij een betaalmethode selecteren of wanneer de betaling is geautoriseerd.Over het algemeen is watchOS 3 een belangrijke release voor ontwikkelaars van Apple Watch-apps. Games en media-rijke applicaties zijn nu veel gemakkelijker te maken met de toevoeging van frameworks, waaronder SceneKit, SpriteKit, GameKit en AVFoundation. De toevoeging van CloudKit en verbeteringen aan WatchKit, ClockKit en PassKit stellen je in staat om meer functionele apps te maken dan ooit tevoren, terwijl je onafhankelijker wordt van de iPhone.
Laat zoals altijd uw opmerkingen en feedback achter in de opmerkingen hieronder. Kijk voor meer informatie over het maken van een app in WatchOS naar de watchOS 2 From Scratch-cursus hier op Envato Tuts+.