swift migration. the true history

Post on 23-Jan-2017

124 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

Swift’s migration. The true Story

Miguel Olmedo Camacho@molmedoc

Enrique Fau de Casa-Juana@kikefau

2

3

Motivaciones

4

Motivaciones

5

¿Por qué?

● Nuevo lenguaje● Sintaxis moderna● Más rápido● Fuertemente tipado● Genéricos ● Enfoque funcional● Closures VS Blocks● Refactor (Legacy code)

Motivaciones

6

Punto de partida

7

● Aplicación nativa (universal)● iOS >= 6● ≃ 1.000 ficheros● ≃ 140.000 líneas de código● 12 bibliotecas de terceros (pods)● Poco modularizada● Deuda técnica

Punto de partida

8

El Camino

9

Estrategia de migración

10

Estrategia de migración

● Migración incremental● No congelamos nuevos desarrollos● Nuevos desarrollos en Swift● Pair programming - Code review● Tareas de deuda técnica● Refactor cuando sea necesario● Pods homólogos en Swift

11

El comienzo

12

● Creamos nuestro primer fichero en Swift!● idealista-Bridging-Header.h

o Clases de Objc que necesitan visibilidad desde Swift

● idealista-Swift.h (compilación)o XCode completa idealista-Swift con clases

de Swift que necesitan visibilidad desde Objc

El comienzo

13

Primeros problemas

14

● Comunicación Objc - Swift (IUO!)● Crashes en tiempo de ejecución● Dependencias Objc - Swift (Bridging header)● El target de test incluye todos los ficheros● If - let anidados● Sin cláusula where● XCode...

Primeros problemas (Swift 1)

15

Primeros problemas

16

Siguientes pasos: Xcode 6.3

17

● Nulabilidad desde Objc● 40% del proyecto en Swift● VIPER● Estructuras para el modelo● Enumerados para el View - Model● Aumento del “code coverage”● Aumento “crash free users”● Aumento de tiempos de compilación

Siguientes pasos (XCode 6.3)

18

Siguientes pasos (XCode 6.3)

19

Xcode 7 - Swift 2

20

● El drama, iOS 7o Crash en genéricoso Imposibilidad de usar Pods en Swifto Dejamos de dar soporte a iOS 7

● Mejoraso Testable importo Guardo If - let múltiples anidadoso Cláusula where

XCode 7 - Swift 2

21

Xcode 8 - Swift 3

22

● Proyecto 99,9% en Swift● Migración automática mis co**nes● Cambios en las firmas de los métodos● Enumerados en minúsculas● Comparar opcionales (Crash en runtime)● Nuevos warnings● Nuevos y divertidos troleos...

Swift 3 (XCode 8 - Swift 3)

23

Swift 3 (XCode 8 - Swift 3)

24

25

Estructuras / Enumerados

26

Estructuras

● Inmutabilidado Da seguridad

● Paso por valor vs paso por referenciao Cada caso es distinto

● Hay que acostumbrarse a usarloo A veces genera más problemas que

soluciones

Estructuras / Enumerados

27

Enumerados

● No solo valen para representar valores disjuntoso Pueden tener lógica propia

● Valores asociados● Muchos usos

o View models, remote config, proveedores de login...

Estructuras / Enumerados

28

29

30

31

Blocks vs Closures

32

● Sintaxis poco intuitiva

Bloques

Blocks vs Closures

33

Bloques

Blocks vs Closures

http://fuckingblocksyntax.com/

34

● Sintaxis poco intuitiva● Poco extendido su uso● En tareas asíncronas, se usan más los

delegados que los bloques

Bloques

Blocks vs Closures

35

● Sintaxis mucho más natural, como si declarases métodos

Closures

Blocks vs Closures

36

Bloques

Blocks vs Closures

http://fuckingclosuresyntax.com/

37

● Sintaxis más natural● Trailing closure● Parámetros / Return implícitos● Mayor uso de closures vs delegates● Typealias para dar semántica● Cuidado con los ciclos de memoria

Closures

Blocks vs Closures

38

39

40

41

42

43

44

45

VIPER

46

Definición

VIPER

47

Frameworks dinámicos

48

● Nos sirve para desacoplar la aplicacióno Módulo de servicios, gestión de

localización del usuario, core spotlight...● Reutilización de código

o Aplicación /Apple Watch / ¿tv OS?● Menos conflictos durante el desarrollo● Mejor separación de responsabilidades

Frameworks dinámicos

Frameworks dinámicos

49

Programación orientada a protocolos

50

Ejemplo

Programación orientada a protocolos

51

Ejemplo

Programación orientada a protocolos

52

53

54

55

56

57

58

Consejos

59

● Poco a poco, sin prisa● Nuevas funcionalidades en Swift

o Sus test correspondientes también● Mejor pasar primero a Swift el código antiguo

y crear deuda técnica que refactorizar el código mientras se está migrando

● Apoyarse en los test● Quitar soporte iOS 7

Consejos

60

Consejos (tiempos de compilación)

Derived data en RAMPods y workspace al GitPods privadosSwift Whole Module

OptimizationXfrontend -debug-time-

function-bodies

61

Libros y enlaces

62

Para aprender Swift● https://itunes.apple.com/es/book/swift-programming-language/id881256329?mt=11● https://itunes.apple.com/es/book/using-swift-cocoa-objective/id888894773?mt=11● https://itunes.apple.com/es/course/developing-ios-9-apps-swift/id1104579961?l=en

Swift avanzado● https://www.objc.io/books/advanced-swift/

Programación funcional con Swift● https://www.objc.io/books/functional-swift/● https://www.raywenderlich.com/114456/introduction-functional-programming-swift● https://realm.io/news/altconf-chris-eidhof-functional-programming-in-swift/

Protocol oriented programming● https://developer.apple.com/videos/play/wwdc2015/408/● https://developer.apple.com/videos/play/wwdc2016/419/● https://realm.io/news/appbuilders-natasha-muraschev-practical-protocol-oriented-programmi

ng/● https://realm.io/news/doios-natasha-murashev-protocol-oriented-mvvm/● http://krakendev.io/blog/subclassing-can-suck-and-heres-why● https://speakerdeck.com/jessesquires/pushing-the-limits-of-protocol-oriented-programming● https://www.raywenderlich.com/109156/introducing-protocol-oriented-programming-in-swift-

2● https://www.natashatherobot.com/protocol-oriented-views-in-swift/● https://www.natashatherobot.com/protocol-oriented-networking-in-swift/

Libros y enlaces

63

Nuevas funcionalidades en Swift 3● https://github.com/apple/swift-evolution/blob/master/releases/swift-3_0.md

Bugs● http://stackoverflow.com/questions/28476030/xcode-keeps-building-storyboard-after-each-k

eystroke● https://forums.developer.apple.com/thread/43445● https://forums.developer.apple.com/thread/62737

VIPER● https://www.objc.io/issues/13-architecture/viper/● https://github.com/mutualmobile/VIPER-SWIFT

Value Types● https://realm.io/news/andy-matuschak-controlling-complexity/● https://www.objc.io/issues/16-swift/swift-classes-vs-structs/● https://www.raywenderlich.com/112027/reference-value-types-in-swift-part-1● https://developer.apple.com/swift/blog/?id=10

64

Gracias!!

Miguel Olmedo Camacho@molmedoc

Enrique Fau de Casa-Juana@kikefau

65

¿Preguntas?

Miguel Olmedo Camacho@molmedoc

Enrique Fau de Casa-Juana@kikefau

top related