Un Mac est nécessaire pour toutes les étapes qui vont suivre, le Mac doit être sous la version 10.14 (Mojave) au minimum pour avoir accès à Xcode 11. Ceci est nécessaire pour la version de Flutter utilisée (v1.22), toute mise à jour de l'application concernant l'environnement
sdk: ">=2.7.0 <3.0.0"
(dans le pubspec.yml
) pourrait nécessiter une version de Xcode plus récente et donc une version MacOS plus récente.
- MacOS>= v10.14
- Flutter >= v1.22 : nécessite d'installer le CLI de Flutter, disponible ici
- Xcode >= v11
- L'application peut tourner sous iOS 9 minimum mais l'upload de fichiers nécessite au minimum iOS 11 comme l'indique cette réponse sur Stackoverflow .
Le déploiement nécessite plusieurs étapes, générer les certificats sur developer.apple.com (ou les récupérer depuis le répertoire deploy
), créer l'application sur appstoreconnect.apple.com et enfin configurer le Runner depuis Xcode.
- Certificate
deploy/apple/CertificateSigningRequest.certSigningRequest
: certificat créé par Keychain Access - Certificate
deploy/apple/distribution.cer
: certificat de distribution - Profile
deploy/apple/comproject.mobileprovision
: provision - developer.apple.com : gérer les certificats, l'équipe de développement
- appstoreconnect.apple.com : gérer l'application pour l'App Store
1. Flutter et Xcode
Pour ouvrir l'application Flutter avec Xcode, sélectionnez flutter-project/ios
pour avoir accès à l'environnement de développment Apple et au Runner. Pour accéder au Runner qui représente l'application en test, rendez-vous dans le Project navigator et double cliquez sur Runner. Vous aurez le Project qui n'est pas très utile pour nous et Targets qui est très important pour la suite, en particlier pour l'onglet General, Signing & Capabilities et Build Phases.
Utiliser Flutter avec Xcode peut se révéler assez compliqué, notamment pour des questions de cache, si quelque chose ne fonctionne pas, n'hésitez pas à nettoyer l'application.
- Avec Flutter :
flutter clean
- Avec Xcode : Product->Clean Build Folder
Vous pouvez vous assurer que de tout supprimer avec cette commande (fermez Xcode avant)
flutter clean
rm -Rf ios/Pods
rm -Rf ios/.symlinks
rm -Rf ios:Flutter/Flutter.framework
rm -Rf ios/Flutter/Flutter.podspec
rm ios/Podfile.lock
flutter pub get
cd ios
pod update
cd ../
Relancez le Runner d'Xcode après avoir effectué cette commande.
2. Configurer Firebase
Suivre les étapes Configuring your app et Linking APNS with FCM du guide FlutterFire . Les étapes listées dans ce guide seront également utiles pour plus tard, il est préférable de commencer par cette étape.
Fichiers nécessaires : la liste est disponible en haut de la page.
GoogleService-Info.plist
Le fichier est nécessaire pour faire fonctionner Cloud Messaging, il doit être dans la liste des fichiers dans Targets Runner->Build Phases->Copy Bundle Resources
3. Configurer le Runner sur Xcode
En théorie, l'étape précédente aura listé les points les plus importants mais vérifiez ceux-ci dans le Runner Targets->General :
- Display Name: Project Name
- Bundle identifier (le même que celui du Bundle ID dans Identifiers sur developer.apple.com) : com.group.project.flutter
- Version de
pubspec.yml
- Build de
pubspec.yml
- Register un nouvel iPhone: Xcode, Runner-> Targets->Signing & Capabilities->All->Select Team->Register device
WARNING
Il faudra mettre à jour À CHAQUE FOIS ces données, si vous souhaitez déployer l'application, vous aurez à créer une archive et si une archive utilise déjà un numéro de version qui a été utilisé, vous aurez une erreur.
Si tout semble fonctionner, branchez un iPhone physique (l'iPhone doit être déverouillé) ou lancez un émulateur et exécutez le Runner avec l'icône Play en haut à gauche. En cas d'erreur, vérifiez les logs pour savoir quel est le problème. Si tout se passe bien, l'application devrait se lancer sur l'iPhone en mode debug. Vous pouvez lancer également l'application avec la commande flutter run
depuis la racine du dépôt si vous avez au moins lancé une première fois le Runner afin de générer tout le nécessaire à l'application pour l'iPhone. Il est possible de lancer la commande de run
de Flutter en même temps que le Runner d'Xcode ou en ayant arrêté le Runner. L'intérêt de la commande run
de Flutter est d'avoir accès à tous les logs de l'application, le Runner disposant de logs mais vous ne retrouverez pas tous les logs utilisés par l'application.
3. a. Tester les notifications push
Lorsque l'application est lancée sur l'iPhone, il est important de voir si les notifications push fonctionnent. Celles-ci sont activées en mode background, retournez à l'accueil de l'iPhone et lancez la commande suivante dans un terminal MacOS/Linux : notifications push (utilisez la commande cURL). La notification push devrait arriver immédiatement.
3. b. Configurer le certificat de Distribution
Pour distribuer l'application il est nécessaire d'avoir un certificat de distribution. Sur Xcode, allez dans Xcode->Preferences->Accounts->Sélectionnez le compte concerné->Manage Certificates. Si vous ne voyez pas de certificat appelé Apple Distribution, appuez sur +
et sélectionnez Apple Distribution pour en ajouter un.
4. Créer l'application
Sur appstoreconnect.apple.com vous devrez créer une nouvelle application si besoin. Pour l'UGS, mettez com.group.project.flutter
. Vous devrez ajouter des screenshots (disponible sous Teams) et les informations de base de l'application.
Si vous avez besoin de prendre de nouveau screenshots, vous pouvez voir comment prendre des screenshots selon le modèle de l'iPhone sur cette page
L'application elle-même ne sera complète qu'une fois qu'elle sera déployée à travers Xcode qui, si tous les certificats sont valides, de déployer l'application pour les tests avant un déploiement sur l'App Store.
5. Déployer
Pour vous aider, n'hésitez pas à lire la page dédiée sur flutter.dev
WARNING
Cette étape est assez longue, environ 45 minutes si tout se passe bien, beaucoup de temps sera nécessaire pour que le Mac vérifie l'application mais vous aurez des questions auxquelles répondre de temps en temps.
N'hésitez pas à nettoyer l'application avec les commandes proposées précédement avant de déployer. Une fois le nettoyage effectué, lancez à nouveau le Runner depuis Xcode, si l'application se déploie correctement stopez-le et lancez la commande Flutter depuis le dépôt :
flutter build ios
TIP
Une fois que vous avez effecuté un build ios
, vous pouvez installer l'application sur un appareil branché sur le Mac avec :
flutter install
Puis sur Xcode, sélectionnez Product->Archive pour créer une archive. Vous devrez répondre à plusieurs demande de la part d'Xcode et cela va prendre un certain temps, lorsque l'archive est terminée, sélectionnez Validate App pour vous assurer que tous les certificats sont valides (un certain nombre de question vous seront posées, il faudra généralement valider la réponse par défaut).
Les archives
Apple utilise un système d'archive qui va compiler l'application générée par Flutter afin de pouvoir la valider et ensuite l'uploader. Si vous avez déjà créé une archive avec une version spécifique, Xcode va refuser de générer une autre archive portant la même version, vous allez devoir supprimer l'ancienne version OU incrémenter la version actuelle pour pouvoir refaire une autre archive.
Pour consulter la liste des archives, sélectionnez Window->Organizer.
Ensuite, si vous voyez 'App "Runner" successfully validated.', vous pouvez sélectionner Distribute App qui représente presque la même chose avec des étapes supplémentaire dont l'upload sur l'App Store via Apple connect. Lorsque le déploiement sera terminé pour Xcode, vous devrez attendre quelques minutes pour que le build soit disponible sur appstoreconnect.apple.com et vous pourrez valider la nouvelle version.
5. a. Mettre à jour
TODO
6. TestFlight
Disponible sur les versions récentes, vous pouvez utiliser l'application TestFlight pour récupérer la version en déploiement directement sur un iPhone sans installer l'app via un Mac avec Flutter. Très utile pour montrer une app à un client.