モバイルチャレンジウォレット:開発チームによる競争結果とソリューションの詳細な分析

2つのプラットフォーム、賞金1,000,000ルーブル、賞金6、読み取りと評価のための26,000行のコード、20ページのフィードバック、いくつかの評価基準、Ba​​dweiserボックス、1パイントの純粋なエーテル、12個の鎮静剤の泡がありました。 ..。開発者コンテストを開催するためにこれらすべてが絶対に必要だったわけではありませんが、すでにソリューションの評価を開始している場合は、問題に真剣に取り組む必要があります。





モバイルチャレンジウォレットコンテストの結果を要約し、参加者の決定を詳細に分析します。





タスク

ウォレットアプリで物理的なウォレットの感覚をキャプチャし、カードのリストが表示されたメイン画面とカードの詳細が表示された画面の2つの画面を再考してみてください。





これらの画面の技術的な実装とそれらの間の移行を提案します。マップのリストの並べ替え、UI / UX、アニメーション、その他すべてのニュアンスの表示ロジックは、ユーザーの裁量に任されています。





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