SlideShare a Scribd company logo
1 of 24
RealmとApp Extensionの
ガイダンス
星野佑太
Yuta Hoshino
1 2015-8-25 Realm Meetup #6
このプレゼンのメリット
• iOSアプリとApple Watchアプリ(watchOS1)の間で、同一のRealm
ファイルを共有するための手順を確認できる。
• 他のApp Extension(TodayやActionなど)も本質は同じ
• Watchをビュワーにするアプリ、キャッシュをWatchやToday
Extensionで再利用するアプリなどを開発するときに役立つ。
Realm
2
自己紹介
• 星野佑太 iPhone3GSの頃〜、自社開発が
メインの株式会社ジーニー
• メモ電卓(ge-calc) 累計64万DL。iPad総合
Top100入り。200万DL目指す。
CoreDataベース。
• Realmの製品導入はQReationが初。
• Apple Watchの受託案件として、Akerun
のモックアップ段階のUIプログラミング
3
Yuta Hoshino
@hsylife
• AppStoreで無料配布中。
• URLからQRコードを生成、スキャンす
るiOS/Watchアプリ。Glance、Action、
Handoff済。
• Realm Swiftを採用している。
• iOSアプリとWatchアプリが同一の
Realmファイルを共用している
(watchOS1)。
• 勉強会で相手方にURLを渡すのが大変だ
ったので開発した。
QReation (クリエーション)
4
https://appsto.re/jp/mtMw7.i
なぜRealmを採用したか?
5
セット
アップ
の速さ
データ
構造の
定義し
やすさ
操作の
記述の
簡易さ
データ
更新の
通知
iCloud
対応
Android
対応
総合
CoreDa
ta
△ △ △ ◎ ◎ × △
Realm ◎ ◎ ◎ △ × ◎ ◎
最新版UIの動き
必要な作業
7
Realm導入済
iOSアプリ
AppGroup
Embedded
Framework
UIの挙動調
整
WatchKit
Extension
プロジェクト
CocoaPods
App Groupの意義
• 同一の.realmファイルをiOS/Watch(AppExtension)の
いずれからもアクセスできるようにするため。
8
Realm
App Group
• Member CenterにApp Groupを登録する。
• Certificates, Identifiers & Profiles > iOS Apps > Identifiers > App Groups
• identifierは”group.com.ge-nie.QReate.Documents”のような形
• iOS/Extensionの各ターゲットの設定をONに。
• Project > Capabilities > AppGroupsをON → identifierを選択
• ファイルのパスを与える。
9
より詳しい手順の解説
• WatchKitでiPhone Appとデータ共有する方法(_tid_著)
10
http://qiita.com/_tid_/items/dfff60ec8e93fefe1af4
Embedded Frameworkの利点
• 親と子で重複してしまうコードを1本化して使
いまわす。
• RealmObjectモデルを記述したファイルを使い
まわせる。
• 二度手間をカットできる。整合性のトラブルを
回避できる。
• Embedded FrameworkなしでもFrameworkを作
成できる。しかし実装手順がより簡易で済む。
• Xcode6から利用可。
Embedded Framework
11
Embedded Framework
1. Targetsに追加する。CocoaTouchFrameworkを選択→ProductNameにFrameworkの名前
として使う任意の名前を入れる
2. AppExtensionで利用できないAPIを弾くマクロを有効化す
る。Allow app extension API onlyにチェック
3. Extensionにリンクさせる。本体アプリがEmbedded binaryとして追加されている
かを確認→Extensionのターゲットに切り替えて、+を押してリンクさせる。
4. アクセスレベルをpublicに。
5. importする。iOS/Watchの両方で。
12
より詳しい手順の解説
• [iOS 8] App Extension #2 – Embedded Framework を利
用して共有コードを Framework 化する(クラスメソッ
ド株式会社 著)
13
http://dev.classmethod.jp/references/ios-8-embedded-framework/
必要な作業
14
Realm導入済
iOSアプリ
AppGroup
Embedded
Framework
UIの挙動調
整
WatchKit
Extension
プロジェクト
CocoaPods
Cocoa Podsの利点
• 導入が楽。
• バージョンアップ時のアップデート作業(◎)が圧倒的に楽。
• Podfileを一度書いておけば基本的にOK。
15
Podfile
platform :ios,'8.0'
use_frameworks!
link_with 'QReate_Framework'
pod 'RealmSwift'
end
Targets Podfile
• Watch Extentionなどのターゲットを全部リンクする必要はなく、
Embedded FrameworkをLink withでリンクさせればよい
• ターゲット名の誤記、スペースの有無、シングルクォーテーションに注意
より詳しい手順の解説
17
• App ExtensionでCocoaPods管理しているライブラリ
を使用する2つの方法(tmnb 著)
http://qiita.com/tmnb/items/15377f03498ca0b53592
UIとRealm
• リスト画面から
contextForSegueWithIdentifier(
)で遷移先のQRコード表示画面
にcurrentRowのインデックス
を受け渡す。
• そのインデックスを見て、
Realmファイルからレコードを
取り出してQRコードを表示し
ている。
18
currentRow
=1index 0
index 1
index 1
0
1
index 00
index 11
Realm
データ変更時の原則
• データ変更が起きた場合にどう処理しているか。
• Realmの変更通知を受けたときに、currentRowから現在のレコード内容を参照して再表
示する原則をとっている。
• NotificationTokenにRealm().addNotificationBlockを追加して再表示処理をさせる。
19
index 1
index 0
index 1
index 0
index 1
index 0
t
🔃
👀 changedchanged
要素不足でクラッシュ
20
クラッシュする場合: iOS側が削除した要素をwatch側で参照した
index 1
index 0
index 1
index 0
index 1
index 0
💥
t
index 1
🔃
👀 ???
• ソートされたレコードはArray型。
• watchで末尾のrowのQRコードを表示している場合に、iOS側
でそのデータソースを削除すると、要素の数が不足する。
???
🐛
要素不足時の例外
21
対策: 要素不足ならpopさせてReload
index 0
index 1
index 0
index 1
index 0
index 1
index 0
🔃
↩︎
👀
t
index 1
• Realmの変更通知は、追加・修正・削除などを区別していない。
「変更」という通知が来るのみ。
• 要素不足を判定して、ルートに戻す。
👀
watch側のコード
22
2層目のQRコード表示用
InterfaceController.swift
iOS側で.realmファイルの変更
☺︎thank you,
• ご静聴ありがとうございました。
• watchOS2対応については改めてまとめて
別の機会に発表したいと思います。
• 質問があれば ythshn@gmail.com までお
願いします。
• Facebookリクエストを歓迎しています。
• 告知があります。
23
Yuta Hoshino
@hsylife
AED💨Registers(仮)
• 年間7万人位が心臓停止で死亡。誰もが突然、遭遇する。
• 心臓マッサージとAEDの処置で救命率は4倍高まる。
• AED使用で救命できたのは、目撃ケースの3.7% 近くのAEDを速く持ってくる
ことが大事。
• AEDを配達するアプリなどを発想する上で、設置場所のデータが10倍ほしい。
• AEDの販売台数は世界一で60万弱あるが、設置場所のオープンデータは3.5万
件分。
• AEDの設置場所でイングレスみたいな国取りゲームを作って、結果的にAED
の全国マップを作るアイデア。(AED💨)
• 人口密集地ほど配点が高い。
• オレンジチームと白チームに分かれる?(要は対戦)
• 個人の点数ランキングもある。
• 先取した人が点数ゲット+100。一定期間経つとまたリセットされる。
• AEDの設置データはオープンデータプラットホームに転送する。そこからサー
ドパーティーのAED検索などのアプリと連携して、緊急時などに活用される。
• → 良いアイディアがあれば教えてください。ythshn@gmail.com
24
96.
3
%
3.7
%

More Related Content

Similar to RealmとApp Extensionのガイダンス/Realm meetup vol.6

[Modern Cloud Day Tokyo 2019] KubeConに登壇したCloud Native Labsのエンジニアが、初学者にも分かりやす...
[Modern Cloud Day Tokyo 2019] KubeConに登壇したCloud Native Labsのエンジニアが、初学者にも分かりやす...[Modern Cloud Day Tokyo 2019] KubeConに登壇したCloud Native Labsのエンジニアが、初学者にも分かりやす...
[Modern Cloud Day Tokyo 2019] KubeConに登壇したCloud Native Labsのエンジニアが、初学者にも分かりやす...オラクルエンジニア通信
 
「オープンなジオデータを考える」資料
「オープンなジオデータを考える」資料「オープンなジオデータを考える」資料
「オープンなジオデータを考える」資料Fumihiro Kato
 
Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshopDaisuke Sugai
 
PTLのお仕事とリリースパイプラインの裏側
PTLのお仕事とリリースパイプラインの裏側PTLのお仕事とリリースパイプラインの裏側
PTLのお仕事とリリースパイプラインの裏側masahito12
 
Javaはコミュニティの力で再び偉大になれるのか
Javaはコミュニティの力で再び偉大になれるのかJavaはコミュニティの力で再び偉大になれるのか
Javaはコミュニティの力で再び偉大になれるのかYusuke Suzuki
 
OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理Tadashi Miyazato
 
Oracle も Serverless サービスやっています
Oracle も Serverless サービスやっていますOracle も Serverless サービスやっています
Oracle も Serverless サービスやっていますSuguruSugiyama
 
serverless openstack 101
serverless openstack 101serverless openstack 101
serverless openstack 101Naoto Gohko
 
Xcode7時代のアプリ配布
Xcode7時代のアプリ配布Xcode7時代のアプリ配布
Xcode7時代のアプリ配布toyship
 
iQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナーiQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナーImamura Masayuki
 
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発takuma mori
 
IaC化の3つのポイント
IaC化の3つのポイントIaC化の3つのポイント
IaC化の3つのポイント山下 達也
 
OpenStack Swiftとそのエコシステムの最新動向
OpenStack Swiftとそのエコシステムの最新動向OpenStack Swiftとそのエコシステムの最新動向
OpenStack Swiftとそのエコシステムの最新動向NTT Software Innovation Center
 
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)Takashi Sogabe
 
Tsdg meetup#12 summer16 lightning_experience
Tsdg meetup#12 summer16 lightning_experienceTsdg meetup#12 summer16 lightning_experience
Tsdg meetup#12 summer16 lightning_experienceIkou Sanuki
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発Kota Mizushima
 
関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開Hideki Takase
 

Similar to RealmとApp Extensionのガイダンス/Realm meetup vol.6 (20)

[Modern Cloud Day Tokyo 2019] KubeConに登壇したCloud Native Labsのエンジニアが、初学者にも分かりやす...
[Modern Cloud Day Tokyo 2019] KubeConに登壇したCloud Native Labsのエンジニアが、初学者にも分かりやす...[Modern Cloud Day Tokyo 2019] KubeConに登壇したCloud Native Labsのエンジニアが、初学者にも分かりやす...
[Modern Cloud Day Tokyo 2019] KubeConに登壇したCloud Native Labsのエンジニアが、初学者にも分かりやす...
 
「オープンなジオデータを考える」資料
「オープンなジオデータを考える」資料「オープンなジオデータを考える」資料
「オープンなジオデータを考える」資料
 
Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshop
 
PTLのお仕事とリリースパイプラインの裏側
PTLのお仕事とリリースパイプラインの裏側PTLのお仕事とリリースパイプラインの裏側
PTLのお仕事とリリースパイプラインの裏側
 
Javaはコミュニティの力で再び偉大になれるのか
Javaはコミュニティの力で再び偉大になれるのかJavaはコミュニティの力で再び偉大になれるのか
Javaはコミュニティの力で再び偉大になれるのか
 
OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理
 
Oracle も Serverless サービスやっています
Oracle も Serverless サービスやっていますOracle も Serverless サービスやっています
Oracle も Serverless サービスやっています
 
Google Product
Google ProductGoogle Product
Google Product
 
serverless openstack 101
serverless openstack 101serverless openstack 101
serverless openstack 101
 
Xcode7時代のアプリ配布
Xcode7時代のアプリ配布Xcode7時代のアプリ配布
Xcode7時代のアプリ配布
 
iQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナーiQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナー
 
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発
 
IaC化の3つのポイント
IaC化の3つのポイントIaC化の3つのポイント
IaC化の3つのポイント
 
OpenStack Swiftとそのエコシステムの最新動向
OpenStack Swiftとそのエコシステムの最新動向OpenStack Swiftとそのエコシステムの最新動向
OpenStack Swiftとそのエコシステムの最新動向
 
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
 
Tsdg meetup#12 summer16 lightning_experience
Tsdg meetup#12 summer16 lightning_experienceTsdg meetup#12 summer16 lightning_experience
Tsdg meetup#12 summer16 lightning_experience
 
Java in the World of Container by David Buck
Java in the World of Container by David BuckJava in the World of Container by David Buck
Java in the World of Container by David Buck
 
20101022
2010102220101022
20101022
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
 
関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開
 

RealmとApp Extensionのガイダンス/Realm meetup vol.6

Editor's Notes

  1. ・QReationというより、概説。イメージと資料のありかを示したい。補足をお願いしたい ・この女性は誰なのか? http://dunnnk.com ・時間配分を考えるために。iOSエンジニアの人数、App Extensionの開発を経験した人数、AppGroupでファイル共有した経験がある人、embedded frameworkを使ったことがある人, podfileのlink withを使ったことがある数、Watch開発の経験がある人
  2. App ExtensionでRealmを使うときのガイダンス。 iOS9/watchOS2の秋以降も使える知識
  3. Realmを製品導入したのは初めて。
  4. QRコードを見せるアプリ。 iOSアプリとWatchアプリが同一のRealmファイルを共用している
  5. 実装の手間が軽い
  6. 右側がwatch。Index 0を登録→QRコードを表示。 Index 1を登録→内容を修正する 削除した場合の挙動
  7. 全体像を把握してほしい
  8. リンクさせる仕組み
  9. パスを与えるための記述はこうなる。
  10. 手間をカットできる。 公式ドキュメントでは、埋め込みフレームワークという用語。
  11. 特に4。アクセスレベルをpublicにする。privateでは同じソース内でしかアクセスできない。
  12. あと2つ
  13. アップデートが楽
  14. Embedded FrameworkをLink withでリンクさせればよい
  15. Realmファイルのデータをどう表示しているか tableで押されたrowを遷移先に渡して、それをキーにしてRealmのレコードを取り出してQRコードを表示している。
  16. 原則として、変更通知で再表示させている。
  17. 要素不足が発生するとクラッシュする
  18. 要素不足を判定して、ルートに戻す
  19. 更新通知のなかで、原則と例外の書き分け
  20. watchOS2はファイル共有の考え方が全く違うので、別の機会にまとめて話す メールとfbリクエストをお待ちしています
  21. この前の日曜にAEDオープンデータ勉強会へ。 AEDを速く手配することが大事。設置場所のデータを10倍集めたい。 最近思いついたアイディア。イングレスみたいなゲーム プラスしたいアイディアがあれば、教えてください。