Chapitre 15.1 — 🍏 Ce qui change pour iOS
Où on en est : Drill est une app Android aboutie — écrite en cross-platform. Ce chapitre déroule, théoriquement mais complètement, le jour où vous décideriez de la porter sur iPhone. Spoiler : le code est le plus petit des sujets.
⏱️ TL;DR — Le code : ~95 % identique (nos Platform.select et le langage iOS des composants sont déjà là). Le reste change : compte Apple Developer 99 $/AN, builds iOS via EAS cloud (pas besoin de Mac pour BUILDER — mais sans Mac ni iPhone, impossible de TESTER sérieusement), TestFlight pour la bêta, review App Store plus stricte (guidelines design), et des équivalences à connaître (APK→IPA, AAB→App Store Connect, keystore→certificats gérés par EAS).
🎯 Objectifs
- Chiffrer le ticket d’entrée iOS (argent, matériel, temps).
- Connaître le pipeline EAS iOS depuis Windows (et sa limite de test).
- Mapper chaque concept Android du cours sur son équivalent Apple.
- Auditer Drill : qu’est-ce qui demanderait une retouche iOS réelle ?
Le ticket d’entrée
| Poste | Android (vécu) | iOS |
|---|---|---|
| Compte développeur | 25 $ une fois | 99 $/AN (Apple Developer Program) |
| Machine de build | La vôtre (ou EAS) | EAS cloud (Mac inutile pour builder) |
| Machine de TEST | Votre téléphone | iPhone physique (ou simulateur → Mac) |
| Bêta | Piste fermée (12×14 j si perso) | TestFlight (pas de quota de testeurs imposé) |
| Review | Heures → 7 j, surtout automatique | 24-48 h typique, plus humaine et design-opiniâtre |
La ligne qui décide : le test. EAS builde l’IPA depuis Windows sans problème — mais développer pour une plateforme qu’on ne peut pas VOIR est une impasse (le simulateur exige un Mac ; un iPhone physique + build TestFlight est le minimum viable). Verdict pratique : le portage iOS devient raisonnable le jour où vous avez (a) un iPhone sous la main et (b) une app qui le mérite (demande réelle, monétisation — P17). Pas avant.
Le pipeline depuis Windows
eas build --profile production --platform ios # oui, depuis Windows
eas submit --platform iosCe qu’EAS absout : la gestion des certificats — le pendant iOS du keystore, en pire (certificats de distribution, provisioning profiles, renouvellements ANNUELS). EAS génère, stocke, renouvelle : vous répondez à deux questions au premier build et n’y pensez plus. C’est, avec le build-sans-Mac, l’argument iOS le plus fort d’Expo.
Le circuit complet : eas build (IPA signé) → eas submit (App Store Connect — le
« Play Console » d’Apple) → TestFlight (la bêta : installez sur VOTRE iPhone, invitez
jusqu’à 10 000 testeurs par lien, review légère de 24 h pour la bêta elle-même) → soumission
App Store → review complète → publication. Les OTA EAS Update : identiques (le channel
sert les deux plateformes — un seul eas update met à jour Android ET iOS).
Les équivalences — le dictionnaire
| Concept du cours | Équivalent iOS |
|---|---|
| APK (sideload) | ❌ n’existe pas vraiment (pas de sideload grand public) — TestFlight EST la « voie perso » |
| AAB → Play Console | IPA → App Store Connect |
| Keystore / upload key | Certificats + provisioning (gérés EAS) |
| versionCode | buildNumber |
| Adaptive icon | Icône iOS (carrée, masquée par le système — PAS de transparence) |
| Test fermé 12×14 j | ❌ (TestFlight libre) — la contrainte Google n’a pas d’équivalent |
| Android vitals | Xcode Organizer / App Store Connect metrics |
| Data Safety | Privacy Nutrition Labels (déclaratif similaire) |
Remarquez la symétrie des contraintes : Google fait payer en testeurs (test fermé), Apple en dollars et en review — chaque jardin a son péage.
L’audit iOS de Drill
Ce que NOTRE code demanderait réellement — la revue honnête :
- Rien à faire : Expo Router, Zustand, TanStack Query, SQLite, Reanimated, gestes, notifications locales, OTA — tout est cross-platform par construction.
- Déjà prêt (on l’a écrit en passant) : les ombres (
Platform.select, ch. 3.6), leKeyboardAvoidingViewbehavior (ch. 3.5), le feedback pressed sans ripple (ch. 3.3 —android_rippleignoré, l’opacité prend le relais). - Retouches réelles : l’icône (version carrée sans transparence), le splash (formats), tester la safe area de la Dynamic Island (notre useSafeAreaInsets la gère — à VÉRIFIER visuellement), et les haptics (le Taptic Engine rend mieux — tant mieux).
- Le questionnaire d’Apple : Privacy Labels (copie du Data Safety), et la review design (Human Interface Guidelines — Drill, sobre et standard, passe sans frayeur).
Estimation totale pour Drill : 2-3 jours de travail + les délais administratifs. C’est la récompense du « code cross-platform, chaîne Android » décidé au premier jour : l’option iOS reste ouverte, à coût borné, sans avoir jamais ralenti le développement.
⚠️ Piège — Le piège du portage n’est pas technique : c’est l’engagement récurrent. 99 $/an + un target iOS à suivre + une review par mise à jour + tester sur un matériel qu’on n’utilise pas au quotidien : pour une app perso, c’est un LOYER permanent. La question n’est jamais « puis-je porter ? » (oui, facilement) mais « cette app justifie-t- elle un loyer annuel ? ». Pour un quiz perso : non. Pour l’app monétisée de la P17 : peut-être — les utilisateurs iOS paient statistiquement plus.
💡 Pour un dev Next.js — L’analogie qui remet les idées en place : ajouter iOS, c’est moins « supporter Firefox en plus de Chrome » que « déployer sur un second cloud avec son propre contrat commercial ». Le code est portable ; l’OPÉRATION est dupliquée. D’où la doctrine du cours : cross-platform dans le code (gratuit), mono-plateforme dans l’opération (jusqu’à preuve de besoin).
✏️ Exercices
1. Faites l’audit iOS de VOTRE version de Drill : grep les Platform., listez les
endroits déjà bi-plateformes, et les 3 points qui demanderaient une vérification visuelle
sur iPhone.
✅ Solution
grep -r "Platform\." app/ components/ lib/ → attendus : le behavior du
KeyboardAvoidingView, les ombres du kit, d’éventuels selects de config. Vérifs visuelles :
(1) safe areas Dynamic Island/notch sur l’écran quiz plein écran, (2) le rendu des haptics
(calibrage), (3) la tab bar (hauteur/insets iOS). L’exercice démontre : la dette iOS de
Drill tient sur un post-it — le cross-platform discipliné a payé.
2. Établissez le budget an-1 d’un portage iOS de Drill (argent + heures), puis le seuil de rentabilité si Drill était monétisé (P17) à 2 € de LTV moyenne par utilisateur iOS.
✅ Solution
An 1 : 99 $ (compte) + ~0 $ builds (EAS quota) + 2-3 j de portage + ~0,5 j/mise à jour (review, vérifs) — disons 4-5 jours-homme + 99 $. Seuil : ~50-60 installs iOS payants couvrent le cash ; le vrai coût est le temps. Conclusion type : un hobby ne le justifie pas ; une app à 500+ téléchargements/mois Android avec demande iOS explicite, oui. Le chiffrage transforme « un jour peut-être » en décision.
3. Sans Mac ni iPhone : jusqu’où pouvez-vous PRÉPARER le portage aujourd’hui, à coût nul ? Listez les 5 gestes.
✅ Solution
(1) Garder la discipline cross-platform (fait — continuer). (2) Ajouter la config iOS
d’app.config.ts (bundleIdentifier — le package name d’Apple — icône carrée) : dormant,
gratuit. (3) Vérifier chaque nouvelle lib sur reactnative.directory pour le support iOS
(déjà le réflexe, ch. 1.4). (4) Un eas build --platform ios --profile preview d’ESSAI
pour valider que ça compile (le quota le permet). (5) Documenter les 3 vérifs visuelles en
attente dans le README. Le portage devient une après-midi le jour J, pas une expédition.
🧠 Quiz
1. Peut-on builder pour iOS sans Mac, et que manque-t-il alors ?
Réponse
Oui — EAS Build compile l’IPA dans le cloud depuis n’importe quel OS. Ce qui manque sans Mac/iPhone : tester (simulateur = Mac ; le minimum viable = un iPhone + TestFlight).
2. Quel est l’équivalent iOS du keystore, et qui le gère ?
Réponse
Les certificats de distribution + provisioning profiles (renouvellements annuels compris) — générés et gérés par EAS, comme le keystore Android.
3. TestFlight vs le test fermé Google : la différence clé ?
Réponse
TestFlight est libre (pas de quota 12×14 j imposé, jusqu’à 10 000 testeurs par lien, review bêta légère) — la contrainte Apple est ailleurs : 99 $/an et la review App Store plus opiniâtre.
4. Un eas update touche-t-il les deux plateformes ?
Réponse
Oui — le channel sert Android ET iOS : une OTA met à jour le JS des deux parcs d’un seul geste (runtimeVersion par plateforme respectée).
5. Formulez la doctrine du cours sur iOS.
Réponse
Cross-platform dans le code (gratuit, discipliné depuis le jour 1), mono-plateforme dans l’opération — porter le jour où l’app justifie le loyer récurrent (99 $/an, reviews, matériel de test), pas avant.
👉 Chapitre suivant : 15.2 — Expo pour le web — la même app en site : la promesse et le verdict.