Xamarin iOS : Choisir l'implémentation de son HttpClient
Quand vous codez une application sur Xamarin iOS, vous avez la possibilité d'utiliser la classe NSURLSession native pour faire vos requêtes HTTP ou l'API .Net managé HttpClient.
Pour faciliter le partage de code avec les autres plateformes on va préferer utiliser l'API .Net, plus simple à utiliser pour un développeur .Net.
Or cette implémentation a quelques défauts :
- elle est moins intégrée à l'OS (par exemple elle est limitée à TLS 1.0)
- plus lente (notament dans le cas de requête en HTTPS)
- elle requiert plus de code managé : donc l'exécutable est plus gros puisque, de ce fait, il embarque tout le code de l'implémentation managée de l'API au lieu d'utiliser le code de l'OS
Les développeurs Xamarin ont pensé à nous et nous permettent de choisir quelle implémentation de HttpClient sera utilisée lors de la compilation.
Pour spécifier l'implémentation, c'est très simple. Il suffit de cliquer sur la solution et sélectionner option :
Puis de sélectionner la catégorie iOS Build :
Vous pouvez donc choisir l'implémentation de HttpClient parmis 3 possibilités :
- l'implémentation managée
- l'implémentation utilisant la classe native CFNetwork
- l'implémentation utilisant la classe native NSURLSession
CFNetwork :
+ meilleure performance
+ exécutable plus petit qu'avec une implémentation managée
+ supporte TLS 1.2
- non disponible sur WatchOS
- quelques fonctionalités de HttpClient ne sont pas supportées
- disponible à partir de iOS 6.0
NSURLSession :
+ meilleure performance
+ exécutable plus petit qu'avec une implémentation managée
- quelques fonctionalités de HttpClient ne sont pas supportées
- disponible à partir de iOS 7.0
Vous pouvez aussi choisir l'implémentation SSL/TLS entre deux choix :
- l'implémentation Apple qui supporte l'implementation TLS 1.0/1.1/1.2
- l'implémentation Mono qui supporte que l'implémentation TLS 1.0
A noter que la même chose est disponible sur Xamarin Android.
Happy coding :D
Pour aller plus loin :
Documentation officielle
Commentaires