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)
- CI / CD - GitHub Actions
- Quick & Nimble
These are the tools that I make use of for CI (Continuous Integration) & CD (Continuous Delivery)
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.
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 💯.
- 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.
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.
- MVVM (Model-View-ViewModel)
- Coordinator pattern
- SQLite for persistence
- Quick & Nimble for unit tests
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.
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.
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.
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:
- Be active! create a Twitter profile, follow other iOS developers, attend iOS Dev Happy hour.
- Read docs, read code on Github, find public repos, try to understand the code.
- Use Stackoverflow, don't just copy-paste, understand then copy-paste.
- Learn from your colleagues and your seniors. Don't be afraid to ask questions and challenge the status quo.
- Hacking with Swift
- Swift Discovery by Khoa
- Vadim Bulavin
"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 ⚡️!