A partir de la versión 5.3 de Unreal Engine (UE), se actualiza el proceso de trabajo de los proyectos de Xcode para que Unreal Engine sea más coherente con los proyectos estándar de las apps de Xcode. La nueva configuración del proyecto mejora la organización y la calidad de vida de los desarrolladores de Xcode y proporciona acceso a varias herramientas dentro de Xcode para agilizar la firma de código y el aprovisionamiento, incluyendo:
Firma automática de código.
Gestión de derechos.
Edición de archivos
.plist.Manejo estándar del marco Xcode.
Esta página ofrece una descripción general de los cambios para los usuarios que realizan la transición a UE 5.3 y versiones posteriores (5.3+) desde versiones anteriores.
Requisitos previos
El proceso de trabajo actualizado de Xcode está disponible para UE 5.3 y versiones posteriores, y está habilitado por defecto para los nuevos proyectos. Sin embargo, si necesitas habilitarlo manualmente, sigue estos pasos:
Abre el directorio de instalación de tu motor, abre
Engine/Config/BaseEngine.iniy asegúrate de establecer la siguiente variable de configuración:Engine/Config/BaseEngine.ini
C++[/Script/MacTargetPlatform.XcodeProjectSettings] bUseModernXcode=trueRegenera los archivos de tu proyecto de Xcode tanto para el motor como para tu proyecto. Si estás utilizando una compilación fuente de UE, ejecuta la secuencia de comandos
GenerateProjectFiles.commanden el directorio de instalación del motor para regenerar los archivos del proyecto para el código fuente de UE. Deberías ver tres archivos del espacio de trabajo de Xcode en el directorio de tu proyecto:UE5 (Mac).xcworkspaceUE5 (TVOS).xcworkspaceUE5 (IOS).xcworkspace
La nueva configuración de Xcode ya está lista para usarse. En las siguientes secciones se explican las novedades con respecto a la configuración anterior del proyecto.
Proyectos, esquemas y configuraciones de compilación
Anteriormente, los proyectos Xcode de UE combinaban objetivos y configuraciones de compilación en esquemas. Por ejemplo, bajo un solo proyecto (MyProject), los usuarios tenían un esquema de «editor de desarrollo» que compilaba una versión de desarrollo de un objetivo del editor.
UE 5.3+ proporciona un proyecto de Xcode independiente (dentro del mismo espacio de trabajo de Xcode) para cada tipo de objetivo. Por ejemplo, un espacio de trabajo de Xcode para un proyecto con el nombre «MyProject» tendría un proyecto independiente para MyProjectEditor, MyProjectGame, MyProjectClient y MyProjectServer.
Cada objetivo tiene solo las configuraciones de compilación que admite. Por ejemplo, la mayoría de los editores no son compatibles con las configuraciones de prueba o envío, por lo que no están disponibles en los proyectos del editor.
Los espacios de trabajo actualizados tienen una gran cantidad de esquemas. Cuando los revises, utiliza el filtro y la sección Recientes para acotar tu lista según sea necesario.
Espacios de trabajo por plataforma
Anteriormente, cuando UE generaba archivos de proyecto, creaba un espacio de trabajo monolítico que incluía objetivos para cada una de las plataformas de Apple.
En UE 5.3+, cuando UE genera archivos de proyecto, crea un espacio de trabajo independiente para cada plataforma de Apple.
Esto simplifica los espacios de trabajo y los proyectos, y dado que Xcode puede abrir varios espacios de trabajo, puedes alternar entre plataformas pulsando las teclas Comando + ` (comilla invertida).
Cada espacio de trabajo contiene solo los objetivos compatibles con esa plataforma, por lo que iOS y tvOS tienen menos esquemas disponibles. Tienen un objetivo de UnrealEditor, pero no se puede compilar correctamente. En su lugar, estos objetivos están presentes para que el código fuente esté disponible para las búsquedas.
Aplicaciones autónomas
Anteriormente, UE empaquetaba todos los datos necesarios para ejecutar las aplicaciones de iOS, iPadOS y tvOS en sus respectivos archivos .app, lo que los convertía en autónomos. Sin embargo, los proyectos de macOS dividen los datos entre .app, el directorio Saved/Cooked/Mac y otras ubicaciones en los directorios del motor y del proyecto.
En UE 5.3+, todas las plataformas Mac usan el mismo proceso de trabajo, que reúne los datos necesarios en una única ubicación y los agrupa en un archivo .app que se puede ejecutar manualmente o con Xcode. Para ello, tienes que utilizar el paso Stage (etapa) en el proceso de cooking.
Las compilaciones del editor están todavía sin el cooking y se encuentran en carpetas sueltas.
Empaquetar y distribuir
Los procesos de empaquetado para macOS e iOS/tvOS/iPadOS ahora son totalmente coherentes entre sí.
UE ya no genera automáticamente un archivo .ipa para iOS, ya que no es necesario en macOS y solo es útil en Windows.
Distribución
El modo de distribución ya no realiza firmas de código mediante un certificado de distribución. En su lugar, crea un archivo estándar de Xcode (.xcarchive), que puedes usar para distribuir el .app a varios destinos, como la App Store o tu equipo. Al compilar distribuciones, Xcode también genera un archivo .dSYM para incluirlo en el archivo de Xcode, lo cual resulta útil para depurar fallos y puede enviarse a Apple para depurar fallos en tiempo real. Envía tu .dysm junto con tu app cuando la subas a Apple para su publicación.
La generación de .dSYM tardará varios minutos.
Para empaquetar normalmente, haz clic en Plataformas > Empaquetar proyecto en Unreal Editor, o añade -package -clientconfig=Shipping a tu línea de comandos de BuildCookRun.
Para empaquetar y distribuir, marca la casilla de verificación Distribución en tu Configuración del proyecto o añade -package -clientconfig=Shipping -distribution a la línea de comandos de BuildCookRun.
También puedes hacer clic en Producto > Archivar en Xcode.
Xcode utiliza el proceso estándar para generar un archivo .xcarchive, lo que incluye incorporar el directorio Staged y los marcos de trabajo de firma de código. Esto utiliza la configuración de envío, incluso si se establece el esquema en Development (desarrollo).
Si utilizas Archivar en Xcode, se abrirá automáticamente la ventana Archivos y se seleccionará el nuevo archivo. Si utilizas otros métodos de UE para crearlo, tendrás que abrir manualmente la ventana haciendo clic en Ventana > Organizador y, a continuación, seleccionar tu proyecto y Archivos en la esquina superior izquierda.
Utiliza los botones de la derecha de la ventana Archivos para validar o distribuir tu app. Puedes utilizar esto para crear un archivo .ipa de iOS para uso interno siguiendo las indicaciones de cada opción. Para la validación y distribución en la App Store, debes crear una entrada de aplicación en appstoreconnect.apple.com.
Es posible que las solicitudes de distribución o validación de tu app requieran que elijas un certificado de distribución o que sigas otros pasos de aprovisionamiento. Consulta la documentación de Apple para obtener más información.
El archivado en Xcode utiliza Shipping (envío) porque es la configuración predeterminada para la acción Archivo en el esquema que genera UE. Además, -package -distribution utilizará la acción de archivar de Xcode en segundo plano en lugar de la acción de compilación.
Puedes cambiar esto en el esquema si es necesario para realizar pruebas, pero recomendamos que solo se distribuyan compilaciones de envío.
Configurar el nombre en pantalla de tu app en MacOS
El nombre en pantalla de tu aplicación es el nombre del archivo .app de Mac al crear una compilación archivada. Cuando empaquetas para su distribución (o utilizas el menú Archivar de Xcode), el nombre en pantalla es el nombre del .app que ven los usuarios al usar Finder. Si no se establece, el .app tendrá el mismo nombre que el archivo .uproject . Para cambiar el nombre en pantalla en UE 5.3.2 y versiones posteriores, abre el archivo MacEngine.ini y establece la variable de configuración ApplicationDisplayName:
MacEngine.ini
[Xcode]
ApplicationDisplayName="Friendly Application Name"El ApplicationDisplayName no es el mismo que el nombre en pantalla del paquete utilizado para iOS, por lo que tendrás que configurarlos por separado para las aplicaciones que se ejecuten tanto en MacOS como en iOS.
Proyectos solo de contenido/blueprint
Dado que los proyectos solo de contenido (o solo de blueprint) no tienen un proyecto de Xcode ni archivos fuente de los objetivos de compilación, reutilizan los objetivos genéricos UnrealGame del motor combinados con sus datos específicos del proyecto para crear una compilación.
Prácticas estándar de Xcode
El proceso de trabajo de Xcode actualizado utiliza Xcode para gestionar tantos componentes como sea posible de acuerdo con el proceso de trabajo de Xcode estándar, incluyendo:
Firma de código.
Archivos
.plist.Archivos de derechos.
Marcos.
Firma de código
Anteriormente, solo iOS/iPadOS/tvOS requerían la firma de código. A partir de 2023, Apple también exige la firma de código para macOS. El proceso de trabajo actualizado utiliza por defecto la función Firma de código automática de Xcode para todas las plataformas.
Para utilizar la firma de código automática, sigue estos pasos:
Inicia sesión en tu cuenta de desarrollador de Apple en Xcode.
Abre tu Configuración del proyecto, luego busca Plataformas > Proyectos Xcode y establece las siguientes propiedades:
| Nombre del ajuste | CVar | Descripción |
|---|---|---|
Utilizar la firma de código moderna |
| Habilita la firma de código automática para tu proyecto UE. Requiere que se configuren los dos ajustes siguientes. |
Prefijo de firma moderno |
| Un nombre de dominio inverso para tu empresa. Por ejemplo: |
Equipo de firma moderno | `ModernSigningTeam | El ID del equipo que utiliza tu aplicación al firmar. Es lo mismo que el ID del equipo en la sección Signing and Capabilities (firma y capacidades) de Xcode. Para obtener más información, consulta la sección Find Your Team ID (Buscar el ID de tu equipo) más abajo. |
Buscar el ID de tu equipo
Para encontrar tu ID de equipo para el ajuste Modern Signing Team (equipo moderno de firma), abre la página de desarrolladores de Apple, inicia sesión en tu cuenta y haz clic en Membership Details (Detalles de la membresía). Se muestra tu ID de equipo.
Archivos .plist
Todas las aplicaciones deben incluir un archivo .plist integrado . El archivo .plist final suele crearse a partir de una plantilla parcial que Xcode modificará en función de la configuración del proyecto de Xcode. Debido a que UE genera proyectos de Xcode, esto puede ser un proceso complicado.
El proceso de trabajo actualizado de Xcode proporciona un control de alto nivel sobre el manejo de archivos .plist . Además, la edición de los ajustes .plist en Xcode ahora es compatible
Por defecto, perderás los cambios de iOS si editas los ajustes de .plist . Consulta más abajo la sección de MacOS frente a iOS para obtener más información.
Plantilla frente a prediseñado
Es preferible que Xcode finalice el archivo .plist en la app utilizando los ajustes del proyecto de Xcode generado por UE. Sin embargo, UE también es compatible con .plist prediseñados que Xcode no modificará. Dado que se trata de una función avanzada, no se muestra en la Configuración del proyecto Xcode y requiere editar un archivo de configuración. Consulta la sección Utilizar un archivo .plist prediseñado más abajo para obtener instrucciones.
Los ajustes de .plist en la Configuración del proyecto (los elementos Info.plist de objetivo Mac e Info.plist de objetivo IOS) permiten especificar la plantilla .plist predeterminada, o una plantilla personalizada .plist.
La ubicación por defecto de los archivos Template.plist es el directorio Build/IOS de tu proyecto. Cuando UE genere archivos de proyecto de Xcode para tu proyecto, comprobará si tienes un archivo .plist de plantilla en tu proyecto y, si no lo encuentra, copiará un archivo .plist del motor a la carpeta de tu proyecto.
Si editas los ajustes de .plist en Xcode y estos apuntan a un archivo .plist en tu directorio de instalación de UE (en vez del directorio de tu proyecto), Xcode lo marcará como modificable y lo modificará, lo que afectará a todos los proyectos de UE que utilicen esa instalación. Esta es la razón por la que UE copia el archivo .plist del motor en tu proyecto. Es posible que quieras comparar el archivo .plist de futuras versiones del motor para comprobar si hemos actualizado los ajustes por defecto.
Si esto sucede, consulta las instrucciones sobre cómo restaurar un archivo .plist a los valores predeterminados más abajo.
El objetivo de UnrealEditor tiene un .plist único, ya que el .app se comparte en todos los proyectos. Esto es algo con lo que la mayoría de los usuarios no tendrán que lidiar.
Utilizar un archivo .plist prediseñado
Si quieres utilizar un archivo .plist prediseñado, modifica tu archivo DefaultEngine.ini y establece uno o ambos de los siguientes ajustes con las rutas de los archivos que deseas utilizar:
DefaultEngine.ini
[/Script/MacTargetPlatform.XcodeProjectSettings]
PremadeMacPlist=(FilePath="/Game/Build/Mac/Resources/MyGameMac.plist")
PremadeIOSPlist=(FilePath="/Game/Build/IOS/Resources/MyGameIOS.plist")Restaurar un archivo .plist a los valores predeterminados
También puedes utilizar el botón Restaurar Info.plist a los valores predeterminados para volver a copiar el archivo de plantilla .plist por defecto de Mac del directorio Engine a tu proyecto y establecer los valores adecuados. Esto puede resultar útil si quieres utilizar archivos .plist por defecto actualizados en futuras versiones de UE.
Puedes extraer un archivo .plist de una app generada y utilizarlo como fuente para un .plist prediseñado.
Manifiestos de privacidad
XCode utiliza manifiestos de privacidad para explicar qué tipo de datos recopila la aplicación sobre sus usuarios y por qué lo hace. Aquí se incluyen los datos que recopila el propio código y todos los SDK de terceros que se usen. A la hora de distribuir la aplicación, XCode combina los manifiestos de privacidad de los SDK y de la aplicación en un único informe de privacidad, de modo que resulte más sencillo ofrecer a los usuarios una información transparente sobre las prácticas de privacidad de la aplicación.
UE incluye manifiestos de privacidad predeterminados en las siguientes ubicaciones:
MacOS:
Engine/Build/Mac/Resources/UEMetadata/PrivacyInfo.xcprivacyiOS, tvOS e iPadOS:
Engine/Build/iOS/Resources/UEMetadata/PrivacyInfo.xcprivacy
Los proyectos que empleen funciones de privacidad adicionales tendrán que proporcionar otro archivo PrivacyInfo.xcprivacy en la ubicación indicada en la configuración del proyecto de UE. Por defecto, son estas:
MacOS:
/Game/Build/Mac/Resources/PrivacyInfo.xcprivacyiOS, tvOS e iPadOS:
/Game/Build/IOS/Resources/PrivacyInfo.xcprivacy
Para obtener más información, consulta la documentación de Apple sobre manifiestos de privacidad.
MacOS frente a iOS
Trabajar con archivos .plist es diferente en macOS y iOS en el nuevo proceso de trabajo de Xcode, ya que UBT tiene una lógica muy integrada para generar archivos .plist de iOS . Trasladar esa lógica al generador de proyectos/Xcode no era viable.
Si observas los ajustes por defecto de UBT, verás que apunta a /Game/Build/IOS/UBTGenerated/Info.Template.plst**,** lo que indica que cada vez que se ejecuta UBT, puede cambiar el contenido de los archivos .plist de iOS.
Sin embargo, puedes cambiar la configuración del proyecto para utilizar tu archivo .plist de plantilla (o prediseñado), que ignorará lo que genere UBT. Si lo haces, puedes utilizar Xcode para editar el archivo .plist .
A continuación, se muestra una descripción general de las diferencias entre los archivos .plist de Mac e iOS :
| Mac | iOS | |
|---|---|---|
.plist por defecto | Plantilla copiada del directorio Engine. | Plantilla generada por UBT. |
Modificación de .plist de Xcode | Sí | No si se utiliza el generado por UBT. |
Derechos
Todas las aplicaciones designan derechos como parte de la firma de código. Los derechos controlan algunas funciones o restricciones creadas por Apple, como la compatibilidad con GameCenter o la ejecución en el entorno de pruebas de seguridad de Mac.
La generación de proyectos Xcode de UE trata los derechos de forma similar a los archivos .plist (en Mac) anteriores. UE genera un proyecto de Xcode y, si no hay un archivo de derechos en la ubicación por defecto del proyecto, se copia el archivo por defecto del directorio Engine. A continuación, puedes utilizar Xcode (o un editor de texto) para modificar los derechos, que se encuentran en Build/Mac/Entitlements o Build/IOS/Entitlements dentro de tu proyecto.
Si tienes restricciones diferentes en el entorno de pruebas u otras diferencias en lo que envías a los usuarios finales, puedes establecer derechos separados para el envío y el desarrollo. En caso de que no necesites funciones separadas, deberías apuntarlas al mismo archivo.
Actualmente, en la Configuración del proyecto solo se muestran los derechos de Mac.
A continuación se muestran los ajustes por defecto de derechos para macOS e iOS:
| Configuración de derechos | Mac | iOS |
|---|---|---|
Desarrollo por defecto | En entorno de pruebas, permite conexiones de red cliente/servidor. | No se han establecido derechos especiales. |
Envío por defecto | En entorno de pruebas, ppermite conexiones de red del cliente. | No se han establecido derechos especiales. |
El Informador de bloqueos no es compatible con los juegos empaquetados que habilitan el derecho de entorno de pruebas (por defecto desde UE 5.3).
Marcos
Los marcos son un sistema de Xcode para recopilar cabeceras, bibliotecas y contenido. El nuevo proceso de trabajo de Xcode gestiona los marcos con métodos estándar de Xcode en lugar de tener que copiar y realizar firmas de código manualmente como ocurría con el proceso de trabajo anterior. Cuando UE genera un proyecto de Xcode, utiliza el sistema de compilación para encontrar los marcos referenciados establecidos en varios archivos fuente de compilación. A continuación, configura el proyecto de Xcode para que copie bibliotecas dinámicas y contenido en el paquete de la app y lo codifique según sea necesario.
Registros de acceso
Los archivos de registro pueden aparecer en diferentes ubicaciones en función de los ajustes de tu entorno de pruebas y de cómo estés ejecutando la aplicación:
Si el entorno de pruebas está habilitado:
Ejecución mediante Xcode: ~/Library/Logs/[nombre del proyecto]
Ejecución mediante doble clic o utilizando el terminal: ~/Library/Containers/[ID de paquete de tu app]/datos/Library/Logs
Con el entorno de pruebas deshabilitado:
~/Library/Logs/[nombre del proyecto]