En esta página, se describe cómo compilar o probar un proyecto de Xcode con Bazel. Integra se describen las diferencias entre Xcode y Bazel y se indican los pasos para y convertir un proyecto de Xcode en uno de Bazel. También se proporciona información sobre cómo solucionar problemas soluciones para abordar errores comunes.
Diferencias entre Xcode y Bazel
Bazel requiere que especifiques explícitamente cada destino de compilación y su las dependencias y la configuración de compilación correspondiente a través de las reglas de compilación.
Bazel requiere todos los archivos de los que depende el proyecto que estén presentes. el directorio del espacio de trabajo o se especifican como dependencias en el archivo
MODULE.bazel
.Cuando compilas proyectos de Xcode con Bazel, los archivos
BUILD
se convierten en fuente de información. Si trabajas en el proyecto en Xcode, debes generar un versión nueva del proyecto Xcode que coincida con los archivosBUILD
mediante rules_xcodeproj cada vez que actualices los archivosBUILD
. Determinados cambios en los archivosBUILD
como agregar dependencias a un destino, no requiere que vuelvas a generar proyecto, lo que puede acelerar el desarrollo. Si no usas Xcode, Los comandosbazel build
ybazel test
proporcionan capacidades de compilación y prueba. con ciertas limitaciones, que se describen más adelante en esta guía.
Antes de comenzar
Antes de comenzar, haz lo siguiente:
Instala Bazel si aún no lo has hecho.
Si no estás familiarizado con Bazel y sus conceptos, completa la app para iOS. ). Deberías comprender el espacio de trabajo de Bazel, incluidos los archivos
MODULE.bazel
yBUILD
, así como los conceptos de reglas de compilación y paquetes de Bazel.Analizar y comprender las dependencias del proyecto.
Analizar las dependencias del proyecto
A diferencia de Xcode, Bazel requiere que declares explícitamente todas las dependencias para
para cada destino del archivo BUILD
.
Para obtener más información sobre dependencias externas, consulta Cómo trabajar con dependencias las dependencias.
Compila o prueba un proyecto de Xcode con Bazel
Para compilar o probar un proyecto de Xcode con Bazel, haz lo siguiente:
Paso 1: Crea el archivo MODULE.bazel
Crea un archivo MODULE.bazel
en un directorio nuevo. Este directorio se convierte en
Raíz del espacio de trabajo de Bazel. Si el proyecto no usa dependencias externas, este archivo
pueden estar vacíos. Si el proyecto depende de archivos o paquetes que no están en uno de
los directorios del proyecto, especifica estas dependencias externas en el
MODULE.bazel
.
Paso 2: Integra dependencias de SwiftPM (experimental)
Para integrar dependencias de SwiftPM en el espacio de trabajo de Bazel con swift_bazel, debes y convertirlos en paquetes de Bazel como se describe a continuación: instructivo de Google Cloud.
Paso 3: Crea un archivo BUILD
Luego de definir el lugar de trabajo y las dependencias externas, debes
Crea un archivo BUILD
que le indique a Bazel cómo está estructurado el proyecto. Crea el
BUILD
en la raíz del espacio de trabajo de Bazel y configurarlo para que realice una
compilación inicial del proyecto de la siguiente manera:
- Paso 3a: Agrega el destino a la aplicación
- Paso 3b: Agrega los objetivos de prueba (opcional)
- Paso 3c: Agrega los destinos de las bibliotecas
Sugerencia: Para obtener más información sobre los paquetes y otros conceptos de Bazel, consulta Espacios de trabajo, paquetes y destinos.
Paso 3a: Agrega el destino de la aplicación
Agrega un
macos_application
o un
ios_application
objetivo de la regla. Este destino compila un paquete de aplicación para macOS o iOS, respectivamente.
En el destino, especifica como mínimo lo siguiente:
bundle_id
: El ID del paquete (ruta de acceso DNS inversa seguida del nombre de la app) del binario.provisioning_profile
: perfil de aprovisionamiento de tu Apple Developer (si compilas para un dispositivo iOS).families
(solo para iOS): Indica si deseas compilar la aplicación para iPhone, iPad, o ambas.infoplists
: Es la lista de archivos .plist que se combinarán en el archivo Info.plist final.minimum_os_version
: Es la versión mínima de macOS o iOS que que admite la aplicación. Esto garantiza que Bazel compile la aplicación con el con los niveles de API correctos.
Paso 3b: Agrega los objetivos de prueba (opcional)
Compilación de Bazel para Apple reglas admiten la ejecución y pruebas de IU en todas las plataformas de Apple. Agrega los objetivos de prueba de la siguiente manera:
macos_unit_test
para ejecutar pruebas de unidades basadas en bibliotecas y aplicaciones en macOS.ios_unit_test
para compilar y ejecutar pruebas de unidades basadas en bibliotecas en iOS.ios_ui_test
para compilar y ejecutar pruebas de interfaz de usuario en el simulador de iOS.Existen reglas de prueba similares para tvOS watchOS y visionOS
Como mínimo, especifica un valor para el atributo minimum_os_version
. Mientras que
otros atributos de empaquetado, como bundle_identifier
y infoplists
,
de forma predeterminada con los valores más utilizados, asegúrate de que esos valores predeterminados sean compatibles
con el proyecto y ajustarlos según sea necesario. Para las pruebas que requieren la versión
simulador, también debes especificar el nombre de destino ios_application
como el valor del
test_host
.
Paso 3c: Agrega las orientaciones de las bibliotecas
Agregue un objetivo objc_library
para cada uno
biblioteca de Objective-C y una
swift_library
Objetivo para cada biblioteca de Swift de la que dependan la aplicación o las pruebas.
Agrega los objetivos de la biblioteca de la siguiente manera:
Agrega los objetivos de la biblioteca de la aplicación como dependencias a la aplicación. objetivos.
Agrega los destinos de la biblioteca de pruebas como dependencias a los objetivos de prueba.
Enumera las fuentes de implementación en el atributo
srcs
.Enumera los encabezados en el atributo
hdrs
.
Puedes explorar ejemplos existentes de varios tipos de aplicaciones directamente en los ejemplos de rules_apple de la aplicación. Por ejemplo:
Para obtener más información sobre las reglas de compilación, consulta las Reglas de Apple para Bazel
En este punto, se recomienda probar la compilación:
bazel build //:<application_target>
Paso 4: Obtén información detallada de la compilación (opcional)
Si el proyecto es grande, o a medida que crece, considera dividirlo en varios Paquetes de Bazel Este mayor nivel de detalle proporciona lo siguiente:
Mayor incrementalidad de las compilaciones
Mayor paralelización de tareas de compilación
Mejor capacidad de mantenimiento para futuros usuarios,
Mejor control de la visibilidad del código fuente en los objetivos y paquetes Esta Evita problemas, como las bibliotecas que contienen la filtración de detalles de la implementación. en APIs públicas.
Consejos para detallar el proyecto:
Coloca cada biblioteca en su propio paquete de Bazel. Comienza con los que requieren el la menor cantidad de dependencias y avanzar en el árbol de dependencias.
A medida que agregues archivos
BUILD
y especifiques destinos, agrega estos destinos nuevos aldeps
atributos de los destinos que dependen de ellos.La función
glob()
no cruza los límites del paquete, por lo que la cantidad de package aumenta, los archivos que coinciden conglob()
se reducirán.Cuando agregues un archivo
BUILD
a un directoriomain
, agrega también un archivoBUILD
a el directoriotest
correspondiente.Aplica límites de visibilidad de buen estado en todos los paquetes.
Compila el proyecto después de cada cambio importante en los archivos
BUILD
y corrige la compilación. errores a medida que los encuentres.
Paso 5: Ejecuta la compilación
Ejecuta la compilación completamente migrada para asegurarte de que se complete sin errores ni advertencias. Ejecuta cada aplicación y prueba el destino de manera individual para encontrar las fuentes con mayor facilidad de cualquier error que ocurra.
Por ejemplo:
bazel build //:my-target
Paso 6: Genera el proyecto de Xcode con rules_xcodeproj
Cuando compilas con Bazel, los archivos MODULE.bazel
y BUILD
se convierten en la fuente.
sobre la compilación. Para que Xcode tenga en cuenta esto, debes generar un
proyecto de Xcode compatible con Bazel con
rules_xcodeproj
de Google Cloud.
Soluciona problemas
Pueden surgir errores de Bazel cuando no se sincroniza con la versión de Xcode seleccionada. como cuando aplicas una actualización. Aquí hay algunas cosas que puedes probar si estás si experimentas errores con Xcode; por ejemplo, "Se debe especificar la versión de Xcode para usar una CROSSTOOL de Apple".
Ejecuta Xcode manualmente y acepta los Términos y Condiciones.
Usa Xcode Select para indicar la versión correcta, aceptar la licencia y borrar el estado de Bazel.
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -license
bazel sync --configure
- Si esto no funciona, también puedes intentar ejecutar
bazel clean --expunge
.