Slide 1

Slide 1 text

Realm meetup #22 [email protected]

Slide 2

Slide 2 text

#realm_jp [email protected]

Slide 3

Slide 3 text

Katsumi Kishikawa Realm Inc. [email protected]

Slide 4

Slide 4 text

Recent Updates • Realm Objective-C/Swift 2.7.0 (was 2.4.3) • Realm Java 3.3.1 (was 3.0.0) • Realm JS 1.3.1 (was 1.1.1) • Realm .NET 1.4.0 (1.1.1) [email protected]

Slide 5

Slide 5 text

Realm .NET 1.3.0 [email protected]

Slide 6

Slide 6 text

Realm for Universal Windows Platform [email protected]

Slide 7

Slide 7 text

Realm Objective-C/Swift 2.7.0 [email protected]

Slide 8

Slide 8 text

Realm Objective-C/Swift 2.4.4 • ಉظ͞ΕͨRealmͷΞΫηεݖͷঢ়ଶΛҰཡͰ͖ΔPermission Realm ͱSyncPermissionΫϥεͷ௥Ճ (Deprecated) [email protected]

Slide 9

Slide 9 text

Permission RealmʗSyncPermission [email protected] let permissionRealm = try! user.permissionRealm() let permissions = permissionRealm.objects(SyncPermission.self).filter("...") for permission in permissions { print(permission.path) print(permission.userId) print(permission.mayRead) print(permission.mayWrite) print(permission.mayManage) }

Slide 10

Slide 10 text

Realm Objective-C/Swift 2.5.0 • μΠΞΫϦςΟΧϧϚʔΫΛແࢹ͢Δݕࡧ • ϑΝΠϧϑΥʔϚοτͷΞοϓάϨʔυ ⚠ [email protected]

Slide 11

Slide 11 text

μΠΞΫϦςΟΧϧϚʔΫɺେจࣈখจࣈΛແࢹͯ͠ݕࡧ [email protected] realm.objects(VideoGame.self).filter("name == %@", “Pokémon") realm.objects(VideoGame.self).filter("name ==[d] %@", “Pokemon") realm.objects(VideoGame.self).filter("name ==[cd] %@", “pokemon")

Slide 12

Slide 12 text

Realm Objective-C/Swift 2.6.0 • ඇಉظʹRealmΛ։͘ϝιου`asyncOpen()`ͷ௥Ճ • ىಈ࣌ʹඞཁʹԠͯࣗ͡ಈతʹίϯύΫγϣϯΛߦ͏Φϓγϣϯɺ `shouldCompactOnLaunch`ͷ௥Ճ [email protected]

Slide 13

Slide 13 text

`asyncOpen()`: ඇಉظʹRealmΛ։͘ [email protected] let config = Realm.Configuration(schemaVersion: 9, migrationBlock: { migration, oldSchemaVersion in // σʔλྔ͕ଟ͘ɺϚΠάϨʔγϣϯʹ͕͔͔࣌ؒΓͦ͏ͳͱ͖ }) Realm.asyncOpen(configuration: config) { realm, error in if let realm = realm { // ׬ྃͨ͠ΒίʔϧόοΫ͕ݺ͹Εɺ࢖༻ՄೳͳRealmΠϯελϯε͕౉͞ΕΔ } else if let error = error { // Τϥʔ͕ൃੜͨ͠৔߹ } } // ϚΠάϨʔγϣϯ͸όοΫάϥ΢ϯυεϨουͰ࣮ߦ͞ΕΔͷͰɺ׬ྃΛ଴ͨͣʹ࣍ͷॲཧʹਐΊΔ ...

Slide 14

Slide 14 text

`asyncOpen()`: ඇಉظʹRealmΛ։͘ [email protected] let config = Realm.Configuration(syncConfiguration: SyncConfiguration(user: user, realmURL: realmURL)) Realm.asyncOpen(configuration: config) { realm, error in if let realm = realm { // ಉظ͞ΕͨRealmͷ৔߹ɺ͢΂ͯͷσʔλ͕μ΢ϯϩʔυ͞Εͨ࣌఺ͰίʔϧόοΫ͕ݺ͹ΕΔ } else if let error = error { // RealmϑΝΠϧͷΦʔϓϯʹࣦഊɺ͋Δ͍͸σʔλͷμ΢ϯϩʔυʹࣦഊ } } ...

Slide 15

Slide 15 text

`shouldCompactOnLaunch`: ىಈ࣌ʹίϯύΫγϣϯΛ࣮ߦ [email protected] let config = Realm.Configuration(shouldCompactOnLaunch: { totalBytes, usedBytes in // totalBytes - ࣮ࡍͷϑΝΠϧ༰ྔʢσʔλྖҬ + ۭ͖ྖҬʣ // usedBytes - ࣮ࡍͷϑΝΠϧ༰ྔͷ͏ͪσʔλྖҬͷαΠζ // totalBytes͕100MBΛ௒͑ɺ͔ۭ͖ͭྖҬ͕50%Ҏ্ͳΒίϯύΫγϣϯΛ࣮ߦ͢Δ let oneHundredMB = 100 * 1024 * 1024 return (totalBytes > oneHundredMB) && (Double(usedBytes) / Double(totalBytes)) < 0.5 }) do { // ઃఆͨ͠৚݅ʹ౰ͯ͸·Δ৔߹ɺ࠷ॳʹRealmϑΝΠϧΛ։͘ࡍʹίϯύΫγϣϯ͕࣮ߦ͞ΕΔ let realm = try Realm(configuration: config) } catch { // Τϥʔॲཧ }

Slide 16

Slide 16 text

Realm Objective-C/Swift 2.7.0 • Reachability APIʹΑΓಉظ͞ΕͨRealmͷ࠶઀ଓ·Ͱͷ࣌ؒΛ࠷ద Խ • Realm Object ServerͷRealmೝূͷύεϫʔυมߋ • ಉظ͞ΕͨRealmͷΞΫηεݖΛΑΓ؆୯ʹѻ͑Δ৽͍͠API [email protected]

Slide 17

Slide 17 text

Password change APi [email protected] user.changePassword("...") { (error) in if let error = error { ... return } ... }

Slide 18

Slide 18 text

New Permission APi [email protected] let permissionChange = SyncPermissionChange(realmURL: realmURL, userID: anotherUserID, mayRead: true, mayWrite: true, mayManage: false) let managementRealm = try! user.managementRealm() try! managementRealm.write { managementRealm.add(permissionChange) } // Wait for server response token = permissionChange.addNotificationBlock { _ in switch permissionChange.status { case .notProcessed: break // handle case case .success: break // handle case case .error: break // handle case } print(permissionChange.statusMessage) // contains error or informational message } Before:

Slide 19

Slide 19 text

New Permission APi [email protected] let permission = SyncPermissionValue(realmPath: realmPath, userID: anotherUserID, accessLevel: .write) user.applyPermission(permission) { error in if let error = error { // handle error return } // success! } After:

Slide 20

Slide 20 text

New Permission APi [email protected] // Retrieving permissions user.retrievePermissions { permissions, error in if let error = error { // handle error return } // success! access permissions } After:

Slide 21

Slide 21 text

Realm Functions [email protected]

Slide 22

Slide 22 text

Realm Functions • αʔόʔαΠυͷεΫϦϓτ࣮ߦ؀ڥ • Realm Mobile PlatformͷWebμογϡϘʔυ͔ΒRealmͷมߋΛτϦΨʔʹ࣮ ߦ͞ΕΔ೚ҙͷίʔυΛهड़Ͱ͖Δ • Realm Mobile PlatformͷશΤσΟγϣϯͰར༻Մೳ • ※Developer Edition͸̏ͭ·Ͱͷ੍ݶ͋Γ • ϕʔλ൛ • ࣮ߦ࣌ؒɾίʔυαΠζͳͲDeveloper Editionʹ͓͚Δొ࿥਺Ҏ֎ͷ੍ݶͳ ͠ʢࠓͷͱ͜Ζʣ • ೚ҙͷ֎෦API΍Node.jsϥΠϒϥϦΛ࢖༻Մೳ [email protected]

Slide 23

Slide 23 text

Realm Functions [email protected]

Slide 24

Slide 24 text

Realm Functions [email protected]

Slide 25

Slide 25 text

Realm Functions [email protected]

Slide 26

Slide 26 text

Realm Functions [email protected] console.log("Starting function"); // add your initialization code here module.exports = function(changeEvent) { // event handler code goes here console.log("Changes in realm at:", changeEvent.path); var realm = changeEvent.realm; for (var className in changeEvent.changes) { var changes = changeEvent.changes[className]; var objects = realm.objects(className); ... } console.log(""); };

Slide 27

Slide 27 text

Realm Functions [email protected] var i, pos; for (i = 0; i < changes.insertions.length; i++) { pos = changes.insertions[i]; var inserted = objects[pos] ... } for (i = 0; i < changes.modifications.length; i++) { pos = changes.modifications[i]; var modified = objects[pos] ... } for (i = 0; i < changes.deletions.length; i++) { pos = changes.deletions[i]; var deleted = objects[pos] ... }

Slide 28

Slide 28 text

Realm Functions [email protected]

Slide 29

Slide 29 text

Slide 30

Slide 30 text

New RMP Dashboard [email protected]

Slide 31

Slide 31 text

Integrated Realm Browser [email protected]

Slide 32

Slide 32 text

Slide 33

Slide 33 text

Log Viewer Improved [email protected]

Slide 34

Slide 34 text

Slide 35

Slide 35 text

WWDC at Realm [email protected] http://news.realm.io/news/wwdc-2017/

Slide 36

Slide 36 text

Questions? Katsuma Kishikawa [email protected] www.realm.io/jp @k_katsumi

Slide 37

Slide 37 text

Ξϯέʔτ bit.ly/RealmJP_22 [email protected]