MBLTDev15: Marius Racwitz, Realm

  • View
    215

  • Download
    1

  • Category

    Mobile

Preview:

Citation preview

CHALLENGES BUILDING A

SWIFT FRAMEWORK

REALM

> Object-oriented> Fully ACID transactions

> Well-defined threading model> Native links> Zero-copy

> Cross-Platform

BUT WHAT ABOUT

?

HOW TO INTERFACE C++ FROM SWIFT?

CLANG MODULEMAP

framework module Realm { umbrella header "Realm.h"

export * module * { export * }

explicit module Private { header "RLMArray_Private.h" header "RLMObject_Private.h" // … }}

FIND A VIABLE WAYTO DISTRIBUTE A FRAMEWORKWHICH VENDORS ANOTHER

!APPSTORE

CARTHAGE EXPECTS ONLY1 FRAMEWORK

PER REPO

WORKAROUND:SERVE !

VIA GITHUB

MAKINGCOCOAPODSuse_framework!

READY FOR PRIME TIME

Pod::Spec.new do |s| s.name = 'Realm' # …

s.module_map = 'Realm/module.modulemap'end

Pod::Spec.new do |s| s.name = 'RealmSwift' # …

s.dependency 'Realm', "= #{s.version}"end

!READY TO SHIP

!BUT WHAT ELSE IS NEEDED?

DOCS

APIDOCS

APPLEDOCFOR OBJECTIVE-C

/** Lorem ipsum dolor sit amet.

@param bar Consectetur adipisicing elit.

@return Sed do eiusmod tempor.*/func foo(bar: String) -> AnyObject { ... }

RESTRUCTURED TEXT (REST)UNTIL SWIFT 1.2

/** Lorem ipsum dolor sit amet.

:param: bar Consectetur adipisicing elit.

:returns: Sed do eiusmod tempor.*/func foo(bar: String) -> AnyObject { ... }

MARKDOWNFOR SWIFT 2.0

/** Lorem ipsum dolor sit amet.

- parameter bar: Consectetur adipisicing elit.

- returns: Sed do eiusmod tempor.*/func foo(bar: String) -> AnyObject { ... }

GET'S THE AST VIA

SOURCEKITTEN

!

⚠VERIFY CODE EXAMPLES

SWIFT IS EVOLVING FAST

IT'S HARD TO KEEP UP WITH THE PACE

!WHEN WRITING ACTUAL APPS

TO MANY OTHER THINGS TO DELIVER

> Extensions> Watch Extensions

> Watch Apps> 3D Touch

> …

SWIFT 1.2 !IS STILL RELEVANT

! IN THE ROOM

CI

HOW TO SUPPORTMULTIPLE SWIFT VERSIONS

AT ONCE?

MULTIPLE BRANCH MODEL

> master

> swift-1.2

> swift-2.1

> …

$ tree -L 2 | !.!"" RealmSwift -> RealmSwift-swift2.0!"" RealmSwift-swift1.2#   !"" Object.swift# !"" …#   $"" Tests#!"" RealmSwift-swift2.0#   !"" Object.swift# !"" …#   $"" Tests#!"" RealmSwift-swift2.1 -> RealmSwift-swift2.0#!"" …

CI DOESN'T NEED TO STOP

AT TESTS

TEST ALL INTEGRATION SCENARIOS

pod lib lint

STYLEGUIDE

ESTABLISH CONVENTIONS

ENFORCE CONVENTIONS

try! questions.map { try $0.answer() }

THANKS FOR YOUR ATTENTION!@MRACKWITZ

MR@REALM.IO