Neste tutorial, mostramos como criar um app iOS simples usando o Bazel.
O que você vai aprender
Neste tutorial, você aprenderá a realizar as seguintes tarefas:
- Configurar o ambiente instalando o Bazel e o Xcode e fazendo o download do projeto de exemplo
- Configure um espaço de trabalho do Bazel que contenha o código-fonte
do app e um arquivo
WORKSPACE
que identifique o nível superior do diretório do espaço de trabalho. - Atualize o arquivo
WORKSPACE
para conter referências às dependências externas necessárias. - Crie um arquivo
BUILD
- Executar o Bazel para criar o app para o simulador e um dispositivo iOS
- Executar o app no simulador e em um dispositivo iOS
Configurar o ambiente
Para começar, instale o Bazel e o Xcode e faça o download do projeto de amostra.
Instalar o Bazel
Siga as instruções de instalação para instalar o Bazel e suas dependências.
Instalar o Xcode
Faça o download e instale o Xcode. O Xcode contém os compiladores, SDKs e outras ferramentas exigidas pelo Bazel para criar aplicativos da Apple.
Acessar o projeto de amostra
Você também precisa acessar o projeto de exemplo do tutorial no GitHub. O repositório
do GitHub tem duas ramificações: source-only
e main
. A ramificação source-only
contém apenas os arquivos de origem do projeto. Você vai usar os arquivos dessa ramificação
neste tutorial. A ramificação main
contém os arquivos de origem
e os arquivos WORKSPACE
e BUILD
concluídos do Bazel. Você pode usar os arquivos nessa ramificação para verificar seu trabalho quando concluir as etapas do tutorial.
Digite o seguinte na linha de comando para receber os arquivos na ramificação source-only
:
cd $HOME
git clone -b source-only https://github.com/bazelbuild/examples
O comando git clone
cria um diretório chamado $HOME/examples/
. Esse
diretório contém vários projetos de amostra para o Bazel. Os arquivos do projeto deste
tutorial estão em $HOME/examples/tutorial/ios-app
.
Configurar um espaço de trabalho
Um espaço de trabalho é um diretório que contém os
arquivos de origem de um ou mais projetos de software, além de arquivos WORKSPACE
e BUILD
que contêm as instruções que o Bazel usa para criar
o software. O espaço de trabalho também pode conter links simbólicos para diretórios de saída.
Um diretório de espaço de trabalho pode ser localizado em qualquer lugar no seu sistema de arquivos e é indicado
pela presença do arquivo WORKSPACE
na raiz. Neste tutorial, o diretório do espaço de trabalho é $HOME/examples/tutorial/
, que contém os arquivos de projeto de amostra que você clonou do repositório do GitHub na etapa anterior.
Para sua conveniência, defina a variável de ambiente $WORKSPACE
agora para se referir ao
diretório do espaço de trabalho. Na linha de comando, digite:
export WORKSPACE=$HOME/examples/tutorial
Criar um arquivo do ESPAÇO DE TRABALHO
Cada espaço de trabalho precisa ter um arquivo de texto chamado WORKSPACE
localizado no diretório do espaço de trabalho de nível superior. Esse arquivo pode estar vazio ou conter referências
a dependências externas necessárias para criar o
software.
Por enquanto, você vai criar um arquivo WORKSPACE
vazio, que serve apenas para
identificar o diretório do espaço de trabalho. Nas etapas posteriores, você atualizará o arquivo para adicionar
informações de dependência externa.
Digite o seguinte na linha de comando:
touch $WORKSPACE/WORKSPACE
open -a Xcode $WORKSPACE/WORKSPACE
Isso cria e abre o arquivo WORKSPACE
vazio.
Atualizar o arquivo WORKSPACE
Para criar aplicativos para dispositivos Apple, o Bazel precisa extrair as
regras de build da Apple
mais recentes do repositório do GitHub. Para ativar esse recurso, adicione as seguintes regras
git_repository
ao arquivo 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",
)
Analisar os arquivos de origem
Confira os arquivos de origem do app localizados em
$WORKSPACE/ios-app/UrlGet
. Novamente, você está analisando esses arquivos agora para
se familiarizar com a estrutura do app. Não é necessário editar nenhum dos
arquivos de origem para concluir este tutorial.
Criar um arquivo BUILD
Em um prompt de linha de comando, abra um novo arquivo BUILD
para edição:
touch $WORKSPACE/ios-app/BUILD
open -a Xcode $WORKSPACE/ios-app/BUILD
Adicionar a instrução de carregamento da regra
Para criar destinos do iOS, o Bazel precisa carregar regras de compilação do próprio repositório do GitHub sempre que a compilação for executada. Para disponibilizar essas regras no seu projeto, adicione a
seguinte instrução de carregamento no início do arquivo BUILD
:
load("@build_bazel_rules_apple//apple:ios.bzl", "ios_application")
Você só precisa carregar a regra ios_application
porque a regra objc_library
está integrada ao pacote do Bazel.
Adicionar uma regra objc_library
O Bazel fornece várias regras de build que podem ser usadas para criar um app para a plataforma iOS. Neste tutorial, você vai usar primeiro a regra
objc_library
para informar ao Bazel
como criar uma biblioteca estática a partir do código-fonte do app e dos arquivos Xib. Em seguida,
você vai usar a regra
ios_application
para informar como criar o binário do aplicativo e o pacote .ipa
.
Adicione a instrução a seguir ao seu arquivo BUILD
:
objc_library(
name = "UrlGetClasses",
srcs = [
"UrlGet/AppDelegate.m",
"UrlGet/UrlGetViewController.m",
"UrlGet/main.m",
],
hdrs = glob(["UrlGet/*.h"]),
data = ["UrlGet/UrlGetViewController.xib"],
)
Anote o nome da regra, UrlGetClasses
.
Adicionar uma regra ios_application
A regra ios_application
cria o binário do aplicativo e cria o arquivo de pacote .ipa
.
Adicione a instrução a seguir ao seu arquivo 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"],
)
Observe como o atributo deps
faz referência à saída da regra UrlGetClasses
adicionada ao arquivo BUILD
acima.
Agora, salve e feche o arquivo. É possível comparar seu arquivo BUILD
com o
exemplo completo
na ramificação main
do repositório do GitHub.
Criar e implantar o app
Agora você está pronto para criar e implantar seu app em um simulador e em um dispositivo iOS.
O app criado está localizado no diretório $WORKSPACE/bazel-bin
.
Os arquivos WORKSPACE
e BUILD
concluídos deste tutorial estão localizados na
ramificação principal
do repositório do GitHub. Você pode comparar seu trabalho com os arquivos concluídos para
mais ajuda ou solução de problemas.
Criar o app para o simulador
Verifique se o diretório de trabalho atual está dentro do espaço de trabalho do Bazel:
cd $WORKSPACE
Agora, insira o seguinte para criar o app de exemplo:
bazel build //ios-app:ios-app
O Bazel inicia e cria o app de exemplo. Durante o processo de build, a saída dele será semelhante a esta:
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
Encontrar as saídas de build
O arquivo .ipa
e outras saídas estão localizados no
diretório $WORKSPACE/bazel-bin/ios-app
.
Executar e depurar o app no simulador
Agora você pode executar o app pelo Xcode usando o iOS Simulator. Primeiro, gere um projeto do Xcode usando o Tulsi.
Em seguida, abra o projeto no Xcode, escolha um simulador de iOS como o esquema de ambiente de execução e clique em Executar.
Criar o app para um dispositivo
Para criar o app de modo que ele seja instalado e iniciado em um dispositivo iOS, o Bazel precisa do perfil de provisionamento apropriado para esse modelo de dispositivo. Faça o seguinte:
Acesse sua conta de desenvolvedor da Apple e faça o download do perfil de provisionamento adequado para o dispositivo. Consulte a documentação da Apple para mais informações.
Mova seu perfil para
$WORKSPACE
.(Opcional) Adicione seu perfil ao arquivo
.gitignore
.Adicione a linha a seguir ao destino
ios_application
no arquivoBUILD
:provisioning_profile = "<your_profile_name>.mobileprovision",
Agora crie o app para seu dispositivo:
bazel build //ios-app:ios-app --ios_multi_cpus=armv7,arm64
Isso cria o app como um binário de gordura. Para criar para uma arquitetura de dispositivo específica, designe-a nas opções de build.
Para criar uma versão específica do Xcode, use a opção --xcode_version
. Para
criar uma versão específica do SDK, use a opção --ios_sdk_version
. A
opção --xcode_version
é suficiente na maioria dos cenários.
Para especificar uma versão mínima necessária do iOS, adicione o parâmetro minimum_os_version
à regra de build ios_application
no arquivo BUILD
.
Você também pode usar o Tulsi para criar seu app usando uma GUI em vez da linha de comando.
Instalar o app em um dispositivo
A maneira mais fácil de instalar o app no dispositivo é iniciar o Xcode e usar o
comando Windows > Devices
. Selecione seu dispositivo conectado na lista à
esquerda e adicione o app clicando no botão Adicionar (sinal de adição) em
"Apps instalados" e selecionando o arquivo .ipa
que você criou.
Se a instalação do app não for feita no dispositivo, verifique se você está especificando o
perfil de provisionamento correto no arquivo BUILD
(etapa 4 na seção
anterior).
Se o app não for iniciado, verifique se o dispositivo faz parte do
seu perfil de provisionamento. O botão View Device Logs
na tela Devices
no
Xcode pode fornecer outras informações sobre o que deu errado.
Leitura adicional
Para saber mais, consulte a ramificação principal do repositório do GitHub.