SlideShare a Scribd company logo
1 of 37
Download to read offline
体重ウォッチにおける
RealmとSwiftTaskの活用
@akio0911
自己紹介
• Shingo Sato (@akio0911)
• Freelancer
• iOS Developer
• Blogger
• アプリ開発講座
• 書籍執筆
MosaicCam(モザイクカメラ)
PictCheck(ピクトチェック)
CellMemo(セルメモ)
DrawFrame(DrawFrame)
体重ウォッチ
アプリクリエイター道場
• 初心者向けのアプリ講座
• 2011年から各地で50期開催
• 東京・大阪・名古屋・仙台・
広島・福岡
Agenda
• アプリの紹介(体重ウォッチ)
• アプリの設計
• SwiftTaskについて
• リジェクト対応
体重ウォッチ
体重の記録・グラフ表示・Todayウィジェットでの増減確認など
Supports glance and complications
体重ウォッチの設計
設計案1
Apple Watch
HealthKit
Watch
Extension
iPhone
1. Query
3. Samples
4. Samples
2. Query
HealthKit
Storage
HealthKit
Watch側でのQueryは、iPhone側に転送されるのでは?
結果
• Queryは転送されない。Watch上でのQueryは、Watch
上のStoreに対して実行される
• Watch側のHealthKitでは、Watch側で書き込んだもの
しか取得できないっぽい
• Watch側で書き込んだものは、iPhone側のHealthKitに
も自動で同期される
• つまり、iPhone側のHealthKitには、どちらで書き込ん
だデータも存在する
Apple Watch
HealthKit
Watch
Extension
iPhone
QuerySamples
HealthKit
Storage
HealthKit
iPhone
App
QuerySamples
HealthKit
Storage
Sync
実際の挙動
設計案2
Apple Watch iPhone
1. Watch Connectivity
2. Query3. Samples
4. Samples
Watch
Extension
iPhone
App
HealthKit
Watch ConnectivityでiPhone側へ問い合わせれば良いのでは?
HealthKit
Storage
結果
• デバッグ時には取得できた。

日常での使用では取得できないことがあった
• MacにUSBケーブルで接続してデバッグ実行した時は取得できた
• ケーブルを外して日常的に使用した時は

取得できないことがあった
• iPhoneのロック中に、HealthKitへはアクセスできないことが判明
• Watch Appを使う時は、

ほとんどの場合でiPhoneはロック中・・・
設計案3
Apple Watch iPhone
1. Observer
Query
2. Notify
5. Watch Connectivity
(Samples)
3. Query4. Samples
Realm
6. Save
7. Load
Watch
Extension
iPhone
App
HealthKit
結果
• 任意のタイミングに、Watch単体でHealthKitのデー
タ(のキャッシュ)を読み出せるようになった
SwiftTaskを活用
HealthKitでのアクセスは非同期
UIViewのアニメーション
アニメーション完了時の処理を指定する
(非同期)
アニメーション完了時に
次のアニメーションを開始する
SwiftTaskを使う
アニメーションタスクの型を宣言
pauseしたタスクをresumeしやすくする
SwiftTaskを使う
アニメーションの内容を記述し、実行する
アニメーションタスクを作りやすくする
UIViewのextensionとして、animationTaskメソッドを用意する
複数のアニメーションを連鎖させる
連鎖のための演算子を作る
SwiftTaskをアプリで使う
DataManagerでTaskを返す
例 : 連携確認が終わったら検索する
Rejected
仕様変更することに
• HealthKitとの連携を許可されたらHealthKitを使う
• 連携を拒否されたらRealmを使う
プロトコルを宣言
HealthKitは非同期
Realmは同期
Storageの切り替えを行うManager
Userからは
実Storageを意識しなくても良い
User
DataManager
: DataStorageProtocol
HealthKitStorage
: DataStorageProtocol
RealmStorage
: DataStorageProtocol
Authorize
Status
最終設計
Apple Watch iPhone
Watch Connectivity
Realm
Watch
Extension
iPhone
App
HealthKit Realm
DataManager
ご静聴
ありがとうございました

More Related Content

Similar to 体重ウォッチにおけるRealmとSwiftTaskの活用

Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版Yoshito Tabuchi
 
Elastic on Azure Integration & Building React UI Based Search App Using Azure...
Elastic on Azure Integration & Building React UI Based Search App Using Azure...Elastic on Azure Integration & Building React UI Based Search App Using Azure...
Elastic on Azure Integration & Building React UI Based Search App Using Azure...Shotaro Suzuki
 
20120413 nestakabaneworkshop
20120413 nestakabaneworkshop20120413 nestakabaneworkshop
20120413 nestakabaneworkshopYoichiro Sakurai
 
20120316 designerworkshoppublished
20120316 designerworkshoppublished20120316 designerworkshoppublished
20120316 designerworkshoppublishedYoichiro Sakurai
 
Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016
Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016
Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016Yusuke Suzuki
 
Swagger jjug ccc 2018 spring
Swagger jjug ccc 2018 springSwagger jjug ccc 2018 spring
Swagger jjug ccc 2018 springkounan13
 
リモートワークで10kgダイエットした話
リモートワークで10kgダイエットした話リモートワークで10kgダイエットした話
リモートワークで10kgダイエットした話Masaki Suzuki
 
Slides for tiTokyo 2013 - Japanese version
Slides for tiTokyo 2013 - Japanese versionSlides for tiTokyo 2013 - Japanese version
Slides for tiTokyo 2013 - Japanese versionRicardo Alcocer
 
Slides for tiTokyo 2013 - Japanese version
Slides for tiTokyo 2013 - Japanese versionSlides for tiTokyo 2013 - Japanese version
Slides for tiTokyo 2013 - Japanese versionralcocer
 
XcodeのTargetについてのTIPS
XcodeのTargetについてのTIPSXcodeのTargetについてのTIPS
XcodeのTargetについてのTIPSYoichiro Sakurai
 
iQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナーiQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナーImamura Masayuki
 
Xcode 7におけるUIテストとカバレジ計測 #yidev 第20回勉強会
Xcode 7におけるUIテストとカバレジ計測 #yidev 第20回勉強会Xcode 7におけるUIテストとカバレジ計測 #yidev 第20回勉強会
Xcode 7におけるUIテストとカバレジ計測 #yidev 第20回勉強会Koji Hasegawa
 
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~Saki Homma
 
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~Saki Homma
 
スマートフォンアプリの テスト自動化をはじめよう
スマートフォンアプリの テスト自動化をはじめようスマートフォンアプリの テスト自動化をはじめよう
スマートフォンアプリの テスト自動化をはじめようKoji Hasegawa
 
ビルドプロセスとCI #STAC2014
ビルドプロセスとCI #STAC2014ビルドプロセスとCI #STAC2014
ビルドプロセスとCI #STAC2014Koji Hasegawa
 
第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会codeal
 

Similar to 体重ウォッチにおけるRealmとSwiftTaskの活用 (20)

Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版
 
Elastic on Azure Integration & Building React UI Based Search App Using Azure...
Elastic on Azure Integration & Building React UI Based Search App Using Azure...Elastic on Azure Integration & Building React UI Based Search App Using Azure...
Elastic on Azure Integration & Building React UI Based Search App Using Azure...
 
20120413 nestakabaneworkshop
20120413 nestakabaneworkshop20120413 nestakabaneworkshop
20120413 nestakabaneworkshop
 
20120316 designerworkshoppublished
20120316 designerworkshoppublished20120316 designerworkshoppublished
20120316 designerworkshoppublished
 
概説 Data API v3
概説 Data API v3概説 Data API v3
概説 Data API v3
 
Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016
Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016
Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016
 
Swagger jjug ccc 2018 spring
Swagger jjug ccc 2018 springSwagger jjug ccc 2018 spring
Swagger jjug ccc 2018 spring
 
リモートワークで10kgダイエットした話
リモートワークで10kgダイエットした話リモートワークで10kgダイエットした話
リモートワークで10kgダイエットした話
 
Slides for tiTokyo 2013 - Japanese version
Slides for tiTokyo 2013 - Japanese versionSlides for tiTokyo 2013 - Japanese version
Slides for tiTokyo 2013 - Japanese version
 
Slides for tiTokyo 2013 - Japanese version
Slides for tiTokyo 2013 - Japanese versionSlides for tiTokyo 2013 - Japanese version
Slides for tiTokyo 2013 - Japanese version
 
XcodeのTargetについてのTIPS
XcodeのTargetについてのTIPSXcodeのTargetについてのTIPS
XcodeのTargetについてのTIPS
 
iQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナーiQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナー
 
AppCodeNight testcode
AppCodeNight testcodeAppCodeNight testcode
AppCodeNight testcode
 
Xcode 7におけるUIテストとカバレジ計測 #yidev 第20回勉強会
Xcode 7におけるUIテストとカバレジ計測 #yidev 第20回勉強会Xcode 7におけるUIテストとカバレジ計測 #yidev 第20回勉強会
Xcode 7におけるUIテストとカバレジ計測 #yidev 第20回勉強会
 
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
 
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
 
Ignite UI 2012 最新情報 jQuery Mobile 編
Ignite UI 2012 最新情報 jQuery Mobile 編Ignite UI 2012 最新情報 jQuery Mobile 編
Ignite UI 2012 最新情報 jQuery Mobile 編
 
スマートフォンアプリの テスト自動化をはじめよう
スマートフォンアプリの テスト自動化をはじめようスマートフォンアプリの テスト自動化をはじめよう
スマートフォンアプリの テスト自動化をはじめよう
 
ビルドプロセスとCI #STAC2014
ビルドプロセスとCI #STAC2014ビルドプロセスとCI #STAC2014
ビルドプロセスとCI #STAC2014
 
第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会
 

体重ウォッチにおけるRealmとSwiftTaskの活用