Modern Mobile Development

July 2017

  • David Fekke
  • Building mobile native app for 9 years 
  • Swyft Technology L.L.C.
  • Chief Mobile Architect
  • Twitter: @davidfekke | @jaxnode
  • Skype: davidfekke

Fun Facts

  • 7 Billion people in the world
  • 4.8 Billion have smartphones
  • 4.2 Billion have toothbrushes

Developing for the World

  • 100 of millions of PCs
  • Billions of Mobile devices
  • Developing world skipped land lines and PC revolution

Mobile First Web Dev

  • If you are a web developer, you are a mobile developer
  • Use Mobile first design
  • Bootstrap 3 is a mobile first framework
  • Mobile CSS should load first
  • Use tools like WebPack to minimize JS and CSS content

Hybrid

  • HTML/CSS/JS in a native container
  • PhoneGap/Cordova
  • Native functionality available through plugins
  • Publish to AppStores

Native

  • Build native using native languages
  • Vendor supplied toolchains
  • Best Performance
  • APIs and languages more difficult to learn

JS bound Native apps

  • React Native
  • Native Script
  • Uses native components bound by JavaScript
  • Create truly cross platform native apps
  • React is a Facebook OSS project
  • Native Script is a Telerik OSS project

Unity

  • Game Development
  • Game Engine supports 2D and 3D
  • Unity IDE
  • Supports C#, UnityScript (i.e. JavaScript)
  • iOS/Android OpenGL|ES Abstraction

Xamarin (Visual Studio)

  • Started by Miguel De Icaza from Mono project
  • Rebranded Visual Studio
  • Now Visual Studio for macOS
  • Write code in C#
  • Share code between iOS, Android and Windows Phone
  • Xamarin Forms shares native UI between platforms
  • Sold to Microsoft last year

Mobile platforms

  • iOS
  • Android
  • BlackBerry OS (moving to Android)
  • Windows Phone (nevermind)
  • Apple and Google own Smartphone space

You will target over 90% of the world smartphone market if you build for iOS and Android.

iOS

  • Based on BSD Unix, Mach microkernel
  • Core foundation came from NextStep
  • Obj-C primary language
  • C and C++ also supported
  • Swift to the rescue
  • Xcode IDE/Interface Builder
  • $99 a year for developer membership

Android OS

  • Based on Linux
  • Purchased by Google
  • Java Dalvik/Android Runtime (ART)
  • Ahead of Time compiler with JIT
  • Android Studio
  • Can use native code w/ NDK
  • Not posix compliant ☹️
  • Hard to test because of thousands of Android devices

Windows Phone

  • Build native apps with .NET and Xaml
  • Less than 1% market share
  • Build w/ Visual Studio
  • Microsoft AppStore

Publishing to AppStores

  • Apple Developer membership $99
  • Google Play one time $25
  • Requires certificates
  • Many Rules to follow
  • Need bank account and business to collect revenue
  • App approval on iTunes Connect less than 2 days, Google a couple of hours

So Many Choices

  • Web Only
  • Hybrid
  • Native
  • React Native
  • Xamarin

Languages

  • Web/Hybrid: HTML5/CSS/JavaScript
  • iOS Native: Obj-C/Swift
  • Android Native: Java/Kotlin
  • React-Native: JSX/JavaScript ES2016
  • Xamarin: C#/F#

Uncanny Valley

Avoiding Uncanny Valley

  • UI elements different between OSes
  • JQuery Mobile shares same elements between operating systems
  • Web, PhoneGap and Cordova bad choices for avoiding Uncanny Valley

Native Development

  • Best user experience
  • Superior performance
  • Better Support for tools
  • Sucks to have to write the same app twice

React-Native

  • Use native UI
  • 10-20% tradeoff in performance vs fully native
  • You can use Web developers to build native apps
  • Best code reuse between platforms
  • Layout based on FlexBox
  • Still new and buggy

Picking a framework

  • Which OSes do I need to support?
  • What kind of development experience does my team have? C++, .NET, Java?
  • Is most of your development experience Web based?
  • Is Best of breed more important than cross-platform?

Demo

Questions?

Resources

  • developer.apple.com
  • developer.android.com
  • cordova.apache.org
  • Tal Kol talk at ReactConf 2016
  • https://www.youtube.com/watch?v=abSNo2P9mMM