Foxance running on iPhone

Built with Ruby Native

An existing Rails app, in the App Store in two days

Foxance, built in Rails and live in the App Store.

“I didn't open Xcode once. I didn't write a single line of Swift. Just some YAML files and a bit of HTML and CSS.”
Ender Ahmet Yurt

Ender Ahmet Yurt

Ruby Native Customer

Ruby Native turns Rails businesses into iOS and Android apps.

Ender Ahmet Yurt is a Rails developer in Turkey, and Foxance is the personal finance tracker he built for himself. It's also the first customer-built Ruby Native app to ship to the App Store.

His path there started with Spendee, the finance app he used for years. When that stopped fitting how he wanted to track his money, he moved everything to an Excel spreadsheet. That worked for a while, but a spreadsheet is not an app.

He built Foxance as a Rails app first, then made it responsive and added a PWA mode so it could feel app-like on his phone. When that still wasn't enough, he tried Hotwire Native and then plain Swift. As he put it: "Both took too long. Ruby Native got me from zero to TestFlight in a day."

Ender had tried Ruby Native once before on a smaller project, but it felt buggy and the documentation was thin, so he dropped it. He came back for Foxance, and the app was in the store within two days.

Read Ender's full account on his blog →

Why Ruby Native

The five approaches Ender tried

Ender weighed five ways to get Foxance onto a phone. Here's how they stacked up, in his framing.

Approach Pros Cons

Responsive web

  • Zero new tooling
  • Same Rails app, same deploy
  • Not in the App Store
  • No native feel

PWA

  • Installable on the home screen
  • Works offline if configured
  • Still not a real App Store listing
  • iOS PWA support is uneven

Hotwire Native

  • Real native shell over a Rails app
  • Open-source, by 37signals
  • Swift and Kotlin still required
  • Xcode setup felt heavy

Native Swift + JSON API

  • Full native feel
  • Total UI control
  • Rebuild every screen in Swift
  • Two codebases forever

Ruby Native

Chosen

  • YAML configuration, no Swift
  • Cloud builds, no Xcode setup
  • Shipped to App Store in two days
  • Publishing costs money
  • Not fully native
  • Still maturing as a tool

From Ender's blog post: How I built a Rails app for the App Store without writing Swift.

Convinced? You can start without paying anything.

Start for free

What Ruby Native made possible

The framework features Ender used

Foxance keeps the native side simple. The whole iOS experience comes from one YAML file.

Native tab bar

The four tabs at the bottom of Foxance are a real UITabBar, configured in YAML and rendered with SF Symbols. Each tab points at a Rails route, and the transactions tab uses eager loading so it's already rendered when Ender taps it.

# config/ruby_native.yml
tabs:
  - path: /dashboard
    icon: house
  - path: /transactions
    icon: list.bullet
    eager: true
  - path: /reports
    icon: chart.bar
  - path: /settings
    icon: gearshape

Cloud builds, no Xcode

Ruby Native runs the iOS build on hosted infrastructure. One click in the Ruby Native dashboard produces a signed binary, ready for TestFlight without certificates to manage or Apple Developer portal clicks.

Automated App Store screenshots

The screenshots in Foxance's App Store listing are rendered automatically from the Rails routes Ender configured, with no Simulator dance or manual capture.

Honest tradeoffs

What Ender would still change

In Ender's own words.

“Publishing to the App Store costs money. Doesn't fully deliver the native feel. Still maturing as a tool.”
Ender Ahmet Yurt

Joe's response

App Store fees are Apple's, not mine to remove. Native feel is exactly where I'm focused right now. Native page transitions are coming to Normal Mode this year, which closes most of the gap Ender is pointing at.

“The app isn't 100% native and I know it. Some people pointed out the design on social media. They're right.”
Ender Ahmet Yurt

Joe's response

The gap is real, and it's the price of shipping in two days instead of two months. Ruby Native is closing it incrementally, native transitions first, with richer interactions coming over time.