← back to blog
9 min read

Swift vs React Native: When to Use What

After building apps in both Swift and React Native, here's my practical guide on choosing the right tool for your project.

SwiftReact NativeiOS

I've shipped apps in both Swift and React Native. Neither is universally better - the right choice depends on your project. Here's my decision framework.

Choose Swift/Native When:

1. Performance is Critical

Apps that need consistent 60fps with complex animations:

  • Games
  • Video/photo editors
  • AR/VR experiences
  • Real-time audio processing
React Native is fast for most apps, but native will always have an edge for computationally intensive work.

2. Deep Platform Integration

If your app heavily uses:

  • HealthKit, HomeKit, CarPlay
  • Widgets, App Clips, Watch apps
  • Advanced camera features
  • Background processing
Native gives you first-class access. React Native can bridge these, but it's extra work and sometimes laggy.

3. Apple-Only Forever

If you're certain you'll never need Android, native Swift eliminates a layer of abstraction. Your app will feel more "Apple-like" with less effort.

4. Small Team, iOS Expertise

If your team knows Swift but not JavaScript, the learning curve for React Native might not be worth it for a single-platform app.

Choose React Native When:

1. Cross-Platform is Essential

The obvious case. One codebase for iOS and Android saves significant development time. In my experience:

  • 70-80% code sharing is realistic
  • Platform-specific code is mostly UI polish and native modules

2. Web Developers Building Mobile

If your team knows React, the transition to React Native is smooth. The mental model is the same.

3. Rapid Iteration

React Native's hot reload is faster than Swift's previews. For apps where you're iterating quickly on UI, this adds up.

4. Content-Based Apps

Apps that are mostly:

  • Lists and forms
  • API data display
  • Standard navigation
  • Basic animations
These work great in React Native. You won't notice a performance difference.

Real-World Examples

I chose Swift for Tidey because:

  • macOS only (no cross-platform need)
  • Menu bar app with native feel required
  • File system integration is cleaner in native
  • Small, focused app
I chose React Native for client projects because:
  • Needed iOS and Android
  • Team knew React
  • Standard CRUD app with API integration
  • Fast iteration was important

The Hybrid Approach

Sometimes you can have both:

// In React Native, use native modules for performance-critical parts
import { NativeModules } from 'react-native';
const { VideoProcessor } = NativeModules;

// Heavy lifting in native Swift/Kotlin const result = await VideoProcessor.compress(videoPath);

This gives you cross-platform UI with native performance where it matters.

My Recommendation

For most apps, start with React Native. If you hit performance walls or need deep native integration, you can:

  • Optimize with native modules
  • Rewrite specific screens in native
  • Or, if necessary, rebuild entirely (with the learnings from your RN prototype)
  • The "wrong" choice isn't fatal. Building something is better than debating tools.