Recarga en vivo de Xamarin (versión preliminar)Xamarin Live Reload (Preview)

Nota

La vista previa de la recarga en vivo de Xamarin ha finalizado y queremos agradecer a todos sus comentarios y comentarios.The preview of Xamarin Live Reload has ended, and we want to thank everyone for your feedback and comments. Lea nuestra Guía básica de Visual Studio 2019 para obtener más información sobre las nuevas características de productividad en las que estamos trabajando para Xamarin. Forms.Please read through our roadmap for Visual Studio 2019 to learn more about new productivity features that we are working on for Xamarin.Forms. Esta extensión seguirá estando disponible para Visual Studio 2017, pero no recibirá actualizaciones futuras.This extension will remain available for Visual Studio 2017, but will not be receiving future updates.

La recarga en vivo de Xamarin permite realizar cambios en el código XAML y verlos reflejados en directo, sin necesidad de volver a compilar e implementar.Xamarin Live Reload enables you to make changes to your XAML and see them reflected live, without requiring another compile and deploy. Cualquier cambio realizado en el código XAML se volverá a implementar al guardarlo y se reflejará en el destino de implementación.Any changes made to your XAML will be redeployed on save and reflected on your deploy target.

RequisitosRequirements

IntroducciónGetting Started

1. Instale la recarga en vivo de Xamarin desde el Visual Studio Marketplace1. Install Xamarin Live Reload from the Visual Studio Marketplace

La recarga en vivo de Xamarin se distribuye a través de la Visual Studio Marketplace.Xamarin Live Reload is distributed via the Visual Studio Marketplace. Para instalar la extensión, visite la Página de recarga de Xamarin Live en el sitio web de Visual Studio Marketplace y haga clic en Descargar.To install the extension, visit the Xamarin Live Reload page on the Visual Studio Marketplace website and click Download.

Abra el. vsix que se descarga y haga clic en instalar.Open the .vsix that is downloaded, and click Install.

Confirmación de la recarga en directo de Xamarin de Visual Studio Installer

Como alternativa, puede buscarlo en la pestaña en línea del cuadro de diálogo extensiones y actualizaciones dentro de Visual Studio.Alternatively, you can search for it in the Online tab in the Extensions and Updates dialog inside Visual Studio.

2. configurar la aplicación para que use la recarga en vivo2. Configure your app to use Live Reload

La adición de recarga en vivo a las aplicaciones móviles existentes se puede realizar en tres pasos:Adding Live Reload to existing mobile apps can be done in three steps:

  1. Asegúrese de que todos los proyectos se actualizan para usar Xamarin. Forms 3.0.0 o superior o superior.Ensure all projects are updated to use Xamarin.Forms 3.0.0 or above or above.

  2. Agregue el paquete NuGet Xamarin. LiveReload :Add the Xamarin.LiveReload NuGet package:

    a.a. .Net Standard : Instale el NuGet Xamarin. LiveReload en la biblioteca .net Standard 2,0..NET Standard – Install the Xamarin.LiveReload NuGet into your .NET Standard 2.0 library. No es necesario instalarlo en los proyectos de la plataforma.This does not need to be installed in your platform projects. Asegúrese de que el origen del paquete está establecido en todos.Ensure that the Package source is set to All.

    b.b. Proyectos compartidos : Instale el NuGet Xamarin. LiveReload en todos los proyectos de la plataforma (como Android, iOS, UWP, etc.).Shared Projects – Install the Xamarin.LiveReload NuGet into all platform projects (such as Android, iOS, UWP, etc.). Asegúrese de que el origen del paquete está establecido en todos.Ensure that the Package source is set to All.

    agregar la recarga en vivo de Xamarin con el administrador de paquetes NuGetAdd Xamarin Live Reload NuGet with NuGet Package Manager

  3. Agregue LiveReload.Init(); al constructor en la clase Application, como se muestra en el siguiente fragmento de código:Add LiveReload.Init(); to the constructor in the Application class, as shown in the following code snippet:

public partial class App : Application
{
    public App ()
    {
        // Initialize Live Reload.
        #if DEBUG
        LiveReload.Init();
        #endif
        
        InitializeComponent();
        MainPage = new MainPage();
    }
}

3. iniciar la recarga en vivo3. Start live reloading

Compile e implemente la aplicación.Compile and deploy your application. Una vez implementada la aplicación, abra un archivo XAML, realice algunos cambios y guarde el archivo.Once the app is the deployed, open a XAML file, make some changes, and save the file. Los cambios se reimplementan en el destino de implementación.Your changes are redeployed to the deployment target.

La recarga en vivo funciona con cambios en cualquier archivo XAML.Live Reload works with changes to any XAML file. Los cambios C# o la adición o eliminación de paquetes NuGet requieren una nueva compilación e implementación para que surtan efecto.Changes to C# or adding/removing NuGet packages requires a new build and deploy to take effect.

Preguntas más frecuentesFrequently Asked Questions

¿Está disponible la recarga en vivo de Xamarin en Visual Studio para Mac?Is Xamarin Live Reload available on Visual Studio for Mac?

No, la versión preliminar de la recarga en vivo de Xamarin solo está disponible para Visual Studio 2017.No, preview release of Xamarin Live Reload is only available for Visual Studio 2017.

¿Funciona con todas las bibliotecas, como Prism?Does this work with all libraries, such as Prism?

Dado que la aplicación está compilada, la recarga en vivo funciona con todas las bibliotecas, como Prism, y con bibliotecas de control de terceros, como Telerik, Infragistics, Syncfusion, ArcGIS, GrapeCity y otros proveedores de control.Because your app is compiled, Live Reload works with all libraries, such as Prism, and third-party control libraries, such as Telerik, Infragistics, Syncfusion, ArcGIS, GrapeCity, and other control vendors.

¿Qué cambios vuelve a implementar la recarga en directo?What changes does Live Reload redeploy?

La recarga en vivo solo aplica los cambios realizados en XAML o CSS.Live Reload only applies changes made to XAML or CSS. Si realiza cambios en un C# archivo, será necesario volver a compilar.If you make changes to a C# file, a recompile will be required.

¿Qué plataformas se admiten?What platforms are supported?

La recarga en vivo funciona en cualquier plataforma compatible con Xamarin. Forms, como Android, iOS y UWP.Live Reload works on any platform supported by Xamarin.Forms, including Android, iOS, and UWP.

¿Funciona en emuladores, simuladores y dispositivos físicos?Does this work on emulators, simulators, and physical devices?

Sí, la recarga en vivo funciona con todos los destinos de implementación válidos, incluidos los emuladores de Android, los simuladores de iOS y los dispositivos físicos.Yes, Live Reload works with all valid deployment targets, including Android emulators, iOS simulators, and physical devices. La implementación en un dispositivo requiere que el dispositivo y el equipo estén en la misma red Wi-Fi.Deployment to a device requires that the device and computer be on the same Wi-Fi network.

¿Funciona con redes corporativas?Does this work with corporate networks?

Si está depurando en un emulador de Android o en un simulador de iOS, la recarga en vivo usa localhost para comunicarse.If you are debugging to an Android emulator or iOS simulator, Live Reload uses localhost to communicate. Si desea realizar la implementación en un dispositivo, el dispositivo y el equipo deben estar en la misma red Wi-Fi.If you wish to deploy to a device, the device and computer need to be on the same Wi-Fi network. En escenarios en los que esto no sea posible, puede configurar su propio servidor de recarga en vivo, lo que le permitirá realizar una recarga en vivo, independientemente de la configuración de conectividad de la red.In scenarios where this is not possible, you can configure your own Live Reload server, which will enable you to Live Reload, regardless of network connectivity settings.

¿Necesita depurar la aplicación?Does it require debugging the app?

No.No. De hecho, puede incluso iniciar todos los destinos de aplicación admitidos (Android, iOS y UWP) en cualquier número de dispositivos o simuladores/emuladores y verlos todas las actualizaciones a la vez.In fact, you can even start all your supported application targets (Android, iOS, and UWP) on any number of devices or simulators/emulators and see them all update at once.

LimitacionesLimitations

  • Solo se admite la recarga de XAML.Only reloading of XAML is supported.
  • No se puede mantener el estado de la interfaz de usuario entre reimplementaciones, a menos que se use MVVM.UI state may not be maintained between redeploys, unless using MVVM.

Problemas conocidosKnown Issues

  • Solo se admite en Visual Studio.Only supported in Visual Studio.
  • La vinculación se debe establecer para no vincular o vincular SDK de Framework únicamenteLinking must be set to Don't Link or Link Framework SDKs Only
  • Volver a cargar los recursos de toda la aplicación (es decir, app. Xaml o diccionarios de recursos compartidos), se restablece la navegación de la aplicación.Reloading app-wide resources (i.e. App.xaml or shared resource dictionaries), app navigation is reset.
  • La recarga de ContentView requiere actualmente la recarga de la página contenedora.Reloading of ContentView currently requires reloading the containing page.
  • Los elementos que contienen AutomationId pueden producir un error de recarga.Elements containing AutomationId may cause a reload failure.
  • La edición de XAML durante la depuración de UWP puede producir un bloqueo en tiempo de ejecución.Editing XAML while debugging UWP may cause a runtime crash. Solución alternativa: use iniciar sin depurar (Ctrl + F5) en lugar de iniciar depuración (F5) .Workaround: Use Start without Debugging (Ctrl + F5) instead of Start Debugging (F5).

Solución de problemasTroubleshooting

Códigos de errorError codes

  • XLR001: el proyecto actual hace referencia a la versión del paquete NuGet ' Xamarin. LiveReload ', pero la extensión de la recarga activa de Xamarin requiere la versión ' [Version] '.XLR001: The current project references 'Xamarin.LiveReload' NuGet package version '[VERSION]' but the Xamarin Live Reload extension requires version '[VERSION]'.

    Con el fin de permitir la iteración rápida y la evolución de la característica de recarga en directo, el paquete Nuget y la extensión de Visual Studio deben coincidir exactamente.In order to allow rapid iteration and evolution of the Live Reload feature, the nuget package and the Visual Studio extension must match exactly. Actualice el paquete Nuget a la misma versión de la extensión que ha instalado.Update your nuget package to the same version of the extension you have installed.

  • XLR002: la recarga en vivo requiere al menos la propiedad ' MqttHostname ' al compilar desde la línea de comandos. También puede establecer ' EnableLiveReload ' en ' false ' para deshabilitar la característica.XLR002: Live Reload requires at least the 'MqttHostname' property when building from the command line. Alternatively, set 'EnableLiveReload' to 'false' to disable the feature.

    Las propiedades requeridas por la recarga en directo no están disponibles al compilar desde la línea de comandos (o en la integración continua) y, por tanto, se deben proporcionar explícitamente.The properties required by Live Reload are not available when building from the command line (or in continuous integration), and must therefore be provided explicitly.

  • XLR003: el paquete Nuget de recarga en vivo requiere la instalación de la extensión de Visual Studio de Xamarin Live reload.XLR003: Live Reload nuget package requires installing the Xamarin Live Reload Visual Studio extension.

    Se intentó compilar un proyecto que hace referencia al paquete Nuget de recarga en directo, pero la extensión visual no está instalada.Attempted to build a project that references the Live Reload nuget package but the Visual Extension is not installed.

  • Excepción al cargar ensamblados: System. IO. FileNotFoundException: no se pudo cargar el ensamblado ' Xamarin. Live. Reload, version = 0.3.27.0, Culture = neutral, PublicKeyToken = '.Exception while loading assemblies: System.IO.FileNotFoundException: Could not load assembly 'Xamarin.Live.Reload, Version=0.3.27.0, Culture=neutral, PublicKeyToken='.

    El proyecto host debe usar PackageReference en lugar de packages.configThe host project should be using PackageReference instead of packages.config

La aplicación no se conectaApp doesn't connect

Cuando se compila la aplicación, la información de herramientas > opciones > Xamarin > la recarga en vivo (nombre de host, puerto y claves de cifrado) se insertan en la aplicación, de modo que, cuando se ejecuta LiveReload.Init(), no es necesario ningún emparejamiento ni configuración para la conexión a Ejecute.When the application is built, the information from Tools > Options > Xamarin > Live Reload (host name, port and encryption keys) are embedded in the app, so that when LiveReload.Init() runs, no pairing or configuration is necessary for the connection to succeed.

Aparte de los problemas de red normales (firewall, dispositivo en una red diferente), el motivo principal por el que la aplicación puede no conectarse correctamente al IDE es porque su configuración difiere de la de Visual Studio.Other than normal networking problems (firewall, device on a different network), the main reason the app may not successfully connect IDE is because its configuration differs from the one in Visual Studio. Esto puede ocurrir si:This may happen if:

  • La aplicación se compiló en otro equipo.App was compiled on a different machine.
  • La aplicación se compiló e implementó en una sesión de Visual Studio diferente y se comprueba la generación automática de claves de cifrado (valor predeterminado) en herramientas > opciones > Xamarin > la recarga en vivo.App was compiled and deployed in a different Visual Studio session, and Auto-generate encryption keys is checked (the default) in Tools > Options > Xamarin > Live Reload.
  • Se cambió la configuración de Visual Studio (es decir, el nombre de host, el puerto o las claves de cifrado), pero la aplicación no se compiló y se implementó de nuevo.Visual Studio settings were changed (i.e. hostname, port or encryption keys) but the app was not built and deployed again.

Estos casos se solucionan al compilar e implementar la aplicación de nuevo.These cases are all solved by building and deploying the app again.

Desinstalación de Preview 1Uninstalling Preview 1

Si tiene una versión preliminar anterior y tiene problemas para desinstalarla, siga estos pasos:If you have an older preview and you have problems uninstalling it, follow these steps:

  1. Elimine la carpeta C:\Archivos de programa (x86) \Microsoft Visual Studio\Preview\Enterprise\Common7\IDE\Extensions\Xamarin\LiveReload (Nota: reemplace "Enterprise" por la edición instalada y "Preview" por "2017" Si instaló en una versión estable frente a)Delete the folder C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\Common7\IDE\Extensions\Xamarin\LiveReload (NOTE: replace "Enterprise" with your installed edition, and "Preview" with "2017" if you installed to a stable VS)
  2. Abra un símbolo del sistema para desarrolladores de Visual Studio y ejecute devenv /updateconfiguration.Open a Developer command prompt for that Visual Studio and run devenv /updateconfiguration.

Sugerencias & trucosTips & Tricks

  • Siempre y cuando la configuración de recarga en directo no cambie (incluidas las claves de cifrado, por ejemplo, si desactiva la generación automática de claves de cifrado) y se compila desde el mismo equipo, no es necesario compilar e implementar la aplicación después de la implementación inicial, a menos que cambie código o dependencias.As long as the Live Reload settings don't change (including the encryption keys, such as if you turn off Auto-generate encryption keys) and you build from the same machine, you don't need to build and deploy the app after the initial deploy, unless you change code or dependencies. Simplemente puede volver a iniciar una aplicación implementada previamente y se conectará al último host usado.You can just launch again a previously deployed app and it will connect to the last host used.

  • No hay ninguna limitación en cuanto al número de dispositivos que se pueden conectar a la misma sesión de Visual Studio.There is no limitation on how many devices you can connect to the same Visual Studio session. Puede implementar e iniciar la aplicación en tantos dispositivos/simuladores como sea necesario para ver la recarga en directo que funciona en todos ellos al mismo tiempo.You can deploy and start the app in as many devices/simulators as necessary to see the live reloading working on all of them at the same time.

  • La recarga en vivo solo volverá a cargar la parte de la interfaz de usuario de la aplicación, pero no volverá a crear las páginas ni reemplazará el modelo de vista (o el contexto de enlace).Live Reload will only reload the user interface portion of your app, but it does not re-create your pages, neither does it replace your view model (or binding context). Esto significa que todo el estado de la aplicación siempre se conserva entre las recargas, incluidas las dependencias insertadas.This means the whole app state is always preserved across reloads, including your injected dependencies.

Servidor de recarga en vivoLive Reload Server

En escenarios en los que no es posible establecer una conexión desde la aplicación en ejecución a su equipo (como se indica mediante localhost o 127.0.0.1 en herramientas > opciones > Xamarin > Live Reload) (es decir, firewalls, redes diferentes), puede configurar un servidor remoto. en su lugar, el IDE y la aplicación se conectarán a.In scenarios where a connection from the running app to your machine (as denoted by using localhost or 127.0.0.1 in Tools > Options > Xamarin > Live Reload) is not possible (i.e. firewalls, different networks), you can configure a remote server instead, which both the IDE and the app will conect to.

La recarga en vivo usa el Protocolo MQTT estándar para intercambiar mensajes y, por tanto, se puede comunicar con servidores de terceros.Live Reload uses the standard MQTT protocol to exchange messages, and can therefore communicate with third party servers. Hay incluso servidores públicos (también conocidos como agentes) disponibles que puede usar.There are even public servers (also known as brokers) available that you can use. La recarga en vivo se ha probado con broker.hivemq.com y iot.eclipse.org nombres de host, así como los servicios proporcionados por www.cloudmqtt.com y www.cloudamqp.com.Live Reload has been tested with broker.hivemq.com and iot.eclipse.org host names, as well as the services provided by www.cloudmqtt.com and www.cloudamqp.com. También puede implementar su propio servidor de MQTT en la nube, como HiveMQ en Azure.You can also deploy your own MQTT server in the cloud, such as HiveMQ on Azure.

Puede configurar cualquier puerto, pero es habitual usar el puerto predeterminado 1883 para los servidores remotos.You can configure any port, but it's common to use the default 1883 port for remote servers. Los mensajes de recarga en vivo usan el cifrado simétrico AES completo de un extremo a otro, por lo que es seguro conectarse a los servidores remotos.Live Reload messages use strong end-to-end AES symmetric encryption, so it's safe to connect to remote servers. De forma predeterminada, tanto la clave de cifrado como el vector de inicialización (IV) se vuelven a generar en cada sesión de Visual Studio.By default, both the encryption key and the initialization vector (IV) are regenerated on every Visual Studio session.

Probablemente, la manera más fácil es instalar el servidor de mosquitto en una máquina virtual Ubuntu en blanco en Azure:Probably the easiest way is to install the mosquitto server in a blank Ubuntu VM in Azure:

  1. Creación de una nueva máquina virtual de Ubuntu Server en Azure portalCreate a new Ubuntu Server VM in Azure Portal
  2. Agregar una nueva regla de puerto de entrada para 1883 (puerto MQTT predeterminado) en la pestaña redesAdd a new inbound port rule for 1883 (default MQTT port) in the Networking tab
  3. Abrir el Cloud Shell (modo Bash)Open the Cloud Shell (bash mode)
  4. Escriba ssh [USERNAME]@[PUBLIC_IP] con el nombre de usuario que eligió en 1) y la dirección IP pública que se muestra en la página de información general de la máquina virtual.Type ssh [USERNAME]@[PUBLIC_IP] using the username you chose in 1) and the public IP shown in your VM overview page
  5. Ejecute sudo apt-get install mosquitto, escribiendo la contraseña que eligió en 1)Run sudo apt-get install mosquitto, entering the password you chose in 1)

Ahora puede usar esa dirección IP para conectarse a su propio servidor de MQTT.Now you can use that IP to connect to your own MQTT server.