Upload
idealistacreamcode
View
124
Download
4
Embed Size (px)
Citation preview
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