I was in a hurry for beard shaving

If you are using some crash report providers such as Firebase Crashlytics or Sentry for your App, have you ever seen any issues like “Missing dSYM files” ?

My son & me are going to the sun 😎

While working with Reactive Programming, network requests are most of popular logic we often handle. Today, we’ll discuss how to handle a sequence of network request correctly, fixed some common mistakes as well as proposing some common approaches that most of developers often use in real projects nowadays. In this post, we’ll use RxSwift to demonstrate the code, since ReactiveX is a cross-platform then RxJava, RxKotlin or even Combine can also involve .

First of all, please download this Xcode project and make sure it builds successfully, we’ll use it to demonstrate use cases in this article.

Let’s start with…

Analytics is the systematic computational analysis of data or statistics - Wikipedia

Analytics is one of “must-have” core components not only for mobile applications but other platforms. Nowadays, there’re a lot of analytic clients such as: Google Analytics, AppFlyer, MixPanel, … Each of them has pros & cons, therefore we may need to use more than 1 client in our application. This article is going to propose a Plugins design to construct a flexible, maintainable & scaleable architecture for analytic clients, the code will be written in Swift but only on interface approach, can be ported & referred to other programming languages or platforms.

We don’t know how many analytic clients would…


Xcode supports an awesome Instruments tool to help us detect the Memory Leaks & fix them. One downside of this approach is we have to launch the Instruments tool to find the leaks then fix them on Xcode & verify again on Instruments, these procedures take much time to finish, therefore we mostly run the Instruments after developing, sometime we forget :P

Sometime, we also find some leaks from other scopes (such as third-parties, framework, …) that we don’t really care because other guys are responsible to fix them instead of us. We only care about the leaks come from…

Cầu Vàng (Golden Bridge) in Da Nang, Vietnam
Cầu Vàng (Golden Bridge) in Da Nang, Vietnam
Cầu Vàng (Golden Bridge) in Da Nang, Vietnam

Copy-On-Write is a common computing technique that helps boost performance when copying structures. Today I would like to show you how can we apply it to Swift.

As far as we know that there’re 2 types in Swift: Reference type & Value type. When we assign value of a variable to a new variable, these things happen for 2 types above, let’s talk about Reference type first:

Hi guys, my name is Steve. Now I’m a platform engineer at VinID which is one of largest enterprise in Vietnam. We’re applying the RIBs architect design from Uber. I greatly appreciate this architect design because it was born for super-app or platform mobile system. It is a recommendation to take a look about RIBs on Github before reading this article.

While working with RIBs, one of pain points we often encounter is: “Leak memory”. Leak memory may happen everywhere & whenever we make some mistakes. Uber already provided a useful tool named “Leak Detector” to poke us when a…

Hi guys, my name is Steve. Now I’m a mobile platform engineer at VinID which is one of largest super-app in Vietnam.
We’re serving millions of customer and always in the top of #LifeStyle category on the Appstore.

We’re a large business then we need to choose a suitable architect design to fit our requirements then RIBs is our final decision.
RIBs is a new mobile cross-platform architect design from Uber. If it is a first time you hear about that, it’s a recommendation to take a look at the homepage of RIBs.

Today I would like to share something…

Older version of iOS, Apple only allows filtering for iMessenger, now iOS 11 allows filtering for SMS/MMS also. Now in Messenger App, Apple adds a new tab named “SMS Junk” that stores your Junks.

The new iOS App named “Junk Filter” was developed based on this new feature of iOS 11 to helps you to filter your incoming SMS/MMS messages into Junk or Inbox. Its user interface is friendly & easy to use, there’re 2 methods of filter: by senders & keywords.
• Filter by senders: All messages that come from those senders will be filtered as Junk.
• Filter by keywords: All messages that contain junk keywords will be filtered as Junk.

The prototype pattern is used to instantiate a new object by copying all of the properties of an existing object, creating an independent clone. This practise is particularly useful when the construction of a new object is inefficient.

Imagine, we have a SmartPhone class as bellow:

Now we need to create 5 instances of this class look like this:

We can easy to realize that many instances have the same properties so we often duplicate the code line then edit any properties differently. It’s okay but not optimized & easy to make mistakes. …

“Adapter converts class protocol for other, expected by client. Adapter allows to objects to cooperate with objects they could not normally work with due to different protocols.”

Today we will implement the Adapter design pattern in Swift with a simple playground example. Imagine, we have a Cassette class that conforms the MusicPlayer protocol as bellow:

Now we have a new InternetMusicPlayer protocol that be declared as bellow:

Now we want the Cassette class conforms the InternetMusicPlayer protocol without any code changes, we will implement the Adapter design pattern as bellow:

The new CassetteAdapter class declares a variable…

Steve Dao

Senior Software Engineer at NE Digital

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