Fluttering toward Cross Platform Solutions

After reading yet another piece on “Why We Switched To/From CrossPlatform/Native”,  I decided that it was time to examine the state of cross platform app development for myself and not rely on the opinions of others, as their reasons for landing on their chosen solutions vary.

Why Now?

After watching the talks at this year’s Google I/O and  Apple’s WWDC, it’s clear that the development puck in mobile is moving toward declarative UI with reactive state management. Much like Swift  and AutoLayout, despite my initial feelings about these technologies, I’ve had to reconcile them against the reality of their increased presence. I believe that cross-platform development is no different. It’s simply a matter of the form that I find most palatable.

What about SwiftUI?

While my original intent was to build a SwiftUI app in time for the release of iOS 13 but I ran into too many issues early on to make that viable. However, these approaches are not mutually exclusive and maintaining development “purity” is far less important to me than putting  solutions into people’s hands. Done is better than perfect after all. For now, I think a side-by-side comparison of the respective approaches  of SwiftUI/Combine versus Flutter will provide enough some insight into where each each is in terms of maturity and utility. There may still be cases where the SwiftUI/Combine approach would make the most sense.

The Roadmap

I’ve decided to proceed with a few of my existing iOS apps as a base to provide a point for comparison, each with escalating complexity.


A transit schedule app, for the Goldsboro-Wayne Transit Authority in Goldsboro, North Carolina, this is the simplest of my current apps. The goal here is to finally provide the long intended Android version to complement the iOS version that shipped in 2018.  There are 3 screens of content that will provide a solid foundation using Flutter for:

  • connecting to Firebase to provide bus route data (JSON)
  • displaying provide route  and estimated bus locations on a map
  • simple UI animations and transitions


Capoeira Songs

I’m bringing my very first mobile app back from the grave. The current iteration is being built natively on iOS in Swift but I’d like if I can move faster with a cross-platform approach (factoring in the learning curve). The original version of the app was as simple as GWTA but the latest incarnation in more complex and will provide a nice testbed beyond the basics so that I can see what Flutter/Dart is capable of, specifically:

  • how to implement business logic in Dart versus Swift
  • advanced UI animations and transitions
  • shared user data (e.g. leaderboards and song lists) in Firebase



My expense tracking app for digital nomads will provide an opportunity to investigate state management in Flutter, as there are various screens throughout the app that are affected by changes to expenses. The newest version is almost ready to ship on iOS and getting a comparable Android version built will take some effort. On the positive side, I will be forced to ship smaller, more frequent updates in order to reach parity. From there, I will evaluate whether I should port the iOS version over to Flutter.

I have no idea where I’m going to land on the cross-platform vs. native debate but I imagine that like all things in development, the age old answer of “it depends” will still apply.

Cocoa Nomad Podcast: Retrospective #11

In this retrospective, I provide progress updates on Capoeira Songs, share my productivity struggles and look to the upcoming fall events.

Show Link:


You can listen to the Cocoa Nomad Podcast on the following services:

I’d love to hear from you. Reach out with comments, feedback or show ideas on Twitter() or Instagram

The Cocoa Nomad Podcast #22: Eating the Frog vs Quick Wins

In this episode, I talk about changes to the show and its release schedule, how I use music to set the mood while working and making the choice between tackling huge tasks versus small ones to start the day.
You can listen to the Cocoa Nomad Podcast on the following services:
I’d love to hear from you. Reach out with comments, feedback or show ideas on Twitter or Instagram

The Cocoa Nomad Podcast – #16: Creating Your Nomadic Lifestyle: Part 2

In this week’s episode, I talk about why having a routine is important to remain grounded while traveling

You can listen to the Cocoa Nomad Podcast on the following services:

I’d love to hear from you. Reach out with comments, feedback or show ideas on Twitter or Instagram

The Cocoa Nomad Podcast – #13: Creating Your Nomadic Lifestyle: Part 1

In this week’s episode, I share a few tips on getting started with a nomadic lifestyle and how, despite my initial plans, found myself living full time around the world.


You can listen to the Cocoa Nomad Podcast on the following services:

I’d love to hear from you. Reach out with comments, feedback or show ideas on Twitter or Instagram

My Nomadic Lifestyle Setup – My Tools

I had a conversation with a good friend recently about leaving his current company and possibly starting his own business. Our talk turned to tools that would allow for collaboration and remote work. He was familiar with many of the cloud-based tools available but wasn’t sure which he should use. I shared my current toolkit and decided to provide it here as well.  Even if you aren’t a software developer, you may find many of these tools useful.


  • 17" MacBookPro – My primary work machine. If I plan on doing any dev work, I bring it along. While it is larger than necessary for true mobility, its size allows me to view multiple applications without constant switching .
  • 27" iMac desktop – This computer remains at my permanent address. It provides a larger workspace when I am working out of my home office and serves as a backup when my laptop is unavailable (twice in the last 3 years). 
  • iPad (1st Gen, 32GB , 3G) – Many argue that it’s not for content creation, but I find that it is sufficient for most tasks (I draft most of my blogs posts and even wrote a children’s book on it). It also serves as a test device for application development and a repository for all of my digital media (eBooks, WWDC videos, podcasts). I got rid of my television as well because I can stream movies/shows on it (Bonus!).
  • iPhone 4 – As an iOS developer, this is another required test device for me. My first Apple device was the 3G model and I upgraded to this model when I started developing for iOS full-time. I probably would’ve kept the 3G otherwise, since the iPad runs the same apps.


  • Evernote – a ubiquitous note capture tool. I use it for everything from design notes to bookmarking pages from the web (no more synching between browsers). The notes are synched between all of my devices so whenever I need to access information, it’s there. Notes are also accessible from my iPhone/iPad.
  • Github – a cloud-based repository that I use for source control. I used to use Subversion (and Visual SourceSafe before that) but I find Git much easier to use and more effective for collaborating with others on projects. I haven’t tried to use it for non-programming projects so if I weren’t a developer, I probably wouldn’t find this tool as useful.
  • Dropbox – another cloud-based storage service that allows me to sync documents between machines or share with other Dropbox users. I use it to store music and video. The files are even accessible from my iPhone/iPad.
  • GoogleDocs – web-based tool is for document collaboration with others, allowing simultaneous editing without having to send versions back and forth via email.
  • Pivotal Tracker / Rally – web-based project management tracking tools that breaks projects into stories (smaller well-defined deliverables). The tools even tracks my velocity (how fast I am accomplishing tasks) and adjusts the schedule accordingly. A great way to learn about how much time it really takes to get things done.
  • Things – this tool is closer to a traditional to-do list but allows me to group tasks into projects and projects into areas of my life (personal, work, family, home, etc.). I can quickly place a task on the list of things to be done today, on a specific date or an undefined someday. It allows me to capture something that I want/need to do and forget about it. It also allows me to immediately see what I need to do next once something is completed.
  • Pomodoro – I have trouble focusing on only one thing so this tool helps me tackle tasks in smaller chunks of time (25 minutes) with breaks in between.