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
Introduction to RIBs
Search
Yuji Hato
March 06, 2019
Technology
5
1.4k
Introduction to RIBs
Introduction to RIBs
Yuji Hato
March 06, 2019
Tweet
Share
More Decks by Yuji Hato
See All by Yuji Hato
ABEMAモバイルアプリ開発のDevOps戦略
dekatotoro
1
630
Multiplatform Engineering Roadmap for the Future
dekatotoro
1
130
継続的な開発スタイル 「AbemaTV iOSアプリを週一で リリースしている話」
dekatotoro
6
3.9k
iOS Adaptive UI - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ -
dekatotoro
0
390
動画アプリをなめらかに動かす技術 - iOS -
dekatotoro
0
350
5分で学ぶ差分更新とRxDataSources
dekatotoro
0
290
AbemaTV モバイルアプリの開発体制と 開発プロセスの話
dekatotoro
0
260
Apple TV - tvOS入門 -
dekatotoro
0
120
AbemaTV on Apple TV
dekatotoro
0
40
Other Decks in Technology
See All in Technology
Autonomous Database Serverless 技術詳細 / adb-s_technical_detail_jp
oracle4engineer
PRO
17
45k
コンテナサプライチェーンセキュリティ
kyohmizu
1
110
エンジニアのためのドキュメント力基礎講座〜構造化思考から始めよう〜(2025/02/15jbug広島#15発表資料)
yasuoyasuo
18
7.1k
分解して理解する Aspire
nenonaninu
2
490
ユーザーストーリーマッピングから始めるアジャイルチームと並走するQA / Starting QA with User Story Mapping
katawara
0
260
Share my, our lessons from the road to re:Invent
naospon
0
110
クラウドサービス事業者におけるOSS
tagomoris
3
950
Windows の新しい管理者保護モード
murachiakira
0
170
システム・ML活用を広げるdbtのデータモデリング / Expanding System & ML Use with dbt Modeling
i125
1
260
明日からできる!技術的負債の返済を加速するための実践ガイド~『ホットペッパービューティー』の事例をもとに~
recruitengineers
PRO
3
510
TAMとre:Capセキュリティ編 〜拡張脅威検出デモを添えて〜
fujiihda
2
360
データ資産をシームレスに伝達するためのイベント駆動型アーキテクチャ
kakehashi
PRO
2
600
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
A designer walks into a library…
pauljervisheath
205
24k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
9
500
Mobile First: as difficult as doing things right
swwweet
223
9.3k
Become a Pro
speakerdeck
PRO
26
5.1k
A better future with KSS
kneath
238
17k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
Gamification - CAS2011
davidbonilla
80
5.1k
GraphQLとの向き合い方2022年版
quramy
44
13k
Side Projects
sachag
452
42k
Designing on Purpose - Digital PM Summit 2013
jponch
117
7.1k
Making Projects Easy
brettharned
116
6k
Transcript
Introduction to RIBs CA.swift 2019/03/06 Yuji Hato
ށ ༐ೋ • Contributed services dekatotoro @dekatotoro yuji.hato
Agenda 1. What are RIBs 2. Parts of RIB 3.
Communication Between RIBs 4. RIBs Tooling 5. RIBs practice 6. Conclusion
1 What are RIBs
What are RIBs RIBs is Uber’s cross-platform architecture framework
What are RIBs • େنͳϞόΠϧΞϓϦέʔγϣϯ༻ʹઃܭ͞Ε͍ͯΔ • άϩʔόϧͳঢ়ଶΛ࠷খݶʹ͑Δ • ςετ༰қੑ •
ͱґଘ͕ؔ໌֬ • ΦʔϓϯɾΫϩʔζυͷݪଇ(OCP) • ϏδωεϩδοΫυϦϒϯͷtreeߏ • λΠϓηʔϑ ಛ
What are RIBs • RIBҎԼͷ಄จࣈ - Router - Interactor -
Builder • RIBsRIBͷू߹ମ ༝དྷ
What are RIBs ߏ • RIB tree - RIBsͰϏδωεϩδοΫͷ୯ҐͰ͚ͨ ʮRIBʯΛҰͭͷմͱͯ͠ѻ͏
- RIBΛtreeߏͰߏங͢Δ - UI֊ͱҰக͠ͳͯ͘Α͍ - RIBಉ࢜ʹࢠ͕ؔ͋Γɺґଘؔͦ͜ ʹ͚ͩଘࡏ͢Δ - ґଘ͕ؔͳ͍RIBӨڹ͠ͳ͍
2 Parts of RIB
Parts of RIB RIB Overall
Parts of RIB RIB Overall • Interactor • Router •
Builder • View(Controller) (optional) • Presenter (optional) • Component
Parts of RIB Interactor • ϏδωεϩδοΫ Streamͷߪಡɺঢ়ଶͷมߋΛߦ͍ɺ RIBView(Controller)ॲཧΛҕ ৡ͢Δ
Parts of RIB Router • ϧʔςΟϯά RIBsࢠؔΛ࣋ͬͨπϦʔߏʹ ͳ͓ͬͯΓɺRouterInteractorΛ ࢹͯ͠ࢠRIBͱͷଓ/அΛߦ͏
Parts of RIB Builder • RIBߏཁૉͷੜ - Router - Interactor
- View(Controller) (optional) - ࢠRIB (optional) • DI ֤ཁૉͷґଘੑͷղܾΛߦ͏
Parts of RIB View(Controller) • UIͷදࣔ - ViewͷੜϨΠΞτௐ - Interactor͔Βҕৡ͞ΕͨUIߋ৽
- Router͔Βҕৡ͞Εͨը໘ભҠ - RIBͷoptionalཁૉ
Parts of RIB Presenter • DataModelͷม - BusinessModel → ViewModel
ม - ViewModel → BusinessModel ม - มॲཧͷTestability - RIBͷoptionalཁૉͰলུ͞Εͨ ߹ɺมॲཧView(Controller)·ͨ Interactor͕୲͏
Parts of RIB Component • RIBͷґଘؔΛཧ - Builderͷิॿ - ࣗͷґଘੑΛॴ༗
- RIBΛߏங͢ΔͨΊʹඞཁͳ֎෦ґଘͷΞΫ ηε - ଞͷRIB͔ΒͷΞΫηε੍ޚ • DIྫ ࢠRIBʹґଘΛͨ͢ΊʹRIBͷComponent ΛࢠRIBͷBuilderʹೖ͢Δ
Parts of RIB Object references in RIB • Router -
Interactor - View(Controller) • Interactor - Presenter - View(Controller) - weak Router • View(Controller) - weak Interactor
3 Communication Between RIBs
Communication Between RIBs RIB tree downward A RIB B RIB
C RIB • ࢠRIBͷBuilder.build()ʹύϥϝʔλͰ͢ • ComponentΛ༻͍ͨDIͰRx StreamsΛ͢
Communication Between RIBs RIB tree upwards A RIB B RIB
C RIB • RIBͷInteractorࢠRIBͷListenerΠϯλʔϑΣʔ εΛ࣮ • ࢠRIB͕ListenerΛհͯ͠RIBͷInteractorͷϏδω εϩδοΫΛ࣮ߦ • RIB͕ࢠRIBͷRx StreamsΛsubscribe͠ͳ͍ - ϝϞϦϦʔΫΛ͙ - ૄ݁߹ɺtestability
4 RIBs Tooling
RIBs Tooling RIBs Xcode Templates • RIBΫϥεͷੜ • RIBςετΫϥεͷੜ •
Component Extensionͷੜ
RIBs Tooling RIBΫϥεͷੜ • Builder • Interactor • Router •
View(Controller) (optional)
RIBs Tooling RIBςετΫϥεͷੜ • InteractorTests • RouterTests
RIBs Tooling Component Extensionͷੜ • ࢠRIBʹґଘͨ͠ComponentΛੜ RIB͔ΒࢠRIBʹඞཁͳґଘੑΛೖͨΊͷ Extension
5 RIBs practice
RIBs practice RIBs simple sample https://github.com/dekatotoro/RIBsSample RootRIB SearchRIB DetailRIB
5 Conclusion
Conclusion • UIKitʹґଘ͠ͳ͍ϥΠϑαΠΫϧ • ͱঢ়ଶͷείʔϓΛ໌֬ʹͰ͖Δ • ϏδωεϩδοΫυϦϒϯͷtreeߏͰυϝΠϯߏͷݟ͑Δ ԽͱӨڹൣғ͕Ѳͦ͢͠͏ • େنͰͳͯ͘ಋೖΛݕ౼ͯ͠ྑͦ͞͏
Thank you ࢀߟࢿྉ https://github.com/uber/RIBs/wiki https://www.slideshare.net/dhaval2025/ubers-new-mobile-architecture https://www.youtube.com/watch?v=FfwZSk6VRVY https://blog.japantaxi.co.jp/2018/12/09/1991