visual - Xamarin Shared Library y PCL
xamarin forms portable visual studio 2017 (1)
¿Cuál es la diferencia exacta entre el proyecto compartido xamarin y la biblioteca de clases portátil?
¿Cuándo usar la biblioteca compartida y cuándo usar la biblioteca de clases portátil?
¿Es posible escribir la funcionalidad nativa en proyectos compartidos como mostrar alertas, acceder a la cámara y usarla tanto para Android como para iOS?
¿Puede alguien por favor explicarme?
- En proyectos compartidos, cada archivo de código se compilará para cada destino (Android, iOS, Windows Phone, etc.). Puede incluir código específico de la plataforma mediante el uso de las directivas del compilador
#if
. Cuando desee acceder a la cámara, deberá escribir el código de acceso dentro de un bloque#if
para todas las plataformas destinadas. Esto puede arruinar tu código, pero puede ser más fácil encontrar las diferentes implementaciones. Obtenga más información: http://developer.xamarin.com/guides/cross-platform/application_fundamentals/shared_projects/ - Las bibliotecas de clase de Protable (PCL) se compilan contra un subconjunto .NET general que es compatible con todas las plataformas que desee. De modo que puede acceder a
System.Net.Http
pero no puede acceder a ningún código específico de la plataforma. Si desea acceder a la cámara dentro del código PCL, debe acceder a ella mediante una interfaz generalizada a través de la inyección de dependencia. Hay algunos marcos bastante buenos que te ayudan a lograr este objetivo. Uno de los más famosos es MVVMCross ( https://github.com/MvvmCross/MvvmCross/wiki ). Obtenga más información acerca de PCL: http://developer.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications/sharing_code_options/#Portable_Class_Libraries
Personalmente perezco PCL porque el código es mucho más fácil de leer sin directivas de compilación. Usando MVVMCross puedes usar muchos complementos a través de NuGet. Por lo tanto, no necesita escribir sus propias clases para acceder a la cámara, mostrar alertas, etc.