close-icon

Good Food for iOS

The Good Food app, launched in November 2024, offers thousands of expert recipes, restaurant reviews, and culinary advice to nearly 6,000 active users. I had the privilege of working with an exceptionally talented, multidisciplinary team to bring this beloved Australian brand’s app to life within a year.

As part of a four-person iOS engineering team, I not only developed several key features but also took on a tech lead role for multiple initiatives. This involved gathering requirements, liaising with stakeholders across various departments, and serving as the primary point of contact for other engineers.

image 6.png

Overview

  • I served as the tech lead for key initiatives — custom UX components, animations, rich content rendering, data and analytics, onboarding and authentication

  • Liaised and communicated with both technical and non-technical stakeholders, including editors, product owners, designers, and directors

  • A key initiative I led was transitioning from RxSwift, previously used across Nine, to Combine

  • I averaged 6 PR reviews per sprint for 2 years with positive feedback from engineers and my EM

  • Worked with Swift, SwiftUI, UIKit, Combine, CoreData, StoreKit, MapKit, and CoreLocation

  • Third party integrations included Firebase, Qualtrics, Google Places, Piano and Snowplow analytics

  • Exposure to CI tools Fastlane and Bitrise as needed during sprints

I’ll now dive into some of my key engineering contributions to the Good Food app.

World class user experience

Custom animations using SwiftUI, UIKit and Lottie animations
  • This was the first app at Nine Entertainment built primarily with SwiftUI

  • Integrated UIKit, SwiftUI, and Lottie animations to craft a premium and engaging experience

  • Developed bespoke interface components and experiences to align with Good Food’s brand and create an immersive experience

  • Pioneered the adoption of Combine at Nine, transitioning from RxSwift

  • Leveraged Combine, async/await, Dispatch Queues, and lazy SwiftUI views for a smooth, responsive experience

  • Integrated haptic feedback to enhance key interactions, creating a more tactile user experience

  • Integrated Qualtrics, Firebase, and Snowplow to collect insights and continuously refine features

Authentication and paywall

iOS authentication and paywall using GoogleSignIn, StoreKit and Piano
  • Developed the email login, account creation and forgot password features by communicating with a REST API

  • Implemented Sign in with Google using GoogleSignInSDK that spoke to a GCP app that I had to configure

  • Co-developed the paywall using the Piano framework, enabling remote updates without additional engineering effort

  • Integrated event observation in Piano’s WebView to trigger the payment flow via StoreKit 2

Location and map experience

Location implementation using Mapkit, CoreLocation and SwiftUI

We expected the map feature to be a hit, and it has since become the most loved and widely used feature on GoodFood. To ensure a seamless experience that keeps users coming back, it had to be engineered with with care.

  • CoreLocation was utilized to retrieve the user's location to deliver location-specific content

  • Engineered a robust solution to fetch venues via a GraphQL API and render them as MapKit annotations

  • A key engineering challenge was creating the bounding box at the optimal zoom level, adjusting for different scenarios based on the venue data

  • Integrated the Google Places SDK to enrich venue data with additional details

Rendering rich content

Rich content rendering using markdown in SwiftUI
  • HTML content was tokenized and converted to Markdown which is supported by SwiftUI

  • Leveraged AsyncImage to asynchronously load images, ensuring smooth scrolling without blocking the UI

  • Rich text was supported with a wide range of fonts, colors, and styles for enhanced flexibility

  • Links were treated to render correctly and detect taps, triggering actions based on a whitelisting policy

  • Social media embeds (Instagram, TikTok) were rendered using WKWebView, with data fetched via platform-specific APIs

Search and filter

Dynamic filter content using Firebase Remote Config

GoodFood offers thousands of expert recipes, restaurant reviews, and culinary tips, and we wanted to empower users to easily find the content they're looking for.

  • The SearchResultsController served as the interface to a GraphQL search API, powering the search experience

  • A dynamic filter experience, driven by Firebase Remote Config, allowed for real-time filter updates without app releases

  • Additionally, users had access to powerful client-side sorting options for greater control over their results

Accessibility

Dyanmic text in SwiftUI
  • The app was built to support light and dark mode

  • Dynamic text resizing was was enabled, adapting to the user's device settings for better readability

  • The app also enabled screen reader support for a few interface components

Head over to the app store to get a taste of the Good Food app for iOS.

If you think I’d be a great fit for your project, please drop me a line at shawnfrank.work@gmail.com