Giter Site home page Giter Site logo

busrouter's Introduction

BusRouter - SEAT:CODE Skill Test

Swift 5.9.2 Xcode 15.1 iOS 17 Tests

Notas

  1. No he conseguido que el script de swift-format se ejecute, por lo que hay que ejecutar manualmente el comando "swift-format -i -r [SRCROOT]" desde Terminal. (Instalar con $ brew install swiftformat)
  2. Tenía intención de escribir tests de automatización de UI usando Maestro CLI (https://maestro.mobile.dev) pero no me dio tiempo. Estaré encantado de hablar sobre el tema.
  3. De las tareas 1 y 2 me siento bastante orgulloso, la tercera la terminé por dejarla entregable, pero no creo que la solución aplicada sea ni de lejos la adecuada, puesto que daba lugar a un montón de acoplamiento entre la librería de UI y las pantallas del módulo principal. Veréis soluciones chapuceras aplicadas con tal de mostrar la "StopInfo", ya que el tiempo se me echó encima.
  4. El PDF menciona un par de enlaces relacionados con Google Polyline, pero parecen estar rotos, lo cual no es preocupante ya que realicé mis propias investigaciones y acabé utilizando una librería de terceros que decodifica la información y permite convetirla al Polyline de Apple. Al principio, dado que esos enlaces estaban rotos, pensé que la información del primer endpoint que contenía un array de Stops se podría usar para crear las rutas, pero tras un par de pruebas vi que estaba entendiendo mal la tarea y volví al cauce con el parámetro "route".
  5. No me ha dado tiempo a aplicar Unit Testing.
  6. He incluido un solo test con prisa relacionado con snapshot testing. La gracia de esta librería (y su compenetración con The Composable Architecture) es que siempre que las pantallas estén bien hechas, podremos tomar fotos de su aspecto a lo largo de toda la aplicación en cuestión de segundos, sin necesidad de que pasen los flujos y procesos como llamadas a API o cambios de estado, ya que son todos mockeables. Esta librería nos puede asegurar también que nuestra app se sigue viendo bien en todos los tamaños de pantalla siempre que los tengamos pregrabados.
  7. Respecto al minimum target. Originalmente era iOS 15 ya que pienso que es la versión mínima que tiene sentido soportar; más del 90% de los dispositivos son soportados y incluye muchas herramientas nuevas y optimizaciones que merece la pena tener en cuenta. Ahora bien, en determinado punto me vi con que MapKit en SwiftUI para iOS 15 está muy limitado, por lo que con tal de dedicarme a la parte realmente importante (los ejercicios) y de paso aprender para mis proyectos personales, subí el target a iOS 17, en el que MapKit ha mejorado enormemente.
  8. He separado la UI reutilizable del módulo principal en una librería SPM para demostrar que sé hacerlo y porque a nivel de tiempos de compilación es una modularización óptima, ya que permite no recompilar el código de un módulo cuyo contenido no ha sido alterado, reduciendo los tiempos de compilación tras una primera exitosa del proyecto completo.
  9. Mi elección de Swift Package Manager ha sido puramente práctica. CocoaPods es un gestor de dependencias que causa muchos problemas, tanto en su uso como en compatibilidades, por no mencionar que en muchas ocasiones supone una barrera de entrada para gente más junior y llega incluso a costar horas de trabajo cuando algunos errores complejos aparecen. Carthage es una opción pero personalmente SPM es lo más sencillo, efectivo y está hecho por Apple.

Instrucciones

  1. Tras la primera apertura, deberemos esperar a que los paquetes de SPM se descarguen y compilen.
  2. Cuando haya terminado de resolver las dependencias, el proyecto (tanto el esquema de la librería, como el módulo de la app o los tests) deberían ser perfectamente compilables sin ningún paso extra requerido.

busrouter's People

Contributors

juancolilla avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.