Slide 1

Slide 1 text

SaaS SDK as a Service

Slide 2

Slide 2 text

vs

Slide 3

Slide 3 text

Things to share: • Who is the customer and how that affected our choices • Compatibility • The environment

Slide 4

Slide 4 text

Are you my customer?

Slide 5

Slide 5 text

Are you my customer?

Slide 6

Slide 6 text

Which platforms and versions to support? Which technologies to use?

Slide 7

Slide 7 text

iOS Version Statistics …of user devices

Slide 8

Slide 8 text

iOS Version Statistics …of apps in App Store Min. iOS 9.0 Min. iOS 8.0 Min. iOS 7.0 Min. iOS 6.0

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

– Swift.org https://developer.apple.com/swift/blog/?id=2 “It would be dangerous to rely upon binary frameworks that use Swift — especially from third parties.”

Slide 12

Slide 12 text

iOS 8.0 + iOS 7.0 + Objective-C Swift Open source only Open source only, copy code

Slide 13

Slide 13 text

Compatibility

Slide 14

Slide 14 text

New Version of App User Updates the App New Version of App User Updates the App New Version of SDK auto-updates auto-updates may never happen…

Slide 15

Slide 15 text

Forward Compatibility • v1.0 might be out there forever • What would happen when it stops working? • There will be new features, or versions of features…

Slide 16

Slide 16 text

Backwards Compatibility • Can’t afford breaking changes on backend • Public API - breaking changes only if needed

Slide 17

Slide 17 text

Mind your surroundings • Device • Arbitrary project and its configuration • Arbitrary UI hierarchy

Slide 18

Slide 18 text

• No Swift - No Modules. Prefix classes, to avoid duplicate symbols • -ObjC is evil (-force_load is good) • NSLog…

Slide 19

Slide 19 text

Windows • A window on top of everything • Window level is important. UIWindowLevelNormal = 0; UIWindowLevelStatusBar = 1000.0; UIWindowLevelAlert = 2000.0; UIWindowLevel CSKConciergeWindowLevel = 500; UIWindowLevel CSKConciergeAnnotationsWindowLevel = 10000000;

Slide 20

Slide 20 text

Keyboard Web iOS 9 iOS 8

Slide 21

Slide 21 text

Status Bar • Separate window takes over status bar. • UIViewControllerBasedStatusBarAppearance does not make it easier. + (void)setPreferredMainStatusBarStyle:(UIStatusBarStyle)statusBarStyle; + (void)setShouldPreferStatusBarHidden:(BOOL)hidden;

Slide 22

Slide 22 text

Rotation • No control over rotation • If an orientation is not supported by the app, it will never go there. • Have to support all

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

Localization • What if app not localized? • Bundle language

Slide 25

Slide 25 text

Things we learned • Remember your customer • Look into future, but remember the past • Always mind the surroundings

Slide 26

Slide 26 text

Thanks! https://live.gotoassist.com Marina Gornostaeva
 @hybridcattt