My iOS TechStack 2021

My iOS TechStack 2021

Tools used to make iOS applications

ยท

5 min read

In this post, I'll share the tools, architecture, and resources I'm currently using to develop.

A little about me: I'm an iOS engineer in Cape Town, South Africa ๐Ÿ๐Ÿ‘‹๐Ÿพ. I have been developing iOS applications for over 5 years now in FinTech and E-commerce. I love building products that impact people's lives and I think in Swift โšก๏ธ๐Ÿ˜‰.

My aim to make this an annual inclusion on my blog. This list will summarize my learnings each year and a way to share new things. It will be interesting to see how this list changes from year to year.

iOS Development in 2021

It is a very exciting time to be an iOS developer. #WWDC21 & #WWDC20 were full of so many new and interesting things which we can now use to build applications. Whilst some can not be used immediately due to lack of backward compatibility with iOS versions I see this as an opportunity to learn. Between now and the time your team is ready to drop support for previous iOS versions you can use the time to learn things like SwiftUI, Combine, and async-await.

Since most of the apps I work on can't use some of these latest features Apple has released you will not see them included in the list.

TL;DR (Too long; didn't read)

  • Fastlane
  • GitHub
  • CI / CD - GitHub Actions
  • SwiftLint
  • SwiftGen
  • RxSwift
  • MVVM
  • UIKit
  • Quick & Nimble
  • Blogs
  • YouTube

Dev Tools

These are the tools that I make use of for CI (Continuous Integration) & CD (Continuous Delivery)

  • Xcode

It's close to impossible if not impossible to be an iOS Developer and not use Xcode. Our beloved IDE has improved drastically over the years. The team at Apple has released many awesome features to make our lives as developers easier. Personally, I really love the source control integrations and can't wait to try out Xcode Cloud.

I use Fastlane to automate everything! Releases, release notes, changelogs, TestFlight and AppStore builds are amongst some of the things that I automate with Fastlane.

  • GitHub

Not only do I use Github for source control but also have recently started using GitHub Actions for CI/CD. Having my code and CI/CD in one location is a major win for me ๐Ÿ’ฏ.

Code Tools

  • SwiftLint & SwiftGen

Every iOS project in my opinion should have these tools set up. SwiftLint ensures that code style and syntax are adhered to and consistent. SwiftGen generates code for all your resources to make them type-safe. All iOS Developers love type-safety and clean code โค๏ธ.

  • Swift Package Manager & CocoaPods

I have started moving libraries from CocoaPods and using SPM for dependency management as more libraries add support for it.

Architecture

The topic of architecture and design patterns will always be a hot topic for the iOS community. I would like to believe I have found an architecture that works for me. This section could possibly be a series of posts on its own.

I am very fond of the MVVM pattern. It does not have too much boilerplate code which makes it clear to understand and is testable. In tandem with MVVM I like to use RxSwift for binding properties to views. Apple has endorsed Function Reactive Programming with Combine. I look forward to when I can replace RxSwift with Combine in the future.

I have included gRPC even though this is usually dependent on the backend. Working with gRPC is such a delight. I don't know why more teams do not use gRPC. It is lightweight, type-safe, and has built-in code generation for most languages. You can read more here.

#UI

I won't go too much into detail here but will include links to resources that discuss the topics listed. Leave a comment if you'd like me to write on any of the topics more in detail and discuss my specific implementations.

I have to mention these two libraries DiffableDataSource & KingFisher ๐ŸŒŸ. DiffableDataSource is a backport of Apple's diffable data source available to use from iOS 9 and above. So you can use compositional layouts and diffable data sources without dropping support for previous iOS versions.

KingFisher is the image cache king. If your app downloads images take a look at this library. It adds support for caching, loading states, placeholder images, and other image rendering-related features.

Knowledge Base

It's important to always keep abreast with the latest technology and keep improving your skills. Below is a list of resources that I use to achieve this.

Community

  • Github
  • Twitter
  • Colleagues
  • Stackoverflow

The iOS developer community is such an awesome community. There are so many people freely sharing their knowledge with others. Over the years I have learned so much from this community.

How to best utilize the community:

  1. Be active! create a Twitter profile, follow other iOS developers, attend iOS Dev Happy hour.
  2. Read docs, read code on Github, find public repos, try to understand the code.
  3. Use Stackoverflow, don't just copy-paste, understand then copy-paste.
  4. Learn from your colleagues and your seniors. Don't be afraid to ask questions and challenge the status quo.

Blogs

YouTube

Books

NewsLetters

"Be the senior engineer you needed as a junior."โ€Š-โ€ŠAnon

Thank you for reading my post, leave a comment with tools that you love โœŒ๐Ÿพ. Keep thinking in Swift โšก๏ธ!