Dans cet article, je vais expliquer en détail la mise en place de NativePHP dans un environnement Docker, les problèmes rencontrés (notamment liés aux hosts internes Docker), ainsi que les différentes stratégies pour tester et déployer une application Laravel en natif sur iOS.
📦 1. Architecture globale
L’objectif est d’exécuter une application Laravel dans un environnement Docker tout en permettant à NativePHP de générer une application iOS capable de se connecter à ce backend.
- Laravel tourne dans un container Docker
- NativePHP est utilisé pour générer l'app iOS
- Jump sert à connecter l'app mobile au backend local
⚙️ 2. Installation de NativePHP
Dans ton projet Laravel :
composer require nativephp/laravel
Initialisation :
php artisan native:install
Build de l’application :
php artisan native:build ios
🐳 3. Docker-compose utilisé
Exemple de configuration adaptée :
version: "3.8"
services:
laravel:
build:
context: ../
dockerfile: laravel/Dockerfile
container_name: myhomehub_laravel
volumes:
- ../../laravel:/var/www
- ../../.env:/var/www/.env:ro
ports:
- "8000:8000"
networks:
- myhomehub_network
native:
build:
context: ../
dockerfile: laravel/Dockerfile
container_name: myhomehub_native
volumes:
- ../../laravel:/var/www
- ../../.env:/var/www/.env:ro
ports:
- "3000:3000"
command: sh -c "php artisan serve --host=0.0.0.0 --port=8000 & php artisan native:jump ios"
networks:
- myhomehub_network
networks:
myhomehub_network:
🐋 4. Dockerfile utilisé
# PHP 8.3
FROM php:8.3-fpm
# Install dependencies for Laravel
RUN apt-get update && apt-get install -y \
bash \
git \
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
zip \
unzip \
libonig-dev \
libicu-dev \
curl \
libxml2-dev \
default-mysql-client \
libzip-dev \
nodejs \
npm \
rsync \
grep \
&& docker-php-ext-install pdo pdo_mysql mbstring exif pcntl bcmath gd intl zip opcache soap
# Install Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
# Define WOR directory
WORKDIR /var/www/
# Laravel Permissions
RUN chown -R www-data:www-data /var/www
USER www-data
USER root
# Entrypoint to create laravel storage links and set permissions
COPY ../laravel/entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD ["php-fpm"]
⚠️ 5. Problème rencontré : host interne Docker
Un problème majeur rencontré est que Jump retourne une configuration basée sur une IP interne Docker :
{"host":"172.18.0.3","port":"3000"}
Cette IP :
- est interne au réseau Docker
- n’est pas accessible depuis un iPhone
- change à chaque redémarrage
Résultat : impossible de connecter l’app iOS au backend local via Wi-Fi.
📱 6. Limitation en environnement local
Même si le téléphone est sur le même réseau Wi-Fi :
- l’IP Docker interne n’est pas routable
- Laravel n’est pas accessible via cette IP
👉 Conclusion : impossible de faire fonctionner Jump correctement sans adapter l’environnement réseau.
🔧 7. Pourquoi Jump est utilisé
Jump sert à :
- connecter l’application iOS au backend local
- générer un QR code contenant host + port
- faciliter le développement sans configuration manuelle
📦 8. Alternative sans Jump (avec Xcode)
Il est possible de se passer de Jump en :
- générant un build iOS via NativePHP
- ouvrant le projet dans Xcode
- configurant manuellement l’URL du backend
Dans ce cas, l’application pointe directement vers un serveur accessible publiquement (ex: production).
🚀 9. Déploiement en production
Pour un usage en production :
- Laravel doit être accessible via un domaine public (ex: thiebault.be)
- SSL obligatoire (HTTPS)
- configuration correcte du APP_URL
Ensuite :
- Build de l’app NativePHP
- Ouverture dans Xcode
- Configuration de l’identifiant Apple Developer
- Archive et upload vers App Store Connect
- Distribution via TestFlight
📲 10. Installation sur iPhone
Pour tester l’application :
- Installer TestFlight depuis l’App Store
- Recevoir une invitation via email ou lien
- Installer l’application via TestFlight
Si Jump est utilisé dans le build :
- Ouvrir l’app Jump sur iPhone
- Scanner le QR code généré
- Connexion automatique au backend
🧠 11. Conclusion
NativePHP permet de transformer une application Laravel en application iOS native avec une WebView enrichie. Cependant, l’intégration avec Docker pose des problèmes liés aux réseaux internes.
Jump simplifie les tests locaux mais montre ses limites avec Docker. Pour une approche robuste, il est recommandé de :
- utiliser Jump uniquement en local hors Docker
- ou pointer directement vers un backend accessible publiquement
- et déployer via Xcode + TestFlight pour iOS
👉 En résumé : Docker + NativePHP + Jump fonctionne, mais nécessite une bonne compréhension des réseaux. En production, tout repose sur un backend accessible publiquement.