Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Cada versión del SDK de Windows 10 agrega nuevas funcionalidades interesantes que querrá aprovechar. Sin embargo, no todos los clientes actualizarán sus dispositivos a la versión más reciente de Windows 10 al mismo tiempo, y quiere asegurarse de que la aplicación funciona en la gama más amplia posible de dispositivos. Aquí te mostramos cómo diseñar la aplicación para que se ejecute en versiones anteriores de Windows 10, pero también aprovecha las nuevas características siempre que la aplicación se ejecute en un dispositivo con la actualización más reciente instalada.
Hay 3 pasos que se deben seguir para asegurarse de que la aplicación admite la gama más amplia de dispositivos Windows 10.
- En primer lugar, configure el proyecto de Visual Studio para que se dirija a las API más recientes. Esto afecta a lo que sucede al compilar la aplicación.
- En segundo lugar, realice comprobaciones en tiempo de ejecución para asegurarse de que solo llama a las API que están presentes en el dispositivo en el que se ejecuta la aplicación.
- En tercer lugar, pruebe la aplicación en la versión mínima y la versión de destino de Windows 10.
Configuración del proyecto de Visual Studio
El primer paso para admitir varias versiones de Windows 10 es especificar las versiones de Target y Minimum compatibles con OS/SDK en el proyecto de Visual Studio.
- Target: la versión del SDK en la que Visual Studio compila el código de la aplicación y ejecuta todas las herramientas. Todas las API y los recursos de esta versión del SDK están disponibles en el código de la aplicación en tiempo de compilación.
- Minimum: la versión del SDK que admite la versión más antigua del sistema operativo en la que tu aplicación puede ejecutarse (y en la que la tienda la desplegará) y la versión que Visual Studio utiliza para compilar el código de marcado de la aplicación.
Durante el tiempo de ejecución, la aplicación se ejecutará en la versión del sistema operativo en la que se implementa, por lo que la aplicación producirá excepciones si usa recursos o llama a las API que no están disponibles en esa versión. Le mostramos cómo usar comprobaciones en tiempo de ejecución para llamar a las API correctas más adelante en este artículo.
Las configuraciones de Destino y Mínimo especifican los extremos de un intervalo de versiones de OS/SDK. Sin embargo, si prueba su aplicación en la versión mínima, puede asegurarse de que se ejecutará en cualquier versión entre la mínima y la objetivo.
Sugerencia
Visual Studio no le advierte sobre la compatibilidad de api. Es su responsabilidad probar y asegurarse de que su aplicación funcione como se espera en todas las versiones del sistema operativo entre la versión Mínima y la Objetivo, inclusive.
Al crear un nuevo proyecto en Visual Studio 2015, Update 2 o posterior, se le pedirá que establezca las versiones Target y Minimum compatibles con la aplicación. De forma predeterminada, la versión de destino es la versión del SDK instalada más alta y la versión mínima es la versión más baja instalada del SDK. Puede elegir las versiones de destino y mínima únicamente de las versiones del SDK instaladas en su equipo.
Normalmente, recomendamos dejar los valores predeterminados. Sin embargo, si tiene instalada una versión preliminar del SDK y está escribiendo código de producción, debe cambiar la versión de destino del SDK de versión preliminar a la versión oficial más reciente del SDK.
Para cambiar la versión mínima y de destino de un proyecto que ya se ha creado en Visual Studio, vaya a Project -> Properties -> pestaña Aplicación -> destino.
Como referencia, en la tabla siguiente se muestran los números de compilación de cada SDK.
| Nombre amigable | Versión | Compilación de OS/SDK |
|---|---|---|
| RTM | 1507 | 10240 |
| Actualización de noviembre | 1511 | 10586 |
| Actualización de aniversario | 1607 | 14393 |
| Actualización para Creadores | 1703 | 15063 |
| Fall Creators Update | 1709 | 16299 |
| Actualización de abril de 2018 | 1803 | 17134 |
| Actualización de octubre de 2018 | 1809 | 17763 |
| Actualización de mayo de 2019 | 1903 | 18362 |
Puede descargar cualquier versión publicada del SDK desde Windows SDK y archivo del emulador. Puede descargar el SDK de Windows Insider Preview más reciente en la sección para desarrolladores del sitio Windows Insider.
Para obtener más información sobre las actualizaciones de Windows 10, consulta información de lanzamientos de Windows 10. Para obtener información importante sobre el ciclo de vida de soporte técnico de Windows 10, consulte la hoja de datos del ciclo de vida Windows.
Realización de comprobaciones de API
La clave de las aplicaciones adaptables para versiones es la combinación de contratos de API y la clase ApiInformation . Esta clase le permite detectar si hay un contrato de API, un tipo o un miembro especificados para que pueda realizar llamadas API de forma segura en una variedad de dispositivos y versiones del sistema operativo.
Contratos de API
El conjunto de API dentro de una familia de dispositivos se divide en subdivisiones conocidas como contratos de API. Puede usar el método ApiInformation.IsApiContractPresent para probar la presencia de un contrato de API. Esto es útil si desea probar la presencia de muchas API que existen en la misma versión de un contrato de API.
bool isScannerDeviceContract_1_Present =
Windows.Foundation.Metadata.ApiInformation.IsApiContractPresent
("Windows.Devices.Scanners.ScannerDeviceContract", 1);
¿Qué es un contrato de API? Básicamente, un contrato de API representa una característica: un conjunto de API relacionadas que proporcionan algunas funcionalidades concretas. Un contrato de API hipotético podría representar un conjunto de API que contienen dos clases, cinco interfaces, una estructura, dos enumeraciones, etc.
Los tipos relacionados lógicamente se agrupan en un contrato de API y, a partir de Windows 10, cada API de Windows Runtime es miembro de algún contrato de API. Con los contratos de API, está comprobando la disponibilidad de una característica o API específica en el dispositivo, comprobando eficazmente las funcionalidades de un dispositivo en lugar de comprobar si hay un dispositivo o sistema operativo específico. Se requiere una plataforma que implemente cualquier API de un contrato de API para implementar todas las API de ese contrato de API. Esto significa que puede probar si el sistema operativo en ejecución admite un contrato de API determinado y, si lo hace, llamar a cualquiera de las API de ese contrato de API sin comprobar cada uno individualmente.
El contrato de API más grande y más usado es el Windows. Foundation.UniversalApiContract. Contiene la mayoría de las API de la Universal Windows Platform. La documentación sobre los SDK de extensión de familia de dispositivos y los contratos de API describe la variedad de contratos de API disponibles. Verá que la mayoría de ellas representan un conjunto de API relacionadas funcionalmente.
Nota:
Si tiene instalada una versión preliminar Windows kit de desarrollo de software (SDK) que aún no está documentado, también puede encontrar información sobre la compatibilidad con contratos de API en el archivo "Platform.xml" ubicado en la carpeta de instalación del SDK en "(Archivos de programa (x86))\Windows Kits\10\Platforms<platform><SDK versión>\Platform.xml".".
Código adaptable de versión y XAML condicional
En todas las versiones de Windows 10, puede usar la clase ApiInformation en una condición del código para probar la presencia de la API a la que desea llamar. En el código adaptable, puede usar varios métodos de la clase, como IsTypePresent, IsEventPresent, IsMethodPresent e IsPropertyPresent, para probar las API en la granularidad que necesita.
Para obtener más información y ejemplos, consulta Código adaptable de versión.
Si la versión mínima de las aplicaciones es la compilación 15063 (Creators Update) o posterior, puedes usar XAML condicional para establecer propiedades y crear instancias de objetos en el marcado sin necesidad de usar código subyacente. Conditional XAML proporciona una manera de utilizar el método ApiInformation.IsApiContractPresent en el marcado.
Para obtener más información y ejemplos, consulta XAML condicional.
API cargadas con retraso
La función QueryOptionalDelayLoadedAPI permite que las aplicaciones de la Tienda, a las que no se les permite según la directiva llamar a LoadLibrary, detecten si la función que está cargada con retraso fue realmente encontrada.
#include <windows.h>
#include <commdlg.h>
#include <libloaderapi2.h>
#include <stdio.h>
EXTERN_C IMAGE_DOS_HEADER __ImageBase;
#define HMODULE_THISCOMPONENT reinterpret_cast<HMODULE>(&__ImageBase)
int __cdecl main(int argc, char** argv)
{
if (QueryOptionalDelayLoadedAPI(HMODULE_THISCOMPONENT,
"comdlg32.dll", "GetOpenFileNameW", 0))
{
printf("GetOpenFileNameW can be called!\n");
}
return 0;
}
Prueba tu aplicación adaptable a versiones
Cuando usas código adaptable de versión o XAML condicional para escribir una aplicación adaptable de versión, debes probarlo en un dispositivo que ejecute la versión mínima y en un dispositivo que ejecute la versión de destino de Windows 10.
No se pueden probar todas las rutas condicionales de código en un solo dispositivo. Para asegurarse de que se prueban todas las rutas de acceso de código, debe implementar y probar la aplicación en un dispositivo remoto (o máquina virtual) que ejecute la versión mínima admitida del sistema operativo. Para obtener más información sobre la depuración remota, consulta Implementación y depuración de aplicaciones para UWP.