gunosy for apple watchができるまで

Post on 07-Aug-2015

963 Views

Category:

Internet

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Gunosy for Apple Watchができるまで株式会社Gunosy 開発本部

川邉雄介

@jeffsukeiOS App Developer

https://github.com/jeffsuke

今年のWWDCは安全な地域に泊まれそうです

WWDC2014における@jeffsuke宿泊先付近

SF危険な地域マップ 外務省ホームページより

Gunosy

• 情報キュレーションサービス

• 900万ダウンロード

• 社員の標準言語はGoらしい

概要

• Apple Watch上で快適な体験を実現するまで頑張った話

目次

• Apple Watchアプリ概要

• Watch Appの最適化

• Glanceの最適化

• 申請後の話

Gunosy for Apple Watchで出来ること

GlanceWatch app

Apple Watchアプリ

アプリ本体 Extension Watch app

Storyboard Image assetsController, Model

Setter

UIEvent

Apple Watchアプリの仕組み

• 可能な限り画像はApple Watch側に保存しておく

• 表示しているviewの情報は取得出来ない

Watch Appにおける最適化

GunosyにおけるWatch App

• Alamofire • SwiftyJSON

• APIから受け取った話題の情報を元に記事を表示。詳細ページでは、本体に保存、本体で開く事ができる。

• 描画までを最短にする • iPhoneとAppleWatchの通信を減らす • 保存出来るものは保存する

ポイント

概要

willActivate()の活用

• initとawakeでの処理を最小限に

1. Watch Appが呼び出される 2. Storyboardが読み込まれる 3. 対象画面のinit, awakeが走る 4. Watch上で画面が表示される 5. willActivate()が呼ばれる

起動までの手順

willActivate()の活用

WKInterfaceGroupの利用

• Placeholderとして • 角丸

addCachedImage

• BLEの為通信速度に制限がある。可能な限り再利用する画像はキャッシュ

• 各アプリ5MBまでキャッシュ可能 • kiavashfaisali/KFSwiftImageLoaderとか使うと便利っぽい

参考: https://developer.apple.com/library/ios/documentation/General/Conceptual/WatchKitProgrammingGuide/Images.html http://qiita.com/_tid_/items/55667b00ce158a28428a

addCachedImage

読み込み

保存

Watch Appにおける最適化

• ライフサイクルを知り描画可能な物から順次描画する

• 画像は可能な限りWatch本体に

Glanceにおける最適化

GunosyにおけるGlance

• APIから受け取った話題の情報を元に画像を表示。時計1画面でニュースが分かる体験。

• 人に見せて自慢したくなる機能

Glance• 読み込みまでの時間がポイント • ひと目で分かるUI

ポイント

概要

可能な限りキャッシュする

• 共通のAppGroupを設定し、NSUserDefaultで必要なデータを共有した。

• [[NSUserDefaults alloc] initWithSuiteName:@“group.mycompany.myapp"]

App Group

画像キャッシュ• addCachedImage

本体で画像を生成する

本体で画像を生成する

Githubで公開しています

• https://github.com/jeffsuke/GlanceWordRainbowImage

Glanceにおける最適化

• 画像に描画することで複雑な表現を実現

• 可能な限り画像等をキャッシュしておく

申請後の話

リジェクトの話

• 発売日である4/24を目指して開発

• しかし二度のリジェクト

• 二の鉄を踏まないTips

リジェクト事例1

• Watch appを使う前に一度iPhoneの起動を要求し、リジェクト。

• ウォッチ単体で意味のある機能を提供できていない為、本体アプリで認証を実行することに。

• ただし、JALやUber等ログインを要求するアプリも存在するので、ログインならば良いのかも。

リジェクト事例2

• iPhoneで読むボタンを押してもWatchアプリでの変化がないためリジェクト。

• openParentApplication:reply:を用いて開いたかどうかを返す

変更前

変更後

リジェクト事例2Watch側

本体側

リジェクトの話まとめ

• Apple Watch単体で体験が成り立っている必要がある

Apple Watchまとめ

• Apple Watchアプリバイナリに可能な限りView関連の要素を含めておく

• 複雑な処理はExtension、時間がかかる処理は本体アプリで実施

• Watchアプリ単体で体験を届ける必要がある

質疑応答

top related