The latest stable version for production development. Beta version for experiments.
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.
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.
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.
The most reliable solution for networking. Always up to date with the latest Swift features.
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.
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.
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.
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.
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.
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.