Firebase has become the first tool any iOS developer adds to his projects. And while Analysts, Crashlytics, and Performance usually work out-of-the-box, there is one tool that rises more questions. It’s Firebase Database.

How does it handle app localization?

How to configure it in production?

How to set proper environment and versioning?

And how to make this integration smooth, maintainable, and testable?

We will talk about this in the context of the app strings and briefly review different ways to handle strings. From the simplest setup with no localization to remote localized database environment with versioning.

Part 1. Do you have a Labels file?

Working on any iOS…

Uber mobile architecture in details

What is RIBs?

Joining UBER was a new chapter in my iOS Engineering career, and it all began with the new architecture, which is called RIBs. The major idea behind this architecture is that the app should be driven by business logic, and not by the view. The best way to visualize it is a tree: each RIB is a node, and it can have none, one, or multiple child nodes.

How to switch between the application parts and handle launch options.

This is a continuation of my article from June 11, where we created the universal manager to handle all types of deep-linking (notifications, shortcuts, universal links, deeplinks). The only question that we haven’t discussed is:

“How do we actually navigate to an appropriate screen once the deeplink is handled?”

In this article, we will go deeper and implement the clear and flexible way of App Root Navigation, that includes the Deeplink navigation. You will be able to access any part of your app from both inside the app or from any type of external deeplinks.

Most of the modern apps…

A better way to reload data

Let’s be honest: tableView.reloadData is only there for two reasons:

  • to load initial data
  • to infuriate your internal perfectionist

Most data-driven apps use the server to fetch a new data and then display this data in the table view. When you reload the data, some of the items in your collection may not change, or the collection may only add/delete a few items without affecting all other items. Calling .reloadData() on the tableView will update the tableView instantly the scroll position will be ambiguous. Not the best user experience, right? …

One tool to rule them all

Have you ever built an app, that handles Push Notifications? If your app is something more complex than a “Hello, World!” app, then, most likely, the answer is yes.

How about opening Shortcuts? When all the new iOS devices support 3d touch, this feature is becoming something more than just a nice-to-have addition.

Does your app support the Universal Links? This is a relatively new feature, that is becoming popular in the modern apps. So, if you don’t use it, you may want to start.

The good thing is that you can easily find dozens of learning materials, examples, and…

Part 3. Continue adopting MVVM in iOS Development

This is the third Tutorial in my Table View with MVVM series. In the first two parts, we created the Table View with dynamic cells of different types, and we added a collapsible sections feature. Today, we will go through another common-used Table View scenario: multiple selections.

In many use cases, we need to create a Table View, that allows the user to select multiple cells. Usually, the API provides the list of items, that you display in Table View, and the user can select a few of this items to use them later (send to the backend, save to…

Part 2. Continue adopting Protocols and MVVM with Table Views

This is the second part of my Tutorial series on Table View with multiple cell types.

After reading the multiple responses and advice for the first part, I decided to add some major updates.

UITableViewController is changed to UIViewController with a TableView as a subview.

Now, ViewModel conforms to TableViewDataSource protocol. NumberOfRowsInSection, cellForRowAt, and numberOfSections are the part of ViewModel. This keeps the ViewController and ViewModel separated.

Please find the final updated project here.

Thanks everyone for the contribution!

In the first part we created the following Table View:

Part 1. How not to get lost in spaghetti code

There are Table Views with the static cells, where the number of the cells and the cell order is constant. Implementing this Table View is very simple and not much different from the regular UIView.

There are Table Views with dynamic cells of one type: the number and the order of the cells are changing dynamically, but all cells have the same type of content. This is where the reusable cells come in place. This is also the most popular type if Table Views.

The are also Table Views with dynamic cells that have different content types: the number, order…

How to Make it Clear and Enjoy Your Code

Example Tableview from my recent app

If you build iOS projects, you already know this fact: one of most commonly used component is a UITableView. If you haven’t yet build any project, you still can see a UITableView in many popular iOS app: YouTube, Facebook, Twitter, Medium, most messenger apps, etc. Basically, every time, when you need to display a dynamic number of data objects on the same view, you use UITableView.

Another base component is CollectionView, which I personally prefer to use, because it’s more flexible. I will make another article about CollectionView later.

So, you want to add a UITableView to your project.


Adopting MVC in iOS Project

Image credit: Stanford University CS193P, Fall-2010

If you are an iOS developer, or a software developer in general, you definitely solve this problem in almost every project: how to pass data from the Model to Controller.

This assumes, of course, that you are using MVC or MVVM pattern in your project. If all of your code for requesting, receiving, and parsing data, along with updating the UI is located within a single UIViewController subclass, you should probably adopt one of the iOS Architecture Patterns first.

I will describe three basic ways of passing the data back to your Controller:

  1. Using Callbacks
  2. Using Delegation
  3. Using Notifications


Stan Ostrovskiy

Senior iOS Engineer at Instacart

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store