Creating Complications with ClockKit Session 209

Similar documents
Building Watch Apps #WWDC15. Featured. Session 108. Neil Desai watchos Engineer

WatchKit In-Depth, Part 2

Quick Interaction Techniques for watchos

What s New in Notifications

Designing for Apple Watch

What s New in watchos

Monetize and Promote Your App with iad

ios Accessibility Developing for everyone Session 201 Ian Fisch ios Accessibility

Accessibility on OS X

Accessibility on ios. Developing for everyone. Frameworks #WWDC14. Session 210 Clare Kasemset ios Accessibility

Extending Your Apps with SiriKit

Introducing On Demand Resources

Designing Great Apple Watch Experiences

App Extension Best Practices

Getting the Most Out of HealthKit

What s New in Xcode App Signing

Advanced Scrollviews and Touch Handling Techniques

What s New in tvos #WWDC16. App Frameworks. Session 206. Hans Kim tvos Engineer

Apple Watch Design Tips and Tricks

What s New in NSCollectionView Session 225

Adapting to the New UI of OS X Yosemite

What's New in UIKit Dynamics and Visual Effects Session 229

Thread Sanitizer and Static Analysis

Using and Extending the Xcode Source Editor

Seamless Linking to Your App

Data Delivery with Drag and Drop

Enhancing your apps for the next dimension of touch

Mastering Drag and Drop

Implementing UI Designs in Interface Builder

Introduction to Siri Shortcuts

Building for Voice with Siri Shortcuts

Writing Energy Efficient Apps

imessage Apps and Stickers, Part 2

What s New in imessage Apps

What s New in CloudKit

Introducing the Contacts Framework

Mastering UIKit on tvos

Adopting Advanced Features of the New UI

Localizing with Xcode 6

Creating Great App Previews

New UIKit Support for International User Interfaces

Creating Audio Apps for watchos

Mastering Xcode for iphone OS Development Part 1. Todd Fernandez Sr. Manager, IDEs

Introducing the Modern WebKit API

New Ways to Work with Workouts

Networking with NSURLSession

What s New in HomeKit

What s New in MapKit. App Frameworks #WWDC17. Fredrik Olsson

Profiling in Depth. Do you know where your code is? Session 412. Kris Markel Performance Tools Engineer Chad Woolf Performance Tools Engineer

Mysteries of Auto Layout, Part 1

What s New in SpriteKit

View Controller Advancements for ios8

CloudKit Tips And Tricks

Advances in TVMLKit. App Frameworks #WWDC17. Trevor Cortez, Localization Engineer Parry Panesar, tvos Engineer Jeremy Foo, tvos Engineer

Introducing the Photos Frameworks

Using Grouped Notifications

Mastering Xcode for iphone OS Development Part 2. Marc Verstaen Sr. Manager, iphone Tools

Writing Great Alerts. Design #WWDC17. Natalie Calvert, Designer

Leveraging Touch Input on ios

Introducing Password AutoFill for Apps

Cross Platform Nearby Networking

Advances in AVFoundation Playback

Creating Content with iad JS

What s New in Energy Debugging

Cocoa Touch Best Practices

Building Apps with Dynamic Type

Introducing Swift Playgrounds

Advanced Debugging and the Address Sanitizer

Enabling Your App for CarPlay

What s New in Foundation for Swift Session 207

What s New in ARKit 2

Improving the Accessibility and Usability of Complex Web Applications

What s New in Testing

Getting Started with CareKit

Creating Extensions for ios and OS X, Part Two

What s New in Cocoa for macos

What s New in Metal, Part 2

What s New in tvos 12

Storyboards and Controllers on OS X

Improving your Existing Apps with Swift

Getting the Most out of Playgrounds in Xcode

What s New in Core Location

Advanced Cocoa Text Tips and Tricks. Aki Inoue Cocoa Engineer

itunes Connect Development to distribution #WWDC15 Distribution Session 304

What s New in Core Data?

AGENDA WORKSHEET. Version 5.0 September 12th, 2018

Media and Gaming Accessibility

Configuring Cisco Access Policies

Core ML in Depth. System Frameworks #WWDC17. Krishna Sridhar, Core ML Zach Nation, Core ML

Optimizing Swift Performance Session 409

} Evaluate the following expressions: 1. int x = 5 / 2 + 2; 2. int x = / 2; 3. int x = 5 / ; 4. double x = 5 / 2.

Internationalization Best Practices

Multitasking Support on the ios Platform

Integrating Apps and Content with AR Quick Look

What s New in the LLVM Compiler. Chris Lattner LLVM Chief Architect

DOWNLOAD OR READ : WATCH OS 3 FOR THE APPLE WATCH AN EASY GUIDE TO THE BEST FEATURES PDF EBOOK EPUB MOBI

Advanced Memory Analysis with Instruments. Daniel Delwood Performance Tools Engineer

Introduction to WatchKit. CS193W - Spring Lecture 1

Your Apps and the Future of macos Security

Building Better Apps with Value Types in Swift Session 414

Transcription:

App Frameworks #WWDC15 Creating Complications with ClockKit Session 209 Eliza Block watchos Engineer Paul Salzman watchos Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.

11:00AM Extension Haight - Twin Peaks Group D

11:00AM Haight - Twin Peaks Extension Group D

11:00AM Haight Twin Peaks Group D Extension

11:00AM Haight Twin Peaks Group D

11:00AM Haight Twin Peaks Group D 1:30PM Bernal Presidio Group C 4:00PM SOMA Castro Group A 6:00PM Sunset Marina Group B

1:20 11:00AM Haight Twin Peaks Group D 11:00AM 1:30PM Haight Bernal Twin Presidio Peaks Group DC 4:00PM SOMA Castro Group A 6:00PM Sunset Marina Group B

3:45 1:20 aks 1:30PM Bernal Presidio Group C 4:00PM 11:00AM SOMA Haight Castro Twin Peaks Group AD 6:00PM Sunset Marina Group B

3:45 6:15 1:20 4:00PM SOMA Castro Group A 6:00PM 11:00AM Sunset Haight Twin Marina Peaks Group BD

Time Travel

Time Travel

Agenda

Agenda Getting Started

Agenda Getting Started Complication Layout

Agenda Getting Started Complication Layout Providing Images and Text

Agenda Getting Started Complication Layout Providing Images and Text Timeline

Agenda Getting Started Complication Layout Providing Images and Text Timeline Complication Data Source

Agenda Getting Started Complication Layout Providing Images and Text Timeline Complication Data Source Keeping Your Data Fresh

Getting Started

Complication Families

Complication Families Modular

Complication Families Modular Modular small

Complication Families Modular Modular small Modular large

Complication Families Utilitarian Modular small Modular large

Complication Families Utilitarian Modular small Modular large

Complication Families Utilitarian Modular small Modular large Utilitarian small

Complication Families Utilitarian Modular small Modular large Utilitarian small Utilitarian large

Complication Families Circular Modular small Modular large Utilitarian small Utilitarian large

Complication Families Circular Modular small Modular large Utilitarian small Utilitarian large

Complication Families Circular Modular small Modular large Utilitarian small Utilitarian large Circular small

Complication Families Modular small enum CLKComplicationFamily : Int { Modular large Utilitarian small Utilitarian large case ModularSmall case ModularLarge case UtilitarianSmall case UtilitarianLarge case CircularSmall Circular small }

Complication Layout

CLKComplicationTemplate Modular Small

CLKComplicationTemplate Modular Small Modular Large 11:00AM Haight Twin Peaks Group D

CLKComplicationTemplate Modular Small Modular Large Utilitarian Small 11:00AM Haight Twin Peaks Group D

CLKComplicationTemplate Modular Small Modular Large Utilitarian Small 11:00AM Haight Twin Peaks Group D Utilitarian Large

CLKComplicationTemplate Modular Small Modular Large Utilitarian Small Circular Small 11:00AM Haight Twin Peaks Group D Utilitarian Large

CLKComplicationTemplate 11:00AM Haight Twin Peaks Group D

CLKComplicationTemplate 11:00AM Haight Twin Peaks Group D

CLKComplicationTemplate Header image 11:00AM Haight Twin Peaks Group D

CLKComplicationTemplate Header image Header text 11:00AM Haight Twin Peaks Group D

CLKComplicationTemplate Header image Header text 11:00AM Body 1 text Haight Twin Peaks Group D

CLKComplicationTemplate Header image Header text 11:00AM Body 1 text Body 2 text Haight Twin Peaks Group D

CLKComplicationTemplate Header image Header text 11:00AM Body 1 text Body 2 text Haight Twin Peaks Group D class CLKComplicationTemplateModularLargeStandardBody { var headerimageprovider: CLKImageProvider? var headertextprovider: CLKTextProvider var body1textprovider: var body2textprovider: CLKTextProvider CLKTextProvider? }

CLKComplicationTemplate Header image Header text 11:00AM Body 1 text Body 2 text Haight Twin Peaks Group D class CLKComplicationTemplateModularLargeStandardBody { var headerimageprovider: CLKImageProvider? var headertextprovider: CLKTextProvider var body1textprovider: var body2textprovider: CLKTextProvider CLKTextProvider? }

Providing Images and Text

Image Providers not UIImages

Image Providers not UIImages

Image Providers not UIImages

Image Providers not UIImages

Image Providers not UIImages

Image Providers not UIImages

Image Providers not UIImages

Image Providers not UIImages let bgimage = UIImage(named: "Background") let fgimage = UIImage(named: "Foreground") let imageprovider = CLKImageProvider(backgroundImage: bgimage, backgroundcolor: acolor, foregroundimage: fgimage, foregroundcolor: CLKImageProviderForegroundColor.White)

Text Providers not NSStrings

Text Providers not NSStrings Space is very constrained

Text Providers not NSStrings Space is very constrained Declare your intentions

Text Providers not NSStrings Space is very constrained Declare your intentions Let us handle formatting and fitting

Example: Formatting Dates CLKDateTextProvider

Example: Formatting Dates CLKDateTextProvider Wednesday, September 23

Example: Formatting Dates CLKDateTextProvider Wednesday, September Se 23

Example: Formatting Dates CLKDateTextProvider Wednesday, September 23

Example: Formatting Dates CLKDateTextProvider Wednesday, September 23 Wednesday, Sep 23

Example: Formatting Dates CLKDateTextProvider Wednesday, September 23 Wednesday, Sep 23 Wed, Sep 23

Example: Formatting Dates CLKDateTextProvider Wednesday, September 23 Wednesday, Sep 23 Wed, Sep 23 Sep 23

Example: Formatting Dates CLKDateTextProvider Wednesday, September 23 Wednesday, Sep 23 Wed, Sep 23 Sep 23 23

Example: Formatting Dates CLKDateTextProvider Wednesday, September 23 Wednesday, Sep 23 Wed, Sep 23 Sep 23 23 let sep23: NSDate =... let units = [NSCalendarUnit.Weekday, NSCalendarUnit.Month, NSCalendarUnit.Day] textprovider = CLKDateTextProvider(sep23, units)

Example: Formatting Dates CLKDateTextProvider Wednesday, September 23 Wednesday, Sep 23 Wed, Sep 23 Sep 23 23 let sep23: NSDate =... let units = [NSCalendarUnit.Weekday, NSCalendarUnit.Month, NSCalendarUnit.Day] textprovider = CLKDateTextProvider(sep23, units)

Example: Formatting Dates CLKDateTextProvider Wednesday, September 23 Wednesday, Sep 23 Wed, Sep 23 Sep 23 23 let sep23: NSDate =... let units = [NSCalendarUnit.Weekday, NSCalendarUnit.Month, NSCalendarUnit.Day] textprovider = CLKDateTextProvider(sep23, units)

Example: Formatting Dates CLKDateTextProvider Wednesday, September 23 Wednesday, Sep 23 Wed, Sep 23 Sep 23 23 let sep23: NSDate =... let units = [NSCalendarUnit.Weekday, NSCalendarUnit.Month, NSCalendarUnit.Day] textprovider = CLKDateTextProvider(sep23, units)

More Text Providers

More Text Providers Simple text provider

More Text Providers Simple text provider Time text provider

More Text Providers Simple text provider Time text provider

More Text Providers Simple text provider Time text provider Time interval text provider

More Text Providers Simple text provider Time text provider Time interval text provider

Relative Dates

Relative Dates

Relative Dates

Relative Dates

Relative Dates

Relative Dates

Relative Dates

Relative Date Text Provider

Relative Date Text Provider let moonset : NSDate =... // 2:19pm

Relative Date Text Provider let moonset : NSDate =... // 2:19pm let units : NSCalendarUnit = [.Hour,.Minute]

Relative Date Text Provider let moonset : NSDate =... // 2:19pm let units : NSCalendarUnit = [.Hour,.Minute] let style : CLKRelativeDateStyle =.Natural

Relative Date Text Provider let moonset : NSDate =... // 2:19pm let units : NSCalendarUnit = [.Hour,.Minute] let style : CLKRelativeDateStyle =.Natural let textprovider = CLKRelativeDateTextProvider(date: moonset, style: style, units: units)

Relative Date Text Provider let moonset : NSDate =... // 2:19pm let units : NSCalendarUnit = [.Hour,.Minute] let style : CLKRelativeDateStyle =.Natural let textprovider = CLKRelativeDateTextProvider(date: moonset, style: style, units: units) template.body2textprovider = textprovider

Relative Date Text Provider Styles Natural Offset Timer 2HRS 7MINS 13MINS 5SECS 3WKS 4DAYS 2YRS 3MOS +14 SECONDS -59 MINUTES +2 HOURS -6 DAYS +12 WEEKS 02:32 21:15:59

CLKComplicationTemplate 11:00AM Haight Twin Peaks Group D

CLKComplicationTemplate CLKImageProvider 11:00AM Haight Twin Peaks Group D

CLKComplicationTemplate CLKImageProvider CLKTextProvider 11:00AM Haight Twin Peaks Group D

CLKComplicationTemplate CLKImageProvider CLKTextProvider CLKTextProvider 11:00AM Haight Twin Peaks Group D

Timeline Paul Salzman watchos Engineer

Timeline 57

Timeline 57

Timeline 57 10AM 11AM

Timeline 57 10AM 11AM 12PM 1PM 2PM 3PM 4PM 5PM 6PM

Timeline 57 10AM 11AM 12PM 1PM 2PM 3PM 4PM 5PM 6PM

Timeline 57 Current Time 10AM 11AM 12PM 1PM 2PM 3PM 4PM 5PM 6PM

Timeline 57 55 Current Time 10AM 11AM 12PM 1PM 2PM 3PM 4PM 5PM 6PM

Timeline 57 55 Current Time 10AM 11AM 12PM 1PM 2PM 3PM 4PM 5PM 6PM

Timeline 57 55 56 Current Time 10AM 11AM 12PM 1PM 2PM 3PM 4PM 5PM 6PM

Timeline 57 55 56 TIME TRAVEL 10AM 11AM 12PM 1PM 2PM 3PM 4PM 5PM 6PM

Timeline 57 54 55 56 TIME TRAVEL 10AM 11AM 12PM 1PM 2PM 3PM 4PM 5PM 6PM

Timeline 11:00AM 1:00PM Brunch with K.K. Joanie s Café

Timeline 11:00AM 1:00PM Brunch with K.K. Joanie s Café 4:00 5:00PM Haircut Nancy Bee 8:00 10:30PM Movie Night w/ David & Scott 11AM 1PM 4PM 5PM 8PM 10:30PM

Timeline 11:00AM 1:00PM Brunch with K.K. Joanie s Café 4:00 5:00PM Haircut Nancy Bee 8:00 10:30PM Movie Night w/ David & Scott 11AM 1PM 4PM 5PM 8PM 10:30PM

Timeline 11:00AM 1:00PM Brunch with K.K. Joanie s Café 4:00 5:00PM Haircut Nancy Bee 8:00 10:30PM Movie Night w/ David & Scott 11AM 1PM 4PM 5PM 8PM 10:30PM

Timeline 11:00AM 1:00PM Brunch with K.K. Joanie s Café 11:00AM 1:00PM Brunch with K.K. Joanie s Café 4:00 5:00PM Haircut Nancy Bee 8:00 10:30PM Movie Night w/ David & Scott 11AM 1PM 4PM 5PM Current Time 8PM 10:30PM

Timeline 11:00AM 1:00PM Brunch with K.K. Joanie s Café 4:00 5:00PM Haircut Nancy Bee 8:00 10:30PM Movie Night w/ David & Scott 11AM 1PM 4PM 5PM Current Time 8PM 10:30PM

Timeline 11:00AM 1:00PM Brunch with K.K. Joanie s Café 4:00 5:00PM Haircut Nancy Bee 8:00 10:30PM Movie Night w/ David & Scott 11AM 1PM 4PM 5PM Current Time 8PM 10:30PM

Timeline 4:00 5:00PM Haircut Nancy Bee 11:00AM 1:00PM Brunch with K.K. Joanie s Café 4:00 5:00PM Haircut Nancy Bee 8:00 10:30PM Movie Night w/ David & Scott 11AM 1PM 4PM 5PM Current Time 8PM 10:30PM

Timeline 11:00AM 1:00PM Brunch with K.K. Joanie s Café 4:00 5:00PM Haircut Nancy Bee 8:00 10:30PM Movie Night w/ David & Scott 11AM 1PM 4PM 5PM 8PM 10:30PM

Timeline 11:00AM 1:00PM Brunch with K.K. Joanie s Café 4:00 5:00PM Haircut Nancy Bee 8:00 10:30PM Movie Night w/ David & Scott 11AM 1PM 4PM 5PM 8PM 10:30PM

Timeline 11:00AM 1:00PM Brunch with K.K. Joanie s Café 4:00 5:00PM Haircut Nancy Bee 8:00 10:30PM Movie Night w/ David & Scott 1PM 5PM 10:30PM

Timeline 11:00AM 1:00PM Brunch with K.K. Joanie s Café 4:00 5:00PM Haircut Nancy Bee 8:00 10:30PM Movie Night w/ David & Scott MIDNIGHT 1PM 5PM 10:30PM

Timeline 11:00AM 1:00PM Brunch with K.K. Joanie s Café 4:00 5:00PM Haircut Nancy Bee 8:00 10:30PM Movie Night w/ David & Scott Calendar No more events today MIDNIGHT 1PM 5PM 10:30PM

Timeline 11:00AM 1:00PM Brunch with K.K. Joanie s Café 11:00AM 1:00PM Brunch with K.K. Joanie s Café 4:00 5:00PM Haircut Nancy Bee 8:00 10:30PM Movie Night w/ David & Scott Calendar No more events today MIDNIGHT 1PM 5PM 10:30PM Current Time

Timeline 4:00 5:00PM Haircut Nancy Bee 11:00AM 1:00PM Brunch with K.K. Joanie s Café 4:00 5:00PM Haircut Nancy Bee 8:00 10:30PM Movie Night w/ David & Scott Calendar No more events today MIDNIGHT 1PM 5PM 10:30PM Current Time

Timeline 8:00 10:30PM Movie Night w/ David & Scott 11:00AM 1:00PM Brunch with K.K. Joanie s Café 4:00 5:00PM Haircut Nancy Bee 8:00 10:30PM Movie Night w/ David & Scott Calendar No more events today MIDNIGHT 1PM 5PM 10:30PM Current Time

Timeline Calendar No more events today 11:00AM 1:00PM Brunch with K.K. Joanie s Café 4:00 5:00PM Haircut Nancy Bee 8:00 10:30PM Movie Night w/ David & Scott Calendar No more events today MIDNIGHT 1PM 5PM 10:30PM Current Time

Timeline CLKComplicationTimelineEntry

Timeline CLKComplicationTimelineEntry CLKComplicationTemplate CLKImageProvider CLKTextProvider CLKTextProvider

Timeline CLKComplicationTimelineEntry CLKComplicationTimelineEntry NSDate CLKComplicationTemplate CLKImageProvider CLKTextProvider CLKTextProvider

CLKComplicationTemplate CLKImageProvider CLKTextProvider CLKTextProvider NSDate Timeline CLKComplicationTimelineEntry class CLKComplicationTimelineEntry : NSObject { var date: NSDate var complicationtemplate: CLKComplicationTemplate } Template

Complication Data Source

Complication Data Source CLKComplicationDataSource protocol

Complication Data Source CLKComplicationDataSource protocol Object annotated in extension target settings

Complication Data Source CLKComplicationDataSource protocol Object annotated in extension target settings Callbacks per complication

Complication Data Source CLKComplicationDataSource protocol Object annotated in extension target settings Callbacks per complication Check CLKComplication s family property

Complication Data Source CLKComplicationDataSource protocol Object annotated in extension target settings Callbacks per complication Check CLKComplication s family property Handler parameter for completion and passing data

Complication Data Source Current timeline entry Clock Face Extension Now

Complication Data Source Current timeline entry Extension Clock Face ComplicationController Now

Complication Data Source Current timeline entry Clock Face What is your current timeline entry? Extension ComplicationController Extension Now

Complication Data Source Current timeline entry Extension Clock CLKComplicationTimelineEntry Face What is your current timeline entry? ComplicationController Extension Now

Complication Data Source Current timeline entry Extension Clock CLKComplicationTimelineEntry Face What is your current timeline entry? ComplicationController Extension Now

Complication Data Source Current timeline entry func getcurrenttimelineentryforcomplication( complication: CLKComplication, withhandler handler: (CLKComplicationTimelineEntry?) -> Void) Now

Complication Data Source Current timeline entry func getcurrenttimelineentryforcomplication( complication: CLKComplication, withhandler handler: (CLKComplicationTimelineEntry?) -> Void) Now

Complication Data Source Current timeline entry func getcurrenttimelineentryforcomplication( complication: CLKComplication, withhandler handler: (CLKComplicationTimelineEntry?) -> Void) Now

Complication Data Source Extend timeline Clock Face Extension Now

Complication Data Source Extend timeline Clock Face What entries do you have after a specific point in time? Extension After Date Now

Complication Data Source Extend timeline Clock Face What entries do you have after a specific point in time? Extension Array CLKComplicationTimelineEntry CLKComplicationTimelineEntry... After Date Now

Complication Data Source Extend timeline Array CLKComplicationTimelineEntry Clock Face CLKComplicationTimelineEntry... What entries do you have after a specific point in time? Extension Now After Date

Complication Data Source Extend timeline Array CLKComplicationTimelineEntry Clock Face CLKComplicationTimelineEntry... What entries do you have after a specific point in time? Extension Now After Date

Complication Data Source Extend timeline Array Array CLKComplicationTimelineEntry Clock Empty CLKComplicationTimelineEntry Face... What entries do you have after a specific point in time? Extension Now

Complication Data Source Extend timeline func gettimelineentriesforcomplication( complication: CLKComplication, afterdate date: NSDate, limit: Int, withhandler handler: ([CLKComplicationTimelineEntry]?) -> Void)

Complication Data Source Extend timeline func gettimelineentriesforcomplication( complication: CLKComplication, afterdate date: NSDate, limit: Int, withhandler handler: ([CLKComplicationTimelineEntry]?) -> Void)

Complication Data Source Extend timeline func gettimelineentriesforcomplication( complication: CLKComplication, afterdate date: NSDate, limit: Int, withhandler handler: ([CLKComplicationTimelineEntry]?) -> Void)

Complication Data Source Extend timeline func gettimelineentriesforcomplication( complication: CLKComplication, afterdate date: NSDate, limit: Int, withhandler handler: ([CLKComplicationTimelineEntry]?) -> Void)

Complication Data Source Extend timeline func gettimelineentriesforcomplication( complication: CLKComplication, afterdate date: NSDate, limit: Int, withhandler handler: ([CLKComplicationTimelineEntry]?) -> Void)

Complication Data Source Extend timeline func gettimelineentriesforcomplication( complication: CLKComplication, beforedate date: NSDate, limit: Int, withhandler handler: ([CLKComplicationTimelineEntry]?) -> Void)

Complication Data Source Time Travel directions Clock Face Extension Now

Complication Data Source Time Travel directions Which directions of Time Travel Clock Face do you support? Extension Now

Complication Data Source Time Travel directions Which directions of Time Travel Clock.Forward Face do you support? Extension Now

Complication Data Source Time Travel directions Which directions of Time Travel Clock.Backward.Forward Face do you support? Extension Now

Complication Data Source Time Travel directions Which directions of Time Travel Clock.Backward.Forward.None Face do you support? Extension Now

Complication Data Source Time Travel directions Which directions of Time Travel Clock [.Forward,.Backward.Forward.None.Backward] Face do you support? Extension Now

Complication Data Source Time Travel directions func getsupportedtimetraveldirectionsforcomplication( complication: CLKComplication, withhandler handler: (CLKComplicationTimeTravelDirections) -> Void) Now

Complication Data Source Time Travel directions func getsupportedtimetraveldirectionsforcomplication( complication: CLKComplication, withhandler handler: (CLKComplicationTimeTravelDirections) -> Void) Now

Complication Data Source Time Travel directions func getsupportedtimetraveldirectionsforcomplication( complication: CLKComplication, withhandler handler: (CLKComplicationTimeTravelDirections) -> Void) Now

10:09 11:00AM 1:00PM Brunch with K.K. Joanie s Café 65 2:09

4:00 5:00PM Haircut Nancy Bee 4:09 75 8:09

7:09 8:00 10:30PM Movie Night w/ David & Scott 75 11:09

Complication Data Source Timeline boundaries Clock Face Extension Now

Complication Data Source Timeline boundaries Clock Face When is the end of your timeline? Extension Now

Complication Data Source Timeline boundaries Clock NSDate Face When is the end of your timeline? Extension Now

Complication Data Source Timeline boundaries Clock NSDate Face When is the beginning of your timeline? Extension Now

Complication Data Source Timeline boundaries Clock NSDate Face When is the beginning of your timeline? Extension Now

Complication Data Source Timeline boundaries func gettimelineenddateforcomplication( complication: CLKComplication, withhandler handler: (NSDate?) -> Void) Now

Complication Data Source Timeline boundaries func gettimelineenddateforcomplication( complication: CLKComplication, withhandler handler: (NSDate?) -> Void) Now

Complication Data Source Timeline boundaries func gettimelineenddateforcomplication( complication: CLKComplication, withhandler handler: (NSDate?) -> Void) Now

Complication Data Source Timeline boundaries func gettimelinestartdateforcomplication( complication: CLKComplication, withhandler handler: (NSDate?) -> Void) Now

Complication Data Source Placeholder templates Clock Face Extension

Complication Data Source Placeholder templates Clock Face What is your placeholder template? Extension

Complication Data Source Placeholder templates Clock CLKComplicationTemplate Face What is your placeholder template? Extension

Complication Data Source Placeholder templates

Complication Data Source Placeholder templates func getplaceholdertemplateforcomplication( complication: CLKComplication, withhandler handler: (CLKComplicationTemplate?) -> Void)

Complication Data Source Placeholder templates func getplaceholdertemplateforcomplication( complication: CLKComplication, withhandler handler: (CLKComplicationTemplate?) -> Void)

Complication Data Source Placeholder templates func getplaceholdertemplateforcomplication( complication: CLKComplication, withhandler handler: (CLKComplicationTemplate?) -> Void)

Demo Building a complication

Keeping Your Data Fresh

Data Lifecycle

Data Lifecycle WatchConnectivity

Data Lifecycle WatchConnectivity NSURLSession

Reload Timeline Clock Face Extension Now

Reload Timeline Clock Face Extension Now

Reload Timeline Extension Clock Face CLKComplicationServer Now

Reload Timeline Clock Face Please reload my timeline Extension CLKComplicationServer Now

Reload Timeline Clock Face Please reload my timeline Extension CLKComplicationServer Now

Reload Timeline Clock Face What is your current timeline entry? Extension CLKComplicationServer Please reload my timeline Now

Extend Timeline Extension Clock Face CLKComplicationServer Now

Extend Timeline Clock Face Please extend my timeline Extension CLKComplicationServer Now

Extend Timeline Clock Face What entries do you have after a specific point in time? Extension CLKComplicationServer Please extend my timeline After Date

Reload or Extend // get the shared instance let server = CLKComplicationServer.sharedInstance()

Reload or Extend // get the shared instance let server = CLKComplicationServer.sharedInstance() // extend the timeline for all complications for complication in server.activecomplications { }

Reload or Extend // get the shared instance let server = CLKComplicationServer.sharedInstance() // extend the timeline for all complications for complication in server.activecomplications { server.extendtimelineforcomplication(complication) }

Reload or Extend // get the shared instance let server = CLKComplicationServer.sharedInstance() // extend the timeline for all complications for complication in server.activecomplications { server.extendtimelineforcomplication(complication) } // reload the timeline for all complications for complication in server.activecomplications { server.reloadtimelineforcomplication(complication) }

When Can You Update?

When Can You Update? Whenever extension runs

When Can You Update? Whenever extension runs When Watch app runs

When Can You Update? Whenever extension runs When Watch app runs Locally scheduled wake

When Can You Update? Whenever extension runs When Watch app runs Locally scheduled wake iphone initiated wake

When Can You Update? Whenever extension runs When Watch app runs Locally scheduled wake iphone initiated wake Budgeted Budgeted

When Can You Update? Whenever extension runs When Watch app runs Locally scheduled wake iphone initiated wake Budgeted Budgeted Introducing Watch Connectivity Pacific Heights Thursday 11:00AM

CLKComplicationDataSource One more call func getnextrequestedupdatedatewithhandler( handler: (NSDate?) -> Void)

CLKComplicationDataSource One more call func getnextrequestedupdatedatewithhandler( handler: (NSDate?) -> Void) One date returned across all active complications

CLKComplicationDataSource One more call func getnextrequestedupdatedatewithhandler( handler: (NSDate?) -> Void) One date returned across all active complications Hint for budgeted background launch of extension

CLKComplicationDataSource One more call func getnextrequestedupdatedatewithhandler( handler: (NSDate?) -> Void) One date returned across all active complications Hint for budgeted background launch of extension Allows data delegate callbacks

Summary

Summary Build timeline of templates and providers

Summary Build timeline of templates and providers Take advantage of formatting and fitting

Summary Build timeline of templates and providers Take advantage of formatting and fitting Refresh data using delegate events

Summary Build timeline of templates and providers Take advantage of formatting and fitting Refresh data using delegate events Do less work to run more

More Information Documentation watchos 2 Transition Guide WatchKit Programming Guide Technical Support Apple Developer Forums Developer Technical Support Sample Code Lister WatchKit Catalog General Inquiries Jake Behrens, watchos Frameworks Evangelist behrens@apple.com http://developer.apple.com/watchos

Related Sessions Introducing Watch Connectivity Pacific Heights Thursday 11:00AM WatchKit Tips and Tricks Presidio Friday 10:00AM Introducing WatchKit for watchos 2 Presidio Tuesday 10:00AM Building Watch Apps Pacific Heights Tuesday 4:30PM WatchKit In-Depth, Part 1 Pacific Heights Wednesday 9:00AM WatchKit In-Depth, Part 2 Pacific Heights Wednesday 10:00AM

Related Labs ClockKit Complications Lab Frameworks Lab D Wednesday 1:30PM Watch Connectivity Lab Frameworks Lab B Thursday 1:30PM WatchKit and ClockKit Complications Lab Frameworks Lab A Friday 1:30PM