Optimisation des Outils de Développement Mobile avec Flutter et Xamarin

13 min de lecture

Maîtrise des DevTools dans l’écosystème Flutter

Lorsque l'on plonge dans le développement d'applications mobiles avec Flutter, l'importance d'une suite d'outils robustes pour le débogage et l'optimisation devient vite évidente. Flutter DevTools se présente alors comme un allié indispensable pour les développeurs cherchant à affiner leurs applications. Cet outil intégré offre une panoplie de fonctionnalités couvrant le profiling, le dépistage de problèmes de rendu d'interface, la gestion des états, et mêmes des inspections sur le réseau et la base de données locale. Examinons de plus près cet écosystème.

Profiling et Optimisation de Performance

Avec DevTools, il est possible d'accéder à un profiling en temps réel des applications Flutter. Les développeurs peuvent analyser le framerate et surveiller la charge du CPU, ce qui est crucial pour l'optimisation des performances. Le profiling de la mémoire est également central, permettant de détecter les fuites de mémoire et les surconsommations de ressources.

Débogage et Diagnostic

  • Timeline: Outil essentiel pour visualiser les événements de votre application, facilite l’identification de saccades ou retards.
  • Debugger: Permet de mettre des points d'arrêt et d'examiner l'état du stack pour une traque précise des bugs.
  • Widget Inspector: Outil graphique pour inspecter l'arbre des widgets et comprendre les problèmes d’interface.

Gestion des Réseaux et du Stockage

DevTools offre une vision transparente des requêtes réseau, ce qui est fondamental pour diagnostiquer les erreurs de communication avec les serveurs. Pour le stockage, les développeurs peuvent observer et manipuler les données stockées localement, comme avec SQLite.

Intégration et Extensions

Flutter DevTools s'intègre parfaitement à l'environnement de développement, avec des plugins pour les IDEs populaires comme VS Code ou IntelliJ. Cela simplifie l'accès aux outils sans interrompre le flux de travail.

Exemple de Code pour Profiling d’une App Flutter

1void main() {
2 runApp(MyApp());
3 // Activation du profiling pour le rendu
4 // Cette commande active un overlay de performances dans l'application
5 // Affichant le temps passé pour chaque frame.
6 WidgetsApp.showPerformanceOverlay.override = true;
7}
8
9class MyApp extends StatelessWidget {
10 @override
11 Widget build(BuildContext context) {
12 // Contenu de l'app
13 }
14}

Flutter DevTools brille par sa capacité à s'intégrer harmonieusement dans le processus de développement, en fournissant des retours en temps réel et un feedback visuel direct sur les performances et l'état des applications. Les développeurs qui souhaitent affiner leurs compétences dans l'utilisation de ces outils devraient approfondir leur exploration des outils de développement de Flutter pour perfectionner leurs applications, un article qui sert de guide complet pour naviguer à travers les capacités de Flutter DevTools.

Intégration Profonde de Firebase dans Flutter avec FlutterFire

L'univers du développement d'applications mobiles a été transformé avec l'arrivée de Flutter, un framework de l'UI riche et réactif. Mais ce qui propulse véritablement une application du statut de prototype à celui d'un produit robuste, c'est sa capacité à interagir de manière fluide avec les services de backend. C'est là que Firebase et son extension FlutterFire entrent en jeu, offrant une intégration hautement performante et conviviale dans vos projets Flutter. Explorons donc comment Firebase peut enrichir votre application Flutter.

Fondamentaux de Firebase dans Flutter

FlutterFire est l'ensemble des plugins officiels qui connecte l'écosystème Firebase avec votre projet Flutter. Cette intégration ouvre la porte à une multitude de services, rangés habillement dans votre arsenal de développement. Comment commence-t-on? Tout d'abord, par l'authentification. Avec FlutterFire, intégrer par exemple une connexion via Google ou Facebook devient presque un jeu d'enfant grâce à des plugins tels que firebase_auth. Ceux-ci fournissent des widgets et des API prêtes à l'emploi pour un système d'authentification rapide et sécurisé.

Gestion des Données avec Firestore et RealtimeDB

Les données dynamiques sont la pierre angulaire de toute application mobile moderne. En termes de stockage de données, Firestore offre une solution de base de données NoSQL flexible et évolutive, avec des données synchronisées en temps réel. L'utilisation de cloud_firestore dans Flutter vous permet d'implémenter des requêtes complexes, de tirer parti des index pour des performances optimales, et de gérer les données à travers une console Firebase intuitive. En parallèle, RealtimeDB est une option supplémentaire pour synchroniser les données en temps réel, bien que moins riche en fonctionnalités que Firestore.

Services Complémentaires

Enrichissez l'expérience utilisateur avec le stockage de fichiers (firebase_storage), les notifications push (firebase_messaging), et les fonctions cloud (firebase_functions). L'engagement des utilisateurs est boosté par firebase_analytics, qui vous permet de comprendre le comportement des utilisateurs et d'optimiser l'UX en conséquence. Et ne négligeons pas le rôle crucial du suivi des performances (firebase_performance), qui identifie les goulets d'étranglement de votre application afin de garantir une expérience fluide pour l'utilisateur final.

1// Exemple d'utilisation de Firestore avec Flutter
2Firestore firestore = Firestore.instance;
3StreamSubscription<DocumentSnapshot> subscription = firestore
4 .collection('chats')
5 .document(chatId)
6 .snapshots()
7 .listen((DocumentSnapshot snapshot) {
8 // mettez à jour l'interface utilisateur
9 });

Best Practices et Conseils d'Experts

L'architecture de votre application avec FlutterFire doit être élaborée avec soin. Pensez à adopter un modèle de conception adapté, comme BLoC ou Provider, pour une gestion d'état cohérente et performante. Prévoyez des mécanismes de cache et d'optimisation de la consommation des données pour minimiser les coûts et améliorer l'expérience utilisateur. Et surtout, ne faites jamais l'impasse sur la sécurité : Firebase offre une gamme de règles de sécurité ainsi que des pratiques recommandées que vous devez implémenter rigoureusement.

Flutter et Firebase forment une synergie puissante qui peut accélérer considérablement le développement d'applications mobiles sophistiquées. Approfondissez vos connaissances sur l'intégration de Firebase dans vos projets Flutter avec FlutterFire, et prenez une longueur d'avance dans la réalisation d'applications mobiles performantes et évolutives.

Intégration et déploiement continus avec CodeMagic pour Flutter

La maîtrise des processus d'intégration et de déploiement continus (CI/CD) est essentielle pour toute équipe de développement soucieuse d'optimiser ses cycles de production. Dans l'écosystème Flutter, Codemagic s'impose comme un acteur incontournable, dédié à l'automatisation de ces processus pour les applications mobiles.

Configuration des Workflows dans CodeMagic

La configuration de CodeMagic permet de définir des workflows personnalisés pour tester et déployer automatiquement des applications Flutter. Cela commence par la création d'un fichier de configuration codemagic.yaml, qui spécifie les étapes et les outils requis pour construire l'application. Voici un exemple simple:

1workflows:
2 flutter-workflow:
3 name: Flutter Workflow
4 environment:
5 flutter: stable
6 scripts:
7 - flutter pub get
8 - flutter test
9 - flutter build apk

Dans cet exemple, on observe un workflow nommé "Flutter Workflow" qui exécute des commandes pour récupérer les dépendances, exécuter les tests et construire l'application. Ce niveau de personnalisation puissant permet aux développeurs de s'adapter précisément à leurs besoins de production.

Automatisation des Tests

Les tests sont un volet non négligeable de tout pipeline CI/CD. CodeMagic offre la possibilité d'automatiser l'exécution de tests unitaires, tests d'intégration, et même des tests sur de vrais appareils grâce à des services partenaires. Cette étape cruciale assure une qualité constante du code et une détection rapide des problèmes.

1testWidgets('Counter increments smoke test', (WidgetTester tester) async {
2 // Build our app and trigger a frame.
3 await tester.pumpWidget(MyApp());
4
5 // Verify that our counter starts at 0.
6 expect(find.text('0'), findsOneWidget);
7 expect(find.text('1'), findsNothing);
8
9 // Tap the '+' icon and trigger a frame.
10 await tester.tap(find.byIcon(Icons.add));
11 await tester.pump();
12
13 // Verify that our counter has incremented.
14 expect(find.text('0'), findsNothing);
15 expect(find.text('1'), findsOneWidget);
16});

Ce bloc de code typique pour un test Flutter valide le fonctionnement d'un compteur simple en appuyant sur un bouton et en vérifiant que le nombre affiché s'incrémente correctement.

Optimisation de la Pipeline de Déploiement

Les développeurs peuvent également configurer des pipelines de déploiement spécifiques pour différentes branches ou pour la production. CodeMagic intègre des fonctionnalités telles que la signature automatique des APK pour Android, la gestion des artefacts de build, et peut même publier directement les builds sur les boutiques d'applications.

AspectIntégration avec CodeMagicAvantages
Gestion du codeIntégration GitCentralisation et synchronisation du code
AutomatisationWorkflows personnalisésRéduction du temps de déploiement
TestsAutomatisation des testsAssurance qualité et détection rapide des bugs
DéploiementPipelines de déploiementLivraison continue et efficiente

Pour les développeurs Flutter, la mise en place de processus CI/CD avec CodeMagic représente un levier de performance pour réduire le temps entre chaque itération de développement et garantir la stabilité des applications produites. Pour une immersion complète dans la configuration et les meilleures pratiques de CI/CD pour Flutter avec CodeMagic, consultez notre article détaillé, et faites de l'automatisation une part intégrante de votre flux de travail de développement mobile.

DartPad: Immersion dans l'Expérimentation Interactive de Dart et Flutter

Lorsqu'il s'agit de peaufiner vos compétences en Dart ou de mettre au point les derniers widgets Flutter, disposer d'un environnement simple et rapide pour coder est essentiel. C'est ici que DartPad intervient: une plateforme interactive et en ligne conçue pour simplifier le développement en Dart, offrant aux programmeurs et aux concepteurs de Flutter un espace pour tester et partager leurs idées.

Pourquoi DartPad?

  • Accessibilité: Aucun téléchargement ni installation n'est nécessaire, ce qui accélère le processus créatif et aide à se concentrer uniquement sur le code.
  • Interopérabilité: Conçu pour supporter à la fois les scripts Dart simples et les applications Flutter, DartPad est un outil polyvalent pour les développeurs mobiles et web.
  • Expérimentation en Temps Réel: Les modifications apportées au code sont immédiatement reflétées dans un aperçu visuel, facilitant ainsi l’apprentissage et le débogage.

DartPad pour le Développement

En développement, la révision et l'itération rapides du code sont vitales. Avec DartPad, vous pouvez écrire et exécuter des extraits de code ou même des applications complètes sans jamais quitter votre navigateur. Voici un exemple de bloc de code simple dans DartPad:

1void main() {
2 print('Hello, DartPad!');
3}

Ce script affiche le message dans la console DartPad. Aussi simple que cela puisse paraître, il illustre la simplicité et l'efficacité de tester des idées de manière spontanée.

DartPad et le Test

Les échéances serrées et la nécessité de résultats immédiats exigent des outils de test réactifs. DartPad offre cette réactivité, permettant de vérifier le comportement des applications Flutter ou des algorithmes Dart instantanément.

1import 'package:flutter/material.dart';
2
3void main() {
4 runApp(
5 MaterialApp(
6 home: Scaffold(
7 appBar: AppBar(title: Text('Test DartPad')),
8 body: Center(child: Text('Bonjour Flutter sur DartPad!')),
9 ),
10 ),
11 );
12}

Grâce à ce code, un simple écran Flutter avec un message est généré, illustrant l'efficacité de DartPad dans le prototypage rapide d'interfaces utilisateur.

Avantages en Termes d'Apprentissage et de Collaboration

  • Apprentissage: Idéal pour les débutants souhaitant se familiariser avec la syntaxe de Dart ou les widgets Flutter.
  • Collaboration: Partagez vos créations facilement avec d'autres grâce à des liens ou l'exportation de gists.

Référence Pratique pour les Développeurs Expérimentés

Les développeurs aguerris trouveront également DartPad pratique pour esquisser des idées ou pour la démonstration rapide de concepts complexes.

Voici un tableau récapitulatif des atouts de DartPad:

FonctionAvantage
Sans ConfigurationGain de temps, immédiateté
Support Dart et FlutterFlexibilité, adapté pour le mobile et le web
Aperçu en DirectVisualisation instantanée des changements
Facilité de PartageCollaboratif, propice à l'échange d'idées

Pour découvrir l'étendue des possibilités qu'offre DartPad pour dynamiser votre expérience de développement et de test en Dart et Flutter, explorer DartPad et ses fonctionnalités.

Optimisation de l'Environnement de Développement Xamarin avec Visual Studio

Lorsque vous travaillez avec Xamarin et Visual Studio, la configuration de l'environnement de développement est essentielle pour accroître la productivité et améliorer la qualité du code. Xamarin, en tant qu’outil puissant pour la création d’applications mobiles cross-plateformes, exige de ses développeurs une attention particulière quant à l’optimisation de leur environnement IDE.

Améliorer la Performance de Visual Studio pour Xamarin

Pour une utilisation optimale de Visual Studio avec Xamarin, il est nécessaire d'ajuster finement les paramètres de performance. Par exemple:

  • Réglages de l'IDE:
    • Désactivation des extensions non utilisées
    • Utilisation des configurations de build adaptées au développement (par exemple Debug) ou à la distribution (par exemple Release)
  • Gestion de la Mémoire:
    • Fermer régulièrement les onglets inutilisés pour économiser la mémoire
    • Limiter le nombre de projets chargés dans une solution

Utiliser des Extensions Utiles:

  • Xamarin Profiler pour analyser les performances de l'application
  • ReSharper ou CodeMaid pour améliorer la qualité et la lisibilité du code

Debugging et Tests

Les tests et le débogage sur Xamarin, tout en étant exhaustifs, doivent être rapides et efficaces pour ne pas impacter le cycle de développement. Des outils intégrés à Visual Studio, tels que:

  • Xamarin Live Player permettent de déployer rapidement et tester des changements sur des appareils réels sans nécessiter de compilation complète.
  • Unit Tests avec le framework NUnit pour garantir la robustesse du code.

Productivité et Qualité du Code

Le maintien d'un code de haute qualité est primordial et Visual Studio offre plusieurs outils pour y parvenir :

  • Analyseurs de Code Statique pour détecter et corriger les défauts rapidement.
  • Editeur de code avancé avec IntelliSense et refactoring pour accélérer la saisie et la structuration du code.

Tableau des Extensions pour Xamarin dans Visual Studio

ExtensionDescriptionImpact sur la Performance
Xamarin ProfilerAnalyse des performances pour les applications mobiles+ Analyse approfondie, - Utilisation de mémoire
ReSharperAmélioration de la qualité du code et productivité+ Productivité, - Temps de démarrage plus long
CodeMaidNettoyage et organisation du code+ Maintenance aisée du code

Intégrer correctement Xamarin au sein de Visual Studio n'est pas une mince affaire. Cependant, une fois que vous maîtrisez les réglages et que vous tirez parti des extensions et outils disponibles, vous serez en mesure de développer des applications mobiles performantes et de qualité. Découvrez comment maximiser l'efficacité dans votre environnement de développement Xamarin avec Visual Studio.

Outils de Test pour Xamarin: Choisir les Meilleurs Frameworks

Dans le monde de la programmation mobile avec Xamarin, le choix des outils de test est déterminant pour assurer la qualité et la stabilité d'une application. Abordons les frameworks de test en distinguant ceux qui se concentrent sur les tests unitaires, les tests d'interface utilisateur (UI), le mocking et l'optimisation des performances, sans oublier leur intégration au sein des processus d'Intégration Continue (CI).

Tests Unitaires et Xamarin

Les tests unitaires vérifient la moindre composante logicielle isolément. Dans l'écosystème Xamarin, des frameworks comme NUnit et xUnit sont souvent privilégiés pour leur flexibilité et leur intégration aisée.

1[TestFixture]
2public class MaClasseDeTest
3{
4 [Test]
5 public void TestMaFonction_Addition_RetourneValeurCorrecte()
6 {
7 // Arrange
8 var monObjet = new MonObjet();
9 int a = 1, b = 2;
10
11 // Act
12 int resultat = monObjet.Addition(a, b);
13
14 // Assert
15 Assert.AreEqual(3, resultat);
16 }
17}

Cet exemple illustre la syntaxe d'un test unitaire avec NUnit. L'objectif est de vérifier que la fonction Addition retourne bien la somme des deux nombres.

Tests d'UI et Xamarin

Pour les tests d'interface, Xamarin.UITest est un choix prépondérant. Basé sur Calabash et intégrant des fonctionnalités de test de gestes complexes, ce framework permet d'automatiser et de simuler les actions de l'utilisateur.

1public class TestInterfaceUtilisateur
2{
3 IApp app;
4
5 [SetUp]
6 public void AvantChaqueTest()
7 {
8 app = ConfigureApp.Android.StartApp();
9 }
10
11 [Test]
12 public void AppFaitDefilerEtAfficheNouvelEcran()
13 {
14 app.SwipeRightToLeft();
15 app.Tap(c => c.Marked("NouvelEcran"));
16 Assert.IsTrue(app.Query("NouvelEcran").Any());
17 }
18}

Mocking avec Xamarin

Pour isoler les tests et simuler des composants externes, Moq est un framework largement utilisé dans les applications Xamarin. Il permet de créer des fausses instances (mocks) avec des comportements spécifiques pour réaliser des tests plus précis sans dépendances extérieures.

Amélioration des Performances

Les outils comme Xamarin Profiler ou DotTrace offrent des mesures précises pour analyser et améliorer les performances des applications Xamarin. Ils permettent de traquer la consommation de mémoire, le temps CPU, et d'autres indicateurs critiques.

Intégration Continue (CI)

Enfin, l'efficacité des tests est renforcée par une bonne stratégie d'Intégration Continue. Des plateformes comme Azure DevOps, Jenkins ou GitLab CI facilitent l'automatisation des tests à chaque phase du développement, garantissant une approche proactive face aux bugs et regressions.

FrameworkFonctionnalité principaleIntégration au CI
NUnit/xUnitTests unitairesFacile
Xamarin.UITestTests d'UIMoyennement facile
MoqMocking des composantsSimple
Xamarin ProfilerProfilage des performancesN/A
Azure DevOpsCI et deployment de testsIntégré

Les outils de test pour Xamarin offrent un large panel d'options afin d'optimiser le cycle de développement et de garantir la qualité des applications. Se renseigner sur le choix des meilleurs frameworks de test pour Xamarin et leur intégration efficace dans vos flux de travail est essentiel pour les développeurs soucieux de performances et de fiabilité.

Xamarin Profiler: Optimisez les Performances de vos Applications Mobiles

Dans l'univers du développement mobile, la performance et l'optimisation sont des critères déterminants pour l'expérience utilisateur. Pour les applications conçues avec Xamarin, un outil phare permet d'atteindre ces objectifs : le Xamarin Profiler. Cet outil de profilisation est indispensable pour les développeurs qui cherchent à debugger et optimiser leurs applications Xamarin en surveillant différentes métriques telles que l'utilisation de la mémoire, le CPU et les allocations.

Profilage de Mémoire

La gestion de la mémoire est un aspect central du profiling, et le Xamarin Profiler l’aborde avec minutie. Identifier les fuites de mémoire, les allocations inutiles et les références non collectées est crucial pour optimiser l’usage des ressources. Vous pouvez ainsi observer en temps réel la montée en mémoire et le garbage collector à l’œuvre et ajuster votre code en conséquence.

Suivi des Performances CPU

Le tracking de l’utilisation du CPU aide à cerner les goulots d’étranglement de performance. Grâce à des mesures précises et la visualisation du temps d'exécution des threads et des méthodes, les développeurs peuvent aisément identifier et corriger les portions de code qui consomment le plus de ressources processeur.

Allocations et Monitoring des Performances

Chaque allocation enregistre un coût en termes de performance. Le Xamarin Profiler propose une analyse des allocations en temps réel, permettant de détecter les créations d'objets superflues. Cette surveillance active est indispensable pour fluidifier l'application et préserver la réactivité, aspect clé de toute application mobile.

Analyse de l'Exécution avec la TimeLine

Un des atouts du Xamarin Profiler réside dans sa TimeLine, qui visualise l'exécution de votre application au fil du temps. En offrant une vue d’ensemble de l’utilisation des threads et des évènements de performance, cet outil vous confère une compréhension fine de l’impact de votre code sur la performance de l’application, vous permettant ainsi de réaliser des ajustements ciblés.

Tableau de bord Analytique

MétriqueUtilitéAnalyse
MémoireDétecter fuites et allocations excessivesVisualisation en temps réel, détection des anomalies
CPUIdentifier les goulots d’étranglementSuivi précis de l’exécution, optimisation du code
AllocationsRéduire l'empreinte mémoireÉlimination des allocations non nécessaires
TimeLineComprendre le comportement global de l'appAjustements basés sur l’activité temporelle

En conclusion, le Xamarin Profiler s'avère être un allié de poids pour tout développeur Xamarin. Il offre non seulement une vue en profondeur du fonctionnement de l'application mais aussi fournit des données impartiales pour une optimisation efficace. Aussi technique qu'il soit, il est essentiel de maîtriser cet outil pour garantir la qualité et la compétitivité de vos applications mobiles.

Pour se plonger dans les subtilités de cet outil et explorer toutes ses fonctionnalités, dirigiez-vous vers notre article détaillé : Comprendre le fonctionnement et la puissance du Xamarin Profiler.

Gestion de Versions avec Git en Xamarin : Pratiques Incontournables et Résolution de Conflits

La maîtrise de Git est impérative dans le cycle de développement de logiciels modernes, et cela est tout aussi valable pour le développement mobile utilisant Xamarin. Git offre un système de contrôle de versions distribué qui facilite grandement la gestion des modifications et la collaboration dans les projets Xamarin. Les pratiques exemplaires et les workflows recommandés pour Git peuvent faire la différence entre un processus de développement fluide et une situation chaotique de conflits constants.

Approfondissons les stratégies essentielles pour intégrer Git de manière efficace dans vos projets Xamarin et découvrons comment aborder et résoudre les situations courantes de conflits de version.

Stratégies pour un Workflow Git Optimisé

Organisation des Branches: Adoptez une stratégie d'organisation des branches claire. Par exemple, utilisez une branche main pour la production, une branche develop pour le développement en cours et des branches feature pour les nouvelles fonctionnalités. Ceci garantit une séparation nette des différentes étapes de développement et réduit les risques de conflits lors des merges.

Bonnes Pratiques des Commits: Rendez vos commits atomiques, c'est-à-dire que chaque commit représente une seule modification fonctionnelle et cohérente. De plus, rédigez des messages de commit clairs et détaillés pour faciliter la compréhension des modifications apportées.

Gestion des Merges: Lorsque plusieurs personnes travaillent sur un projet, la gestion des merges devient cruciale. Utilisez des outils comme les pull requests pour réviser le code avant la fusion, et préférez la stratégie rebase pour maintenir un historique propre.

Stratégies de Branching: Envisagez d'utiliser Git Flow ou d'autres stratégies similaires pour structurer le processus de branching et de merging. Ces stratégies fournissent un cadre standardisé qui facilite la cohérence entre les environnements de développement, de staging et de production.

Résolution des Conflits dans Xamarin

  • Utilisez des Outils Diff et Merge: Des outils spécialisés peuvent vous aider à visualiser et résoudre les conflits. Sur Xamarin, il est possible d'utiliser Visual Studio qui offre une interface graphique intuitive pour la gestion des conflits.
  • Communiquez avec l'Équipe: Avant de procéder à des merges complexes, la communication avec l'équipe est essentielle. Cela permet d'éviter les conflits non nécessaires et de mieux comprendre le contexte des modifications effectuées par les autres développeurs.
  • Respect des Conventions: Convenez d'une norme de codage et d'une structure de projet cohérente dans votre équipe pour éviter des conflits dus à des différences stylistiques ou des modifications qui s'entrecroisent.

Exemples et Commandes Git Fondamentales pour Xamarin

Voici quelques commandes Git utiles dans le contexte de Xamarin:

1# Cloner un repository Git pour votre projet Xamarin
2git clone https://exemple.com/projet.git
3
4# Créer une nouvelle branche pour une fonctionnalité
5git checkout -b feature/nouvelle-fonctionnalite
6
7# Fusionner votre branche de fonctionnalité en développement
8git checkout develop
9git merge --no-ff feature/nouvelle-fonctionnalite
10
11# Résoudre des conflits après un merge
12git mergetool

Les meilleures pratiques de gestion de versions avec Git en Xamarin sont complexes et requièrent une compréhension approfondie des commandes Git, des workflows, et des solutions aux conflits qui peuvent émerger. Pour une immersion plus détaillée et des conseils pratiques, je vous recommande de consulter l'article détaillé sur la gestion des versions avec Git en Xamarin, qui vous guidera à travers les intrications de Git appliquées spécifiquement à l'environnement de développement Xamarin.

4.5 (18 notes)

Cet article vous a été utile ? Notez le