Este tutorial aborda como criar um app iOS simples usando o Bazel.
O que você vai aprender
Neste tutorial, você vai aprender a:
- Configurar o ambiente instalando o Bazel e o Xcode e fazendo o download do projeto de exemplo
- Configurar um espaço de trabalho do Bazel que contenha o código-fonte
do app e um arquivo
WORKSPACEque identifique o nível superior do diretório do espaço de trabalho - Atualizar o arquivo
WORKSPACEpara conter referências às dependências externas necessárias - Criar 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 acesse o projeto de exemplo.
Instalar o Bazel
Siga as instruções de instalação para instalar o Bazel e as dependências dele.
Instalar o Xcode
Faça o download e instale o Xcode. O Xcode contém os compiladores, SDKs e outras ferramentas necessárias para o Bazel criar aplicativos da Apple.
Acessar o projeto de exemplo
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 do Bazel concluídos. Você pode usar os arquivos dessa ramificação para verificar seu trabalho quando concluir as etapas do tutorial.
Digite o seguinte na linha de comando para acessar 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 exemplo para o Bazel. Os arquivos de 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, bem como um arquivo WORKSPACE
e arquivos 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 estar localizado em qualquer lugar do 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 exemplo clonados 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 WORKSPACE
Cada espaço de trabalho precisa ter um arquivo de texto chamado WORKSPACE localizado no diretório de 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ê vai 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 mais recentes da Apple
do repositório do GitHub. Para ativar isso, adicione as seguintes
git_repository
regras 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á apenas 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 de regras
Para criar destinos iOS, o Bazel precisa carregar regras de build do repositório do GitHub sempre que o build for executado. Para disponibilizar essas regras ao seu projeto, adicione a seguinte instrução de carregamento ao 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 oferece várias regras de build que podem ser usadas para criar um app para a plataforma iOS. Para este tutorial, você vai usar primeiro a
objc_library regra para informar ao Bazel
como criar uma biblioteca estática no código-fonte do app e nos arquivos Xib. Em seguida,
você vai usar a
ios_application
regra para informar como criar o binário do aplicativo e o .ipa pacote.
Adicione o seguinte ao arquivo BUILD:
objc_library(
name = "UrlGetClasses",
srcs = [
"UrlGet/AppDelegate.m",
"UrlGet/UrlGetViewController.m",
"UrlGet/main.m",
],
hdrs = glob(["UrlGet/*.h"]),
data = ["UrlGet/UrlGetViewController.xib"],
)
Observe o nome da regra, UrlGetClasses.
Adicionar uma regra ios_application
A regra
cria o binário do aplicativo e cria o arquivo de pacote .ipa.ios_application
Adicione o seguinte ao 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 que você adicionou ao arquivo BUILD acima.
Agora, salve e feche o arquivo. Você pode comparar o 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 o app e implantá-lo 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 para este tutorial estão localizados na
ramificação principal
do repositório do GitHub. Você pode comparar seu trabalho com os arquivos concluídos para receber mais ajuda ou solucionar 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, digite o seguinte para criar o app de exemplo:
bazel build //ios-app:ios-app
O Bazel é iniciado e cria o app de exemplo. Durante o processo de build, a saída 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 no Xcode usando o simulador iOS. Primeiro, gere um projeto do Xcode usando o Tulsi.
Em seguida, abra o projeto no Xcode, escolha um simulador iOS como esquema de execução e clique em Executar.
Criar o app para um dispositivo
Para criar o app para que ele seja instalado e iniciado em um dispositivo iOS, o Bazel precisa do perfil de provisionamento adequado 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 seu 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 seguinte linha ao destino
ios_applicationno 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 gordo. Para criar 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 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
Windows > Devices comando. Selecione o dispositivo conectado na lista à esquerda e adicione o app clicando no botão Adicionar (sinal de mais) em "Apps instalados" e selecionando o arquivo .ipa que você criou.
Se o app não for instalado 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 do Xcode pode fornecer outras informações sobre o que deu errado.
Leitura adicional
Para mais detalhes, consulte a ramificação principal do repositório do GitHub.