Regras do Objective-C

Regras

j2objc_library

j2objc_library(name, deps, compatible_with, deprecation, distribs, entry_classes, features, jre_deps, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)

Essa regra usa J2ObjC para converter arquivos de origem Java para Objective-C, que podem ser usados como dependências de regras objc_library e objc_binary. Informações detalhadas sobre o J2ObjC podem ser encontradas no site do J2ObjC (link em inglês).

As flags de transcompilação J2ObjC personalizadas podem ser especificadas usando a flag de build --j2objc_translation_flags na linha de comando.

Os arquivos traduzidos incluídos em um destino j2objc_library vão ser compilados usando a configuração de compilação padrão, a mesma configuração das origens de uma regra objc_library sem opções de compilação especificadas nos atributos.

Além disso, a duplicação do código gerado é eliminada no nível da meta, não da origem. Se você tiver dois destinos Java diferentes que incluem os mesmos arquivos de origem Java, poderá encontrar um erro de símbolo duplicado no momento da vinculação. A maneira correta de resolver esse problema é mover os arquivos de origem Java compartilhados para um destino comum separado que possa ser dependente.

Argumentos

Atributos
name

Name; required

Um nome exclusivo para o destino.

deps

List of labels; optional

Uma lista de destinos j2objc_library, java_library, java_import e java_proto_library que contêm arquivos Java a serem transcompilados para Objective-C.

Todos os destinos java_library e java_import que podem ser alcançados transitivamente por exports, deps e runtime_deps serão traduzidos e compilados. No momento, não há suporte para arquivos gerados pelo processamento de anotações Java ou destinos java_import sem srcjar especificado.

A conversão J2ObjC funciona de maneira diferente dependendo do tipo de arquivos de origem Java de origem incluídos no fechamento transitivo. Para cada arquivo de origem .java incluído em srcs de java_library, um arquivo de origem .h e .m correspondente será gerado. Para cada jar de origem incluído em srcs de java_library ou srcjar de java_import, um arquivo de origem .h e .m correspondente será gerado com todo o código do jar.

Os usuários podem importar os arquivos principais gerados pelo J2ObjC no código. Os caminhos de importação desses arquivos são o caminho relativo à raiz dos artefatos Java originais. Por exemplo, //some/package/foo.java tem um caminho de importação de some/package/foo.h e //some/package/bar.srcjar tem some/package/bar.h

Se as regras proto_library estiverem no fechamento transitivo desta regra, os protos J2ObjC também serão gerados, compilados e vinculados no nível binário. Para o proto //some/proto/foo.proto, os usuários podem referenciar o código gerado usando o caminho de importação some/proto/foo.j2objc.pb.h.

entry_classes

List of strings; optional

A lista de classes Java com contrapartes ObjC traduzidas que serão referenciadas diretamente pelo código ObjC do usuário. Este atributo é obrigatório se a sinalização --j2objc_dead_code_removal estiver ativada. As classes Java precisam ser especificadas nos respectivos nomes canônicos, conforme definido pela especificação da linguagem Java (link em inglês). Quando a sinalização --j2objc_dead_code_removal é especificada, a lista de classes de entrada é coletada de forma transitiva e usada como pontos de entrada para realizar a análise de código inativo. As classes não utilizadas vão ser removidas do pacote de apps ObjC final.
jre_deps

List of labels; optional

A lista de bibliotecas de emulação JRE extras exigidas por todo o código Java traduzido por essa regra j2objc_library. Apenas a funcionalidade principal do JRE é vinculada por padrão.

objc_import

objc_import(name, hdrs, alwayslink, archives, compatible_with, deprecation, distribs, features, includes, licenses, restricted_to, sdk_dylibs, sdk_frameworks, sdk_includes, tags, target_compatible_with, testonly, textual_hdrs, visibility, weak_sdk_frameworks)

Essa regra encapsula uma biblioteca estática já compilada na forma de um arquivo .a. Ele também permite exportar cabeçalhos e recursos usando os mesmos atributos compatíveis com objc_library.

Argumentos

Atributos
name

Name; required

Um nome exclusivo para o destino.

hdrs

List of labels; optional

A lista de arquivos principais C, C++, Objective-C e Objective-C++ publicados por essa biblioteca a serem incluídos pelas fontes nas regras dependentes.

Esses cabeçalhos descrevem a interface pública da biblioteca e serão disponibilizados para inclusão pelas fontes nesta regra ou em regras dependentes. Os cabeçalhos que não podem ser incluídos por um cliente dessa biblioteca precisam ser listados no atributo srcs.

Eles vão ser compilados separadamente da origem se os módulos estiverem ativados.

Boolean; optional; default is False

Se for 1, qualquer pacote ou binário que dependa (direta ou indiretamente) dessa biblioteca vai ser vinculado a todos os arquivos de objeto para os arquivos listados em srcs e non_arc_srcs, mesmo que alguns não contenham símbolos referenciados pelo binário. Isso é útil se o código não é chamado explicitamente pelo código no binário, por exemplo, se ele é registrado para receber algum callback fornecido por algum serviço.
archives

List of labels; required

A lista de arquivos .a fornecidos para destinos Objective-C que dependem desse destino.
includes

List of strings; optional

Lista de caminhos de pesquisa do #include/#import a serem adicionados a esse destino e a todos os destinos dependentes. Isso é feito para oferecer suporte a bibliotecas de terceiros e de código aberto que não especificam todo o caminho do espaço de trabalho nas instruções #import/#include.

Os caminhos são interpretados em relação ao diretório do pacote, e os genfiles e raízes bin (por exemplo, blaze-genfiles/pkg/includedir e blaze-out/pkg/includedir) são incluídos além da raiz do cliente real.

Ao contrário de COTS, essas sinalizações são adicionadas para essa regra e todas as regras que dependem dela. Observação: não são as regras das quais ela depende. Tenha muito cuidado, porque isso pode ter efeitos de longo alcance. Em caso de dúvida, adicione sinalizações "-iquote" a COPTS.

sdk_dylibs

List of strings; optional

Nomes das bibliotecas .dylib do SDK a serem vinculadas. Por exemplo, "libz" ou "libarchive". "libc++" é incluída automaticamente se o binário tem origens C++ ou Objective-C++ na árvore de dependências. Ao vincular um binário, todas as bibliotecas nomeadas no gráfico de dependência transitiva desse binário são usadas.
sdk_frameworks

List of strings; optional

Nomes dos frameworks do SDK a serem vinculados (por exemplo, "AddressBook", "QuartzCore"). "UIKit" e "Foundation" são sempre incluídos ao criar para as plataformas iOS, tvOS e watchOS. No macOS, somente "Foundation" é sempre incluído.

Ao vincular um binário da Apple de nível superior, todos os frameworks do SDK listados no gráfico de dependência transitiva desse binário são vinculados.

sdk_includes

List of strings; optional

Lista de caminhos de pesquisa #include/#import a serem adicionados a esse destino e a todos os destinos dependentes, em que cada caminho é relativo a $(SDKROOT)/usr/include.
textual_hdrs

List of labels; optional

A lista de arquivos C, C++, Objective-C e Objective-C++ incluídos como cabeçalhos pelos arquivos de origem nesta regra ou pelos usuários dessa biblioteca. Ao contrário dos hdrs, eles não serão compilados separadamente das fontes.
weak_sdk_frameworks

List of strings; optional

Nomes de frameworks do SDK com links fracos. Por exemplo, "MediaAccessibility". Diferente dos frameworks do SDK vinculados regularmente, os símbolos de frameworks com links fracos não causam erro se não estiverem presentes no momento da execução.

objc_library

objc_library(name, deps, srcs, data, hdrs, alwayslink, compatible_with, copts, defines, deprecation, distribs, enable_modules, exec_compatible_with, exec_properties, features, includes, licenses, linkopts, module_map, module_name, non_arc_srcs, pch, restricted_to, runtime_deps, sdk_dylibs, sdk_frameworks, sdk_includes, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, weak_sdk_frameworks)

Esta regra produz uma biblioteca estática com base nos arquivos de origem Objective-C fornecidos.

Argumentos

Atributos
name

Name; required

Um nome exclusivo para o destino.

deps

List of labels; optional

A lista de destinos que são vinculados para formar o pacote final.
srcs

List of labels; optional

A lista de arquivos de origem e cabeçalho C, C++, Objective-C e Objective-C++ e/ou arquivos de origem assembly (".s", ".S" ou ".asm"), que são processados para criar o destino da biblioteca. Estes são seus arquivos verificados e os arquivos gerados. Os arquivos de origem são compilados em arquivos .o com o Clang. Os arquivos de cabeçalho podem ser incluídos/importados por qualquer fonte ou cabeçalho no atributo srcs desse destino, mas não por cabeçalhos em hdrs ou qualquer destino que dependa dessa regra. Além disso, os arquivos .o pré-compilados podem ser fornecidos como srcs. Tenha cuidado para garantir consistência na arquitetura dos arquivos .o fornecidos e do build para evitar erros do vinculador de símbolos ausentes.
hdrs

List of labels; optional

A lista de arquivos principais C, C++, Objective-C e Objective-C++ publicados por essa biblioteca a serem incluídos pelas fontes nas regras dependentes.

Esses cabeçalhos descrevem a interface pública da biblioteca e serão disponibilizados para inclusão pelas fontes nesta regra ou em regras dependentes. Os cabeçalhos que não podem ser incluídos por um cliente dessa biblioteca precisam ser listados no atributo srcs.

Eles vão ser compilados separadamente da origem se os módulos estiverem ativados.

Boolean; optional; default is False

Se for 1, qualquer pacote ou binário que dependa (direta ou indiretamente) dessa biblioteca vai ser vinculado a todos os arquivos de objeto para os arquivos listados em srcs e non_arc_srcs, mesmo que alguns não contenham símbolos referenciados pelo binário. Isso é útil se o código não é chamado explicitamente pelo código no binário, por exemplo, se ele é registrado para receber algum callback fornecido por algum serviço.
copts

List of strings; optional

Sinalizações extras a serem transmitidas para o compilador. Sujeito à substituição "Make variables" e tokenização do shell Bourne. Essas sinalizações serão aplicadas somente a esse destino, e não àquelas de que ela depende nem àquelas que dependem dele.

Observe que, para o projeto Xcode gerado, os caminhos de diretório especificados usando sinalizações "-I" em copts são analisados, precedidos com "$(WORKSPACE_ROOT)/" se forem caminhos relativos e adicionados aos caminhos de pesquisa de cabeçalho para o destino do Xcode associado.

defines

List of strings; optional

Sinalizações -D extras a serem transmitidas para o compilador. Eles precisam estar no formato KEY=VALUE ou simplesmente KEY e são transmitidos não apenas para o compilador para esse destino (como copts), mas também para todos os objc_ dependem desse destino. Sujeito à substituição "Make variables" e tokenização do shell Bourne.
enable_modules

Boolean; optional; default is False

Ativa o suporte ao módulo clang (via -fmodules). Definir como 1 permitirá que você @import cabeçalhos do sistema e outros destinos: @import UIKit; @import path_to_package_target;
includes

List of strings; optional

Lista de caminhos de pesquisa do #include/#import a serem adicionados a esse destino e a todos os destinos dependentes. Isso é feito para oferecer suporte a bibliotecas de terceiros e de código aberto que não especificam todo o caminho do espaço de trabalho nas instruções #import/#include.

Os caminhos são interpretados em relação ao diretório do pacote, e os genfiles e raízes bin (por exemplo, blaze-genfiles/pkg/includedir e blaze-out/pkg/includedir) são incluídos além da raiz do cliente real.

Ao contrário de COTS, essas sinalizações são adicionadas para essa regra e todas as regras que dependem dela. Observação: não são as regras das quais ela depende. Tenha muito cuidado, porque isso pode ter efeitos de longo alcance. Em caso de dúvida, adicione sinalizações "-iquote" a COPTS.

linkopts

List of strings; optional

Sinalizações extras a serem transmitidas para o vinculador.
module_map

Label; optional

Um mapa de módulo do Clang personalizado para esse destino. Não é recomendável usar um mapa de módulo personalizado. A maioria dos usuários precisa usar mapas de módulo gerados pelo Bazel. Se especificado, o Bazel não gera um mapa de módulo para esse destino, mas transmite o mapa de módulo fornecido para o compilador.
module_name

String; optional

Define o nome do módulo para o destino. Por padrão, o nome do módulo é o caminho de destino com todos os símbolos especiais substituídos por _. Por exemplo, //foo/baz:bar pode ser importado como foo_baz_bar.
non_arc_srcs

List of labels; optional

A lista de arquivos Objective-C que são processados para criar o destino da biblioteca que NÃO usam o ARC. Os arquivos nesse atributo são tratados de forma muito semelhante aos arquivos no atributo srcs, mas são compilados sem o ARC ativado.
pch

Label; optional

Arquivo de cabeçalho para anexar a todos os arquivos de origem que estão sendo compilados (arc e non-arc). O uso de arquivos pch não é recomendado em arquivos BUILD, e isso precisa ser considerado descontinuado. Como os arquivos pch não são pré-compilados, isso não é um aprimoramento de velocidade de build, mas é apenas uma dependência global. Do ponto de vista da eficiência do build, é melhor incluir o que você precisa diretamente nas suas fontes, onde necessário.
runtime_deps

List of labels; optional

A lista de destinos de framework que são carregados com atraso no ambiente de execução. Elas estão incluídas no pacote de apps, mas não são vinculadas no tempo de build.
sdk_dylibs

List of strings; optional

Nomes das bibliotecas .dylib do SDK a serem vinculadas. Por exemplo, "libz" ou "libarchive". "libc++" é incluída automaticamente se o binário tem origens C++ ou Objective-C++ na árvore de dependências. Ao vincular um binário, todas as bibliotecas nomeadas no gráfico de dependência transitiva desse binário são usadas.
sdk_frameworks

List of strings; optional

Nomes dos frameworks do SDK a serem vinculados (por exemplo, "AddressBook", "QuartzCore"). "UIKit" e "Foundation" são sempre incluídos ao criar para as plataformas iOS, tvOS e watchOS. No macOS, somente "Foundation" é sempre incluído.

Ao vincular um binário da Apple de nível superior, todos os frameworks do SDK listados no gráfico de dependência transitiva desse binário são vinculados.

sdk_includes

List of strings; optional

Lista de caminhos de pesquisa #include/#import a serem adicionados a esse destino e a todos os destinos dependentes, em que cada caminho é relativo a $(SDKROOT)/usr/include.
textual_hdrs

List of labels; optional

A lista de arquivos C, C++, Objective-C e Objective-C++ incluídos como cabeçalhos pelos arquivos de origem nesta regra ou pelos usuários dessa biblioteca. Ao contrário dos hdrs, eles não serão compilados separadamente das fontes.
weak_sdk_frameworks

List of strings; optional

Nomes de frameworks do SDK com links fracos. Por exemplo, "MediaAccessibility". Diferente dos frameworks do SDK vinculados regularmente, os símbolos de frameworks com links fracos não causam erro se não estiverem presentes no momento da execução.

available_xcodes

available_xcodes(name, default, deprecation, distribs, features, licenses, tags, testonly, versions, visibility)

Dois destinos dessa regra podem ser dependentes de uma instância de regra xcode_config para indicar as versões do xcode disponíveis remota e localmente. Isso permite a seleção de uma versão oficial do xcode entre os xcodes coletivamente disponíveis.

Argumentos

Atributos
name

Name; required

Um nome exclusivo para o destino.

default

Label; required; nonconfigurable

A versão do Xcode padrão para esta plataforma.
versions

List of labels; optional; nonconfigurable

As versões do xcode disponíveis nessa plataforma.

xcode_config

xcode_config(name, default, deprecation, distribs, features, licenses, local_versions, remote_versions, tags, testonly, versions, visibility)

Um único destino desta regra pode ser referenciado pela sinalização de build --xcode_version_config para converter a sinalização --xcode_version em uma versão oficial aceita do Xcode. Isso permite a seleção de uma versão oficial do xcode entre vários aliases registrados.

Argumentos

Atributos
name

Name; required

Um nome exclusivo para o destino.

default

Label; optional; nonconfigurable

A versão oficial padrão do xcode a ser usada. A versão especificada pelo destino xcode_version fornecido vai ser usada se nenhuma flag de build xcode_version for especificada. Isso será necessário se algum versions estiver definido. Isso não pode ser definido se remote_versions ou local_versions estiverem definidos.
local_versions

Label; optional; nonconfigurable

O xcode_version targets that are available locally. These are used along with local_versions to select a mutually available version. This may not be set if versions is set.
remote_versions

Label; optional; nonconfigurable

O xcode_version targets that are available remotely. These are used along with remote_versions to select a mutually available version. This may not be set if versions is set.
versions

List of labels; optional; nonconfigurable

Aceitas: xcode_version targets that may be used. If the value of the xcode_version build flag matches one of the aliases or version number of any of the given xcode_version targets, the matching target will be used. This may not be set if remote_versions or local_versions is set.

xcode_version

xcode_version(name, default_ios_sdk_version, default_macos_sdk_version, default_tvos_sdk_version, default_watchos_sdk_version, deprecation, distribs, features, licenses, tags, testonly, version, visibility)

Representa uma única versão oficial do xcode com aliases aceitáveis. Consulte a regra xcode_config.

Argumentos

Atributos
name

Name; required

Um nome exclusivo para o destino.

default_ios_sdk_version

String; optional; nonconfigurable

A versão do SDK iOS que é usada por padrão quando esta versão do xcode está em uso. A flag de build ios_sdk_version vai substituir o valor especificado aqui.
default_macos_sdk_version

String; optional; nonconfigurable

A versão do SDK do macOS que é usada por padrão quando esta versão do xcode está sendo usada. A flag de build macos_sdk_version vai substituir o valor especificado aqui.
default_tvos_sdk_version

String; optional; nonconfigurable

A versão do SDK tvos que é usada por padrão quando esta versão do xcode está sendo usada. A flag de build tvos_sdk_version vai substituir o valor especificado aqui.
default_watchos_sdk_version

String; optional; nonconfigurable

A versão do SDK watchos que é usada por padrão quando esta versão do xcode está sendo usada. A flag de build watchos_sdk_version vai substituir o valor especificado aqui.
version

String; required; nonconfigurable

O número da versão oficial do Xcode.