Cartera Mobile Challenge: resultados de la competencia y análisis detallado de soluciones por parte del equipo de desarrollo

Teníamos dos plataformas, 1.000.000 de rublos en premios, 6 premios, 26.000 líneas de código para leer y evaluar, así como 20 páginas de comentarios, varios criterios de evaluación, una caja Badweiser, una pinta de éter puro y 12 burbujas de sedante. ... No es que todo esto sea absolutamente necesario para realizar una competencia de desarrolladores, pero si ya ha comenzado a evaluar soluciones, debe abordar el asunto con seriedad.





Resumimos los resultados del concurso Mobile Challenge Wallet y analizamos en detalle las decisiones de los participantes.





La tarea

Intente capturar la sensación de una billetera física en la aplicación Wallet y vuelva a imaginar dos pantallas: la pantalla principal con una lista de tarjetas y una pantalla con los detalles de la tarjeta.





Sugerir una implementación técnica de estas pantallas y la transición entre ellas. La lógica de visualización, la clasificación de la lista de mapas, UI / UX, animaciones y todos los demás matices quedan a su discreción.





1





2 (iOS Android)





1 000 000





100 -  





1  





13





11  





6





iOS 





1 (250 000 ) —  





2 (150 000 ) —  





3 (100 000 ) —





Android





1 (250 000 ) —  





2 (150 000 ) —  





3 (100 000 ) —





, — .





:





  1. .





  2. , .





  3. .





  4. .





:





  1. iOS- Android-, -.





  2. Android: 23+ API.





  3. iOS: iOS 11+.





iOS

, Swift, . 11, . -, , , API. Xcode , SDK .





DI (Dependency Inversion) 

, , .





SR (Single Responsibility)

: , , , . / .





, . iOS- — MyClassName MyClassNameProtocol.





, ( -). , ( ), .





reference value ,

:





class RequestModel: Request {
    var method: HTTPMethod = .get
    var headers: [String : String]? = nil
    var url: URL = URL(string: "https://textures.cardsmobile.ru")!
    var parameters: [String : String]? = nil
    var contentType: ContentTypeRequestEnum = .applicationURLEncoder
}
      
      



struct, class, .





3rd party

, Alamofire . . , Alamofire , AF.request(url).response { … } . URLSession.shared.dataTask(with: url) { … }.resume()? , . , . , — « URLSession ». , .





Core Data

(NSManagedObjectContext) save() . NSManagedObjectContextDidSave background view . , .





Core Data.





DispatchQueue.global

- , , async ( ), - , , .





( ), . Apple .





background Quality Of Service (QoS)

background , ( , , , ). QoS utility. .





— .





, . , — Image Resizing Techniques .





UIViewController

— , . viewWillAppear viewWillDisappear ( , ). , , . , App Store . 





UIApplicationDidEnterBackgroundNotification UIApplicationDidBecomeActiveNotification, , .





UI . , Safe Area.





, . , - , « » , . ( ), Xcode Edit > Format > Spelling and Grammar > Check Spelling While Typing.





, , , UI. Xcode Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don't want. 





, Debugging Tricks and Tips.





(warnings)

(swiftlint, , deprecated ..), ..





: . :)





— , , . .





: self.viewModel.objects().count%5 — , - . 





, « ». «. » .





-, , . , View, Interactor, Model Builder .





— DI (Dependency Injection). 





Dependency Container, .





Kingfisher , ImageLoader. 3rd party .





final ,

- . final . Whole Module Optimization final. , , , final . .





#1 ,









#2 , ,





-

, -, , -, , UI.





Apple Dark Mode, , .





— .





#1





#2





Android-

Kotlin, API 23+ .





. UI. drag&drop.





DI (Dependency Inversion), Singleton

CardsInteractor domain- CardsRepository data-, SOLID. Interface CardsRepository, Domain-.





. : « » github.





, .





Clean Architecture: data, domain, presentation

CardsInteractor Storage . . , CardsInteractor Repository DataSource. CardsViewModelImpl , , , .









-, CharSequence?.isNotNullAndEmpty, List<T>.isEmpty 





, —  .  , , - Kotlin CharSequence?.isNullOrEmpty(), isEmpty() ..





view info1TitleTextView, info2TitleTextView, info3TitleTextView, info4TitleTextView. , view. .





deprecated

window.decorView.systemUiVisibility, View.SYSTEMUIFLAGLAYOUTFULLSCREEN, SYSTEMUIFLAGLAYOUTHIDE_NAVIGATION. deprecated , .





Clean Architecture

, , , , . .





«» .





, :)





#1





#2 «3» ,





#3






: , , , , , , , , , , . 





! . 





- Cardsmobile | Engineering, , iOS Android, QA backend. , .












All Articles