mbltdev15: marius racwitz, realm

51
CHALLENGES BUILDING A SWIFT FRAMEWORK

Upload: e-legion

Post on 12-Apr-2017

215 views

Category:

Mobile


1 download

TRANSCRIPT

Page 1: MBLTDev15: Marius Racwitz, Realm

CHALLENGES BUILDING A

SWIFT FRAMEWORK

Page 2: MBLTDev15: Marius Racwitz, Realm
Page 3: MBLTDev15: Marius Racwitz, Realm
Page 4: MBLTDev15: Marius Racwitz, Realm

REALM

> Object-oriented> Fully ACID transactions

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

> Cross-Platform

Page 5: MBLTDev15: Marius Racwitz, Realm
Page 6: MBLTDev15: Marius Racwitz, Realm
Page 7: MBLTDev15: Marius Racwitz, Realm

BUT WHAT ABOUT

?

Page 8: MBLTDev15: Marius Racwitz, Realm

HOW TO INTERFACE C++ FROM SWIFT?

Page 9: MBLTDev15: Marius Racwitz, Realm
Page 10: MBLTDev15: Marius Racwitz, Realm
Page 11: MBLTDev15: Marius Racwitz, Realm

CLANG MODULEMAP

framework module Realm { umbrella header "Realm.h"

export * module * { export * }

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

Page 12: MBLTDev15: Marius Racwitz, Realm

FIND A VIABLE WAYTO DISTRIBUTE A FRAMEWORKWHICH VENDORS ANOTHER

Page 13: MBLTDev15: Marius Racwitz, Realm
Page 14: MBLTDev15: Marius Racwitz, Realm

!APPSTORE

Page 15: MBLTDev15: Marius Racwitz, Realm
Page 16: MBLTDev15: Marius Racwitz, Realm

CARTHAGE EXPECTS ONLY1 FRAMEWORK

PER REPO

Page 17: MBLTDev15: Marius Racwitz, Realm

WORKAROUND:SERVE !

VIA GITHUB

Page 18: MBLTDev15: Marius Racwitz, Realm

MAKINGCOCOAPODSuse_framework!

READY FOR PRIME TIME

Page 19: MBLTDev15: Marius Racwitz, Realm

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

Page 20: MBLTDev15: Marius Racwitz, Realm

!READY TO SHIP

Page 21: MBLTDev15: Marius Racwitz, Realm

!BUT WHAT ELSE IS NEEDED?

Page 22: MBLTDev15: Marius Racwitz, Realm

DOCS

Page 23: MBLTDev15: Marius Racwitz, Realm

APIDOCS

Page 24: MBLTDev15: Marius Racwitz, Realm

APPLEDOCFOR OBJECTIVE-C

/** Lorem ipsum dolor sit amet.

@param bar Consectetur adipisicing elit.

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

Page 25: MBLTDev15: Marius Racwitz, Realm

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 { ... }

Page 26: MBLTDev15: Marius Racwitz, Realm

MARKDOWNFOR SWIFT 2.0

/** Lorem ipsum dolor sit amet.

- parameter bar: Consectetur adipisicing elit.

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

Page 27: MBLTDev15: Marius Racwitz, Realm
Page 28: MBLTDev15: Marius Racwitz, Realm

GET'S THE AST VIA

SOURCEKITTEN

Page 29: MBLTDev15: Marius Racwitz, Realm
Page 30: MBLTDev15: Marius Racwitz, Realm

!

Page 31: MBLTDev15: Marius Racwitz, Realm
Page 32: MBLTDev15: Marius Racwitz, Realm

Page 33: MBLTDev15: Marius Racwitz, Realm

⚠VERIFY CODE EXAMPLES

Page 34: MBLTDev15: Marius Racwitz, Realm

SWIFT IS EVOLVING FAST

Page 35: MBLTDev15: Marius Racwitz, Realm

IT'S HARD TO KEEP UP WITH THE PACE

!WHEN WRITING ACTUAL APPS

Page 36: MBLTDev15: Marius Racwitz, Realm

TO MANY OTHER THINGS TO DELIVER

> Extensions> Watch Extensions

> Watch Apps> 3D Touch

> …

Page 37: MBLTDev15: Marius Racwitz, Realm

SWIFT 1.2 !IS STILL RELEVANT

Page 38: MBLTDev15: Marius Racwitz, Realm

! IN THE ROOM

Page 39: MBLTDev15: Marius Racwitz, Realm

CI

Page 40: MBLTDev15: Marius Racwitz, Realm

HOW TO SUPPORTMULTIPLE SWIFT VERSIONS

AT ONCE?

Page 41: MBLTDev15: Marius Racwitz, Realm

MULTIPLE BRANCH MODEL

> master

> swift-1.2

> swift-2.1

> …

Page 42: MBLTDev15: Marius Racwitz, Realm

$ 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#!"" …

Page 43: MBLTDev15: Marius Racwitz, Realm

CI DOESN'T NEED TO STOP

AT TESTS

Page 44: MBLTDev15: Marius Racwitz, Realm

TEST ALL INTEGRATION SCENARIOS

Page 45: MBLTDev15: Marius Racwitz, Realm

pod lib lint

Page 46: MBLTDev15: Marius Racwitz, Realm

STYLEGUIDE

Page 47: MBLTDev15: Marius Racwitz, Realm

ESTABLISH CONVENTIONS

Page 48: MBLTDev15: Marius Racwitz, Realm

ENFORCE CONVENTIONS

Page 49: MBLTDev15: Marius Racwitz, Realm
Page 50: MBLTDev15: Marius Racwitz, Realm

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