2016年02月05日

WWDC15 - 207 WatchKit In-Depth, Part 1

WatchKit In-Depth, Part 1
WWDC 2015 | App Frameworks | Session 207
30:21
https://developer.apple.com/videos/play/wwdc2015-207/

※WWDCセッション関係の記事は、セッション内容を要約して内容を伝えるのが目的ではない。各セッションビデオで何が話されているかの項目をテキスト化することで後で何かを調べたいときにどのビデオを見れば良いか判断する材料にするために書いている。

タイトルはIn-Depthだが、watchOS 2での実装の基本が語られている。Xcodeを使った開発手順については別セッション(Session 108 - Building Watch Apps)で述べられている。

WatchKit ExtensionがwatchOS側に移動したことが主たる変更で、その結果Apple Watchのアプリケーションは3つの独立したコンポーネントから構成されることになった。それぞれのコンポーネントにコード(またはGUI)とリソースがあり、コンポーネントを超えてのアクセスは工夫が必要となった。

また、Apple Watchでつかわれるアプリケーションの入り口は一通りでは亡いためそれぞれの入り口に応じたUIやコントローラが必要となる。それぞれの入り口はどこでどこにどういう場合のコードを書くのかについて述べている。

In-Depthのタイトルが付いているがwatchOS 2としては導入的な内容と思う。


[Architecture]
Components
iOS application - Code, Resources
watchOS WatchKit extension - Interface, Resources
watchOS WatchKit application - Code, Resources

Interface.storyboard
Edit with Interface Builder
Interface Elements

Roles (WatchKit Extension)
Application - WKInterfaceController
Glance - WKInterfaceController
Notification - WKUserNotificationInterfaceController
Complication - CLKCOmplicationDataSource
cf. ClockKit

WKInterfaceController
interface properties
Menu handling
Controller navigation and paging
Controller model presentation
Alert and action sheets
System UI - text input, video, audio

[Resources adn Data]
Static Resources
Multiple locations
Watch App bundle
Watch Extension bundle
WKInterfaceImage - アプリケーションバンドルを参照するので、拡張バンドルの画像を見るにはコードでUIImageに読み込む必要がある。

Local data storge
Document folder
Non-purgeable, Not restored
Caches folder
Puergeable

Media
Application
plays media files
records audio to a file
Extension
downloads media files
reads recorded audio files

Must use a shared container
Enable App Groups in Xcode
Extension, Application
let container = NSFileManager#containerURLForSecurityApplicationGroupIdentifier("group.myapp")!

Transferring data
NSURLSession
Watch Connctivity

NSURLSession
Direct access to internet
Backgroud uploads and downloads
Extension may not be running
Downloaded files must be copied

11:07〜 単純なダウンロードをするサンプルコード
NSURLSessionConfiguration.backgroundSssionConfigurationWithIdentifier("Downloader")
NSURLSession ...
session.downloadTaskWithURL()
task.resume()
中断した場合リスタートはプログラムの責任で行う。

WachConnectivity framework
Share data
Transfer files
Talk to counterpart

[Migration] from watchOS 1
WatchKit extension for watchOS 1
uses iOS Platform and SDK
runs on iPhone
share framework with iOS application
Image chaching
openParentApplication()
WatchOS 2
new watchOS platform and SDK
subset of iOS frameworks available
include project frameworks
Reusability
Same API
code, resources
Improvements
UI responsiveness
Independent operation
New UI elements
Animation
Controllers
Same
Interface controller
Glance controller
Notification controller
New
Extension delegate
Complication data source
Xcode
Existing project
add watchOS Application target
New project
create iOS App with WatchKit App

[Enancements]
WKExtensionDelegate
アプリケーションライフサイクルを司るコールバックの集まり
applicationDidFinishLaunching
called once on launch
perform app intitialization
setuo notification objservers
warmup services
NOTE:App is not active yet!
applicationDidBecomeActive
each time app becames visually active
activate times
update any state
applicationWillResignActive
only call before going to background
prepare to be inactive
save sate
disable running services, timers, etc

handleUserActivity
watchOS 1 - method on root WKInterfaceController
watchOS 2 - method on WKExtensionDelegate

WKExtension
var rootInterfacController : WKInterfaceController
21:30〜 ユーザーアクティビティに応答するコードサンプル
Singleton
Open URLs
WKExtension.sharedExtension().openSystemURL()
Valid Schemes - Phone, SMS, PassKit

Notifications
Remote Notification - from Internet
iPhone screen lock -> watch
(when app is not active)
WKUserNotificationInterfaceController
didReceiveRemoteNotification()
didReceiveLocalNotification()
Local Notification - from your watch
24:00〜 ローカル通知のサンプルコード
Notification Action - Launching from notification action (WKExtensionDelegate)
handleActionWithIdentifier(_: , forRemoteNotificaiton: )
handleActionWithIdentifier(_: , forLocalNotification: )
Inline notification text replies
providing suggestions for inline text replies
suggestionsForResponseToActionWithIdentifier()
handleActionWithIdentifier(_:, forRemoteNotification: withResponseInfo:)
UIUserNotificationActionResponseTypedTextKey

on the fly language selection

watchOS 1では通知には常にNotification Controllerを呼び出していたが、watchOS 2では自分のアプリケーションがアクティブ時には違うメソッドを呼び出す。

Notification handling when app is active
On your WKExtensioDelegate
didReceiveRemoteNotification()
didReceiveLocalNotification()

Modal Alert
presentAlertControllerWithTitle()
.Alert
.SideBySideButtonsAlert
.ActionSheet
posted by 永遠製作所 at 02:00| 東京 ☀| Comment(0) | TrackBack(0) | WWDC | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック