Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
So you want to make an Apple Watch app?
Search
Neil Kimmett
April 09, 2015
Technology
180
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
290
React Native in a native world
neilkimmett
0
270
React Native on tvOS
neilkimmett
0
2.2k
Contributing to Swift
neilkimmett
0
86
Contributing to Swift
neilkimmett
0
70
A Swift introduction
neilkimmett
0
170
A Swift Introduction To Swift
neilkimmett
0
120
Writing Swift
neilkimmett
0
370
Practical WatchKit
neilkimmett
0
350
Other Decks in Technology
See All in Technology
属人化を叩き割れ!「制作加速」と「安定化」の矛盾を打破する:8年目プロダクトが辿り着いた「ミスが起こり得ない」アセット制作フローの全貌
gree_tech
PRO
0
120
My broken English still works: speaking at global OSS events
naruoga
0
120
Software Supply Chain Attackからクラウド環境を守るためにできること
lhazy
2
290
型落ちシンクライアント端末のPoEモジュールを自作したかった話
logica0419
0
180
Rust×eBPFでEDRっぽいものをつくる
sunlife3
2
710
RapidCopy2 Matrix I/Oエンジンによるファイルコピーソフトウェアの設計と実装
kengosawa2
1
200
AI画像認識を活用したゲーム内決済処理検証の自動化
gree_tech
PRO
0
110
AIで変わるエンジニアの働き方(仮)
naoinaoi
0
300
도구에서 동료까지: 10년차 AI 스타트업의 AI 적응기
inureyes
PRO
1
320
自宅NWにISR4331を導入してみた話
okaits
0
120
Bill One 開発エンジニア 紹介資料
sansan33
PRO
7
20k
AIのためのEthernet技術動向 (SerDes)
markunet
1
270
Featured
See All Featured
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
エンジニアに許された特別な時間の終わり
watany
108
250k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Building an army of robots
kneath
306
46k
Darren the Foodie - Storyboard
khoart
PRO
3
3.7k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
210
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
550
Mobile First: as difficult as doing things right
swwweet
225
10k
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?