Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Realm iOS Code Review
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
USAMI Kosuke
March 26, 2017
Programming
1.5k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Realm iOS Code Review
https://realm.connpass.com/event/49669/
USAMI Kosuke
March 26, 2017
More Decks by USAMI Kosuke
See All by USAMI Kosuke
Onsager代数とその周辺 / Onsager algebra tsudoi
usamik26
0
730
Apple HIG 正式名称クイズ結果発表 / HIG Quiz Result
usamik26
0
290
ゆめみ大技林製作委員会の立ち上げの話 / daigirin project
usamik26
0
420
@ViewLoadingプロパティラッパの紹介と自前で実装する方法 / @ViewLoading property wrapper implementation
usamik26
0
570
これからUICollectionViewを実践活用する人のためのガイド / Guide to UICollectionView
usamik26
1
840
Xcodeとの最近の付き合い方のはなし / Approach To Xcode
usamik26
2
750
UICollectionView Compositional Layout
usamik26
0
900
Coding Swift with Visual Studio Code and Docker
usamik26
0
620
Swift Extension for Visual Studio Code
usamik26
2
1.2k
Other Decks in Programming
See All in Programming
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
230
Jetpack Compose Mechanisms
skydoves
2
730
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
780
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
650
プロダクトコードからライブラリの境界を見つける
elmetal
PRO
0
110
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
170
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
ChromeでローカルLLM
ryu1013
0
110
SREの越境 / SRE Collaboration
y0hgi
2
300
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
210
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
160
Event is what happens
moro
1
260
Featured
See All Featured
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
22k
It's Worth the Effort
3n
188
29k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1.1k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
490
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
550
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
1
280
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Transcript
Realm iOS Λ͏ͱ͖ͷ ϋϚΓϙΠϯτ USAMI Kosuke (Fenrir Inc.)
ࣗݾհ » Ӊࠤݟ ެีʢ@usamik26ʣ » ϑΣϯϦϧגࣜձࣾ » iOS ΞϓϦ։ൃΤϯδχΞ »
Swift » Xamarin.iOS » ͖ͳϥΠϒϥϦ RxSwift
Realm » ࠷ۙ 1ʙ2 ͰؔΘ͍ͬͯΔ։ൃҊ݅ͷ΄ͱΜͲͰ Realm ࠾༻ » Realm Objective-C
» Realm Swift » Realm Xamarin
ͳͥ Realm ͳͷ͔ʁ
ͳͥ Realm ͳͷ͔ʁ ͦͷલʹ… » ͦͦɺΞϓϦʹσʔλϕʔεʢDBʣΛଂ͢Δඞཁ͕͋Δ͔ʁ » DB ͳΜͯ໘ͦ͏… »
ଞʹͬͱ؆୯ͳํ๏͕͋ΔͷͰ…
σʔλϕʔεղܾͷҰखஈ » ͜Μͳ͜ͱ͕͍ͨ͠ » αʔόʔ͔Βऔಘͨ͠σʔλΛ͠Β͘ஔ͍͓͖͍ͯͨ » ΦϑϥΠϯͰલճऔಘͨ͠σʔλͰಈ࡞͍ͤͨ͞ » ϚελʔσʔλΛଂ͍ͨ͠ »
σʔλϕʔεͦΕΛղܾ͢Δखஈͷͻͱͭʹ͗͢ͳ͍
Realm ͦΕΒͷ༏Εͨղܾखஈ » ΈࠐΈ͕؆୯ » ίʔσΟϯά͕؆୯ » ͔ͩΒɺΧδϡΞϧͳ༻్ʹ͏ͷ͕ۤʹͳΒͳ͍
ϋϚΓϙΠϯτ » Realm Λ࠾༻͢ΔϓϩδΣΫτ͕૿͑ͨ » ͕ͨͬͯ͠ɺͦΕΛίʔυϨϏϡʔ͢Δػձ͕૿͑ͨ » ϨϏϡʔͨ͠தͰɺΑ͋͘ΔϋϚΓϙΠϯτΛڍ͛ͯΈ͍ͨ » ࣮ࡍʹυΩϡϝϯτಡΜͰਖ਼͘͠ѻ͑େৎ
ϑΝΠϧͷஔ͖ॴ
Realm ϑΝΠϧͷஔ͖ॴ » σϑΥϧτͰ Documents ϑΥϧμʹ࡞ΒΕΔ » ͍Ζ͍Ζࢼ͍ͨ࣌͠ʹศར » ͨͩ͠ɺσϑΥϧτͷ··Կߟ͑ͣʹϦϦʔεͯ͠μϝ
iCloud όοΫΞοϓ » Documents ϑΥϧμ iCloud όοΫΞοϓͷର » iCloud όοΫΞοϓͷඞཁ༰ྔ͕Ε্͕ͬͯ͠·͏
» ؾ͔ͮͣʹϦϦʔεͯ͠͠·͏ͱҰେࣄ
ରॲํ๏ » ҎԼͷͲΕ͔Ͱରॲ͢Δ » (1) ϑΝΠϧͷஔ͖ॴΛม͑Δ » (1-a) defaultRealm ͷઃఆΛม͑Δ
» (1-b) σϑΥϧτҎ֎ͷ Realm Λ͏ » (2) ϑΝΠϧͷஔ͖ॴͦͷ··ͰɺόοΫΞοϓର͔Βআ֎
Realm.Configuration var config = Realm.Configuration() config.fileURL = ... // (1-a)
defaultRealm ͷઃఆΛม͑Δ Realm.Configuration.defaultConfiguration = config // (1-b) σϑΥϧτҎ֎ͷ Realm Λ͏ let realm = try! Realm(configuration: config)
όοΫΞοϓର͔Βআ֎ let realmURL = Realm.Configuration.defaultConfiguration.fileURL! let realmURLs = [ //
ҙɿରϑΝΠϧ Realm ͷόʔδϣϯʹΑΓมΘΔ realmURL, realmURL.appendingPathExtension("lock"), realmURL.appendingPathExtension("note"), realmURL.appendingPathExtension("management") ] // (2) όοΫΞοϓର͔Βআ֎ʢҙɿઌʹ Realm ΛҰ࡞͓ͯ͘͜͠ͱʣ realmURLs.forEach { fileURL in fileURL.setResourceValue(true, forKey: NSURLIsExcludedFromBackupKey) }
Ͳ͏͖͢ʁ » جຊతʹϑΝΠϧͷஔ͖ॴΛม͑Δͷ͕ྑ͍ » Ͳ͜ʹஔ͔ͦ͘ͷΞϓϦͷઃܭ࣍ୈ » όοΫΞοϓର͔Βআ֎͢Δํ๏ඇৗखஈ
τϥϯβΫγϣϯΛ ·ͱΊΔ
τϥϯβΫγϣϯ » σʔλͷॻ͖ࠐΈ realm.write Λ͏ » realm.write ͷͨͼʹτϥϯβΫγϣϯ͕ൃੜ » ʢ͜ͷ͋ͨΓɺRealm
͕σʔλϕʔεͰ͋Δ͜ͱΛ࠶ೝࣝʣ
τϥϯβΫγϣϯ·ͱΊΔ͖ » ϑΝΠϧΞΫηεͷͨΊɺΦʔόʔϔου͕͋Δ » ·ͨɺRealm ϑΝΠϧ͕ංେԽ͢ΔݪҼʹͳΔ » τϥϯβΫγϣϯϩά͕ཷ·͍ͬͯͨ͘Ί » Realm
ϑΝΠϧ༰ྔ͕͙͢େ͖͘ͳΔͳΒٙͬͯΈΔ
τϥϯβΫγϣϯ͕૿͑Δύλʔϯ(1) » ϧʔϓͷதͰຖճ realm.write ΛݺΜͰ͍ͳ͍͔ʁ » Reactive ܥͰ realm.write ͷճΛҙ͍ࣝͯ͠Δ͔ʁ
» খ͞ͳ do map Ͱࡉ͔͘ realm.write ͍ͯͨ͠Γͱ͔
τϥϯβΫγϣϯ͕૿͑Δύλʔϯ(2) » Realm ʹϥούʔΛඃ͍ͤͯΔ߹ʢଞ DB ͱͷޓੑΛߟྀͳ Ͳʣ » ࡉ͔͍มߋͷͨͼʹ realm.write
ΛݺΜͰ͍ͳ͍͔ʁ
Ͳ͏͖͢ʁ » realm.write ͷճΛҙࣝͯ͠ݮΒ͢ » Realm ͷϥούʔͦͦ࡞Βͳ͍ͷ͕ϕλʔ
ίϯύΫγϣϯ
ϑΝΠϧංେԽͷରࡦ » ϑΝΠϧαΠζ͕େ͖͘ͳΔͷ͕ؾʹͳΔ߹͋Δ » ରࡦ » τϥϯβΫγϣϯΛ·ͱΊΔʢલड़ʣ » Realm ϑΝΠϧΛ࠷దԽ͢ΔʢίϯύΫγϣϯʣ
ίϯύΫγϣϯͷํ๏ » realm.writeCopy(toFile:) Ͱߦ͑Δ » ଞͷՕॴͰ Realm Λ͍ͬͯͳ͍λΠϛϯάͰߦ͏
ίϯύΫγϣϯͷॲཧ autoreleasepool { let realm = try! Realm() try! realm.writeCopy(toFile:
tempURL) try! FileManager.default.removeItem(at: realmURL) try! FileManager.default.moveItem(at: tempURL, to: realmURL) }
Ͳ͏͖͢ʁ » ίϯύΫγϣϯඞਢͰͳ͍ » ؾʹͳΔͳΒΞϓϦىಈ࣌ͳͲ Realm Λ͍ͬͯͳ͍ՕॴͰ࣮ߦ
ΦϒδΣΫτͷड͚͠
Realm ΦϒδΣΫτͷड͚͠ » ϝιουͷؒͷड͚͠ » ModelɺViewModelɺView ͷؒͷड͚͠ » εϨουͷؒͷड͚͠ »
εϨου͕ҟͳΔ߹ͦͷ··͢͜ͱͰ͖ͳ͍
ड͚͢ํ๏ » ΦϒδΣΫτΛͦͷ··͢ » struct ʹมͯ͢͠ » ϓϥΠϚϦΩʔΛ͢ » ThreadSafeReference
Λ͏
ΦϒδΣΫτΛͦͷ··͢ » ಉ͡εϨουͰ͋Δ͜ͱ͕໌Β͔Ͱ͋Δ߹ » ͨͩɺ͋·Γ֊Λ·͕ͨͬͯ͗͢͠Δͱ͔Γʹ͘͘ͳΔ
struct ʹมͯ͢͠ » Realm ΦϒδΣΫτͰͳ͍ͷʹม͢Δ » มͷख͕͔͔ؒΔ » ΦϒδΣΫτΛͦͷ··ͷܗͰͳ͘৭ʑखΛՃ͍͑ͨ߹ʹ͋Γ
ϓϥΠϚϦΩʔΛ͢ » εϨουΛ·͕ͨΔ߹ͷखܰͳํ๏ͷͻͱͭ // ड͚औΔଆ let realm = try! Realm()
let person = realm.object(ofType: Person.self, forPrimaryKey: key)
ThreadSafeReference Λ͏ » ৽͍͠ํ๏ɺϓϥΠϚϦΩʔ͕ͳͯ͘ྑ͍ // ͢ଆ let personRef = ThreadSafeReference(to:
person) // ड͚औΔଆ let realm = try! Realm() let person = realm.resolve(personRef)
ิ : Realm Πϯελϯεͷऔಘ » let realm = try! Realm()
ඞཁͳ࣌ʹͦͷ࣮ߦͯ͠ྑ͍ » ֤ϝιουͰߦ͏ » ֤ΫϩʔδϟͰߦ͏ » ίετ͕͔͔ΔॲཧͰͳ͍ » realm Λڞ༗͓ͯ͠͏ͱ͢Δͱ͔͑ͬͯ໘
Ͳ͏͖͢ʁ » ϓϥΠϚϦΩʔ·ͨ ThreadSafeReference ͕ྑ͍ » ΦϒδΣΫτͦͷͷΛ͢ͷൣғΛݶఆ͍ͨ͠ » struct ʹม͢Δͷɺͦͷมࣗମʹҙຯ͕͋Δ߹ͷΈ
ΫΤϦΛͲ͜Ͱߦ͏͔
ΫΤϦΛͲͷ֊Ͱߦ͏͔ » Ͳͷ֊ͷ͔ʁ » Model » ViewModel » View (ViewController)
Model » Model ʹϏδωεϩδοΫΛ࣋ͨͤΔ » ͜͜ͰΫΤϦ͕ߦΘΕΔ » ϏδωεϩδοΫΛ ViewModel
View ʹஔ͔ͳ͍
ViewModel » ViewModel ը໘͝ͱͷදࣔ༻ίϯςϯπΛ࡞Δ » ͜͜ͰΫΤϦΛҰ෦׆༻͢Δ » Model ͕มΘͬͨ࣌ʹ Live
Object ͷػೳར༻ » View ༩͑ΒΕͨίϯςϯπΛϨΠΞτ͢Δ͚ͩ
Ͳ͏͖͢ʁ » Model : ϏδωεϩδοΫΛ࣋ͭ » ViewModel : දࣔ༻ίϯςϯπΛ࡞Δ »
View : ϨΠΞτͷΈ
·ͱΊ
·ͱΊ » ϑΝΠϧͷஔ͖ॴ » τϥϯβΫγϣϯΛ·ͱΊΔ » ίϯύΫγϣϯ » ΦϒδΣΫτͷड͚͠ »
ΫΤϦΛͲ͜Ͱߦ͏͔