iOS Development Stack: 2023

Karthik
4 min readMay 18, 2023

--

In this post, I’ll share the architecture, tools, and code standards that we are using to get a better coding experience.

In 2023, as part of our app modularization efforts, we adopted a range of cutting-edge tech stacks to power our development. Here is a curated list of the tech stacks we embraced for building our app.

The Stack 📚:

  • GitHub
  • Swift 5+
  • SwiftUI + MV Architecture
  • CoreData
  • Swift Package Manager
  • Fastlane
  • CI/CD: Github Action
  • Firebase
  • SwiftLint
  • Swinject
  • CodeStandard: Apple + Google

Github

We rely on GitHub as our preferred platform. As part of our development process, we have also started leveraging GitHub wiki pages to host and document our API payloads structure. This enables easy access and reference to the structure of our APIs for seamless integration and collaboration.

Xcode

Without Xcode, it’s nearly impossible to become an iOS Application engineer. We always ensure that the Xcode version is downloaded from the Mac Appstore rather than Google.

In our development process, we stay up-to-date with the latest iOS version by transitioning to the GM (golden master) version at the end of September. This allows us to prepare our app to seamlessly support the new iOS release.

To streamline our workflow and resolve merge conflicts, we employ an alternative approach. Instead of relying solely on Xcode, we utilize other tools like VSCode, and Github Desktop to address conflicts efficiently.

App Architecture

We have transitioned to following the MV pattern (Model-View) in our development process, which eliminates the need for an intermediate ViewModel layer.

By adopting the MV pattern, we simplify our application architecture and improve code maintainability. The Model represents the data and business logic, while the View focuses on rendering the user interface. This separation allows for clear responsibilities and easier testing.

With this approach, we leverage the power of SwiftUI and its declarative nature to directly bind our Views to the underlying Model. This eliminates the need for a ViewModel layer, reducing complexity and making our code more concise.

SwiftUI

We have started adopting SwiftUI gradually in our development process. SwiftUI is a modern framework for building user interfaces that offer a range of powerful features and components.

Our focus on incorporating SwiftUI and exploring different view-related concepts ensures that we stay up-to-date with the latest trends in iOS app development. Here are a few worth considering features on view development.

Coredata

A framework that never lets developers sleep 😔. More on upcoming articles.

For now, you can think of this as a persistent framework (in other words Database)

Dependency Manager

We have fully embraced Swift Package Manager as our primary dependency manager, eliminating the need for other third-party dependency managers.

By leveraging Swift Package Manager, we can easily add, update, and remove dependencies directly within Xcode. This streamlined approach simplifies our development workflow and reduces the complexity of managing external libraries and frameworks.

Fastlane

App automation is achieved using this tool.

Fastlane Match 🔑:

  • Xcode Automatic Signing is tedious and messy., To avoid that we switched to Fastlane Match to manage code signing identities.
  • It helps us to store your code-signing identities and profiles in your own private, encrypted git repository to securely sync them across machines
  • Once set up is done successfully, every developer can reproduce signed builds on any computer.

Fastlane Deployment 🚀:

  • We have created our custom workflow to build, test, upload, and distribute new releases to the app store
  • It is a one-click that runs everything.

Fastlane Integration:

  • Our Fastlane is hooked up with the Slack channel to get workflow status. We have installed the Slack mobile app and signed into the channel to receive push notifications about the workflow status.

CI/CD: Github Action

We have adopted the use of GitHub Actions across all of our modules and the main project. GitHub Actions is a powerful automation and workflow tool provided by GitHub that allows us to streamline our development processes and improve collaboration within our team.

With GitHub Actions, we can easily configure and customize workflows to meet the specific requirements of each module and project. We can define triggers based on events, such as pushes to specific branches or pull requests, ensuring that our workflows are executed at the appropriate times.

Firebase

We leverage various features of Firebase to enhance different aspects of our app:

  1. Firebase/RemoteConfig: Feature Flagging
  • Firebase/Performance: To get to know more about app startup time and API performance with analytics.
  • Firebase/Messaging: for push notifications
  • Firebase/Crashlytics: for application crash reports
  • Firebase/DynamicLinks: for universal linking.

We keep visiting firebase release notes to get to know more about their fixes and releases.

SwiftLint

To ensure consistency and maintain a unified code style within our team, we have implemented SwiftLint as our code standard enforcement tool. SwiftLint helps us adhere to a set of predefined rules and guidelines, promoting clean and consistent code across our projects.

In addition to the default SwiftLint rules, we have drawn inspiration from the code standards followed by industry leaders like FAANG (Facebook, Apple, Amazon, Netflix, and Google). We have incorporated some of their best practices and rules into our SwiftLint configuration, further enhancing the quality and readability of our codebase.

If you wish to integrate swiftlint into your project, please follow this:

Knowledge Base

We keep ourselves updated with market standards by following these.

  • iOS Developer Keynotes (Not only the first keynote that Tim does)
  • iOSGoodies
  • iOSGists
  • Reading StackOverflow Comments (not only answers)
  • Subscribing selected newsletters.
  • Following these people on Twitter, and Medium, sometimes annoying them by asking queries.

“Be the senior engineer you needed as a junior.” — Someone

Thank you for reading the post, leave a comment with tools that you use to make your development better ✌️.

--

--