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.
SwiftUI is a successor of UIKit. It’s simpler and faster than UIKit. But it’s not that stable yet. Right now, we’re actively experimenting with SwiftUI and very accurately adopting it to our production works.
Combine is a reactive neighbor of SwiftUI. That’s a direct alternative to RxSwift. So for any screens written with SwiftUI we prefer to use Combine instead of RxSwfit. Both, SwiftUI and Combine are created and developed by Apple.
Although SwiftUI is a direct alternative to UIKit, knowledge of UIKit is still very important to write apps with a modern tech stack. It should be considered as a fallback solution for places where SwiftUI is not mature enough.
At this point, it is worth combining both technologies to speed up development and increase code extensibility. Separating the tasks, SwiftUI is better for screens layout and UIKit for everything else. For example, at the moment SwiftUI doesn’t provide a reliable solution for navigation, so we have to rely on UIKit navigation in most cases.
In addition, iOS doesn't prohibit developing new screens using SwiftUI in an existing application which previously only used UIKit.
The most reliable solution for networking. Always up to date with the latest Swift features.
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.