Carteira Mobile Challenge: resultados da competição e análise detalhada das soluções pela equipe de desenvolvimento

Tínhamos duas plataformas, 1.000.000 de rublos em prêmios em dinheiro, 6 prêmios, 26.000 linhas de código para ler e avaliar, bem como 20 páginas de feedback, vários critérios de avaliação, uma caixa Badweiser, meio litro de éter puro e 12 bolhas de sedativo ... Não que tudo isso fosse absolutamente necessário para a realização de uma competição de desenvolvedores, mas se você já começou a avaliar as soluções, precisa abordar o assunto com seriedade.





Resumindo os resultados do concurso Mobile Challenge Wallet e analisando as decisões dos participantes em detalhes.





A tarefa

Tente capturar a sensação de uma carteira física no aplicativo Wallet e reimagine duas telas: a tela principal com uma lista de cartões e uma tela com os detalhes do cartão.





Sugira uma implementação técnica dessas telas e a transição entre elas. A lógica de exibição, ordenando a lista de mapas, UI / UX, animações e todas as outras nuances ficam a seu critério.





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