1
votes

Les applications xamarin peuvent-elles être créées pour Windows, MacOS avec le même code source?

Étant donné une application écrite en C # pour Xamarin, peut-elle être conçue pour fonctionner sur toutes les plates-formes prises en charge avec des modifications minimes, y compris Android, iOS, MacOS, Windows?

Je me rends compte que Xamarin affirme que 90% du code peut être partagé entre les plates-formes (et 10% doit être personnalisé), et je fais référence à cela "90%".

Ce que je ne comprends pas, c'est si ces 90% peuvent être partagés entre les différents outils Xamarin, par exemple. Xamarin.Forms et Xamarin.Mac ou s'il s'agit d'outils sensiblement différents avec des API différentes, etc.

Par exemple, je vois qu'avec Xamarin.Forms, je peux créer pour iOS, Android et Windows. Mais pas MacOS. Alors, sur un Mac, puis-je installer Xamarin.Mac, puis créer la même application pour MacOS?


2 commentaires

Cette question est plus ou moins basée sur l'opinion. Donc, d'une certaine manière, vous pouvez construire pour macOS, mais il est en version bêta, contient une bonne quantité de bogues (cela peut être corrigé à l'avenir) et semble horrible (il est peu probable qu'il soit corrigé de si tôt). Donc pour certaines choses ça peut être OK, pour d'autres pas, il n'y a pas de réponse universelle, c'est basé sur l'opinion ...


Pas censé être subjectif. Voir ma question au 3ème paragraphe, maintenant en italique.


3 Réponses :


1
votes

Xamarin.Forms est le framework qui vous permet de créer des applications multiplateformes entre Android, iOS et UWP. D'après mon expérience, de nombreuses fonctionnalités de Xamarin.Forms ne sont pas transférées vers Xamarin.Android. En fait, une grande partie de la façon dont les choses sont effectuées pour l'interface utilisateur Xamarin.Forms ne sera pas transférée vers Xamarin.iOS et Xamarin.Android. La plupart du temps, lorsque je trouve une solution qui fonctionne dans Xamarin.Forms et que j'essaie de faire la même chose dans Xamarin.Android, je finis par résoudre moi-même le problème dans Xamarin.Android à partir de zéro.

Quand ils disent que 90% est partagé, cela signifie que dans Xamarin.Forms ... 90% du travail sur vos modèles et le code derrière peuvent être partagés entre les projets (au sein de cette solution Xamarin.Forms) et 10% devront être personnalisés pour chaque plate-forme (UWP, Android, iOS)

EDIT: Juste pour clarifier à l'avenir, vous avez besoin d'un appareil iOS ou d'une machine virtuelle iOS pour compiler le code sur iOS

Pour créer des applications Xamarin.iOS avec Visual Studio 2019 sous Windows, vous besoin:

A network-accessible Mac set up with Apple's build tools and Xamarin.iOS.

Cela peut être une machine physique ou virtuelle. Configuration système requise pour Windows

A Windows machine with Visual Studio 2019 installed. 

Visual Studio 2019 accède à cette machine via un réseau connexion pour utiliser les outils de construction d'Apple, qui sont nécessaires pour compilation d'applications iOS natives. Configuration système requise pour Mac

source: https://docs.microsoft.com/en-us/xamarin/ios/get-started/installation/windows/?pivots=windows


6 commentaires

Alors, faites les différents outils Xamarin, par exemple .Forms, .Mac, vous permettent de créer le même code source pour produire une application sur différentes plates-formes. Ou s'agit-il d'environnements totalement séparés avec des API différentes?


@PeriHartman une partie du code peut être réutilisée sur toutes les plates-formes. La plupart de votre modèle et tout ce qui est purement .NET sera entièrement transférable sur toutes les plates-formes Xamarin. Les plus grandes différences surviennent lorsque vous commencez à créer l'interface utilisateur. Xamarin.Forms avec un projet Android n'est pas la même chose qu'un projet purement Xamarin.Android et même avec Xamarin.iOS, par exemple, Xamarin.Forms prend en charge la liaison de données à l'interface utilisateur sans aucune bibliothèque tierce alors que je ne vous crois pas peut le faire avec Xamarin.Android, c'est donc un exemple majeur de différence qui ne se traduirait pas.


Merci, cela aide. Je suppose que pour bien comprendre, j'ai besoin de construire quelque chose. Mais cela m'encourage à essayer cette étape.


Hé, juste pour une clarification rapide, je pense que vous pouvez réellement faire la liaison de données dans Xamarin.Android sans bibliothèques tierces. Il y a cependant une énorme différence. La liaison de données Xamarin.Forms est beaucoup plus facile à faire et plus native pour ce type de projet; c'est presque identique à la liaison de données dans WPF et beaucoup plus fluide.


Oui aux gens qui lisent ceci après coup. Je sens ici quelques idées préconçues. Clarifier. Oui, à partir de cette date, vous pouvez créer une application qui fonctionnera sur Windows, Web, OSX, Linux, WPF, Android et OSX dès la sortie de la boîte. Vous n'avez qu'un seul projet "Main" avec toute votre logique qui est compilé pour vous dans toutes les plateformes. Vous pouvez utiliser XAML pour concevoir vos mises en page comme WPF, et cette mise en page fonctionnera sur tous les appareils. Quelques ajustements seront nécessaires, mais vous les résolvez avec des balises XAML spécifiques à la plate-forme. Autres fonctionnalités avancées du téléphone que vous devrez peut-être déconner dans les bibliothèques respectives


@PeriHartman comme une mise à jour, j'ai découvert que tout .NET n'est pas entièrement transférable sur toutes les plates-formes. Certaines bibliothèques ne traduisent pas. Ils vous permettront de compiler l'application mais obtiendront des erreurs d'exécution. Je crois qu'un exemple de ceci est la classe Image dans .NET à compiler Xamarin.Android. Je n'avais pas encore rencontré cela lorsque cela a été publié, mais depuis que je l'ai vu plus d'une fois. Cependant, j'aime toujours xamarin, dans l'ensemble ... principalement juste pour le C #



3
votes

Vous pouvez ajouter une cible MacOS pour votre interface utilisateur basée sur Xamarin.Forms , bien sûr, cela se fait via Visual Studio pour Mac:


0 commentaires

1
votes

Tant que vous utilisez du code .Net et Xamarin.Forms, il est 100% portable / partageable dans chaque projet. Xamarin.Forms est actuellement en version bêta pour macOS et Windows WPF (mais pour UWP, ce n'est pas une version bêta), et pour macOS en particulier, ils n'ont pas le véritable aspect natif.

Xamarin prend en charge l'utilisation des interfaces natives et des API natives et chaque fois que vous faites cela, il n'est pas portable.

Il n'y a donc rien de comparable à 90% partageable, cela peut être une estimation dans certains cas. Il peut être 100% partageable ou seulement 10% partageable en fonction de votre projet et de votre respect des API partageables.


1 commentaires

Ok, donc si j'écris une application pour Xamarin.Forms, puis-je la générer avec l'un des autres outils Xamarin, par exemple Xamarin.Android? (Je comprends le «90%» - bien sûr, si j'utilise des API natives, ce code ne sera pas portable.)