Mobile Challenge Wallet: Wettbewerbsergebnisse und detaillierte Analyse der Lösungen durch das Entwicklungsteam

Wir hatten zwei Plattformen, 1.000.000 Rubel Preisgeld, 6 Preise, 26.000 Codezeilen zum Lesen und Bewerten sowie 20 Seiten Feedback, verschiedene Bewertungskriterien, eine Badweiser-Box, ein Pint reinen Äthers und 12 Blasen Beruhigungsmittel ... Nicht, dass dies alles unbedingt notwendig gewesen wäre, um einen Entwicklerwettbewerb abzuhalten, aber wenn Sie bereits begonnen haben, Lösungen zu evaluieren, müssen Sie sich ernsthaft mit der Angelegenheit befassen.





Fassen Sie die Ergebnisse des Mobile Challenge Wallet-Wettbewerbs zusammen und analysieren Sie die Entscheidungen der Teilnehmer im Detail.





Die Aufgabe

Versuchen Sie, das Gefühl einer physischen Brieftasche in der Wallet-App zu erfassen, und stellen Sie sich zwei Bildschirme neu vor: den Hauptbildschirm mit einer Kartenliste und einen Bildschirm mit Kartendetails.





Schlagen Sie eine technische Implementierung dieser Bildschirme und den Übergang zwischen ihnen vor. Die Anzeigelogik, das Sortieren der Liste der Karten, UI / UX, Animationen und aller anderen Nuancen liegt bei Ihnen.





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