Installation du SDK Flutter tk_ota_push
Le package tk_ota_push fournit à la fois le runtime mobile embarqué dans votre application Flutter (package:tk_ota_push/tk_ota_push.dart) et l'outil en ligne de commande de déploiement (tk-ota-push / tkushpatch). Seule la bibliothèque runtime est compilée dans votre binaire mobile ; le code de la CLI (bin/tk_ota_push.dart) n'est jamais exporté ni embarqué dans l'application finale.
Prérequis techniques
| Composant | Exigence | Détails |
|---|---|---|
| SDK Dart | >=3.5.4 <4.0.0 | Défini dans pubspec.yaml du package tk_ota_push (v1.0.0). |
| Flutter | Toolchain Shorebird | Le moteur d'exécution C++/Rust (libflutter.so / Flutter.framework) doit provenir de la toolchain Flutter patchée (~/.shorebird/bin/cache/flutter). |
| Plateformes mobiles | Android & iOS | Android (aarch64 / arm64-v8a, arm / armeabi-v7a, x86_64) et iOS (aarch64 / arm64). |
| Dépendance interne | shorebird_code_push: ^2.0.7 | Embarquée transitivement par tk_ota_push et ré-exportée (UpdateStatus, UpdateTrack, Patch). |
1. Ajout de la dépendance dans pubspec.yaml
Vous pouvez intégrer tk_ota_push selon trois modes de distribution (registre privé/public, dépôt Git souverain ou chemin local monorepo).
Depuis pub.dev ou un registre Dart interne
dependencies:
flutter:
sdk: flutter
tk_ota_push: ^1.0.0
Depuis un dépôt Git interne (Recommandé en entreprise)
dependencies:
flutter:
sdk: flutter
tk_ota_push:
git:
url: https://git.entreprise.internal/mobile/tkushpatch_releases.git
path: tk_ota_push
ref: main
Depuis un chemin local (Développement / Monorepo)
dependencies:
flutter:
sdk: flutter
tk_ota_push:
path: ../tk_ota_push
Exécutez ensuite la résolution des dépendances :
flutter pub get
2. Déclaration de l'asset shorebird.yaml
Le moteur natif C++/Rust embarqué dans l'application lit sa configuration d'amorçage (app_id, base_url, channel, auto_update, patch_public_key, patch_verification) directement depuis les assets Flutter compilés (flutter_assets/shorebird.yaml).
Vous devez obligatoirement déclarer shorebird.yaml dans la section flutter.assets de votre pubspec.yaml :
flutter:
uses-material-design: true
assets:
- shorebird.yaml
Toute modification de la liste flutter.assets ou des fichiers référencés modifie l'empreinte SHA-256 calculée par FlutterProject.computeAssetsManifestHash(). Assurez-vous que shorebird.yaml est présent dès la compilation de la Release Store initiale.
3. Configuration Android (AndroidManifest.xml)
Sur Android, le moteur natif Rust et le SDK Dart ont besoin de la permission réseau INTERNET pour interroger /api/v1/patches/check, télécharger les différentiels /api/v1/patches/artifacts/... et transmettre la télémétrie /api/v1/patches/events.
Ouvrez android/app/src/main/AndroidManifest.xml et vérifiez la présence de la permission :
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Obligatoire pour la vérification et le téléchargement des patchs OTA -->
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:label="Mon Application"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
<!-- ... -->
</application>
</manifest>
Cas particulier : Serveur local en HTTP non chiffré (Développement / LAN)
À partir d'Android 9 (API 28), les requêtes HTTP en clair (http://...) sont bloquées par défaut. Si vous testez sur un serveur de développement local (ex: http://192.168.0.199:8080 ou http://10.0.2.2:8080), autorisez le trafic cleartext dans votre manifeste de développement ou via une configuration réseau dédiée :
<application
android:label="Mon Application"
android:name="${applicationName}"
android:usesCleartextTraffic="true"
android:icon="@mipmap/ic_launcher">
En production, utilisez toujours une URL https:// et désactivez usesCleartextTraffic.
4. Configuration iOS (Info.plist)
Sur iOS, l'accès réseau sortant en HTTPS est autorisé par défaut sans permission supplémentaire dans ios/Runner/Info.plist.
Stockage local du moteur OTA sur iOS
Le moteur Rust persiste son état local (state.json contenant le client_id UUID v4 et les métadonnées de patchs) dans le bac à sable applicatif privé :
- Chemin principal :
Library/Application Support/shorebird_updater/state.json - Repli inspecté par
TkOtaPush.readClientId():Documents/shorebird_updater/state.json
Aucune clé additionnelle n'est requise dans Info.plist, sauf si vous testez contre un serveur HTTP local non TLS sur un iPhone physique ; dans ce cas uniquement (en environnement de test), configurez NSAppTransportSecurity :
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsLocalNetworking</key>
<true/>
</dict>
5. Activation de la CLI de déploiement (Poste développeur / CI)
Pour compiler vos Releases et vos Patchs, activez globalement l'exécutable fourni par le package tk_ota_push :
# Activation depuis un clone local
dart pub global activate --source path ./tk_ota_push
# Ou activation depuis pub.dev
dart pub global activate tk_ota_push
Deux commandes équivalentes sont alors disponibles dans votre terminal : tk-ota-push et l'alias tkushpatch.