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 ) —
, — .
:
.
, .
.
.
:
iOS- Android-, -.
Android: 23+ API.
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 . , .
DispatchQueue.global
- , , async ( ), - , , .
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.
(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. , .