Qualified | Competent | Expert |
---|---|---|
Autolayout | ||
Anatomy of constraint, external and internal changes, autolayout vs frame-based layout |
Stackview, debugging autolayout, anchors, safe area, self-sized views, Hugging priority/Content compression resistance |
Layout directions (left-to-right/right-to-left), VFL, autoresizing masks (springs&struts) |
Xibs (Nibs), Storyboards | ||
xibs and/vs storyboards, custom UI elements in xibs and storyboards, file's owner, loading from xibs and storyboards programmaticaly, segue, pass data via segue, customization ui best practices | IBInspectable/IBDesignable, size classes, xib vs nib, NIB object lifecycle, unwind segues, git conflicts in xibs and storyboards, xib's xml structure | |
Animations | ||
animations via autolayout,UIView.animate, CALayer, CAAnimation | facebook pop, UIDynamics, 3D animations, UIViewPropertyAnimator, CADisplayLink | SpriteKit? Adobe After Effects? |
Other | ||
Localizations HIG |
Internationalization i18n & Localisation l10n |
Qualified | Competent | Expert |
---|---|---|
Core Data | ||
Core Data Stack & Architecture, Relationships, Data Types, fetching | Performance, concurrency/multithreading/multiple contexts, [changes and updates tracking](changes and updates tracking) | Migrations, nestedcontexts, profiling, persistence under the hood (SQLite, XML, Binary, In-memory). iCloud synchronization,Security |
Other approaches | ||
UserDefaults, KeyedArchiver | Realm, Keychain |
Qualified | Competent | Expert |
---|---|---|
Swift | ||
Basic syntax, optionals, control flow, error handling, memory management (ARC), classes, structures, enums, functions, initialization/deinitialization, inheritance | Objective-C Interoperability, POP, generics, type safety, KVO/KVC, value and reference types, subscripts, bitwise operators, overflow operators, operator methods, access control | Swift performance, Swift + LLVM, method dispatch, swizzling, @dynamic, final, playgrounds, Swift Standard Library |
Objective-C | ||
Basic syntax, variables and types, collections, initializations | Blocks, categories, Integrating Swift into ObjC, C/C++ code usage inside Obj-C | Runtime, Class structure (isa), Method swizzling, MRC |
Qualified | Competent | Expert |
---|---|---|
URLSession | ||
NSURLSession basics, encoding/decoding of URL data, lifecycle of a URL Session | Multipart requests, response caching, handling redirects | Background handling, NSURLAuthentication, TLS Chain Validation, streams, sockets, NSURLConnection |
Response handling | ||
JSONSerialization, error handling | Codable/Decodable, NSCoding | |
Building a network layer | ||
Alamofire, mappers | Moya , CFNetwork |
Qualified | Competent | Expert |
---|---|---|
Understanding of code signing, provisioning profiles, app schemes configuration, Launching app on device | Working with iTunes Connect, App Review Guidelines. Build automation, beta-testing tools and deployment platforms. Fastlane | Advanced automation skills (plugins, scripts) |
Qualified | Competent | Expert |
---|---|---|
UIViewController lifecycle, iOS app lifecycle, NotificationCenter | Working with filesystem, background modes, Xcode project structure |
Qualified | Competent | Expert |
---|---|---|
Grand Central Dispatch | ||
basic knowledge about multithreading and concurrent programming, deadlocks, race conditions. async vs sync, main vs background | Dispatch queues, units of work, prioritizing, quality of service, timing (time & after) | Dispatch groups, semaphores, dispatch I/O, dispatch sources. Interprocess communication, XPC Services |
NSOperation | ||
basic knowledge about multithreading and concurrent programming, deadlocks, race conditions. | Operation executing, cancelling and configuring. Operation states. NSOperationQueue. Subclassing and overriding. BlockOperation | Operation dependencies, NSOperationQueue |
Thread (NSThread) | ||
Ability to work with Thread. Initializing, starting/stopping, state handling, prioritizing. Locks, NSRunLoop. |
Qualified | Competent | Expert |
---|---|---|
Push Notifications, URL schemes | Deep linking, Universal links, App Indexing | Advertisements (AdSupport, AdMob etc) |
Qualified | Competent | Expert |
---|---|---|
Basic knowledge of unit tests | Complex unit tests, XCTest, Quick/Nimble (Kiwi for Obj-C) | TDD, UI tests, web testing and debugging |
Qualified | Competent | Expert |
---|---|---|
xcodebuild, xcrun. Targets, bundles, frameworks, libraries. pbxproj, xcconfig, xcodeproj, xcworkspace, xcscheme, xctoolchain. Build phases, shell scripts, build rules, build configurations. | lldb, lipo, llbuild, swift package manager, linker. Flags |
Qualified | Competent | Expert |
---|---|---|
Keychain, iOS security guidelines, TouchID, FaceID | Security framework - authorization and authentication, code signing, cryptography, result codes. Secure coding guide. iOS security overview |
Qualified | Competent | Expert |
---|---|---|
Basic knowledge of measuring app performance with Xcode instruments. Object Graph, Network Link Conditioner. UI optimization (opaque views, fat XIBs, image sizes, main thread blockers, layers vs paths etc) | Optimization modes in Xcode, whole module optimization, gzip compression, lazy load and reuse of views, caching, tableview and collectionview optimization, date formatters | Memory warnings handling, speeding up app launch time(static vs dynamic libraries, merging several frameworks into one monolithic) |
Qualified | Competent | Expert |
---|---|---|
Delegate, MVC, observer, chain of responsibility, Singleton. | MVP, MVVM, VIPER, VIP, Router. State, Strategy, Visitor. Abstract Factory, Factory Method, Builder. Adapter, Decorator, Facade. | Flux, Redux. Mediator, Memento, Command, Prototype, Proxy |
Qualified | Competent | Expert |
---|---|---|
Basic knowledge. Recursion | RxSwift/ReactiveCocoa/ReactiveSwift/ReactiveKit, higher order functions. | Futures&Promises. Pure functions. Complete understanding of reactive approach. Functors, Applicatives and Monads. |
Qualified | Competent | Expert |
---|---|---|
Basic AVFoundation, CoreBluetooth, AVKit | Core Audio. Advanced AVFoundation, CoreBluetooth, AVKit. WebKit. Core Telephony, Core Media | Core Motion, IOKit, Compression |
Qualified | Competent | Expert |
---|---|---|
Basic MapKit & CoreLocation. Basic socials integration. Sharing | AddressBook, AddressBookUI, Messages, MessagesUI, Advanced MapKit & CoreLocation. Advanced socials integration. | In-app purchases |
Qualified | Competent | Expert |
---|---|---|
App extensions | tvOS, watchOS, SpriteKit, SceneKit, HomeKit, HealthKit, EventKit | Metal, CoreGraphics, OpenGL, cross-platform development, ARKit CryptoTokenKit, SiriKit |
Qualified | Competent | Expert |
---|---|---|
Activity, fragment, view group, view | Material design principles; material design implementation in support library; draw canvas, layout inflater, measuring view tree | Remote views; view tree observer; rendering optimization |
Layouts | ||
Linear Layout, Frame Layout, Relative Layout | Constraint Layout, Coordinator Layout, Pull-to-refresh, Drawer | |
Styles and Themization | ||
Android themes; day-night theme; status bar themization; text appearance; difference between style and theme attributes | ||
Animations | ||
Custom and system animations; object animator, property animation; animation resources; animation set and complex animations; animating constrains; vector animations; animate layout changes; recycler view animations; animate view | Optimization animation; complex vector animation; executing animations on render thread; application and fragment transition with shared element | |
Cuctom Chrome Tabs | ||
Using web view vs Chrome Tabs | Chrome tabs customization; using KeepAlive service; cutom controls | flow architecture to intercept results |
Notifications | ||
Notification Manager, Notification Builder, Notification Parameters | Using Pending Intents in notifications; using resources for notifications | Notifications in Oreo, channels; Push Notifications; Urbanairship, Pushwoosh; Using console to test notification |
Remote Views | ||
Application Widget and Pin | Lock guard themization, using remore views for Custom Chrome tabs | |
Other | ||
Resource types | Localization; Vector Drawables, Animated Vector Drawables, importing resources | External Resources; using tools to mock resources for tests |
Qualified | Competent | Expert |
---|---|---|
SQLite, Database helper, Shared Preference Manager | Realm, Firebase Storage; Content resolver and Content provider, Room database; | Data synchronization, backup, restoring device, changing device |
Qualified | Competent | Expert |
---|---|---|
Java | ||
Primitive types; loop and branch syntax, blocks, local variables; operation and operand order; scopes; packages, wildcard import, static import; inheritance; method signature; incapsulation; class, abstract class, enum, interface, annotation; Serializable interface; final keyword; immutable pattern; String and datetime basic operations; Checked and unchecked Exceptions; try-catch syntax; java-beans, POJO; singleton, setters, getters, builders | Collections; Atomic types; Concurrency programming: synchronization, threads, executors, futures, thread safe collections, fork-jon framework; generics; Arrays and Objects utility classes; reflexions; Annotations and preprocessors; auto-closeable try catch; work with filesystem NIO2; lambdas, functional interfaces, default method; locales, formatting and internationalization; creating own annotations | Streams; javax; guava; data structures; sorting algorythms; big data optimization; math extensions; parallel programming; blockchains; matrix computations; O-complexity of basic algorythms; grpc (.protobuff), gson |
Kotlin | ||
Scopes, val and var keywords, NPE safe; migration java class to Kotlin | Extensions, coroutines, companion objects |
Qualified | Competent | Expert |
---|---|---|
HttpURLConnection, OkHttp, basic REST | Socket.IO, MQTT, XMPP (Jabber), TLS; RetroFit, Volley; Download manager; handling network changes | Certificate pinning, SSLSocketFactory interception; Samsung Smart switch |
Qualified | Competent | Expert |
---|---|---|
App Fundamentals | ||
Manifest; App Components; system services available from context | User id, proces id, android id; AsynckTask, Loaders; Fragment Manager tree; Android specific classes: Sparse Array, Text Utils | Support Java 8 in Android limitations; |
App Components | Lollipop, Marshmallow, Oreo specific work with components; themization and localization context | |
Context: application context, services, activities, broadcast receivers; Context wrappers | ||
Manifest | ||
Manifest structure | ||
Activities | ||
Activity lifecycle, activity manager; starting activities, starting activities for result | Activity lifecycle callbacks; task, activity, affinity; shared element; launch modes; start activity flags; saving state | Persistable activity; starting foreign activity; activity and multi-process |
Fragments | ||
Fragment Manager, Child Fragment Manager; Fragment Lifecycle | ||
Services | ||
Start service, bind service; Service, IntentService, JobService | Services in Lollipop, Marshmallow and Oreo; starting service security issues; binding flags and types; starting foreground service | |
Broadcast Receivers | ||
Main purpose, sending broadcasts | Security issues sending broadcasts; Local Broadcast Manager | Sticky broadcasts |
Content Providers | ||
Main purpose for content providers; known system content providers; content resolver; system preferences | Creating content provider; database helper, migration, contract, urls | |
Intercomponent communication | ||
Intents, intent filters, actions, categories | Binder, aidl files; Parcellable vs Object stream (Serializable); marshalling data using Parcel; using content providers; exported activities and services; running intent as user; resolving permission for contacts; activity picker, contact picker, account picker; Deeplinks | Using power locks, secure communication, activity manager flow switching activities; App Indexing; App Links |
Qualified | Competent | Expert |
---|---|---|
Instrumentation Tests, Espresso, UIAuthomator; unittest and android test; popular test runners; mocks and stubs | PowerMock, Mockito, Multidex runner, Roboelectric; Mocking context; Creating Rules |
Qualified | Competent | Expert |
---|---|---|
Build environment | ||
Android Studio, Eclipse; adding classes, resources; navigation panels | Gradle, cmake; repositories, artifacts; instant run optimization; libraries, modules; maven project; signing keystores; .jar, .aar, .so, .dex, .class; aapt2, shrinking resources; build vatiants, flavors | Groovy, gradle tasks; errorprone; compile preprocessors; gragle plugins: android, firebase, kotlin; Lombok |
Java Machine in Android | ||
Java machine environment; UI and background threads | JNI, embedding C++ libraries; render thread; zygote, process; multidex, D8 | Kernel versions; using kernel libraries; using HAL to launch own system implementation; Class loader tree |
Qualified | Competent | Expert |
---|---|---|
Permitions, permition levels, groups; file system permitions; runtime permitions | Account Management; User Management; Lock types; Lock Guard; Confirm Credentials; Fingerprint Manager; resolving runtime permitions; share permitions for external activities; fileholder permitions; Keychain | Android Keystore (version related difference, hardware backed); Trust Zone: DEK, KEK; Safety Net; available security algorythms depending on version; DRM; system permissions; Kiosk mode; boot aware mode; root permissions; device administrator |
Qualified | Competent | Expert |
---|---|---|
Memory management | ||
handling memory callbacks; memory alocation; retain release; drawing canvas | increase memory limits; caching strategies; LRU collections; ashmem; heap | Garbage collector; row hammer attack; uisng leak canary |
Profiling App | ||
ADB integration, monitoring memory | Memory dumps | |
Battery Management | ||
Power optimization best practices | Dump battery stats |
Qualified | Competent | Expert |
---|---|---|
MVC, MVP, MVVM, SOLID, Clean Architecture, KISS; | TDD, DDD; GOF Patterns |
Qualified | Competent | Expert |
---|---|---|
RxJava | ||
Reactive programming concepts; using lambdas; subscribers, observers | Difference RxJava 1 and 2; transformers; rx functional interfaces; publishers and thread safe; schedulers | Mocking RxJava schedulers |
Qualified | Competent | Expert |
---|---|---|
Camera and Gallery; Location Manager; Sensor Manager; BlueTooth manager | Android TV, Smart watches, Google glass |
Qualified | Competent | Expert |
---|---|---|
Data Binding Library | ||
MVVM concept; data binding inflator; bindings; observable fields | binding adaptors | |
Support Library | ||
AppCompatActivity, AppCompat... components | ContextCompat utility class; Material design with Support Library | |
Play Services | ||
Basic components of play services; Google maps | ||
Continuous Integration | ||
basic principles; Google Test Lab | Jenkins, Fabric, Crashlytics, Leak Canary; deploying apps onto play market | Bitrise, Fastline; gradle signing task |
Source control | ||
Git, git-flow; branches, repositories, commits | git hooks; Gerrit, gitlab; managing git history; garbage collection; merging strategies; integration git and Android Studio | |
Project Management | ||
Basic knowledge of JIRA; tickets, stories, estimations, estimation strategies, time reporting, kanban | ||
Dependency Injection | ||
dependency injection principles; DDD concept; basic annotations | Dagger Android; Dagger 1 and 2 difference; Object graph; Scopes, components, subcomponents |
Qualified | Competent | Expert |
---|---|---|
Android Platform Architecture | ||
Dalvik, ART; Android framework; System apps | IPC; Kernel, drivers, Binder, HAL, Android framework | Trust Zone, Trusty; Andoid without framework; AOSP |
Instant App | ||
Feature modules, instant app limits | Dynamic links |