{"id":5231,"date":"2017-08-04T14:17:54","date_gmt":"2017-08-04T12:17:54","guid":{"rendered":"https:\/\/www.hiberus.com\/crecemos-contigo\/?p=5231"},"modified":"2024-01-17T09:14:28","modified_gmt":"2024-01-17T08:14:28","slug":"xamarin-desarrollo-multiplataforma-nativo","status":"publish","type":"post","link":"https:\/\/www.hiberus.com\/crecemos-contigo\/xamarin-desarrollo-multiplataforma-nativo\/","title":{"rendered":"Xamarin, desarrollo multiplataforma nativo"},"content":{"rendered":"<p>El desarrollo m\u00f3vil cuenta con muchas tecnolog\u00edas divididas por plataformas, entornos de desarrollo y lenguajes de programaci\u00f3n que suponen un esfuerzo de aprendizaje y trabajo continuo para los desarrolladores. Hasta hace poco las apps se agrupaban en nativas (desarrollo propio para cada plataforma mediante lenguaje nativo) e h\u00edbridas (desarrollo \u00fanico de c\u00f3digo y vistas para todas las plataformas embebido como una web).<\/p>\n<p>Sin embargo, en los \u00faltimos a\u00f1os han ido surgiendo alternativas tecnol\u00f3gicas que permiten <strong>aplicaciones multiplataforma compartiendo un solo c\u00f3digo<\/strong>, o buena parte de ello, pero cuyo resultado es similar a una compilaci\u00f3n nativa. Esto conlleva aplicaciones m\u00e1s fluidas y de menor consumo en comparaci\u00f3n con las h\u00edbridas. De entre estas alternativas vamos a centrarnos en aquella que Hiberus est\u00e1 implementando en alguno de sus proyectos, <strong>Xamarin<\/strong>.<\/p>\n<h2>\u00bfQu\u00e9 es Xamarin?<\/h2>\n<p>Xamarin es un <strong>entorno de desarrollo de apps que utilizando c\u00f3digo C# para la l\u00f3gica y XAML<\/strong> para las vistas consigue compilar de manera nativa para m\u00faltiples plataformas (iOS, Android, WP8, UWP, Mac\u2026). Existen varios IDE disponibles tanto en Windows como Mac pero lo recomendable es utilizar aquel que est\u00e9 integrado con <strong>Visual Studio<\/strong> puesto que los dem\u00e1s est\u00e1n siendo descontinuados poco a poco. Estamos hablando de trabajar en un entorno totalmente integrado con <strong>Microsoft<\/strong>.<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-5232\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2017\/08\/xamarin-desarrollo.png\" alt=\"xamarin desarrollo\" width=\"530\" height=\"359\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2017\/08\/xamarin-desarrollo.png 530w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2017\/08\/xamarin-desarrollo-300x203.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2017\/08\/xamarin-desarrollo-360x244.png 360w\" sizes=\"auto, (max-width: 530px) 100vw, 530px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Hasta el a\u00f1o pasado su licencia de uso ten\u00eda un coste muy elevado pero fue adquirida por Microsoft y pas\u00f3 a ser gratuita suponiendo un punto de inflexi\u00f3n. Gracias a esto goza de una comunidad y apoyo superiores en comparaci\u00f3n con otras soluciones lo que la convierte en una opci\u00f3n muy a tener en cuenta. Inicialmente solo exist\u00eda Xamarin Native (tambi\u00e9n llamado Classic) pero en 2014 hizo su aparici\u00f3n Xamarin Forms. Ambas comparten la filosof\u00eda de reducir al m\u00ednimo el uso de c\u00f3digo pero difieren completamente en la manera de abordar su desarrollo as\u00ed como del producto resultante.<\/p>\n<p>El uso de uno u otro es m\u00e1s apropiado seg\u00fan las necesidades del proyecto y las caracter\u00edsticas del equipo. Primero veamos qu\u00e9 es cada una para finalmente analizar cu\u00e1l opci\u00f3n es m\u00e1s conveniente.<\/p>\n<h2>Xamarin Native<\/h2>\n<p>A trav\u00e9s de<strong> binding nativos<\/strong> se comunica con las APIs nativas del sistema y se implementan los componentes nativos tales como Activities, ViewControllers, Fragments o Views mediante clases y m\u00e9todos con nombres muy parecidos de la plataforma. <strong>Es lo m\u00e1s parecido a programar en nativo<\/strong> que puede haber pero utilizando para la l\u00f3gica el lenguaje C# en lugar de los equivalentes nativos de iOS (Objective-C, Swift), Android (Java, Kotlin) u otros. La creaci\u00f3n de vistas es similar a las nativas utilizando Storyboards y XML. Se aplica el patr\u00f3n MVVM siendo muy extendido para ello el uso de la librer\u00eda MvvmCross.<\/p>\n<p>Algo a tener en cuenta es que se necesita crear un proyecto para cada sistema operativo puesto que los objetos, llamadas y arquitectura en general son completamente diferentes los unos de los otros. Es decir, es posible compartir c\u00f3digo para funcionalidades comunes pero luego la generaci\u00f3n de las vistas y su interacci\u00f3n con los datos debe ser espec\u00edfica por plataforma. El proyecto compartido ir\u00e1 en el Core de la aplicaci\u00f3n (PCL) y luego habr\u00e1 tantos proyectos con c\u00f3digo propio como plataformas se requieran (<strong>Xamarin.iOS, Xamarin.Android,<\/strong>&#8230;).<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-5233\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2017\/08\/Screen-Shot-2016-01-22-at-15.23.41.png\" alt=\"Xamarin Native\" width=\"906\" height=\"378\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2017\/08\/Screen-Shot-2016-01-22-at-15.23.41.png 906w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2017\/08\/Screen-Shot-2016-01-22-at-15.23.41-300x125.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2017\/08\/Screen-Shot-2016-01-22-at-15.23.41-768x320.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2017\/08\/Screen-Shot-2016-01-22-at-15.23.41-360x150.png 360w\" sizes=\"auto, (max-width: 906px) 100vw, 906px\" \/><\/p>\n<p>&nbsp;<\/p>\n<h2>Xamarin Forms<\/h2>\n<p>En pos de <strong>minimizar el tiempo del desarrollo surge esta herramienta que maximiza la cantidad de c\u00f3digo compartido entre plataformas<\/strong>. Con ella el c\u00f3digo com\u00fan no es solo para tareas aisladas sino que es posible dise\u00f1ar todas la funcionalidades y vistas de la aplicaci\u00f3n. Ser\u00eda<strong> similar a desarrollar h\u00edbridas pero con resultados nativos<\/strong>. Con lenguaje C# para la l\u00f3gica y XAML para las vistas en lugar de JS+HTML5+CSS3 o Lua entre otros. En este caso el patr\u00f3n MVVM con two-way data binding est\u00e1 perfectamente integrado sin necesidad de usar librer\u00edas externas.<\/p>\n<p>La particularidad m\u00e1s importante es que genera los<strong> componentes visuales personalizados autom\u00e1ticamente para cada plataforma<\/strong>. Algo similar a lo que hace Ionic cuando se utiliza en aplicaciones h\u00edbridas solo que recordemos que esta vez se trata de componentes nativos propios. Las clases y m\u00e9todos se unifican aunque siguen siendo reconocibles para un desarrollador m\u00f3vil. Por ejemplo en lugar de un ViewController o Activity habr\u00e1 un Page. No obstante para ciertas funcionalidades sigue siendo necesario complementar con c\u00f3digo en el proyecto espec\u00edfico de cada plataforma.<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-5234\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2017\/08\/xamarin-desarrollo-2.png\" alt=\"Xamarin Forms\" width=\"565\" height=\"401\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2017\/08\/xamarin-desarrollo-2.png 565w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2017\/08\/xamarin-desarrollo-2-300x213.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2017\/08\/xamarin-desarrollo-2-360x256.png 360w\" sizes=\"auto, (max-width: 565px) 100vw, 565px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>En caso de querer personalizar la interfaz gr\u00e1fica o el comportamiento funcional de determinadas pantallas para cada una de las plataformas es posible hacerlo mediante Custom Renderers o Dependency Services respectivamente. Incluso es posible integrar controles nativos para acceder a todas sus propiedades, muy \u00fatil para los casos en los que Xamarin Forms no ha implementado completamente la funcionalidad. La agilidad que aporta Xamarin Forms se complementa perfectamente con la personalizaci\u00f3n espec\u00edfica de Xamarin Native.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Utilizar Xamarin Native como Xamarin forms es una buena elecci\u00f3n si la empresa trabaja con tecnolog\u00edas .NET de Microsoft.<\/strong> Ahora que ya tenemos un conocimiento de las principales caracter\u00edsticas y diferencias cada una de ellas podemos empezar a tomar una decisi\u00f3n de cu\u00e1l utilizar. Si todav\u00eda tienes dudas para t\u00fa\/nuestro proyecto, el <a href=\"https:\/\/www.hiberus.com\/mobile\">departamento de multicanalidad de Hiberus<\/a> puede ayudarte y aconsejarte la opci\u00f3n m\u00e1s adecuada.<\/p>\n        <div class=\"row\">\n            <div class=\"block-cta-form\" style=\"background-color: #003664;\">\n                <div class=\"content-cta-form\">\n                    <div class=\"text-cta-form\">\n                        <p class=\"title-cta-form\">\u00bfQuieres m\u00e1s informaci\u00f3n sobre nuestros servicios de desarrollo de aplicaciones m\u00f3viles?<\/p>\n                        <p>Contacta con nuestro equipo de Mobile<\/p>\n                    <\/div>\n                    <div class=\"form-fields\">\n                        \n<div class=\"wpcf7 no-js\" id=\"wpcf7-f33973-o1\" lang=\"es-ES\" dir=\"ltr\" data-wpcf7-id=\"33973\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/5231#wpcf7-f33973-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Formulario de contacto\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"33973\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1.5\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"es_ES\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f33973-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/><input type=\"hidden\" name=\"_wpcf7_recaptcha_response\" value=\"\" \/>\n<\/fieldset>\n<div id=\"responsive-form\" class=\"clearfix\">\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"nombre\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Nombre *\" value=\"\" type=\"text\" name=\"nombre\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"apellido\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Apellido *\" value=\"\" type=\"text\" name=\"apellido\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"correo\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Correo corporativo *\" value=\"\" type=\"email\" name=\"correo\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"telf-contacto\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-tel wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-tel\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Tel\u00e9fono *\" value=\"\" type=\"tel\" name=\"telf-contacto\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"compania\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Compa\u00f1ia *\" value=\"\" type=\"text\" name=\"compania\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"mensaje\"><textarea cols=\"40\" rows=\"10\" maxlength=\"2000\" class=\"wpcf7-form-control wpcf7-textarea wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Mensaje *\" name=\"mensaje\"><\/textarea><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full color-acceptance\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"politica\"><span class=\"wpcf7-form-control wpcf7-acceptance\"><span class=\"wpcf7-list-item\"><label><input type=\"checkbox\" name=\"politica\" value=\"1\" aria-invalid=\"false\" \/><span class=\"wpcf7-list-item-label\">He le\u00eddo y acepto la <a href=\"https:\/\/www.hiberus.com\/politica\" target=\"_blank\"><u>Pol\u00edtica de privacidad<\/u><\/a><\/span><\/label><\/span><\/span><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full color-acceptance\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"marketing\"><span class=\"wpcf7-form-control wpcf7-acceptance optional\"><span class=\"wpcf7-list-item\"><label><input type=\"checkbox\" name=\"marketing\" value=\"1\" aria-invalid=\"false\" \/><span class=\"wpcf7-list-item-label\">Me gustar\u00eda recibir comunicaciones de marketing de Hiberus y sobre sus productos, servicios y eventos.<\/span><\/label><\/span><\/span><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><input class=\"wpcf7-form-control wpcf7-submit has-spinner\" type=\"submit\" value=\"Contacta con nosotros\" \/>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div id=\"campos_ocultos\" class=\"hidden\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new1\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new1\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new1\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new2\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new2\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new2\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new3\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new3\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new3\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new4\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new4\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new4\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new_p\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new_p\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new_p\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n<!--end responsive-form--><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n        \n","protected":false},"excerpt":{"rendered":"<p>El desarrollo m\u00f3vil cuenta con muchas tecnolog\u00edas divididas por plataformas, entornos de desarrollo y lenguajes de programaci\u00f3n que suponen un esfuerzo de&#8230;<\/p>\n","protected":false},"author":58,"featured_media":5235,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_ayudawp_aiss_exclude":false,"footnotes":""},"categories":[234,3],"tags":[14,30],"class_list":{"0":"post-5231","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-aplicaciones-moviles","8":"category-negocio-electronico","9":"tag-aplicaciones-multiplataforma","10":"tag-desarrollo-de-aplicaciones-moviles"},"acf":[],"_links":{"self":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/5231","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/users\/58"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/comments?post=5231"}],"version-history":[{"count":4,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/5231\/revisions"}],"predecessor-version":[{"id":39609,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/5231\/revisions\/39609"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/media\/5235"}],"wp:attachment":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/media?parent=5231"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/categories?post=5231"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/tags?post=5231"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}