Introduction
Avez-vous une application web Next.js existante ? Dans ce guide, vous apprendrez à la transformer en applications mobiles natives iOS et Android en utilisant Capacitor context : Mise à jour en direct page. Rôle : En-tête de section ou de page. Vu dans : page live-update.astro. Préservez les termes de produit/marque et les termes de développeur exactement. Clé de message `live_update_platform_capacitor_title` (Titre de la plateforme de mise à jour en direct Capacitor).
Capacitor wraps your web app in a native container, giving you access to device APIs like camera, filesystem, and push notifications while keeping your existing React codebase. Unlike React Native, you don’t need to rewrite anything — your Next.js code runs as-is.
__CAPGO_KEEP_0__ enveloppe votre application web dans un conteneur natif, vous donnant accès aux API de périphérique comme la caméra, le système de fichiers et les notifications push, tout en conservant votre code React existant. Contrairement à React Native, vous n'avez pas besoin de réécrire quoi que ce soit — votre Next.js __CAPGO_KEEP_1__ fonctionne tel quel.
- Ce que vous apprendrez :
- Add Capacitor 8 with essential native plugins
- Ajoutez __CAPGO_KEEP_0__ 8 avec les plugins natifs essentiels
- Construisez et testez sur les simulateurs iOS et Android
- Résoudre les problèmes de mise en page iOS courants (vueport, zone de sécurité, débordement horizontal)
- Ajouter une interface utilisateur ressemblant à celle des appareils natifs avec Capgo Navigation et Transitions natifs
Vous souhaitez démarrer un nouveau projet à partir de zéro ? Consultez notre guide sur La création d'une application mobile Next.js à partir de zéro.
Avantages de l'utilisation de Next.js et Capacitor
- Code Reutilisation: Next.js vous permet d'écrire des composants réutilisables et de partager code entre vos applications web et mobiles, ce qui vous permet de gagner du temps et de l'effort en matière de développement.
- Performances: Next.js offre des optimisations de performances intégrées, telles que le rendu côté serveur et code de segmentation, garantissant des temps de chargement rapides et une expérience utilisateur fluide.
- Capacités natives: Capacitor vous donne accès aux fonctionnalités de dispositif natif comme la caméra, la géolocalisation et plus encore, vous permettant de créer des applications mobiles riches en fonctionnalités.
- Développement simplifié: Avec Capacitor, vous pouvez développer et tester votre application mobile en utilisant des technologies web familières, ce qui réduit la courbe d'apprentissage et simplifie le processus de développement.
Prérequis
Avant de commencer, assurez-vous d'avoir :
- Node.js 18+ installé
- Une application Next.js existante Xcode (pour le développement iOS, macOS uniquement)
- Android Studio (pour le développement Android)
- installed An existing
Configurer votre application Next.js pour les appareils mobiles
La première étape consiste à configurer votre application Next.js pour l'exportation statique. Capacitor nécessite des fichiers HTML/JS/CSS statiques pour les assembler dans l'application native.
Ouvrez votre next.config.js (ou next.config.ts) fichier et ajoutez la configuration d'exportation :
/** @type {import('next').NextConfig} */
const nextConfig = {
output: 'export',
images: {
unoptimized: true,
},
};
module.exports = nextConfig;
La output: 'export' configuration indique à Next.js de générer des fichiers HTML statiques, et images: { unoptimized: true } évite l'optimisation des images de Next.js qui nécessite un serveur.
Important : Si vous utilisez des fonctionnalités qui nécessitent un serveur (API routes, composants de serveur avec récupération de données, etc.), vous devrez refacturer celles-ci pour utiliser des alternatives côté client ou des API externes.
Ajoutez des scripts spécifiques aux appareils mobiles à votre package.json:
{
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
"mobile": "bun run build && bunx cap sync",
"mobile:ios": "bun run mobile && bunx cap open ios",
"mobile:android": "bun run mobile && bunx cap open android"
}
}
Testez l'exportation statique en exécutant :
bun run build
Vous devriez voir un dossier à la racine de votre projet. out Ce dossier contient tous les fichiers statiques que Capacitor rassemblera dans votre application native.
Ajouter Capacitor 8 à votre projet
Pour empaqueter votre application Next.js dans un conteneur mobile natif, suivez ces étapes :
- Installez Capacitor core et CLI :
bun add @capacitor/core
bun add -D @capacitor/cli
- Installez les plugins Capacitor courants que vous aurez probablement besoin :
bun add @capacitor/app @capacitor/keyboard @capacitor/splash-screen @capacitor/preferences
Ces plugins fournissent des fonctionnalités essentielles :
- @capacitor/app: Gérer les événements de cycle de vie de l'application (avant-plan/arrière-plan, URLs)
- @capacitor/keyboard: Contrôler le comportement de la touche sur mobile
- @capacitor/splash-screen: Gérer l'écran de splash natif
- @capacitor/préférences: Stocker les données clé-valeur de manière persistante
- Initialiser Capacitor avec les détails de votre projet :
bunx cap init my-app com.example.myapp --web-dir out
Remplacer my-app par le nom de votre application et com.example.myapp par l'ID de votre application (notation de domaine inversé).
- Créer ou mettre à jour le
capacitor.config.tsfichier avec la configuration appropriée :
import type { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
appId: 'com.example.myapp',
appName: 'my-app',
webDir: 'out',
plugins: {
SplashScreen: {
launchShowDuration: 2000,
launchAutoHide: true,
androidScaleType: 'CENTER_CROP',
showSpinner: false,
splashFullScreen: true,
splashImmersive: true,
},
},
};
export default config;
- Installer les plateformes natives :
bun add @capacitor/ios @capacitor/android
- Ajouter les dossiers de la plateforme native :
bunx cap add ios
bunx cap add android
Capacitor créera ios et android dossiers au niveau racine de votre projet contenant les projets natifs.
Pour construire le projet Android, vous avez besoin de Android Studio. Pour iOS, vous avez besoin d'un Mac avec Xcode.
- Construire et synchroniser votre projet :
bun run mobile
Cela exécute votre script personnalisé qui construit le projet Next.js et synchronise les fichiers statiques avec les plateformes natives.
Construire et Déployer des Applications Mobiles
Pour construire et déployer votre application mobile native, suivez ces étapes : Pour développer des applications iOS, vous devez avoir Xcode installé, et pour les applications Android, vous devez avoir Android Studio installé. De plus, si vous prévoyez de distribuer votre application sur l'app store, vous devez vous inscrire au programme Apple Developer pour iOS et au Google Play Console pour Android.
- Ouvrez les projets natifs :
Pour iOS :
bun run mobile:ios
Pour Android :
bun run mobile:android
Ou directement avec Capacitor CLI :
bunx cap open ios
bunx cap open android
- Construirez et exécuterez l'application :

-
Dans Android Studio, attendez que le projet soit prêt, puis cliquez sur le bouton « Exécuter » pour déployer l'application sur un appareil connecté ou un émulateur.

-
Dans Xcode, configurez votre compte de signature pour déployer l'application sur un appareil réel. Si vous n'avez pas déjà effectué cela, Xcode vous guidera tout au long du processus (notez que vous devez être inscrit au programme Apple Developer). Une fois configuré, cliquez sur le bouton « Jouer » pour exécuter l'application sur votre appareil connecté.
Félicitations ! Vous avez réussi à déployer votre application web Next.js sur un appareil mobile.
Capacitor Live Reload
Lors du développement, vous pouvez profiter de la rechargement en direct pour voir les changements instantanément sur votre appareil mobile. Pour activer cette fonctionnalité, suivez ces étapes :
- Trouvez votre adresse IP locale :
-
Sur macOS, exécutez la commande suivante dans le terminal :
ipconfig getifaddr en0 -
Sur Windows, exécutez :
ipconfigRecherchez l'adresse IPv4 dans la sortie.
- Mettez à jour votre
capacitor.config.tspour qu'elle pointe vers votre serveur de développement :
import type { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
appId: 'com.example.app',
appName: 'my-app',
webDir: 'out',
server: {
url: 'http://YOUR_IP_ADDRESS:3000',
cleartext: true,
},
};
export default config;
Remplacez YOUR_IP_ADDRESS par votre adresse IP locale (par exemple, 192.168.1.100).
- Appliquez les modifications à votre projet natif :
bunx cap copy
Le copy La commande copie le dossier web et les modifications de configuration dans le projet natif sans mettre à jour tout le projet.
- Rebâtissez et exécutez l'application sur votre appareil en utilisant Android Studio ou Xcode.
Maintenant, chaque fois que vous apportez des modifications à votre application Next.js, l'application mobile se rechargera automatiquement pour refléter ces modifications.
Remarque : Si vous installez de nouveaux plugins ou apportez des modifications aux fichiers natifs, vous devrez rebâtir le projet natif car la rechargement en temps réel ne s'applique qu'aux modifications web code.
Utilisation des Capacitor Plugins
Les Capacitor plugins vous permettent d'accéder aux fonctionnalités de votre appareil natif depuis votre application Next.js. Explorons comment utiliser le plugin de partage comme exemple :
- Installez le plugin de partage :
bun add @capacitor/share
- Mettez à jour
pages/index.jsle fichier à utiliser avec le plugin de partage :
import Head from 'next/head';
import styles from '../styles/Home.module.css';
import { Share } from '@capacitor/share';
export default function Home() {
const share = async () => {
await Share.share({
title: 'Open Youtube',
text: 'Check new video on youtube',
url: 'https://www.youtube.com',
dialogTitle: 'Share with friends',
});
};
return (
<div className={styles.container}>
<Head>
<title>Create Next App</title>
<meta name="description" content="Generated by create next app" />
<link rel="icon" href="/favicon.ico" />
</Head>
<main className={styles.main}>
<h1 className={styles.title}>
Welcome to <a href="https://nextjs.org">Capgo!</a>
</h1>
<p className={styles.description}>
<h2>Cool channel</h2>
<button onClick={() => share()}>Share now!</button>
</p>
</main>
</div>
);
}
- Sync les modifications avec le projet natif :
Comme mentionné précédemment, lors de l'installation de nouveaux plugins, nous devons effectuer une opération de synchronisation et redéployer ensuite l'application sur notre appareil. Pour cela, exécutez la commande suivante :
bun run mobile
Ou synchronisez simplement sans reconstruire :
bunx cap sync
- Reconstruit et exécutez l'application sur votre appareil.
Maintenant, lorsque vous cliquez sur le bouton « Partagez maintenant ! », le dialogue de partage natif s'affichera, vous permettant de partager le contenu avec d'autres applications.
J'ai travaillé pendant des années avec Ionic pour construire des applications cross-platform, mais l'intégration avec Next.js est hacky et rarement intéressante lorsque vous avez déjà Tailwind CSS 4.
For un sentiment mobile natif dans une application Next.js + Capacitor , utilisez les Capgo plugins au lieu des kits UI web uniquement comme Konsta UI :
- @capgo/capacitor-native-navigation — barre de navigation native, Liquid Glass barre de tab sur iOS, et un style de barre de tab flou sur Android. Votre routeur Next.js conserve l'état des routes ; le plugin possède la barre de chrome native.
- @capgo/capacitor-transitions — transitions de page à la manière d'Ionic et un retour arrière par swipe sur l'écran sur iOS dans la couche WebView, sans adopter l’UI d'Ionic.
Installez les deux :
bun add @capgo/capacitor-native-navigation @capgo/capacitor-transitions
bunx cap sync
Configurez la navigation native avec le mode CSS inset pour que le contenu web respecte les barres natives :
import { NativeNavigation } from '@capgo/capacitor-native-navigation';
await NativeNavigation.configure({
contentInsetMode: 'css',
animationDuration: 360,
glass: {
effect: 'liquidGlass',
},
});
Affichez une barre de tab en verre liquide (iOS utilise la mise en page système ; Android utilise un fond flou de WebView) :
await NativeNavigation.setTabbar({
selectedId: 'home',
labelVisibilityMode: 'labeled',
icons: true,
colors: { dynamic: true },
tabs: [
{ id: 'home', title: 'Home', icon: { svg: '...' } },
{ id: 'settings', title: 'Settings', icon: { svg: '...' } },
],
});
await NativeNavigation.addListener('tabSelect', ({ id }) => {
router.push(`/${id}`);
});
Ajoutez des transitions de page natives dans votre coquille d'application :
import '@capgo/capacitor-transitions';
import { initTransitions, setDirection, setupRouterOutlet } from '@capgo/capacitor-transitions/react';
initTransitions({ platform: 'auto' });
Enveloppez les pages routées dans cap-router-outlet, cap-pageet cap-contentet appelez setDirection('forward') ou setDirection('back') avant router.push() ou router.back(). N'oubliez pas de ne pas dupliquer les en-têtes et les pieds de page web lorsque la navigation native gère ces surfaces.
Voir les guides complets : Utilisation de @capgo/capacitor-navigation-native et Utilisation de @capgo/capacitor-transitions.
Zones sûres avec Tailwind
Pour les zones sûres du dispositif dans Tailwind CSS, utilisez @capgo/tailwind-capacitor (publié sous tailwind-capacitor sur npm). Il fournit safe-areas des outils et d'autres plugins Tailwind compatibles Capacitor:
bun add -D tailwind-capacitor
Dans styles/globals.css:
@import 'tailwindcss';
@plugin "@capgo/tailwind-capacitor/platform";
@plugin "@capgo/tailwind-capacitor/safe-areas";
Utilisez des outils comme pt-safe, pb-safe, et px-safe au lieu de les répandre env(safe-area-inset-*) manuellement. Le projet est actuellement développé — si quelque chose manque pour votre configuration Next.js, ouvre une PR sur GitHub.
Résoudre les problèmes de mise en page iOS (Vueport, Zone de sécurité, et Débordement horizontal)
Si le contenu semble coupé, décalé ou déroulable horizontalement sur iOS, ajouter plus overflow-x: hidden ou ajuster la balise de vueport seule ne suffit généralement pas pour résoudre le problème. Travaillez à travers ces vérifications dans l'ordre.
Assurez-vous que la balise meta de vueport est appliquée correctement
App Router (app/export viewport de app/layout.tsx:
import type { Viewport } from 'next';
export const viewport: Viewport = {
width: 'device-width',
initialScale: 1,
viewportFit: 'cover',
};
Pages Router (pages/mettre la balise meta de viewport dans pages/_app.tsxpas _document.tsx La manière dont Next.js applique les balises peut ne pas correspondre à vos attentes pour le comportement de la vue portée). _document.tsx Gérer l'espace sûr d'iOS à partir d'un seul wrapper racine
Créer une coquille d'application unique et appliquer la mise en forme de l'espace sûr là-bas — et non dans plusieurs composants imbriqués :
Envelopper tout le contenu de la page à l'intérieur de
html,
body,
#__next {
width: 100%;
min-height: 100%;
margin: 0;
padding: 0;
overflow-x: hidden;
}
* {
box-sizing: border-box;
}
.app-shell {
min-height: 100dvh;
width: 100%;
padding-top: env(safe-area-inset-top);
padding-right: env(safe-area-inset-right);
padding-bottom: env(safe-area-inset-bottom);
padding-left: env(safe-area-inset-left);
}
La mise en forme de l'espace sûr dupliquée dans les en-têtes, les modaux et les enveloppes de disposition peut rendre l'interface utilisateur coupée ou trop grande. .app-shellDuplicated safe-area padding in headers, modals, and layout wrappers often makes the UI look cropped or too large.
With @capgo/tailwind-capacitor, vous pouvez exprimer la même marge avec des utilitaires comme pt-safe pb-safe px-safe sur cette seule coquille.
Fixez Capacitor iOS contentInset à never context : Page/zone : Page de produits de mise à jour en temps réel. Rôle : Étiquette de navigation ou élément de l'IHM court. Clé de message `live_update_dynamic_label_to` (Étiquette dynamique de mise à jour en temps réel).
premier capacitor.config.tsDans contentInsetMode: 'css', préférez l'insérer natif désactivé et laissez CSS (ou la navigation native)
const config: CapacitorConfig = {
appId: 'com.example.myapp',
appName: 'my-app',
webDir: 'out',
ios: {
contentInset: 'never',
},
};
Mixing Capacitor’s automatic content inset with CSS env(safe-area-inset-*) Mélanger les marges automatiques de contenu de __CAPGO_KEEP_0__ avec la mise en forme CSS est une cause courante de double espacement.
Trouvez l'élément qui déborde vraiment
Le coupable habituel est un élément utilisant 100vw, Tailwind w-screen, une largeur de pixels fixe, ou une large min-width.
Dans l'Inspecteur Web de Safari, exécutez :
[...document.querySelectorAll('*')]
.filter(el => el.scrollWidth > document.documentElement.clientWidth)
.map(el => ({
el,
tag: el.tagName,
class: el.className,
scrollWidth: el.scrollWidth,
clientWidth: document.documentElement.clientWidth,
}));
Avec Tailwind, remplacez w-screen par w-full lorsque possible. De nombreux problèmes de débordement horizontal proviennent de 100vw / w-screen, une duplication de la marge de sécurité, ou d'un conteneur à largeur fixe — et non de la balise meta de la vue d'ensemble elle-même.
Optimisation de la Performance
Pour garantir une performance optimale de votre application Next.js et Capacitor , considérez les meilleures pratiques suivantes :
- Minimisez la taille de l'application en supprimant les dépendances et les actifs inutilisés.
- Optimisez les images et les autres fichiers multimédias pour réduire les temps de chargement.
- Implémentez le chargement différé pour les composants et les pages pour améliorer la performance de chargement initial.
- Utilisez la mise en page côté serveur (SSR) avec Next.js pour améliorer la vitesse de chargement de l'application et l'optimisation pour les moteurs de recherche (SEO).
- Profitez des optimisations intégrées de Capacitor, telles que le cache de la vue web et la mise en bundle de l'application.
Conclusion
Vous avez réussi à convertir votre application web Next.js existante en applications natives iOS et Android à l'aide de Capacitor 8. Votre codebase web fonctionne maintenant nativement sur les appareils mobiles avec accès aux API de l'appareil.
Ce que vous avez accompli :
- Configuré Next.js pour l'export statique
- Added Capacitor 8 avec les plugins essentiels
- Construit et déployé vers les simulateurs iOS et Android
- Activé le rechargement en direct pour le développement
- Corrigé les problèmes de mise en page iOS courants (vueport, zone de sécurité, débordement)
- UI native ressentant avec Capgo Navigation et Transitions Native
Étapes suivantes :
- Configurer Capgo pour les mises à jour hors ligne sans résoumission de l'application sur l'app store
- Ajoutez plus de plugins natifs comme la Caméra, la Géolocalisation ou les Notifications Push
- Configurez les icônes d'application et les écrans de démarrage pour la production
- Préparez votre application pour la soumission sur l'App Store et Google Play
Démarrer un nouveau projet ? Consultez Construire une application mobile Next.js à partir de zéro pour une prise en main guidée.
Ressources
- Documentation Next.js
- @capgo/capacitor-navigation native — bar de navigation Liquid Glass et chrome natif
- Documentation Capacitor 8
- @capgo/capacitor-transitions — transitions de page ressenties comme natif
- @capgo/tailwind-capacitor — utilitaires de zone sûre Tailwind pour Capacitor
- Capgo - Mises à jour en temps réel pour les applications Capacitor
Apprenez comment Capgo peut vous aider à créer des applications meilleures et plus rapides, inscrivez-vous à un compte gratuit aujourd'hui.
Continuez avec Convertir votre application Next.js en iOS & Android avec Capacitor 8
Si vous utilisez Convertir votre application Next.js en iOS & Android avec Capacitor 8 pour planifier le travail du plugin natif, connectez-l’avec Capgo Répertoire des plugins pour le flux de travail du produit dans Capgo Répertoire des plugins, Capacitor Plugins par Capgo pour les détails d'implémentation dans Capacitor Plugins par Capgo, Ajouter ou mettre à jour les plugins pour les détails d'implémentation dans Ajouter ou mettre à jour les plugins, Alternatives de plugins Enterprise Ionic pour le flux de travail du produit dans Alternatives de plugins Enterprise Ionic, et Capgo Développements natifs pour le flux de travail du produit dans Capgo Développements natifs.