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
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
720
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
610
Swift Extension for Visual Studio Code
usamik26
2
1.2k
Other Decks in Programming
See All in Programming
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
310
JPUG勉強会 OSSデータベースの内部構造を理解しよう(第2回)
oga5
0
270
Agents on Rails - Rails at Scale 2026
irinanazarova
0
200
Are APIs Still Relevant in the AI Era?
soyuka
0
300
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
190
一人だけ、Kiroが静止する日
hideg
0
130
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
5
4.4k
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
160
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
160
iOSDC2026登壇資料.pdf
riofujimon
0
180
Intent as Code
shoppingjaws
6
1.1k
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
460
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
330
Building AI with AI
inesmontani
PRO
1
1.2k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.1k
Paper Plane
katiecoart
PRO
4
53k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
340
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
300
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
570
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
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 : ϨΠΞτͷΈ
·ͱΊ
·ͱΊ » ϑΝΠϧͷஔ͖ॴ » τϥϯβΫγϣϯΛ·ͱΊΔ » ίϯύΫγϣϯ » ΦϒδΣΫτͷड͚͠ »
ΫΤϦΛͲ͜Ͱߦ͏͔