Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
So you want to make an Apple Watch app?
Search
Neil Kimmett
April 09, 2015
Technology
190
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
So you want to make an Apple Watch app?
Neil Kimmett
April 09, 2015
More Decks by Neil Kimmett
See All by Neil Kimmett
Scaling your app's release process
neilkimmett
0
300
React Native in a native world
neilkimmett
0
280
React Native on tvOS
neilkimmett
0
2.2k
Contributing to Swift
neilkimmett
0
86
Contributing to Swift
neilkimmett
0
71
A Swift introduction
neilkimmett
0
180
A Swift Introduction To Swift
neilkimmett
0
130
Writing Swift
neilkimmett
0
380
Practical WatchKit
neilkimmett
0
350
Other Decks in Technology
See All in Technology
「エーアイ」をバズワードにしないために RPA 導入経験と Kiro 上での Claude モデル利用経験から
kazzpapa3
0
110
What Is JetBrains Air
x5gtrn
PRO
0
130
生成AI時代、PMは事業責任者に進化するともっと面白い〜PMだからこそ事業構造を動かせる時代に〜
kakehashi
PRO
0
190
LLM-as-a-Judgeは本当に信頼できるのか――評価器を評価する話
taka_aki
2
1k
Persisting Massive Data with Rails ~Designing for 60 billion rows, and fighting the bottlenecks~ Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
0
770
トークン化預金DCJPYの取り組みと活用ユースケース
finengine
0
210
dbt Semantic Layerで進めるenechainのデータ民主化
akizhou
1
190
PHPカンファレンス関西の招待状 / Invitation to PHP Conference Kansai
ykanoh
0
220
FinOps Agentが生んだ技術負債:コスト自動調査の落とし穴と解消までの道のり
oasis1994liveforever
3
250
ガチで放置できるClaude Code実行環境の作り方.pdf
lamaglama39
0
480
Let's Change Our World—Again
snoozer05
PRO
4
280
QA4AI 2026-Oct 生成AI時代の品質保証
tokuty
1
940
Featured
See All Featured
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
270
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
570
Google's AI Overviews - The New Search
badams
0
1.6k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
580
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Evolving SEO for Evolving Search Engines
ryanjones
0
330
Intergalactic Javascript Robots from Outer Space
tanoku
273
28k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
Paper Plane (Part 1)
katiecoart
PRO
2
12k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Transcript
SO YOU WANT TO MAKE AN APPLE WATCH APP? BY
NEIL KIMMETT
None
None
WHY?
“Apps on Apple Watch are designed for quick, lightweight interactions…”
— Apple Watch Design Guidelines
“If you measure interactions with your iOS app in minutes,
you can expect interactions with your WatchKit app to be measured in seconds.” — Apple Watch Design Guidelines
“If you measure interactions with your iOS app in minutes,
you can expect interactions with your WatchKit app to be measured in seconds.” — Apple Watch Design Guidelines
None
WHAT YOU NEED, WHEN YOU NEED IT.
“For all of the changes that have been wrought by
technology, a huge amount of our daily existence really hasn’t changed in a very long time.” — Ben Thompson
HOW?
None
None
None
None
WKInterfaceButton
class WKInterfaceButton : WKInterfaceObject { func setTitle(title: String?) func setAttributedTitle(attributedTitle:
NSAttributedString?) func setBackgroundColor(color: UIColor?) func setBackgroundImage(image: UIImage?) func setBackgroundImageData(imageData: NSData?) func setBackgroundImageNamed(imageName: String?) func setEnabled(enabled: Bool) }
enum UIButtonType : Int { case Custom case System case
DetailDisclosure case InfoLight case InfoDark case ContactAdd } class UIButton : UIControl, NSCoding { class func buttonWithType(buttonType: UIButtonType) -> AnyObject var contentEdgeInsets: UIEdgeInsets var titleEdgeInsets: UIEdgeInsets var reversesTitleShadowWhenHighlighted: Bool var imageEdgeInsets: UIEdgeInsets var adjustsImageWhenHighlighted: Bool var adjustsImageWhenDisabled: Bool var showsTouchWhenHighlighted: Bool var tintColor: UIColor? var buttonType: UIButtonType { get } func setTitle(title: String?, forState state: UIControlState) func setTitleColor(color: UIColor?, forState state: UIControlState) func setTitleShadowColor(color: UIColor?, forState state: UIControlState) func setImage(image: UIImage?, forState state: UIControlState) func setBackgroundImage(image: UIImage?, forState state: UIControlState) func setAttributedTitle(title: NSAttributedString!, forState state: UIControlState) func titleForState(state: UIControlState) -> String? func titleColorForState(state: UIControlState) -> UIColor? func titleShadowColorForState(state: UIControlState) -> UIColor? func imageForState(state: UIControlState) -> UIImage? func backgroundImageForState(state: UIControlState) -> UIImage? func attributedTitleForState(state: UIControlState) -> NSAttributedString? var currentTitle: String? { get } var currentTitleColor: UIColor! { get } var currentTitleShadowColor: UIColor? { get } var currentImage: UIImage? { get } var currentBackgroundImage: UIImage? { get } var currentAttributedTitle: NSAttributedString? { get } var titleLabel: UILabel? { get } var imageView: UIImageView? { get } func backgroundRectForBounds(bounds: CGRect) -> CGRect func contentRectForBounds(bounds: CGRect) -> CGRect func titleRectForContentRect(contentRect: CGRect) -> CGRect func imageRectForContentRect(contentRect: CGRect) -> CGRect }
class WKInterfaceButton : WKInterfaceObject { func setTitle(title: String?) func setAttributedTitle(attributedTitle:
NSAttributedString?) func setBackgroundColor(color: UIColor?) func setBackgroundImage(image: UIImage?) func setBackgroundImageData(imageData: NSData?) func setBackgroundImageNamed(imageName: String?) func setEnabled(enabled: Bool) }
button.setText("I'm a button")
LIVE DEMO !
None
None
None
None
SHARED APP GROUP
NSUSERDEFAULTS
NSUSERDEFAULTS let defaults = NSUserDefaults.standardUserDefaults() defaults.setInteger(42, forKey: "IMPORTANT_NUMBER") defaults.integerForKey("IMPORTANT_NUMBER") //
42
NSUSERDEFAULTS let group = "group.me.kimmett.pushthebutton" let defaults = NSUserDefaults(suiteName: group)
defaults.setInteger(42, forKey: "IMPORTANT_NUMBER") defaults.integerForKey("IMPORTANT_NUMBER") // 42
NSFILEMANAGER
let group = "group.me.kimmett.pushthebutton" let manager = NSFileManager.defaultManager() let directory
= manager.containerURLForSecurityApplicationGroupIdentifier(group)! let fileURL = directory.URLByAppendingPathComponent("stuff.txt") let fileContents = "OMG super secret spy text" fileContents.writeToFile(fileURL.path!, atomically: true, encoding: NSUTF8StringEncoding, error: nil)
MORE LIVE DEMO
REAL TIME SYNC ▸ MMWormhole https://github.com/mutualmobile/MMWormhole ▸ WFNotificationCenter https://github.com/DeskConnect/WFNotificationCenter
TIPS
REDUCE "TAP DISTANCE"
REDUCE PADDING
REDUCE PADDING
REDUCE PADDING
REDUCE PADDING
BLACK IS THE NEW WHITE
BLACK IS THE NEW WHITE
BLACK IS THE NEW WHITE
!
!
None
REFERENCES ▸ Apple Watch Human Interface Guidelines https://developer.apple.com/library/prerelease/ios/ documentation/UserExperience/Conceptual/ WatchHumanInterfaceGuidelines/
▸ Citymapper on Apple Watch https://medium.com/ios-os-x-development/citymapper-on-apple- watch-843c3e757f58
REFERENCES ▸ “How Apple Will Make The Wearable Market” by
Ben Thompson http://stratechery.com/2015/apple-make-wearable-market/ ▸ “Tap Distance” by David Smith http://david-smith.org/blog/2015/02/03/ailw-tap-distance/
Questions?