mbltdev15: marius racwitz, realm
TRANSCRIPT
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