Facile

Le paysage du développement mobile

Avant de plonger dans React Native, il faut comprendre les différentes approches pour créer des applications mobiles. Chaque approche a ses forces et ses limites.

Les trois grandes approches

Il existe trois familles principales pour développer des applications mobiles :

  1. Développement natif : un langage par plateforme
  2. Applications hybrides : du web empaqueté dans une app
  3. Cross-platform : un code, des composants natifs

1. Développement natif

Le développement natif consiste à écrire du code spécifique à chaque plateforme en utilisant les outils officiels du fabricant.

iOS : Swift (et Objective-C)

swift
// Swift - iOS uniquement
import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let label = UILabel()
        label.text = "Bonjour !"
        view.addSubview(label)
    }
}
  • IDE : Xcode (macOS uniquement)
  • Langage : Swift (ou Objective-C pour du code ancien)
  • Distribution : App Store

Android : Kotlin (et Java)

kotlin
// Kotlin - Android uniquement
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val textView = findViewById<TextView>(R.id.greeting)
        textView.text = "Bonjour !"
    }
}
  • IDE : Android Studio (Windows, macOS, Linux)
  • Langage : Kotlin (ou Java pour du code ancien)
  • Distribution : Google Play

Avantages et limites du natif

Avantages :

  • Performance maximale (accès direct aux API du système)
  • Accès complet aux fonctionnalités du téléphone
  • Interface qui respecte les conventions de chaque plateforme

Limites :

  • Deux bases de code à maintenir (une iOS, une Android)
  • Deux équipes avec des compétences différentes (Swift vs Kotlin)
  • Temps de développement doublé pour supporter les deux plateformes

Quel est le principal inconvénient du développement natif ?

2. Applications hybrides (WebView)

Les applications hybrides utilisent des technologies web (HTML, CSS, JavaScript) affichées dans une WebView (un navigateur intégré dans l'application).

javascript
// Ionic / Capacitor - Application hybride
// C'est du HTML/CSS/JS classique empaqueté dans une app
import { IonButton, IonContent, IonPage } from '@ionic/react';

function Home() {
  return (
    <IonPage>
      <IonContent>
        <h1>Bonjour !</h1>
        <IonButton>Cliquer</IonButton>
      </IonContent>
    </IonPage>
  );
}

Comment ça fonctionne

Chargement du diagramme…

Le code web tourne dans un navigateur intégré. Un pont (bridge) permet d'accéder aux fonctionnalités natives du téléphone (caméra, GPS, etc.) via des plugins.

Frameworks hybrides courants

  • Ionic + Capacitor : framework UI + couche native
  • Apache Cordova : l'ancêtre (moins utilisé aujourd'hui)

Avantages et limites des hybrides

Avantages :

  • Une seule base de code web pour iOS et Android
  • Réutilisation des compétences HTML/CSS/JS existantes
  • Développement rapide pour des applications à dominante contenu

Limites :

  • Performance inférieure (le rendu passe par une WebView)
  • L'interface ne se comporte pas exactement comme une app native
  • Animations et transitions moins fluides
  • Accès aux fonctionnalités natives via des plugins (parfois limité)

3. Cross-platform (composants natifs)

Les frameworks cross-platform utilisent un seul langage pour générer des composants natifs sur chaque plateforme. Contrairement aux hybrides, il n'y a pas de WebView : les composants sont traduits en éléments natifs réels.

React Native (JavaScript/React)

jsx
// React Native - Cross-platform
import { View, Text, Button } from 'react-native';

function Home() {
  return (
    <View>
      <Text>Bonjour !</Text>
      <Button title="Cliquer" onPress={() => {}} />
    </View>
  );
}
  • Langage : JavaScript (ou TypeScript)
  • Framework : React
  • Créé par : Meta (Facebook) en 2015
  • Utilisé par : Instagram, Discord, Shopify, Bloomberg

Flutter (Dart)

dart
// Flutter - Cross-platform
import 'package:flutter/material.dart';

class Home extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          Text('Bonjour !'),
          ElevatedButton(
            onPressed: () {},
            child: Text('Cliquer'),
          ),
        ],
      ),
    );
  }
}
  • Langage : Dart
  • Créé par : Google en 2017
  • Utilisé par : Google Ads, BMW, Alibaba

Avantages et limites du cross-platform

Avantages :

  • Une seule base de code pour iOS et Android
  • Composants natifs (pas de WebView) : meilleures performances que les hybrides
  • Accès aux fonctionnalités du téléphone via des modules natifs

Limites :

  • Performance légèrement inférieure au natif pur (pont de communication)
  • Certaines fonctionnalités très spécifiques à une plateforme nécessitent du code natif
  • Dépendance au framework et à sa communauté

Quelle est la différence entre une application hybride et une application cross-platform ?

Comparaison des approches

CritèreNatifHybrideCross-platform
LangageSwift / KotlinHTML / CSS / JSJS (React Native) / Dart (Flutter)
Rendu UIComposants natifsWebView (navigateur)Composants natifs
PerformanceMaximaleInférieure (WebView)Proche du natif
Bases de code2 (iOS + Android)11
Accès natifCompletVia pluginsVia modules natifs
Temps de développementLong (x2)CourtMoyen
ExemplesApp Apple, Jeux 3DApps de contenu, PWAInstagram, Discord, Shopify

Quand utiliser quelle approche ?

Choisissez le natif quand :

  • L'application nécessite des performances maximales (jeux 3D, traitement vidéo)
  • Vous exploitez des fonctionnalités très spécifiques à une plateforme
  • Vous avez le budget pour deux équipes de développement

Choisissez l'hybride quand :

  • L'application est principalement du contenu (articles, catalogues)
  • Vous avez une application web existante à empaqueter
  • Le budget et le temps sont limités

Choisissez le cross-platform quand :

  • Vous ciblez iOS et Android avec une seule équipe
  • L'application nécessite des performances proches du natif
  • Vous voulez un rendu qui respecte les conventions de chaque plateforme
  • Votre équipe maîtrise déjà JavaScript/React (React Native) ou veut apprendre Dart (Flutter)

Notre choix : React Native

Dans ce cours, nous utilisons React Native car :

  • Vous connaissez déjà JavaScript et React (R4A10)
  • React Native produit des composants natifs (pas de WebView)
  • L'écosystème est mature et bien documenté
  • C'est l'un des frameworks cross-platform les plus utilisés en entreprise

Pour une startup qui veut lancer une app iOS et Android rapidement avec une équipe JavaScript, quelle approche est la plus adaptée ?

À retenir

Comprendre, pas mémoriser

Trois approches pour le développement mobile :

  • Natif (Swift/Kotlin) : performances maximales, deux bases de code
  • Hybride (Ionic/Capacitor) : web dans une WebView, une base de code
  • Cross-platform (React Native/Flutter) : composants natifs, une base de code

Le choix dépend du contexte : budget, compétences de l'équipe, exigences de performance, fonctionnalités natives nécessaires.

React Native est un compromis pertinent : performances proches du natif avec une seule base de code en JavaScript/React.