Publicación de una aplicación Mac Catalyst para su distribución fuera de Mac App Store
Una alternativa a la distribución de aplicaciones Mac Catalyst a través de Mac App Store es distribuirlas fuera de Mac App Store. Con este enfoque, tu aplicación Mac Catalyst se puede hospedar en una ubicación de tu elección para su descarga. Los miembros del programa para desarrolladores de Apple y Apple Developer Enterprise Program pueden usar este enfoque de distribución.
La distribución de una aplicación Mac Catalyst requiere que la aplicación se aprovisione mediante un perfil de aprovisionamiento. Los perfiles de aprovisionamiento son archivos que contienen información sobre la firma de código, así como la identidad de la aplicación y su mecanismo de distribución previsto.
Para distribuir una aplicación Mac Catalyst de .NET Multi-platform App UI (.NET MAUI) fuera de Mac App Store, deberás crear un perfil de aprovisionamiento de distribución específico para ella. Este perfil permite que la aplicación se firme digitalmente para su publicación de modo que se pueda instalar en equipos Mac. Un perfil de aprovisionamiento de distribución contiene un identificador de aplicación y un certificado de aplicación de identificador de desarrollador. Deberás crear un certificado de aplicación de identificador de desarrollador para identificarte a ti mismo o tu organización, si aún no tienes uno. Además, deberás crear un certificado de instalador de identificador de desarrollador para firmar el paquete del instalador de la aplicación.
El proceso para aprovisionar una aplicación .NET MAUI Mac Catalyst para distribución fuera de Mac App Store es el siguiente:
- Crea dos solicitudes de firma de certificados. Para obtener más información, consulta Creación de una solicitud de firma de certificado.
- Crea un certificado de aplicación de identificador de desarrollador. Para obtener más información, consulta Creación de un certificado de aplicación de identificador de desarrollador.
- Crea un certificado de instalador de identificador de desarrollador. Para obtener más información, consulta Creación de un certificado de instalador de identificador de desarrollador.
- Crea un identificador de aplicación. Para obtener más información, consulta Creación de un identificador de aplicación.
- Crear un perfil de aprovisionamiento. Para obtener más información, consulta Creación de un perfil de aprovisionamiento.
- Descarga tu perfil de aprovisionamiento. Para obtener más información, consulta Descargar tu perfil de aprovisionamiento en Xcode.
Importante
En este artículo se muestra el aprovisionamiento para la distribución fuera de Mac App Store mediante una cuenta de desarrollador de Apple que forma parte del programa para desarrolladores de Apple. También se puede usar para una cuenta de desarrollador de Apple que forme parte de Apple Developer Enterprise Program, ya que los pasos necesarios son en gran medida idénticos.
Después, una vez completado el aprovisionamiento, debes preparar tu aplicación para publicarla, publicarla y certificarla con el siguiente proceso:
- Opcionalmente, agrega derechos a la aplicación. Para obtener más información, consulta Agregar derechos.
- Actualiza el archivo Info.plist de la aplicación. Para obtener más información, consulta Actualización de Info.plist.
- Deshabilita la verificación de firma de código para la aplicación. Para obtener más información, consulta Deshabilitación de la comprobación de firmas de código.
- Publica la aplicación mediante la línea de comandos. Para obtener más información, consulta Publicación mediante la línea de comandos.
- Certifica tu aplicación. Para obtener más información, consulta Certificación de tu aplicación.
Creación de una solicitud de firma de certificado
Antes de crear un certificado de distribución, primero deberás crear una solicitud de firma de certificado (CSR) en Acceso a cadena de claves en un equipo Mac:
En el equipo Mac, inicie Acceso a llaves.
En el menú Acceso a Llaveros, selecciona los elementos de menú Acceso a Llaveros > Asistente para Certificados > Solicitar un certificado de una autoridad de certificación....
En el cuadro de diálogo Asistente para Certificados, introduce una dirección de correo electrónico en el campo Dirección de correo electrónico de usuario.
En el cuadro de diálogo Asistente para Certificados, introduce un nombre para la llave en el campo Nombre común.
En el cuadro de diálogo Asistente para certificados, deja vacío el campo Dirección de correo electrónico de CA.
En el cuadro de diálogo Asistente para certificados, elige el botón de selección Guardado en disco y selecciona Continuar:
Guarda la solicitud de firma de certificado en una ubicación conocida.
En el cuadro de diálogo Asistente para certificados, selecciona el botón Listo.
Cierra Acceso a Llaveros.
Repite este proceso para crear una segunda solicitud de firma de certificado. La primera CSR se usará para crear un certificado de aplicación de identificador de desarrollador. La segunda se usará para crear un certificado de instalador de identificador de desarrollador.
Importante
No puedes usar la misma solicitud de firma de certificado para crear un certificado de aplicación de identificador de desarrollador y un certificado de instalador de identificador de desarrollador.
Creación de un certificado de aplicación de identificador de desarrollador
La CSR permite generar un certificado de identificador de desarrollador, que confirma tu identidad. El certificado de identificador de desarrollador debe crearse con el ID de Apple para tu cuenta de desarrollador de Apple:
En un explorador web, inicia sesión en tu cuenta de desarrollador de Apple.
En la cuenta de desarrollador de Apple, selecciona la pestaña Certificates, IDs Profiles.
En la página Certificates, Identifiers & Profiles, haz clic en el botón + para crear un nuevo certificado.
En la página Create a New Certificate, selecciona el botón de radio Developer ID Application antes de seleccionar el botón Continue:
En la página Create a New Certificate, selecciona el botón de radio G2 Sub-CA y luego selecciona Choose File:
En el cuadro de diálogo Choose Files to Upload, selecciona el primer archivo de solicitud de certificado que creaste anteriormente (un archivo con una extensión de archivo
.certSigningRequest
) y luego selecciona Upload.En la página Create a New Certificate, selecciona el botón Continue:
En la página Descargar el certificado, selecciona el botón Descargar:
El archivo de certificado (un archivo con una extensión
.cer
) se descargará en la ubicación elegida.En el equipo Mac, haz doble clic en el archivo de certificado descargado para instalar el certificado en el llavero. El certificado aparece en la categoría My Certificates en Keychain Access y comienza con Developer ID Application:
Nota:
Anota el nombre completo del certificado en Acceso a Llaveros. Será necesario al firmar la aplicación.
Creación de un certificado de instalador de identificador de desarrollador
La CSR permite generar un certificado de instalador de identificador de desarrollador, que es necesario para firmar el paquete del instalador de la aplicación. El certificado de instalador debe crearse con el ID de Apple para la cuenta de desarrollador de Apple:
En la cuenta de desarrollador de Apple, selecciona la pestaña Certificates, IDs Profiles.
En la página Certificates, Identifiers & Profiles, haz clic en el botón + para crear un nuevo certificado.
En la página Create a New Certificate, selecciona el botón de radio Developer ID Installer antes de seleccionar el botón Continue:
En la página Create a New Certificate, selecciona el botón de radio G2 Sub-CA y luego selecciona Choose File:
En el cuadro de diálogo Choose Files to Upload, selecciona el segundo archivo de solicitud de certificado que creaste anteriormente (un archivo con una extensión de archivo
.certSigningRequest
) y luego selecciona Upload.En la página Create a New Certificate, selecciona el botón Continue:
En la página Descargar el certificado, selecciona el botón Descargar:
El archivo de certificado (un archivo con una extensión
.cer
) se descargará en la ubicación elegida.En el equipo Mac, haz doble clic en el archivo de certificado descargado para instalar el certificado en el llavero. El certificado aparece en la categoría My Certificates en Keychain Access y comienza con Developer ID Installer:
Nota:
Anota el nombre completo del certificado en Acceso a Llaveros. Será necesario al firmar la aplicación.
Creación de un perfil de distribución
Un perfil de aprovisionamiento de distribución permite que la aplicación .NET MAUI Mac Catalyst esté firmada digitalmente para su lanzamiento, de modo que se pueda instalar en otro equipo Mac. Un perfil de aprovisionamiento para la distribución fuera de Mac App Store contiene un identificador de aplicación y un certificado de aplicación de identificador de desarrollador.
Creación de un id. de aplicación
Se requiere un identificador de aplicación para identificar la aplicación que distribuyes. Un identificador de aplicación es similar a una cadena DNS inversa que identifica de forma única una aplicación y debe ser idéntica al identificador del lote de la aplicación. Puedes usar el mismo identificador de aplicación que usaste al implementar la aplicación en un dispositivo para realizar pruebas.
Hay dos tipos de identificadores de aplicación:
- Carácter comodín. Un identificador de aplicación comodín permite usar un identificador de aplicación para que coincida con varias aplicaciones, y normalmente, adopta el formato
com.domainname.*
. Puedes usar un identificador de aplicación comodín para distribuir varias aplicaciones y debes usarlo para las aplicaciones que no habilitan las funciones específicas de la aplicación. - Explícita. Un identificador de aplicación explícito es único para una sola aplicación y normalmente adopta el formato
com.domainname.myid
. Un identificador de aplicación explícito permite la distribución de una aplicación, con un identificador de la agrupación coincidente. Los identificadores de aplicación explícitos se usan normalmente para las aplicaciones que habilitan funciones específicas de la aplicación, como Apple Pay o Game Center. Para obtener más información, consulta Funcionalidades.
Para crear un nuevo identificador de aplicación:
En tu cuenta de desarrollador de Apple, ve a Certificates, IDs & Profiles.
En la página Certificates, IDs & Profiles, selecciona la pestaña Identifiers.
En la página Identifiers, selecciona el botón + para crear un nuevo identificador de aplicación.
En la página Register a new identifier, selecciona el botón de radio App IDs antes de seleccionar el botón Continue:
En la página Register a new identifier, selecciona App antes de seleccionar el botón Continue:
En la página Registro de un id. de aplicación, introduce una descripción y selecciona el botón de radio Explícito o el id. de paquete de caracteres comodín. Después, introduce el id. de agrupación de tu aplicación en formato DS inverso:
Importante
El identificador de agrupación que escribas debe corresponder al identificador de agrupación del archivo Info.plist del proyecto de aplicación.
El identificador de agrupación de una aplicación .NET MAUI se almacena en el archivo de proyecto como la propiedad Identificador de aplicación. En Visual Studio, en Explorador de soluciones, haz clic con el botón derecho en el proyecto de tu aplicación .NET MAUI y selecciona Propiedades. Después, accede a la pestaña Configuración de MAUI Compartido> General. El identificador de aplicación muestra el identificador de agrupación.
Cuando se actualiza el valor del campo Id. de aplicación, el valor de Identificador de agrupación en el archivo Info.plist se actualizará automáticamente.
En la página Registro de un id. de aplicación, selecciona las capacidades que usa la aplicación. Cualquier capacidad debe configurarse tanto en esta página como en el archivo Entitlements.plist del proyecto de tu aplicación. Para ver más información, consulta Funcionalidades y Derechos.
En la página Register an App ID, selecciona el botón Continue.
En la página Confirm your App ID, selecciona el botón Register.
Creación de un perfil de aprovisionamiento
Una vez creado el identificador de aplicación, debes crear un perfil de aprovisionamiento de distribución. Este perfil permite que la aplicación se firme digitalmente para su publicación de modo que se pueda instalar en equipos Mac.
Para crear un perfil de aprovisionamiento para la distribución fuera de Mac App Store:
En la página Certificates, Identifiers & Profiles de la cuenta de desarrollador de Apple, selecciona la pestaña Profiles.
En la pestaña Perfiles, haz clic en el botón + para crear un nuevo perfil.
En la página Register a New Provisioning Profile, selecciona el botón de radio Developer ID antes de hacer clic en el botón Continuar:
En la página Generate a Provisioning Profile, selecciona el botón de radio Mac Catalyst. Luego, en la lista desplegable App ID, selecciona el identificador de aplicación que creaste anteriormente antes de hacer clic en el botón Continue:
En la página Generate a Provisioning Profile, selecciona el botón de radio que corresponde con tu certificado de distribución antes de hacer clic en el botón Continuar:
En la página Generate a Provisioning Profile, introduce un nombre para el perfil de aprovisionamiento antes de hacer clic en el botón Generate:
Nota:
Anota el nombre del perfil de aprovisionamiento, ya que será necesario cuando firmes tu aplicación.
En la página Generate a Provisioning Profile, haz clic opcionalmente en el botón Download para descargar tu perfil de aprovisionamiento.
Nota:
No es necesario descargar el perfil de aprovisionamiento ahora. En cambio, lo harás en Xcode.
Descarga del perfil de aprovisionamiento en Xcode
Después de crear un perfil de aprovisionamiento en la cuenta de desarrollador de Apple, Xcode puede descargarlo para que esté disponible para firmar la aplicación:
En el equipo Mac, inicia Xcode.
En Xcode, selecciona el elemento de menú Xcode > Preferencias....
En el cuadro de diálogo Preferencias, selecciona la pestaña Cuentas.
En la pestaña Cuentas, haz clic en el botón + para agregar la cuenta de desarrollador de Apple a Xcode:
En el menú emergente de tipo de cuenta, selecciona ID de Apple y después haz clic en el botón Continuar:
En el menú emergente de inicio de sesión, escribe el ID de Apple y haz clic en el botón Siguiente.
En el menú emergente de inicio de sesión, escribe la contraseña de ID de Apple y haz clic en el botón Siguiente :
En la pestaña Cuentas, haz clic en el botón Administrar certificados... para asegurarte de que se ha descargado el certificado de distribución.
En la pestaña Cuentas, haz clic en el botónDescargar perfiles manuales para descargar los perfiles de aprovisionamiento:
Espere a que se complete la descarga y cierra Xcode.
Adición de derechos
El espacio aislado de aplicaciones de Apple restringe el acceso a los recursos del sistema y a los datos de usuario en aplicaciones Mac, para contener los daños si una aplicación se pone en peligro. Opcionalmente, se puede habilitar para aplicaciones Mac Catalyst que se distribuyen fuera de Mac App Store.
Para ello, agrega un archivo Entitlements.plist a la carpeta Platforms/MacCatalyst del proyecto de aplicación .NET MAUI:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
</dict>
</plist>
El derecho del espacio aislado de la aplicación se define mediante la clave com.apple.security.app-sandbox
, de tipo boolean
. Para obtener más información sobre el espacio aislado de aplicaciones, consulta Protecting user data with App Sandbox en developer.apple.com. Para obtener más información sobre el derecho del espacio aislado de aplicaciones, consulta App Sandbox Entitlement.
Si la aplicación abre conexiones de red salientes, también deberás agregar la clave com.apple.security.network.client
clave, de tipo boolean
, al archivo Entitlements.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
</dict>
</plist>
Para obtener más información sobre el derecho de las conexiones de red salientes, consulta com.apple.security.network.client en developer.apple.com.
Actualización de Info.plist
Antes de publicar la aplicación, debes actualizar su archivo Info.plist con información adicional.
Especificación de la expresión de interfaz de usuario
Una aplicación Mac Catalyst se puede ejecutar en la expresión de la interfaz de usuario de iPad o Mac:
- La expresión de la interfaz de usuario de iPad indica a macOS que escale la interfaz de usuario de la aplicación para que coincida con el entorno de visualización de Mac, a la vez que se conserva la apariencia del iPad.
- La expresión de interfaz de usuario de Mac no escala la interfaz de usuario de la aplicación para que coincida con el entorno de visualización de Mac. Algunos controles cambian de tamaño y apariencia e interactuar con ellos idéntico a interactuar con los controles
AppKit
.
De forma predeterminada, las aplicaciones de .NET MAUI Mac Catalyst usan la expresión de interfaz de usuario de iPad. Si este es tu comportamiento deseado, asegúrate de que el archivo Info.plist de la aplicación solo especifica 2 como valor de la clave UIDeviceFamily
:
<key>UIDeviceFamily</key>
<array>
<integer>2</integer>
</array>
Para adoptar la expresión de la interfaz de usuario de Mac, actualiza el archivo Info.plist para especificar 6 como el valor de la clave UIDeviceFamily
:
<key>UIDeviceFamily</key>
<array>
<integer>6</integer>
</array>
Para obtener más información sobre las expresiones de interfaz de usuario de Mac Catalyst, consulta Especificación de la expresión de interfaz de usuario para la aplicación Mac Catalyst.
Establecimiento del idioma y la región predeterminados de la aplicación
Establece la clave CFBundleDevelopmentRegion
del archivo Info.plistde la aplicación en un string
que represente la región de desarrollo nativo de localización:
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
El valor de la clave debe ser un designador de idioma, con un designador de región opcional. Para obtener más información, consulta CFBundleDevelopmentRegion en developer.apple.com.
Establecimiento de la clave de copyright
Establece la clave NSHumanReadableCopyright
del archivo Info-plist en un string
que represente el aviso de copyright legible para la aplicación:
<key>NSHumanReadableCopyright</key>
<string>MyMauiApp © 2023</string>
Para obtener más información, consulta NSHumanReadableCopyright en developer.apple.com.
Declaración del uso del cifrado de la aplicación
Si la aplicación usa cifrado y planeas distribuirla fuera del Estados Unidos o Canadá, está sujeta a los requisitos de cumplimiento de exportación de EE. UU. Puedes proporcionar información sobre el uso del cifrado de la aplicación en su archivo Info.plist.
Esto se logra agregando la clave ITSAppUsesNonExemptEncryption
a tu info.plist de la aplicación con un valor boolean
que indica si la aplicación usa cifrado:
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
Para obtener más información, consulta Complying with Encryption Export Regulations en developer.apple.com.
Deshabilitación de la verificación de firma de código
Actualmente, al intentar publicar una aplicación .NET MAUI Mac Catalyst para su distribución fuera de Mac App Store, siempre que hayas cumplido los requisitos de aprovisionamiento, recibirás un error codesign
al salir con el código 3:
/usr/local/share/dotnet/packs/Microsoft.MacCatalyst.Sdk/16.2.1040/tools/msbuild/iOS/Xamarin.Shared.targets(1930,3): error MSB6006: "codesign" exited with code 3. [/Users/davidbritch/Projects/MyMauiApp/MyMauiApp/MyMauiApp.csproj::TargetFramework=net8.0-maccatalyst]
Aunque codesign
se realiza correctamente al firmar tu aplicación, el destino _CodesignVerify
no puede verificar la firma del código:
test-requirement: code failed to satisfy specified code requirement(s)
Debido a este error, no se produce un archivo .pkg.
Por lo tanto, actualmente es necesario agregar el siguiente destino de compilación al final del archivo de proyecto para deshabilitar la verificación de la firma de código:
<Project Sdk="Microsoft.NET.Sdk">
...
<Target Name="_SkipCodesignVerify" BeforeTargets="_CodesignVerify" AfterTargets="_CodesignAppBundle">
<PropertyGroup>
<_RequireCodeSigning>false</_RequireCodeSigning>
</PropertyGroup>
</Target>
</Project>
Publicar mediante la línea de comandos
Para publicar tu aplicación Mac Catalyst desde la línea de comandos de un equipo Mac, abre un terminal y ve a la carpeta del proyecto de la aplicación .NET MAUI. Ejecuta el comando dotnet publish
con los parámetros siguientes:
Parámetro | Valor |
---|---|
-f o --framework |
.NET Framework de destino, que es net8.0-maccatalyst . |
-c o --configuration |
La configuración de compilación, que es Release . |
-p:MtouchLink |
El modo de vínculo para el proyecto, que puede ser None , SdkOnly o Full . |
-p:CreatePackage |
Establécelo en true para que se cree un paquete (.pkg) para la aplicación al final de la compilación. |
-p:EnableCodeSigning |
Establécelo en true para que la firma de código esté habilitada. |
-p:EnablePackageSigning |
Establécelo en true para que el paquete creado se firme. |
-p:CodesignKey |
Nombre de la clave de firma de código. Establécelo en el nombre del certificado de distribución, tal como se muestra en Keychain Access. |
-p:CodesignProvision |
Nombre del perfil de aprovisionamiento que se va a usar para firmar. |
-p:CodesignEntitlements |
Ruta de acceso al archivo de derechos que especifica los derechos que requiere la aplicación. Establézcalo en Platforms\MacCatalyst\Entitlements.plist . |
-p:PackageSigningKey |
Clave de firma del paquete que se va a usar al firmar el paquete. Establécelo en el nombre del certificado del instalador, tal como se muestra en Acceso a cadena de claves. |
-p:RuntimeIdentifier |
Identificador en tiempo de ejecución (RID) del proyecto. Las compilaciones de versiones de aplicaciones Mac Catalyst de .NET MAUI usan maccatalyst-x64 y maccatalyst-arm64 como identificadores en tiempo de ejecución, para admitir aplicaciones universales. Para admitir solo una arquitectura única, especifica maccatalyst-x64 o maccatalyst-arm64 . |
-p:UseHardenedRuntime |
Establécelo en true para habilitar el tiempo de ejecución protegido, que es necesario para las aplicaciones de Mac Catalyst que se distribuyen fuera de Mac App Store. |
Advertencia
El intento de publicar una solución de .NET MAUI tendrá como resultado que el comando dotnet publish
intente publicar cada proyecto de la solución de forma individual, lo que puede causar problemas cuando hayas agregado otros tipos de proyecto a tu solución. Por lo tanto, el comando dotnet publish
debe tener como ámbito tu proyecto de aplicación de .NET MAUI.
Se pueden especificar parámetros de compilación adicionales en la línea de comandos, si no se proporcionan en <PropertyGroup>
en tu archivo de proyecto. En la tabla siguiente se enumeran algunos de los parámetros comunes:
Parámetro | Valor |
---|---|
-p:ApplicationTitle |
El nombre visible del usuario para la aplicación. |
-p:ApplicationId |
El identificador único de la aplicación, como com.companyname.mymauiapp . |
-p:ApplicationVersion |
La versión de la compilación que identifica una iteración de la aplicación. |
-p:ApplicationDisplayVersion |
El número de versión de la aplicación. |
-p:RuntimeIdentifier |
Identificador en tiempo de ejecución (RID) del proyecto. Las compilaciones de versiones de aplicaciones Mac Catalyst de .NET MAUI usan maccatalyst-x64 y maccatalyst-arm64 como identificadores en tiempo de ejecución, para admitir aplicaciones universales. Para admitir solo una arquitectura única, especifica maccatalyst-x64 o maccatalyst-arm64 . |
Para obtener una lista completa de las propiedades de compilación, consulta Project file properties.
Importante
Los valores de todos estos parámetros no tienen que proporcionarse en la línea de comandos. También se pueden proporcionar en el archivo del proyecto. Cuando se proporciona un parámetro en la línea de comandos y en el archivo del proyecto, el parámetro de línea de comandos tiene prioridad. Para obtener más información sobre cómo proporcionar propiedades de compilación en el archivo de proyecto, consultaDefine build properties in your project file.
Por ejemplo, usa el siguiente comando para compilar y firmar un .pkg en un equipo Mac, para su distribución fuera de Mac App Store:
dotnet publish -f net8.0-maccatalyst -c Release -p:MtouchLink=SdkOnly -p:CreatePackage=true -p:EnableCodeSigning=true -p:EnablePackageSigning=true -p:CodesignKey="Developer ID Application: John Smith (AY2GDE9QM7)" -p:CodesignProvision="MyMauiApp (Non-App Store)" -p:CodesignEntitlements="Platforms\MacCatalyst\Entitlements.plist" -p:PackageSigningKey="Developer ID Installer: John Smith (AY2GDE9QM7)" -p:UseHardenedRuntime=true
Nota:
En .NET 8, el comando dotnet publish
tiene como valor predeterminado la configuración Release
. Por lo tanto, la configuración de la compilación se puede omitir desde la línea de comandos.
Publica compilaciones, signos y paquetes de la aplicación y después copia el archivo .pkg en la carpeta bin/Release/net8.0-maccatalyst/publish/. Si publicas la aplicación con una sola arquitectura, se publicará en la carpeta bin/Release/net8.0-maccatalyst/{architecture}/publish/.
Durante el proceso de firma es posible que sea necesario escribir la contraseña de inicio de sesión y permitir la ejecución de codesign
y productbuild
:
Para obtener más información sobre el comando dotnet publish
, consulta Dotnet publish.
Definición de propiedades de compilación en el archivo de proyecto
Una alternativa a especificar parámetros de compilación en la línea de comandos es especificarlos en el archivo del proyecto en <PropertyGroup>
. En la tabla siguiente se enumeran algunas de las propiedades de compilación comunes:
Propiedad | Valor |
---|---|
<ApplicationTitle> |
El nombre visible del usuario para la aplicación. |
<ApplicationId> |
El identificador único de la aplicación, como com.companyname.mymauiapp . |
<ApplicationVersion> |
La versión de la compilación que identifica una iteración de la aplicación. |
<ApplicationDisplayVersion> |
Número de versión de la API. |
<CodesignKey> |
Nombre de la clave de firma de código. Establécelo en el nombre del certificado de distribución, tal como se muestra en Keychain Access. |
<CodesignEntitlements> |
Ruta de acceso al archivo de derechos que especifica los derechos que requiere la aplicación. Establézcalo en Platforms\MacCatalyst\Entitlements.plist . |
<CodesignProvision> |
Nombre del perfil de aprovisionamiento que se va a usar para firmar. |
<CreatePackage> |
Establécelo en true para que se cree un paquete (.pkg) para la aplicación al final de la compilación. |
<EnableCodeSigning> |
Establécelo en true para que la firma de código esté habilitada. |
<EnablePackageSigning> |
Establécelo en true para que el paquete creado se firme. |
<MtouchLink> |
El modo de vínculo para el proyecto, que puede ser None , SdkOnly o Full . |
<PackageSigningKey> |
Clave de firma del paquete que se va a usar al firmar el paquete. Establécelo en el nombre del certificado del instalador, tal como se muestra en Acceso a cadena de claves. |
<RuntimeIdentifier> |
Identificador en tiempo de ejecución (RID) del proyecto. Las compilaciones de versiones de aplicaciones Mac Catalyst de .NET MAUI usan maccatalyst-x64 y maccatalyst-arm64 como identificadores en tiempo de ejecución, para admitir aplicaciones universales. Para admitir solo una arquitectura única, especifica maccatalyst-x64 o maccatalyst-arm64 . |
<UseHardenedRuntime> |
Establécelo en true para habilitar el tiempo de ejecución protegido, que es necesario para las aplicaciones de Mac Catalyst que se distribuyen fuera de Mac App Store. |
Para obtener una lista completa de las propiedades de compilación, consulta Project file properties.
Importante
Los valores de estas propiedades de compilación no tienen que proporcionarse en el archivo del proyecto. También se pueden proporcionar en la línea de comandos al publicar la aplicación. Esto te permite omitir valores específicos del archivo del proyecto.
En el ejemplo siguiente se muestra un grupo de propiedades típico para compilar y firmar la aplicación Mac Catalyst para su distribución fuera de Mac App Store:
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0-maccatalyst|AnyCPU'">
<MtouchLink>SdkOnly</MtouchLink>
<EnableCodeSigning>True</EnableCodeSigning>
<EnablePackageSigning>true</EnablePackageSigning>
<CreatePackage>true</CreatePackage>
<CodesignKey>Developer ID Application: John Smith (AY2GDE9QM7)</CodesignKey>
<CodesignProvision>MyMauiApp (Non-App Store)</CodesignProvision>
<CodesignEntitlements>Platforms\MacCatalyst\Entitlements.plist</CodesignEntitlements>
<PackageSigningKey>Developer ID Installer: John Smith (AY2GDE9QM7)</PackageSigningKey>
<UseHardenedRuntime>true</UseHardenedRuntime>
</PropertyGroup>
En este ejemplo <PropertyGroup>
se agrega una comprobación de condición, lo que impide que se procese la configuración a menos que se supere la comprobación de condición. La comprobación de condición busca dos elementos:
- La configuración de compilación está establecida en
Release
. - El marco de trabajo de destino está establecida en algo que contiene el texto
net8.0-maccatalyst
. - La plataforma está establecida en
AnyCPU
.
Si se produce un error en alguna de estas condiciones, la configuración no se procesará. Lo que es más importante, los valores <CodesignKey>
, <CodesignProvision>
y <PackageSigningKey>
no están establecidos lo que impide que la aplicación se firme.
Después de agregar el grupo de propiedades anterior, la aplicación se puede publicar desde la línea de comandos de un equipo Mac abriendo un terminal y yendo a la carpeta del proyecto de aplicación .NET MAUI. Ejecute el siguiente comando:
dotnet build -f net8.0-maccatalyst -c Release
Nota:
En .NET 8, el comando dotnet publish
tiene como valor predeterminado la configuración Release
. Por lo tanto, la configuración de la compilación se puede omitir desde la línea de comandos.
Publica compilaciones, signos y paquetes de la aplicación y después copia el archivo .pkg en la carpeta bin/Release/net8.0-maccatalyst/publish/.
Certificación de tu aplicación
macOS incluye una tecnología denominada Gatekeeper, que ayuda a garantizar que solo el software de confianza se ejecute en un equipo Mac. Cuando un usuario descarga y abre un paquete de instalador o una aplicación, Gatekeeper comprueba que el software procede de un desarrollador identificado. Para ello, comprueba si hay un certificado de id. de desarrollador y comprueba que Apple notifique el software para que esté libre de contenido malintencionado conocido y no se haya modificado. Por lo tanto, después de aprovisionar y publicar la aplicación, debes enviarla a Apple para que se notifique. El servicio notarial de Apple examina automáticamente la aplicación firmada por el identificador de desarrollador y realiza comprobaciones de seguridad. Cuando la certificación notarial se realice correctamente, se le asignará un vale para que Gatekeeper sepa que se ha registrado bajo notario.
Las aplicaciones se pueden enviar al servicio notarial de Apple con la herramienta de línea de comandos notarytool
:
xcrun notarytool submit {my_package_filename} --wait --apple-id {my_apple_id} --password {my_app_specific_password} --team-id {my_team_id}
A continuación se muestra un ejemplo de uso de la herramientas notarytool
para firmar un archivo .pkg de .NET MAUI Mac Catalyst:
xcrun notarytool submit MyMauiApp-1.0.pkg --wait --apple-id johm.smith@provider.com --password fqtk-cprr-gqdt-bvyo --team-id AY2GDE9QM7
La marca wait
indica a notarytool
que salga solo después de que el servicio notarial termine de procesar el envío, por lo que quita la necesidad de sondear el servicio por su estado. Los argumentos apple-id
, password
y team-id
se usan para proporcionar las credenciales de App Store Connect. Dado que App Store Connect requiere autenticación en dos fases, debes crear una contraseña específica de la aplicación para notarytool
. Para obtener información sobre cómo crear una contraseña específica de la aplicación, consulta Iniciar sesión en las apps con el ID de Apple usando contraseñas específicas para apps en developer.apple.com.
Después de enviar tu aplicación a Apple, el proceso de certificación suele tardar menos de una hora.
Nota:
La certificación se completa para la mayoría de las aplicaciones en un plazo de 5 minutos. Para obtener información sobre cómo evitar tiempos de respuesta largos del servicio de certificación, consulta Avoid long notarization response times and size limits en developer.apple.com.
Siempre que la certificación se realice correctamente, el servicio de certificación genera un vale para el paquete del instalador firmado y el lote de aplicaciones dentro de él.
Para obtener más información sobre la certificación, consulta Certificación del software de macOS antes de la distribución. Para obtener otros enfoques para enviar la aplicación al servicio de certificación de Apple, consulta Upload your app to the notarization service en developer.apple.com. Para obtener información sobre cómo resolver problemas comunes de certificación, consulta Resolución de problemas comunes de certificación.
Fijación del vale a tu aplicación
La certificación genera un vale para el paquete del instalador firmado y el lote de aplicaciones que contiene, que indica a Gatekeeper que la aplicación está certificada. Una vez completada la certificación, cuando los usuarios intentan ejecutar la aplicación en macOS 10.14 o posterior, Gatekeeper busca el vale en línea.
Una vez que la certificación se haya realizado correctamente, debes adjuntar el vale a la aplicación mediante la herramienta stapler
. Esto garantiza que Gatekeeper pueda encontrar el vale incluso cuando no haya una conexión de red disponible. Ejecuta el siguiente comando para adjuntar el vale a tu .pkg:
xcrun stapler staple {filename}.pkg
La herramienta stapler
recupera el vale y lo adjunta al paquete del instalador. Recibirás un mensaje que te indica que la acción de fijación y validación ha funcionado, siempre que la fijación se realice correctamente.
Validación de la certificación
Si deseas validar la certificación, puedes hacerlo con el siguiente comando:
xcrun stapler validate mypackage.pkg
Distribuir la aplicación
El archivo .pkg firmado y certificado se puede distribuir de forma segura fuera de Mac App Store en una ubicación de tu elección, como un servidor web.
Para obtener información sobre cómo abrir aplicaciones de forma segura en un equipo Mac, consulta Abrir apps de forma segura en el Mac en support.apple.com.
Consulta también
- Preparación de la aplicación para la distribución en developer.apple.com
- Hardened Runtime en developer.apple.com
- Customizing the notarization workflow en developer.apple.com