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 ) —
, — .
:
.
, .
.
.
:
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. , .