Guía de Implementación y Despliegue de Uno Platform¶
Video Capture SDK .Net Video Edit SDK .Net Media Player SDK .Net Media Blocks SDK .Net
Introducción a los SDKs de VisioForge para Uno Platform¶
Uno Platform es un potente framework de UI multiplataforma que permite a los desarrolladores crear aplicaciones nativas para Windows, Android, iOS, macOS y Linux desde una única base de código. VisioForge proporciona soporte completo para aplicaciones Uno Platform a través del paquete VisioForge.DotNet.Core.UI.Uno, que contiene controles de UI especializados diseñados específicamente para Uno Platform.
El proceso de despliegue de Uno Platform requiere consideración especial para cada plataforma objetivo. Este documento proporciona instrucciones detalladas para asegurar que su aplicación funcione correctamente en todas las plataformas soportadas.
Plataformas Soportadas¶
Los SDKs de VisioForge soportan los siguientes objetivos de Uno Platform:
| Plataforma | Framework Objetivo | Estado |
|---|---|---|
| Windows Desktop | net10.0-windows10.0.19041.0 | ✔ Soporte Completo |
| Android | net10.0-android | ✔ Soporte Completo |
| iOS | net10.0-ios | ✔ Soporte Completo |
| macOS (Catalyst) | net10.0-maccatalyst | ✔ Soporte Completo |
| Linux Desktop (Skia) | net10.0-desktop | ✔ Soporte Completo |
Requisitos del Sistema¶
Antes de comenzar su implementación de Uno Platform, asegúrese de que su entorno de desarrollo cumple con los siguientes requisitos:
Requisitos del Entorno de Desarrollo¶
- Computadora con Windows, Linux o macOS
- Visual Studio 2022 con extensión Uno Platform, JetBrains Rider o Visual Studio Code
- .NET 10.0 SDK o posterior (última versión estable recomendada)
- Plantillas de Uno Platform instaladas
Requisitos Específicos por Plataforma¶
Windows¶
- Windows 10 versión 17763 o posterior
- Windows App SDK 1.4+
Android¶
- Android SDK con niveles de API apropiados
- Dispositivo Android 5.0 (API 21) o posterior
- Java Development Kit (JDK) 11 o posterior
iOS/macOS¶
- Computadora Mac con Xcode 15+ instalado (para compilaciones iOS/macOS)
- Cuenta de desarrollador de Apple (para despliegue en dispositivo)
- iOS 15.0 o posterior / macOS 10.15 o posterior
Linux¶
- Runtime de GStreamer instalado
- Servidor de visualización X11 o Wayland
Proceso de Instalación y Configuración¶
Siga estos pasos para configurar y desplegar correctamente su aplicación Uno Platform con VisioForge:
1. Instalar Plantillas de Uno Platform¶
2. Instalar Workloads Requeridos¶
# Para Android
dotnet workload install android
# Para iOS/macOS
dotnet workload install ios maccatalyst
3. Crear un Nuevo Proyecto Uno Platform¶
4. Agregar Paquetes NuGet de VisioForge¶
Agregue los siguientes paquetes a su proyecto:
<ItemGroup>
<PackageReference Include="VisioForge.DotNet.Core.UI.Uno" Version="2025.12.9" />
<PackageReference Include="VisioForge.DotNet.Core" Version="2025.4.10" />
</ItemGroup>
Redistributables Específicos por Plataforma¶
Agregue paquetes redistributables específicos de plataforma a su proyecto:
Windows¶
<ItemGroup Condition="$(TargetFramework.Contains('-windows'))">
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.8.251106002" />
<PackageReference Include="VisioForge.CrossPlatform.Core.Windows.x64" Version="2025.11.0" />
<PackageReference Include="VisioForge.CrossPlatform.Libav.Windows.x64" Version="2025.11.0" />
</ItemGroup>
Android¶
<ItemGroup Condition="$(TargetFramework.Contains('-android'))">
<PackageReference Include="VisioForge.CrossPlatform.Core.Android" Version="15.10.33" />
</ItemGroup>
Adicionalmente, necesitará agregar la Biblioteca de Bindings de Java. Clónela desde nuestro repositorio de GitHub y agregue una referencia:
<ItemGroup Condition="$(TargetFramework.Contains('-android'))">
<ProjectReference Include="..\AndroidDependency\VisioForge.Core.Android.X10.csproj" />
</ItemGroup>
iOS¶
<ItemGroup Condition="$(TargetFramework.Contains('-ios'))">
<PackageReference Include="VisioForge.CrossPlatform.Core.iOS" Version="2025.0.16" />
</ItemGroup>
macOS (Catalyst)¶
<ItemGroup Condition="$(TargetFramework.Contains('-maccatalyst'))">
<PackageReference Include="VisioForge.CrossPlatform.Core.macCatalyst" Version="2025.9.1" />
</ItemGroup>
Para macOS Catalyst, también necesita agregar un target MSBuild personalizado para copiar bibliotecas nativas al bundle de la aplicación:
<Target Name="CopyNativeLibrariesToMonoBundle" AfterTargets="Build" Condition="$(TargetFramework.Contains('-maccatalyst'))">
<PropertyGroup>
<AppBundleDir>$(OutputPath)$(AssemblyName).app</AppBundleDir>
<MonoBundleDir>$(AppBundleDir)/Contents/MonoBundle</MonoBundleDir>
</PropertyGroup>
<MakeDir Directories="$(MonoBundleDir)" Condition="!Exists('$(MonoBundleDir)')" />
<Copy SourceFiles="@(None->'%(FullPath)')" DestinationFolder="$(MonoBundleDir)"
Condition="'%(Extension)' == '.dylib' Or '%(Extension)' == '.so'">
<Output TaskParameter="CopiedFiles" ItemName="CopiedNativeFiles" />
</Copy>
</Target>
Linux Desktop¶
Para Linux, necesita instalar el runtime de GStreamer en su sistema:
# Ubuntu/Debian
sudo apt-get install gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav
# Fedora
sudo dnf install gstreamer1-plugins-base gstreamer1-plugins-good gstreamer1-plugins-bad-free gstreamer1-plugins-ugly-free
Archivo de Proyecto de Ejemplo Completo¶
Aquí hay un ejemplo completo de archivo .csproj para una aplicación Uno Platform con VisioForge SDK:
<Project Sdk="Uno.Sdk">
<PropertyGroup>
<!-- Target frameworks basados en el SO de compilación -->
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">net10.0-windows10.0.19041;net10.0-android</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('osx'))">net10.0-maccatalyst;net10.0-ios;net10.0-android</TargetFrameworks>
<OutputType>Exe</OutputType>
<UnoSingleProject>true</UnoSingleProject>
<UseCurrentXcodeSDKVersion>true</UseCurrentXcodeSDKVersion>
<!-- Configuración de la aplicación -->
<ApplicationTitle>MyMediaApp</ApplicationTitle>
<ApplicationId>com.yourcompany.mymediaapp</ApplicationId>
<ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
<ApplicationVersion>1</ApplicationVersion>
<ApplicationPublisher>Your Company</ApplicationPublisher>
<Description>Aplicación multimedia potenciada por Uno Platform y VisioForge.</Description>
<UnoFeatures></UnoFeatures>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<CodesignKey>Apple Development</CodesignKey>
</PropertyGroup>
<!-- Referencias Core de VisioForge -->
<ItemGroup>
<PackageReference Include="VisioForge.DotNet.Core.UI.Uno" Version="2025.12.9" />
<PackageReference Include="VisioForge.DotNet.Core" Version="2025.4.10" />
</ItemGroup>
<!-- Plataforma Windows -->
<ItemGroup Condition="$(TargetFramework.Contains('-windows'))">
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.8.251106002" />
<PackageReference Include="VisioForge.CrossPlatform.Core.Windows.x64" Version="2025.11.0" />
<PackageReference Include="VisioForge.CrossPlatform.Libav.Windows.x64" Version="2025.11.0" />
</ItemGroup>
<!-- Plataforma Android -->
<ItemGroup Condition="$(TargetFramework.Contains('-android'))">
<PackageReference Include="VisioForge.CrossPlatform.Core.Android" Version="15.10.33" />
<ProjectReference Include="..\AndroidDependency\VisioForge.Core.Android.X10.csproj" />
</ItemGroup>
<!-- Plataforma iOS -->
<ItemGroup Condition="$(TargetFramework.Contains('-ios'))">
<PackageReference Include="VisioForge.CrossPlatform.Core.iOS" Version="2025.0.16" />
</ItemGroup>
<!-- Plataforma macOS Catalyst -->
<ItemGroup Condition="$(TargetFramework.Contains('-maccatalyst'))">
<PackageReference Include="VisioForge.CrossPlatform.Core.macCatalyst" Version="2025.9.1" />
</ItemGroup>
<!-- macOS: Copiar bibliotecas nativas al bundle de la app -->
<Target Name="CopyNativeLibrariesToMonoBundle" AfterTargets="Build"
Condition="$(TargetFramework.Contains('-maccatalyst'))">
<PropertyGroup>
<AppBundleDir>$(OutputPath)$(AssemblyName).app</AppBundleDir>
<MonoBundleDir>$(AppBundleDir)/Contents/MonoBundle</MonoBundleDir>
</PropertyGroup>
<MakeDir Directories="$(MonoBundleDir)" Condition="!Exists('$(MonoBundleDir)')" />
<Copy SourceFiles="@(None->'%(FullPath)')" DestinationFolder="$(MonoBundleDir)"
Condition="'%(Extension)' == '.dylib' Or '%(Extension)' == '.so'">
<Output TaskParameter="CopiedFiles" ItemName="CopiedNativeFiles" />
</Copy>
</Target>
</Project>
Configuración Específica por Plataforma¶
Configuración de Windows¶
Las aplicaciones Windows usan renderizado nativo WinUI 3 y soportan aceleración por hardware vía DirectX.
Capacidades Requeridas¶
Agregue las capacidades requeridas a su Package.appxmanifest:
<Capabilities>
<Capability Name="internetClient" />
<uap:Capability Name="videosLibrary" />
<uap:Capability Name="musicLibrary" />
<DeviceCapability Name="microphone" />
<DeviceCapability Name="webcam" />
</Capabilities>
Configuración de Android¶
Permisos¶
Agregue los permisos necesarios a su AndroidManifest.xml:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Solicitudes de Permisos en Tiempo de Ejecución¶
Solicite permisos en tiempo de ejecución en su código:
private async Task RequestPermissionsAsync()
{
var status = await Permissions.RequestAsync<Permissions.Camera>();
if (status != PermissionStatus.Granted)
{
// Manejar denegación de permiso
}
status = await Permissions.RequestAsync<Permissions.Microphone>();
if (status != PermissionStatus.Granted)
{
// Manejar denegación de permiso
}
}
Configuración de iOS¶
Configuraciones de Info.plist¶
Agregue las descripciones de uso requeridas a su Info.plist:
<key>NSCameraUsageDescription</key>
<string>Esta app requiere acceso a la cámara para captura de video</string>
<key>NSMicrophoneUsageDescription</key>
<string>Esta app requiere acceso al micrófono para grabación de audio</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Esta app requiere acceso a la biblioteca de fotos para guardar medios</string>
App Transport Security¶
Para fuentes de streaming HTTP, configure App Transport Security:
Configuración de macOS (Catalyst)¶
Las aplicaciones macOS Catalyst comparten configuración con iOS. Adicionalmente, configure identificadores de runtime para Intel y Apple Silicon:
<PropertyGroup Condition="$([MSBuild]::IsOSPlatform('osx')) AND '$([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture)' == 'X64' AND $(TargetFramework.Contains('-maccatalyst'))">
<RuntimeIdentifier>maccatalyst-x64</RuntimeIdentifier>
</PropertyGroup>
<PropertyGroup Condition="$([MSBuild]::IsOSPlatform('osx')) AND '$([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture)' == 'Arm64' AND $(TargetFramework.Contains('-maccatalyst'))">
<RuntimeIdentifier>maccatalyst-arm64</RuntimeIdentifier>
</PropertyGroup>
Configuración de Linux Desktop¶
Para aplicaciones de escritorio Linux usando Skia:
- Asegúrese de que GStreamer esté instalado en el sistema objetivo
- Establezca las variables de entorno apropiadas si es necesario:
Compilación para Diferentes Plataformas¶
Windows¶
Android¶
iOS¶
macOS¶
Linux Desktop¶
Consideraciones de Rendimiento¶
- Aceleración por Hardware: Habilite el renderizado acelerado por hardware donde esté disponible (Windows DirectX, Apple VideoToolbox, Android MediaCodec)
- Dispositivos Físicos: Siempre pruebe en dispositivos físicos, especialmente para plataformas móviles. Los simuladores pueden no representar con precisión el rendimiento real
- Gestión de Memoria: Monitoree el uso de memoria, particularmente en dispositivos móviles al procesar archivos de medios grandes
- Streaming de Red: Use tamaños de buffer apropiados para streaming de red para equilibrar latencia y fluidez
Solución de Problemas Comunes¶
El Video No Se Muestra¶
- Verifique que el VideoView esté correctamente inicializado y agregado al árbol visual
- Compruebe que los redistributables específicos de plataforma estén correctamente instalados
- Asegúrese de que los permisos estén otorgados en plataformas móviles
Problemas de Rendimiento¶
- Compruebe que la aceleración por hardware esté habilitada
- Reduzca la resolución de video para dispositivos de menor potencia
- Monitoree el uso de memoria y optimice los tamaños de buffer
Errores de Compilación¶
- Verifique que todos los workloads requeridos estén instalados
- Compruebe la compatibilidad de versiones de paquetes NuGet
- Asegúrese de que las versiones de target framework coincidan en todas las referencias del proyecto