Classic iOS Tech Stack
Xcode

The latest stable version for production development. Beta version for experiments.

Swift

The latest version of the language. All code written by various people for the same project should be consistent, so we enforce usage of code styleguides for our works. Objective-C is used only to support legacy codebase, typically we don't use Objective-C for any new code.

MVVM + Coordinators

Our team prefers MVVM architecture in collaboration with coordinators. This architecture allows to implement good separation of the navigation logic, and for easy integration of new features and screens.

UIKit + SnapKit

We use the SnapKit library in conjunction with UIKit to make it easier to work with constraints. It noticeably increases our development velocity. Also, we always measure UI/animations performance in our apps to guarantee delightful user experience.

Alamofire

The most reliable solution for networking. Always up to date with the latest Swift features.

RxSwift

All events (user, system, networking, etc) that happens inside iOS are reactive by their nature. So we use RxSwift to effectively control the flow. Its operators and networking features allow to keep cleaner architecture, write less code, and provide better app performance.

CocoaPods + SPM

The easiest / fastest way to integrate any iOS library into an application. But this technology has a significant disadvantage, such as a long project build time. That's why we try to use Swift Package Manager as much as possible.

Modular Architecture

For projects with a large codebase, we rely on a modular architecture. It allows us to decouple a codebase into independent modules. It helps to have cleaner architecture, avoid exponential growth of build time, and simplify simultaneous changes of a codebase by multiple developers.

Unit Testing

Testing is one of the important stages in the development of large applications with many reusable components. By testing individual code fragments, or individual components, the reliability of the final product is increased.

App Monitoring

XCode provides the developer with some built-in tools to monitor the performance of an application. The developer can see how much memory his application is using, how much CPU load the application is putting on the processor, and etc. This and more can be found in the Debug Navigator menu.

Runtime Debug

If you notice any inaccuracies in the layout, you can easily view the hierarchy of items on the screen using the Debug View Hierarchy tool. This increases the speed of correcting errors due to incorrect screen layouts noticeably.


Also, you can use the Debug Memory Graph utility to track memory usage in your application. With this utility you can eliminate memory leaks in your application.