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:
- Configurar el entorno mediante la instalación de Bazel y Xcode, y la descarga del proyecto de muestra
- Configurar un espacio de trabajo de Bazel que contenga el código fuente para la app y un archivo que identifique el nivel superior del directorio del espacio de trabajo
WORKSPACE - Actualizar el archivo
WORKSPACEpara que contenga referencias a las dependencias externas requeridas - Crear un archivo
BUILD - Ejecutar Bazel para compilar la app para el simulador y un dispositivo iOS
- Ejecutar 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 e instala Xcode. Xcode contiene los compiladores, los SDKs y otras herramientas que Bazel necesita para compilar aplicaciones de Apple.
Obtén el proyecto de muestra
También debes obtener el proyecto de muestra para el instructivo de GitHub. El repositorio de GitHub
tiene dos ramas: source-only y main. La rama source-only
contiene solo los archivos fuente del proyecto. En este instructivo, usarás los archivos de esta
rama. La rama main contiene los archivos fuente
y los archivos WORKSPACE y BUILD de Bazel completados. Puedes usar los archivos de esta
rama para verificar tu trabajo cuando completes los pasos del instructivo.
Ingresa lo siguiente en la línea de comandos para obtener los archivos de la 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/. Este
directorio contiene varios proyectos de muestra para Bazel. Los archivos del proyecto para este
instructivo se encuentran en $HOME/examples/tutorial/ios-app.
Configura un espacio de trabajo
Un espacio de trabajo es un directorio que contiene los
archivos fuente de uno o más proyectos de software, así como un archivo WORKSPACE
y 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 a los directorios de salida.
Un directorio de espacio de trabajo puede ubicarse en cualquier lugar del sistema de archivos y se indica
por la presencia del archivo WORKSPACE en su raíz. En este instructivo, el directorio de tu
espacio de trabajo es $HOME/examples/tutorial/, que contiene los archivos del proyecto de muestra
que clonaste del repositorio de GitHub en el paso anterior.
Para tu comodidad, configura la variable de entorno $WORKSPACE ahora para hacer referencia a
tu directorio de espacio de trabajo. En la línea de comandos, ingresa lo siguiente:
export WORKSPACE=$HOME/examples/tutorial
Crea un archivo WORKSPACE
Cada espacio de trabajo debe tener un archivo de texto llamado WORKSPACE ubicado en el directorio del espacio de trabajo de nivel superior. Este archivo puede estar vacío o contener referencias
a dependencias externas necesarias para compilar el
software.
Por ahora, crearás un archivo WORKSPACE vacío, que solo sirve para
identificar el directorio del espacio de trabajo. En pasos posteriores, actualizarás el archivo para agregar
información de dependencias externas.
Ingresa lo siguiente en la línea de comandos:
touch $WORKSPACE/WORKSPACE
open -a Xcode $WORKSPACE/WORKSPACE
Se creará y abrirá el archivo WORKSPACE vacío.
Actualiza el archivo WORKSPACE
Para compilar aplicaciones para dispositivos Apple, Bazel debe extraer las reglas de compilación de Apple más recientes
de su repositorio de GitHub. Para habilitar esto, agrega las siguientes
git_repository
reglas a tu WORKSPACE archivo:
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
Echa un vistazo a los archivos fuente de la app ubicados en
$WORKSPACE/ios-app/UrlGet. De nuevo, solo estás mirando estos archivos ahora para
familiarizarte con la estructura de la app. No es necesario editar ninguno de los
archivos fuente para completar este instructivo.
Crea un archivo BUILD
En un símbolo del sistema, abre un archivo BUILD nuevo para editarlo:
touch $WORKSPACE/ios-app/BUILD
open -a Xcode $WORKSPACE/ios-app/BUILD
Agrega la instrucción de carga de reglas
Para compilar objetivos 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 para tu proyecto, agrega la
siguiente instrucción de carga al comienzo de tu BUILD archivo:
load("@build_bazel_rules_apple//apple:ios.bzl", "ios_application")
Solo necesitas cargar la regla ios_application, ya que la regla 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 la
plataforma iOS. Para este instructivo, primero usarás la
objc_library regla para indicarle a Bazel
cómo compilar una biblioteca estática a partir del código fuente de la app y los archivos Xib. Luego, usarás la
ios_application
regla para indicarle cómo compilar el objeto binario de la aplicación y el .ipa paquete.
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"],
)
Ten en cuenta el nombre de la regla, UrlGetClasses.
Agrega una regla ios_application
La regla compila el objeto binario de la aplicación y crea el archivo de paquete.ios_application.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
Ahora ya puedes compilar tu app e implementarla en un simulador y en un 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 la
rama principal
del repositorio de GitHub. Puedes comparar tu trabajo con los archivos completados para
obtener ayuda adicional o solucionar problemas.
Compila la app para el simulador
Asegúrate de que tu directorio de trabajo actual esté dentro de tu espacio 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, su resultado se verá 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
Busca los resultados de la compilación
El archivo .ipa y otros resultados se encuentran en el
$WORKSPACE/bazel-bin/ios-app directorio.
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, elige un simulador de iOS como esquema de tiempo de ejecución, y haz clic en Ejecutar.
Compila la app para un dispositivo
Para compilar tu app de modo que se instale y se 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 la documentación de Apple para obtener más información.
Mueve tu perfil a
$WORKSPACE.(Opcional) Agrega tu perfil a tu archivo
.gitignore.Agrega la siguiente línea al objetivo
ios_applicationen tu 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
Esto compila la app como un objeto binario grueso. Para compilar para una arquitectura de dispositivo específica, designa en las opciones de compilación.
Para compilar para una versión específica de Xcode, usa la opción --xcode_version. Para
compilar para una versión específica del SDK, usa la opción --ios_sdk_version. La opción
--xcode_version es suficiente en la mayoría de las situaciones.
Para especificar una versión mínima requerida de iOS, agrega el minimum_os_version
parámetro a la regla de compilación ios_application en tu archivo BUILD.
También puedes usar Tulsi para compilar tu app con una GUI en lugar de la línea de comandos.
Instala la app en un dispositivo
La manera más sencilla de instalar la app en el dispositivo es iniciar Xcode y usar el
Windows > Devices comando. Selecciona el dispositivo conectado de la lista de la
izquierda y, luego, agrega la app haciendo clic en el botón Agregar (signo más) en
"Installed Apps" y seleccionando el archivo .ipa que compilaste.
Si la app no se instala en tu dispositivo, asegúrate de especificar el
perfil de aprovisionamiento correcto en tu BUILD archivo (paso 4 de la sección
anterior).
Si la app no se inicia, asegúrate de que tu dispositivo forme parte de tu
perfil de aprovisionamiento. El botón View Device Logs en la pantalla Devices de
Xcode puede proporcionar otra información sobre lo que salió mal.
Lecturas adicionales
Para obtener más detalles, consulta la rama principal del repositorio de GitHub.