<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/alltrails-momentum-without-a-rewrite-meet-with-apple-vmord9xii" -->

---
title: AllTrails: Momentum without a rewrite | Meet with Apple
description: AllTrails' CTO James Graham describes how the company adopted SwiftUI incrementally alongside its mature UIKit codebase rather than pursuing a full rewrite....
canonical: https://daily.dev/posts/alltrails-momentum-without-a-rewrite-meet-with-apple-vmord9xii
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: AllTrails: Momentum without a rewrite | Meet with Apple | daily.dev
og:description: AllTrails' CTO James Graham describes how the company adopted SwiftUI incrementally alongside its mature UIKit codebase rather than pursuing a full rewrite....
og:url: https://daily.dev/posts/alltrails-momentum-without-a-rewrite-meet-with-apple-vmord9xii
og:image: https://api.daily.dev/og/posts/VmoRd9XII.png
og:image:alt: AllTrails: Momentum without a rewrite | Meet with Apple
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# AllTrails: Momentum without a rewrite | Meet with Apple

**[Apple Developer](https://daily.dev/sources/appledeveloper)** · 14 min read · 0 upvotes · 0 comments

## Summary

AllTrails' CTO James Graham describes how the company adopted SwiftUI incrementally alongside its mature UIKit codebase rather than pursuing a full rewrite. SwiftUI was introduced in a low-risk sandbox for prototypes, then used for isolated, well-bounded surfaces like the trail review flow, the Apple Intelligence-powered 'ask the trail anything' feature, the design system (Denali), and the Apple Watch app. Benefits included roughly 40% less code than UIKit equivalents, smaller view models, 30-40% smaller PRs, and faster code reviews. UIKit still handles app lifecycle, navigation, and complex integrated screens, while SwiftUI drives new growth. The talk closes with three questions for evaluating framework adoption: whether interoperability is treated as infrastructure, whether the tool reduces cognitive overhead, and whether teams measure momentum rather than conversion percentage.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.youtube.com/watch?v=o7rEHJ6eRhA>

## Questions this post answers

### How much less code does SwiftUI require compared to equivalent UIKit implementations?

SwiftUI implementations at AllTrails required roughly 40% less code than the equivalent UIKit versions. This reduction came from eliminating manual state-sync glue code, publishers, operators, and lifecycle management that UIKit required, since SwiftUI's declarative model automatically updates views when data changes.

_Engineers weighing a UIKit to SwiftUI transition can track real-world adoption experiences like this on daily.dev._

### Can UIKit and SwiftUI coexist in the same iOS app without a full rewrite?

Yes, UIKit and SwiftUI can coexist safely by wrapping SwiftUI views in UIHostingController and embedding them inside existing UIKit stack views or scroll views. AllTrails used this bridging pattern to let UIKit continue handling app lifecycle, navigation, and complex integrated screens while SwiftUI took over isolated, well-bounded surfaces like design system components and new features.

_Teams planning a hybrid UIKit and SwiftUI architecture can follow ongoing coverage of this pattern on daily.dev._

### What metrics indicate that a new framework adoption like SwiftUI is actually working well within a team?

Meaningful signals include smaller pull requests, faster code reviews, fewer regressions in the newly built features, and reduced lines of code per feature, rather than the percentage of the codebase converted. AllTrails saw UI pull requests shrink 30 to 40% and view models shrink by about a third after voluntary SwiftUI adoption.

_Developers deciding how to measure framework migration progress can compare approaches on daily.dev._

## Similar posts on daily.dev

- [Lessons from Adopting SwiftUI in an App with 50 Million Users](https://daily.dev/posts/lessons-from-adopting-swiftui-in-an-app-with-50-million-users-7zwvviuv6) · InfoQ · 0 upvotes · 0 comments
- [SwiftUI After 7 Years: A Story of Mediocrity](https://daily.dev/posts/swiftui-after-7-years-a-story-of-mediocrity-cbumk1aaz) · Medium · 0 upvotes · 0 comments
- [A “Native” Debate Over SwiftUI Animation -- Fatbobman's Swift Weekly \#154](https://daily.dev/posts/a-native-debate-over-swiftui-animation----fatbobman-s-swift-weekly-154-as4l3it3z) · Fatbobman · 0 upvotes · 0 comments

---

Tags: [#architecture](https://daily.dev/tags/architecture), [#ios](https://daily.dev/tags/ios), [#swiftui](https://daily.dev/tags/swiftui)

[View this post on daily.dev](https://daily.dev/posts/alltrails-momentum-without-a-rewrite-meet-with-apple-vmord9xii)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"AllTrails: Momentum without a rewrite | Meet with Apple","url":"https://daily.dev/posts/alltrails-momentum-without-a-rewrite-meet-with-apple-vmord9xii","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/alltrails-momentum-without-a-rewrite-meet-with-apple-vmord9xii"},"datePublished":"2026-08-14T22:17:28.719Z","dateModified":"2026-08-14T22:17:52.163Z","description":"AllTrails' CTO James Graham describes how the company adopted SwiftUI incrementally alongside its mature UIKit codebase rather than pursuing a full rewrite....","image":"https://i.ytimg.com/vi/o7rEHJ6eRhA/sddefault.jpg","thumbnailUrl":"https://i.ytimg.com/vi/o7rEHJ6eRhA/sddefault.jpg","isAccessibleForFree":true,"articleSection":"Apple Developer","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Apple Developer","logo":"https://media.daily.dev/image/upload/s--CAtMViBl--/f_auto/v1711726806/logos/appledeveloper","url":"https://daily.dev/sources/appledeveloper"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/alltrails-momentum-without-a-rewrite-meet-with-apple-vmord9xii","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"architecture,ios,swiftui","timeRequired":"PT14M","video":{"@type":"VideoObject","name":"AllTrails: Momentum without a rewrite | Meet with Apple","description":"AllTrails' CTO James Graham describes how the company adopted SwiftUI incrementally alongside its mature UIKit codebase rather than pursuing a full rewrite....","thumbnailUrl":"https://i.ytimg.com/vi/o7rEHJ6eRhA/sddefault.jpg","uploadDate":"2026-08-14T22:17:28.719Z","duration":"PT14M","url":"https://api.daily.dev/r/VmoRd9XII","embedUrl":"https://www.youtube.com/embed/o7rEHJ6eRhA"}}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Apple Developer","item":"https://daily.dev/sources/appledeveloper"},{"@type":"ListItem","position":3,"name":"AllTrails: Momentum without a rewrite | Meet with Apple"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/alltrails-momentum-without-a-rewrite-meet-with-apple-vmord9xii#faq","mainEntity":[{"@type":"Question","name":"How much less code does SwiftUI require compared to equivalent UIKit implementations?","acceptedAnswer":{"@type":"Answer","text":"SwiftUI implementations at AllTrails required roughly 40% less code than the equivalent UIKit versions. This reduction came from eliminating manual state-sync glue code, publishers, operators, and lifecycle management that UIKit required, since SwiftUI's declarative model automatically updates views when data changes. Engineers weighing a UIKit to SwiftUI transition can track real-world adoption experiences like this on daily.dev."}},{"@type":"Question","name":"Can UIKit and SwiftUI coexist in the same iOS app without a full rewrite?","acceptedAnswer":{"@type":"Answer","text":"Yes, UIKit and SwiftUI can coexist safely by wrapping SwiftUI views in UIHostingController and embedding them inside existing UIKit stack views or scroll views. AllTrails used this bridging pattern to let UIKit continue handling app lifecycle, navigation, and complex integrated screens while SwiftUI took over isolated, well-bounded surfaces like design system components and new features. Teams planning a hybrid UIKit and SwiftUI architecture can follow ongoing coverage of this pattern on daily.dev."}},{"@type":"Question","name":"What metrics indicate that a new framework adoption like SwiftUI is actually working well within a team?","acceptedAnswer":{"@type":"Answer","text":"Meaningful signals include smaller pull requests, faster code reviews, fewer regressions in the newly built features, and reduced lines of code per feature, rather than the percentage of the codebase converted. AllTrails saw UI pull requests shrink 30 to 40% and view models shrink by about a third after voluntary SwiftUI adoption. Developers deciding how to measure framework migration progress can compare approaches on daily.dev."}}]}
```

