En este instructivo, se explica cómo compilar una app para iOS simple con Bazel.
Qué aprenderás
En este instructivo, aprenderás a realizar lo siguiente:
- Configura el entorno instalando Bazel y Xcode, y descargando el archivo proyecto de muestra
- Configura un lugar de trabajo de Bazel que contenga el código fuente.
para la app y un archivo
WORKSPACE
que identifica el nivel superior de la directorio del espacio de trabajo - Actualiza el archivo
WORKSPACE
para que contenga referencias al archivo las dependencias externas - Crea un archivo
BUILD
- Ejecuta Bazel para compilar la app del simulador y un dispositivo iOS.
- Ejecuta la app en el simulador y en un dispositivo iOS
Configura tu entorno
Para comenzar, instala Bazel y Xcode, y obtén el proyecto de muestra.
Instala Bazel
Sigue las instrucciones de instalación para instalar Bazel y sus dependencias.
Instala Xcode
Descarga Xcode y, luego, instálalo. Xcode contiene los compiladores, los SDK y otras herramientas que requiere Bazel para compilar aplicaciones para Apple.
Obtén el proyecto de muestra
También debes obtener el proyecto de muestra para el instructivo en GitHub. En el GitHub
El repositorio tiene dos ramas: source-only
y main
. La rama source-only
contiene los archivos fuente solo para el proyecto. Usarás los archivos de esta
en este instructivo. La rama main
contiene los archivos de origen
y completaste los archivos WORKSPACE
y BUILD
de Bazel. Puedes usar los archivos de esta
para revisar tu trabajo después de completar los pasos del instructivo.
Ingresa lo siguiente en la línea de comandos para obtener los archivos en source-only
.
rama:
cd $HOME
git clone -b source-only https://github.com/bazelbuild/examples
El comando git clone
crea un directorio llamado $HOME/examples/
. Esta
contiene varios proyectos de muestra para Bazel. Los archivos del proyecto para esta
están en $HOME/examples/tutorial/ios-app
.
Configura un espacio de trabajo
Un lugar de trabajo es un directorio que contiene el
archivos fuente para uno o más proyectos de software, así como un archivo WORKSPACE
y los archivos BUILD
que contienen las instrucciones que Bazel usa para compilar
el software. El espacio de trabajo también puede contener vínculos simbólicos al resultado
directorios.
El directorio del espacio de trabajo se puede ubicar en cualquier parte del sistema de archivos y se indica
por la presencia del archivo WORKSPACE
en su raíz En este instructivo,
el directorio del lugar de trabajo es $HOME/examples/tutorial/
, que contiene la muestra
los archivos del proyecto que clonaste desde el repositorio de GitHub en el paso anterior.
Para tu comodidad, configura la variable de entorno $WORKSPACE
ahora para hacer referencia a
el directorio de tu lugar de trabajo. En la línea de comandos, ingresa lo siguiente:
export WORKSPACE=$HOME/examples/tutorial
Crea un archivo WORKSPACE
Cada lugar de trabajo debe tener un archivo de texto llamado WORKSPACE
ubicado en el nivel superior
Workspace. Es posible que este archivo esté vacío o contenga referencias
a las dependencias externas que se requieren para compilar la
software.
Por ahora, crearás un archivo WORKSPACE
vacío, que simplemente se entrega a
identificar el directorio del lugar de trabajo. En pasos posteriores, actualizarás el archivo para agregar
información sobre las dependencias externas.
Ingresa lo siguiente en la línea de comandos:
touch $WORKSPACE/WORKSPACE
open -a Xcode $WORKSPACE/WORKSPACE
Esto crea y abre el archivo WORKSPACE
vacío.
Actualiza el archivo WORKSPACE
Para compilar aplicaciones para dispositivos Apple, Bazel necesita extraer
Reglas de compilación de Apple
desde su repositorio de GitHub. Para habilitar esta función, agrega lo siguiente:
git_repository
reglas a tu archivo WORKSPACE
:
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
git_repository(
name = "build_bazel_rules_apple",
remote = "https://github.com/bazelbuild/rules_apple.git",
tag = "0.19.0",
)
git_repository(
name = "build_bazel_rules_swift",
remote = "https://github.com/bazelbuild/rules_swift.git",
tag = "0.13.0",
)
git_repository(
name = "build_bazel_apple_support",
remote = "https://github.com/bazelbuild/apple_support.git",
tag = "0.7.2",
)
git_repository(
name = "bazel_skylib",
remote = "https://github.com/bazelbuild/bazel-skylib.git",
tag = "0.9.0",
)
Revisa los archivos fuente
Consulta los archivos fuente de la app en
$WORKSPACE/ios-app/UrlGet
Una vez más, ahora estás mirando estos archivos para
familiarizarse con la estructura de la aplicación. No es necesario editar
archivos fuente para completar este instructivo.
Cómo crear un archivo BUILD
En una ventana de línea de comandos, abre un archivo BUILD
nuevo para editarlo:
touch $WORKSPACE/ios-app/BUILD
open -a Xcode $WORKSPACE/ios-app/BUILD
Agrega la declaración de carga de la regla
Para compilar destinos de iOS, Bazel debe cargar reglas de compilación desde su repositorio de GitHub.
cada vez que se ejecuta la compilación. Para que estas reglas estén disponibles en tu proyecto, agrega
siguiente declaración de carga al comienzo del archivo BUILD
:
load("@build_bazel_rules_apple//apple:ios.bzl", "ios_application")
Solo debes cargar la regla ios_application
, ya que objc_library
está integrada en el paquete de Bazel.
Agrega una regla objc_library
Bazel proporciona varias reglas de compilación que puedes usar para compilar una app para el
plataforma iOS. Para este instructivo, primero usarás el
Regla objc_library
para indicarle a Bazel
cómo compilar una biblioteca estática a partir del código fuente de la aplicación y los archivos Xib. Después
usarás la
ios_application
para indicarle cómo compilar el objeto binario de la aplicación y el paquete .ipa
.
Agrega lo siguiente a tu archivo BUILD
:
objc_library(
name = "UrlGetClasses",
srcs = [
"UrlGet/AppDelegate.m",
"UrlGet/UrlGetViewController.m",
"UrlGet/main.m",
],
hdrs = glob(["UrlGet/*.h"]),
data = ["UrlGet/UrlGetViewController.xib"],
)
Anota el nombre de la regla, UrlGetClasses
.
Agrega una regla ios_application
El
ios_application
Esta regla compila el objeto binario de la aplicación y crea el archivo de paquete .ipa
.
Agrega lo siguiente a tu archivo BUILD
:
ios_application(
name = "ios-app",
bundle_id = "Google.UrlGet",
families = [
"iphone",
"ipad",
],
minimum_os_version = "9.0",
infoplists = [":UrlGet/UrlGet-Info.plist"],
visibility = ["//visibility:public"],
deps = [":UrlGetClasses"],
)
Observa cómo el atributo deps
hace referencia al resultado de la regla UrlGetClasses
.
que agregaste al archivo BUILD
anterior.
Ahora, guarda y cierra el archivo. Puedes comparar tu archivo BUILD
con el
ejemplo completo
en la rama main
del repositorio de GitHub.
Compila e implementa la app
Ya está todo listo para compilar tu app y, luego, implementarla en un simulador y en una dispositivo iOS.
La app compilada se encuentra en el directorio $WORKSPACE/bazel-bin
.
Los archivos WORKSPACE
y BUILD
completados para este instructivo se encuentran en
rama principal
del repositorio de GitHub. Puedes comparar tu trabajo con los archivos completados para
ayuda adicional o solución de problemas.
Compila la app para el simulador
Asegúrate de que el directorio de trabajo actual se encuentre dentro de tu lugar de trabajo de Bazel:
cd $WORKSPACE
Ahora, ingresa lo siguiente para compilar la app de ejemplo:
bazel build //ios-app:ios-app
Bazel inicia y compila la app de ejemplo. Durante el proceso de compilación, El resultado será similar al siguiente:
INFO: Found 1 target...
Target //ios-app:ios-app up-to-date:
bazel-bin/ios-app/ios-app.ipa
INFO: Elapsed time: 0.565s, Critical Path: 0.44s
Cómo buscar los resultados de la compilación
El archivo .ipa
y otras salidas se encuentran en
$WORKSPACE/bazel-bin/ios-app
.
Ejecuta y depura la app en el simulador
Ahora puedes ejecutar la app desde Xcode con el simulador de iOS. Primero, Genera un proyecto de Xcode con Tulsi.
Luego, abre el proyecto en Xcode y elige un simulador de iOS como esquema de tiempo de ejecución. y haz clic en Ejecutar.
Cómo compilar la app para un dispositivo
Para compilar tu app para que se instale e inicie en un dispositivo iOS, Bazel necesita el perfil de aprovisionamiento adecuado para ese modelo de dispositivo. Puedes hacer lo siguiente:
Ve a tu cuenta de desarrollador de Apple. y descarga el perfil de aprovisionamiento adecuado para tu dispositivo. Consulta Documentación de Apple para obtener más información.
Mueve tu perfil a
$WORKSPACE
.(Opcional) Agrega tu perfil al archivo
.gitignore
.Agrega la siguiente línea al destino
ios_application
en el archivoBUILD
:provisioning_profile = "<your_profile_name>.mobileprovision",
Ahora, compila la app para tu dispositivo:
bazel build //ios-app:ios-app --ios_multi_cpus=armv7,arm64
De esta manera, se compila la app como un objeto binario multiarquitectura. Si quieres compilar para un dispositivo específico, sigue estos pasos: de Terraform, desígnala en las opciones de compilación.
Si quieres compilar para una versión específica de Xcode, usa la opción --xcode_version
. Para
compila para una versión del SDK específica, usa la opción --ios_sdk_version
. El
La opción --xcode_version
es suficiente en la mayoría de los casos.
Para especificar una versión de iOS mínima requerida, agrega minimum_os_version
a la regla de compilación ios_application
en tu archivo BUILD
.
También puedes usar Tulsi a compilar tu app con una GUI en lugar de la línea de comandos.
Instalar la app en un dispositivo
La manera más fácil de instalar la app en el dispositivo es iniciar Xcode y usar la
Comando Windows > Devices
. Selecciona tu dispositivo conectado de la lista en la
hacia la izquierda y, luego, haga clic en el botón Agregar (signo más) debajo de
"Apps instaladas" y selecciona el archivo .ipa
que compilaste.
Si la app no se instala en el dispositivo, asegúrate de especificar el
el perfil de aprovisionamiento correcto en tu archivo BUILD
(paso 4 de la
).
Si no se inicia la app, asegúrate de que el dispositivo forme parte
el perfil de aprovisionamiento. El botón View Device Logs
de la pantalla Devices
en
Xcode puede proporcionar otra información sobre el problema.
Lecturas adicionales
Para obtener más detalles, consulta rama principal del repositorio de GitHub.