Today Extension Tutorial: Getting Started
Learn how to create a today extension for your app – allowing it to present information in the notification center, search screen and lock screen. By Michael Katz.
Sign up/Sign in
With a free Kodeco account you can download source code, track your progress, bookmark, personalise your learner profile and more!
Create accountAlready a member of Kodeco? Sign in
Sign up/Sign in
With a free Kodeco account you can download source code, track your progress, bookmark, personalise your learner profile and more!
Create accountAlready a member of Kodeco? Sign in
Contents
Today Extension Tutorial: Getting Started
30 mins
Show Up On The Home Screen
By default, if there is only one widget in an application, it will show up automatically in the shortcut menu when using 3D Touch on the app’s icon on the home screen. The widget that shows up there can also be explicitly set if you want to choose which one will appear.
Open Info.plist under Supporting Files for Crypticker.
Use Editor\Add Item to add a new row. Choose Home Screen Widget from the drop down (or UIApplicationShortcutWidget
if showing raw keys). In the Value column enter the widget’s Bundle Identifier. The Bundle Identifier for the widget can be found on the General tab of the target info pane.
Build and run the app. Press the Home button (Cmd+Shift+H in the Simulator), and then 3D Touch the app icon. The widget should now appear.
Note: You may not be able to test this on the Simulator unless you have a Mac with a force-touch trackpad.
Note: You may not be able to test this on the Simulator unless you have a Mac with a force-touch trackpad.
Wow. You get additional shortcut menu functionality for free! Even though only the collapsed size is available, you can’t beat the price.
Keep the Widget Up To Date
Your last order of business is to add support to your widget to update its view when it’s off-screen, by allowing the system to create a snapshot. The system does this periodically to help your widget stay up to date.
Replace the existing implementation of widgetPerformUpdate
with the following code:
func widgetPerformUpdate(completionHandler: (@escaping (NCUpdateResult) -> Void)) {
fetchPrices { error in
if error == nil {
self.updatePriceLabel()
self.updatePriceChangeLabel()
self.updatePriceHistoryLineChart()
completionHandler(.newData)
} else {
completionHandler(.failed)
}
}
}
This method does the following:
- Fetch the current price data from the web service by calling
fetchPrices
. - If there’s no error the interface is updated.
- Finally – and as required by the
NCWidgetProviding
protocol – the function calls the system-provided completion block with the.newData
enumeration. - In the event of an error, the completion block is called with the
.failed
enumeration. This informs the system that no new data is available and the existing snapshot should be used.
And that wraps up your Today Extension! You can download the final project here.
Where To Go From Here?
Download the final project here.
As an enterprising developer, you might want to take another look at your existing apps and think about how you can update them with Today Extensions. Take it a step further and dream up new app ideas that exploit the possibilities of Today Extensions.
If you’d like to learn more about creating other types of extensions, check out our iOS 8 App Extensions Tech Talk Video where you can learn about Photo Editing Extensions, Share Extensions, Action Extensions, and more!
We can’t wait to see what you come up with, and hope to have your Today Extensions at the top of our Notification Centers soon! We hope you enjoyed this tutorial, and if you have any questions or comments, please join the forum discussion below!