$30 off During Our Annual Pro Sale. View Details »

Mobile Development, Present and Future - TechZone 2019

Mobile Development, Present and Future - TechZone 2019

Un recorrido por la tendencia actual del mercado, el tipo de perfiles en development que se busca. Desarrollo nativo de aplicaciones iOS, Android, las modernos frameworks de Google y Apple para acelerar el desarrollo de aplicaciones. Alternativas híbridas como Flutter, React Native, Xamarin, subidas y bajadas de popularidad en algunas de estas. Además de la tendencia de crear aplicaciones multiplataforma como el Project Catalyst de Apple, crear aplicaciones para iOS, iPadOS y macOS con el mismo código base y Flutter Desktop como real competidor de Electron.

Daniel Alvarez

September 07, 2019
Tweet

More Decks by Daniel Alvarez

Other Decks in Programming

Transcript

  1. None
  2. MOBILE DEVELOPMENT PRESENT & FUTURE - Daniel Alvarez

  3. Daniel Alvarez @alvarez_tech

  4. a little story

  5. None
  6. None
  7. None
  8. Website

  9. None
  10. None
  11. None
  12. MOBILE DEVELOPMENT

  13. None
  14. None
  15. Survey 2019

  16. Professional Developers All Respondents

  17. None
  18. None
  19. None
  20. None
  21. NATIVE MULTIPLATFORM

  22. Project Catalyst

  23. None
  24. None
  25. Same Swift base code, application for all Apple platforms

  26. Flutter

  27. Same DART base code, application for iOS, Android, Web and

    desktop in the future https://flutter.dev/
  28. None
  29. NATIVE APPLICATIONS

  30. UI declarative

  31. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical"

    tools:context="com.adaniel.tracking.ui.LoginActivity"> <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" app:titleTextColor="@color/toolbarTextColor" /> <androidx.drawerlayout.widget.DrawerLayout android:id="@+id/drawerLayout" android:layout_width="match_parent" android:layout_height="match_parent"> <ViewStub android:id="@+id/body_container" android:layout_width="match_parent" android:layout_height="match_parent" android:inflatedId="@+id/container"> </ViewStub> <com.google.android.material.navigation.NavigationView android:id="@+id/navigationView" android:layout_width="wrap_content" android:layout_height="match_parent" android:fitsSystemWindows="true" android:layout_gravity="start" /> </androidx.drawerlayout.widget.DrawerLayout>
  32. None
  33. <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES"

    useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="2nm-bz-aQf"> <device id="retina6_1" orientation="portrait"> <adaptation id="fullscreen"/> </device> <dependencies> <deployment identifier="iOS"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/> <capability name="Safe area layout guides" minToolsVersion="9.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <scenes> <!--Authorization View Controller--> <scene sceneID="WyV-jk-FuV"> <objects> <viewController storyboardIdentifier="authorizationViewController" id="2nm-bz-aQf" customClass="AuthorizationViewController" customModule="SprintTrello" customModuleProvider="target" sceneMemberID="viewController"> <view key="view" contentMode="scaleToFill" id="hJ0- aF-f1i"> <rect key="frame" x="0.0" y="0.0" width="414" height="896"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <button opaque="NO"
  34. HOW Imperative Programming Declarative Programming WHAT

  35. const App = () =>V ( <CardGroup> <Card title="La Paz"

    label="City" image="lp-background.jpg" /> <Card title="Cochabamba" label="City" image="cbba-background.jpg" /> </CardGroup> ); export default App;
  36. None
  37. Is the declarative way to create UI SwiftUI

  38. None
  39. Inspired by React, Litho, Vue.js, Flutter. A new set of

    Jetpack UI widgets. Jetpack Compose
  40. @Composable fun CityWidget(city: CityData) { val image = asyncLoad(defaultPlaceholder) {

    loadImage(city.imageUri) } Card(cornerRadius = 4.dp, elevation = 4.dp) { Column { Image(image) Padding(16.dp) { Text(city.name) } } } }
  41. Asynchronous Programming

  42. None
  43. A unified, declarative API for processing values over time Combine

  44. A coroutine is a concurrency design pattern Kotlin Coroutines https://developer.android.com/kotlin/coroutines

  45. fun fetchCity() : Observable<City> = ... fetchCity() { .as(autoDisposable(AndroidLifecycleScopeProvider.from(this))) .subscribe

    { city -> textView.text = city.name } } Rx
  46. fun fetchCity() : LiveData<City> = ... fetchCity().observe(viewLifecycleOwner) { textView.text =

    city.name } LiveData
  47. suspend fun loadCity() { val city = api.fetchCity() show(city) }

    Coroutines
  48. AR

  49. ARCore for Android https://developers.google.com/ar/develop/java/quickstart

  50. ARKit

  51. None
  52. Machine learning

  53. Firebase MLKit

  54. Core ML

  55. What else?

  56. Testing Analytics Crashlytics Remote config Remote devices

  57. None
  58. None
  59. Never stop learning

  60. None