After we have understood the basic concept of LLDB commands now it is taking time to understand the full GUI of Xcode debugging.

Image for post
Image for post
GUI — 1

Let see the picture above. Once you have put a breakpoint on any lines of code in your applications, you will see a similar screen as above.

  1. The top one is our code panel, which indicates where is our breakpoint located
  2. The bottom left panel is our quick look panel, we can see our current state of the object in either class or function level at the moment the code is being halted
  3. The bottom right panel is our console debugger whereas we can put a lot of LLDB command and expression in…

Image for post
Image for post

Have you ever wonder how to debug your entire code in the proper way? But sometimes we don’t know in-depth detail about how does it work behind the scene? In this multiple series of articles, I am trying to spread multiple articles into specific chunks of debugging part, start with the basic / foundation part of debugging in iOS. Normally we will have multiple topics covering all areas, start with LLDB debugging and end with Logging.

What is LLDB? LLDB stands for Low-level debugging which in iOS it will support multiple ways of debugging specifically only for iOS targeted application languages such as Swift, Objective-C, C++, and all Apple environment applications. …

Image for post
Image for post
Me on iOS Thailand Conference #20 December

2020 has been passed, it’s been a thrilling ride for this year especially for uncertainties about COVID that limit us to move around especially traveling. Some people like me, who work abroad, far from family, may have some difficulties. However, it doesn’t need to be that desperate. Instead, there were so many good things that happened during this past 1 year. My productivity increase twice even more than before. There were multiple accomplishments that I took as proof that this year, as much as it sounds a hurtful year, we can always find and seek the opportunity to turn the table around. …

Image for post
Image for post

Recently I got stumbled with a boring way to create an icon from SF Symbols. As you know that Apple introduces SF Symbols for a developer to reuse in their own application if needed. SF Symbols is a set of over 1,500 symbols that you can use in your app. Why SFSymbols are great for indie developers?

  1. It is free
  2. Optical alignment with text for all weights and sizes
  3. Support multicolor
  4. Support localization for RTL languages such as Arabic, Devanagari, and Hebrew

Normally we will do something like this for using the SFSymbols

UIImage(systemName: "gear") --> UIKit
// or
Image(systemName: "gear") -->…

Image for post
Image for post

Do you know that we can actually simply share our breakpoints with our colleagues at work? Xcode provides us with the capability to share it. This share function is very handy if we want all colleagues to have a similar breakpoint. Some breakpoints that worth sharing are Exception breakpoint, Runtime breakpoint, and some Symbolic breakpoints. Let see how it works

  1. Go to your debug navigator panel on the left panel
  2. Add your breakpoint and choose any of it
  3. Right-click on it and choose to “Share” breakpoint

Image for post
Image for post

Once upon a time, while I was debugging my code, I found out an annoying warning comes up like below

[TableView] Warning once only: UITableView was told to layout its visible cells and other contents without being in the view hierarchy (the table view or one of its superviews has not been added to a window). This may cause bugs by forcing views inside the table view to load and perform layout without accurate information (e.g. table view bounds, trait collection, layout margins, safe area insets, etc), and will also cause unnecessary performance overhead due to extra layout passes. …

Image for post
Image for post

Most of us know that generic in programming means we able to do something not limited to one specific type but has more wide selection on the same basis. The most common examples are Queue or Stack use cases. Let say we would like to implement an implementation of both problems not limited to one type of data type, we would like to use a Generic way to solve this problem like the code below

class Stack<T> {
private var data = [T]()

var count: Int {
return data.count

func push(_ item: T) {
func pop() -> T? {
if !data.isEmpty {
return data.popLast() …

Image for post
Image for post
Practical Pyramid Test

As a normal software engineer, we always remember the rule of thumb of testing. We always heard the word of the testing pyramid which consists of 3 things :

  1. Unit Testing
  2. Integration Testing
  3. UI Testing

Image for post
Image for post
Pic from

Have you ever heard about the problem that you need to separate two modules working independently without knowing each other implementation, but requires to be able to communicate easily by only sending necessary data? Most of the advanced use cases will face this real-world use case and we require a more advanced design pattern to be able to solve this pattern to give more scalability to the project.

There is a general concept about “Wrapping” an object through an intermediary class that can adapt to each other. A lot of structural design pattern that handles this problem. …

Image for post
Image for post
Cocoapods vs Carthage

Last week I have a problem while making a pod for my SDK team. I ever made my own pod long time ago and it was very easy in the process. But this one was a different story. I need to make support of Cocoapod and Carthage and SPM for the project that is built within private repo but we want to distribute it globally. So what is the option? Pod and Carthage and SPM offer capabilities to share the project repo to being used widely by many people and they can easily integrate or even contribute to it. However how about a private repo project like an SDK? There is one solution we can use, distribute only the compiled binary source of the framework. So let’s start to make it! …


Michael Abadi S.

iOS Engineer at Agoda, Bangkok

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