Reglas de Objective-C

Reglas

j2objc_library

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

Esta regla usa J2ObjC para traducir archivos fuente de Java a Objective-C, que luego se pueden usar como dependencias de las reglas objc_library y objc_binary. Puedes encontrar información detallada sobre J2ObjC en el sitio de J2ObjC.

Las marcas de transpilación personalizadas de J2ObjC se pueden especificar con la marca de compilación --j2objc_translation_flags en la línea de comandos.

Ten en cuenta que los archivos traducidos incluidos en un destino j2objc_library se compilarán usando la configuración de compilación predeterminada, la misma configuración que para las fuentes de una regla objc_library sin opciones de compilación especificadas en los atributos.

Además, se anula la duplicación del código generado a nivel del destino, no a nivel del origen. Si tienes dos objetivos Java diferentes que incluyen los mismos archivos fuente Java, es posible que veas un error de símbolo duplicado en el momento de la vinculación. La forma correcta de resolver este problema es mover los archivos de origen de Java compartidos a un destino común independiente en el que se pueda depender.

Argumentos

Atributos
name

Name; required

Un nombre único para este destino.

deps

List of labels; optional

Una lista de destinos j2objc_library, java_library, java_import y java_proto_library que contienen archivos Java para transpilar a Objective-C.

Se traducirán y compilarán todos los objetivos java_library y java_import a los que se pueda llegar de forma transitiva mediante exports, deps y runtime_deps. Actualmente, no hay compatibilidad con archivos generados por el procesamiento de anotaciones de Java ni con objetivos java_import sin srcjar especificado.

La traducción de J2ObjC funciona de manera diferente según el tipo de archivos de origen Java de origen que se incluyen en el cierre transitivo. Por cada archivo fuente .java incluido en srcs de java_library, se generará un archivo fuente .h y .m correspondiente. Para cada archivo jar fuente incluido en srcs de java_library o srcjar de java_import, se generará un archivo fuente .h y .m correspondiente con todo el código para ese jar.

Los usuarios pueden importar los archivos de encabezado generados por J2ObjC en su código. Las rutas de importación para estos archivos son la ruta relativa raíz de los artefactos originales de Java. Por ejemplo, //some/package/foo.java tiene la ruta de importación some/package/foo.h, y //some/package/bar.srcjar tiene some/package/bar.h.

Si las reglas proto_library tienen el cierre transitivo de esta regla, los protos J2ObjC también se generarán, compilarán y vincularán a nivel binario. Para el proto //some/proto/foo.proto, los usuarios pueden hacer referencia al código generado con la ruta de importación some/proto/foo.j2objc.pb.h.

entry_classes

List of strings; optional

Lista de clases de Java a cuyas contrapartes ObjC traducidas hace referencia directamente el código ObjC del usuario. Este atributo es obligatorio si la marca --j2objc_dead_code_removal está activada. Las clases de Java se deben especificar en sus nombres canónicos, como se define en la especificación del lenguaje Java. Cuando se especifica la marca --j2objc_dead_code_removal, la lista de clases de entrada se recopila de forma transitiva y se usa como puntos de entrada para realizar un análisis de código muerto. Las clases no utilizadas se quitarán del paquete de aplicación ObjC final.
jre_deps

List of labels; optional

Es la lista de bibliotecas de emulación de JRE adicionales que requieren todo el código Java traducido por esta regla j2objc_library. Solo la funcionalidad principal de JRE está vinculada de forma predeterminada.

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)

Esta regla encapsula una biblioteca estática ya compilada en forma de un archivo .a. También permite exportar encabezados y recursos mediante los mismos atributos compatibles con objc_library.

Argumentos

Atributos
name

Name; required

Un nombre único para este destino.

hdrs

List of labels; optional

La lista de archivos de encabezado C, C++, Objective-C y Objective-C++ publicados por esta biblioteca para que los incluyan las fuentes en reglas dependientes.

Estos encabezados describen la interfaz pública de la biblioteca y estarán disponibles para su inclusión mediante fuentes en esta regla o en reglas dependientes. Los encabezados que no deben incluirse por un cliente de esta biblioteca deben enumerarse en el atributo srcs.

Estos se compilarán por separado de la fuente si los módulos están habilitados.

Boolean; optional; default is False

Si es 1, cualquier paquete o objeto binario que dependa (directa o indirectamente) de esta biblioteca se vinculará en todos los archivos de objetos para los archivos enumerados en srcs y non_arc_srcs, incluso si algunos no contienen símbolos al que hace referencia el objeto binario. Esto resulta útil si tu código no se llama explícitamente mediante código en el objeto binario, p.ej., si se registra para recibir una devolución de llamada proporcionada por algún servicio.
archives

List of labels; required

La lista de archivos .a que se proporcionan a los destinos de Objective-C que dependen de este destino.
includes

List of strings; optional

Lista de rutas de búsqueda de #include/#import para agregar a este destino y a todos los destinos dependientes. El objetivo de esto es admitir bibliotecas de terceros y de código abierto que no especifican la ruta de acceso completa del lugar de trabajo en sus declaraciones #import/#include.

Las rutas de acceso se interpretan en relación con el directorio del paquete, y los archivos genfiles y las raíces binarias (p.ej., blaze-genfiles/pkg/includedir y blaze-out/pkg/includedir) se incluyen además de la raíz de cliente real.

A diferencia de COPTS, estas marcas se agregan para esta regla y para cada regla que depende de ella. (Nota: No son las reglas de las que depende). Ten mucho cuidado, ya que esto puede tener efectos de gran alcance. Si tienes dudas, agrega las marcas "-iQuote" a COPTS.

sdk_dylibs

List of strings; optional

Nombres de las bibliotecas .dylib del SDK con las que se vinculará. Por ejemplo, "libz" o "libarchive". "libc++" se incluye automáticamente si el objeto binario tiene fuentes C++ u Objective-C++ en su árbol de dependencias. Cuando se vincula un objeto binario, se usan todas las bibliotecas nombradas en el gráfico de dependencia transitiva de ese objeto binario.
sdk_frameworks

List of strings; optional

Nombres de frameworks de SDK con los que se vinculará (p.ej., "AddressBook", "QuartzCore"). "UIKit" y "Foundation" siempre se incluyen cuando compilas para las plataformas iOS, tvOS y watchOS. Para macOS, solo se incluye “Foundation”.

Cuando se vincula un objeto binario de Apple de nivel superior, se vinculan todos los frameworks del SDK que se indican en el gráfico de dependencias transitivas de ese objeto binario.

sdk_includes

List of strings; optional

Lista de rutas de búsqueda de #include/#import para agregar a este destino y a todos los destinos dependientes, en la que cada ruta de acceso está relacionada con $(SDKROOT)/usr/include.
textual_hdrs

List of labels; optional

Lista de archivos C, C++, Objective-C y Objective-C++ que se incluyen como encabezados por archivos de origen en esta regla o por usuarios de esta biblioteca. A diferencia de los HD, estos no se compilarán por separado de las fuentes.
weak_sdk_frameworks

List of strings; optional

Nombres de frameworks del SDK para vincular de forma débil Por ejemplo, "MediaAccessibility". A diferencia de los frameworks de SDK vinculados regularmente, los símbolos de marcos de trabajo con vínculos débiles no causan un error si no están presentes en el tiempo de ejecución.

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 regla produce una biblioteca estática a partir de los archivos de origen de Objective-C especificados.

Argumentos

Atributos
name

Name; required

Un nombre único para este destino.

deps

List of labels; optional

Es la lista de segmentaciones que están vinculadas para formar el paquete final.
srcs

List of labels; optional

La lista de archivos fuente y de encabezado de C, C++, Objective-C y Objective-C++, o archivos fuente de ensamblado (“.s”, “.S” o “.asm”) que se procesan para crear el destino de la biblioteca. Estos son los archivos registrados, además de los archivos generados. Los archivos de origen se compilan en archivos .o con Clang. Cualquier fuente o encabezado puede incluir o importar archivos de encabezado en el atributo srcs de este destino, pero no mediante encabezados en HDR ni otros objetivos que dependan de esta regla. Además, los archivos .o precompilados se pueden proporcionar como srcs. Asegúrate de garantizar la coherencia entre la arquitectura de los archivos .o proporcionados y la de la compilación para evitar errores de vinculador de símbolos.
hdrs

List of labels; optional

La lista de archivos de encabezado C, C++, Objective-C y Objective-C++ publicados por esta biblioteca para que los incluyan las fuentes en reglas dependientes.

Estos encabezados describen la interfaz pública de la biblioteca y estarán disponibles para su inclusión mediante fuentes en esta regla o en reglas dependientes. Los encabezados que no deben incluirse por un cliente de esta biblioteca deben enumerarse en el atributo srcs.

Estos se compilarán por separado de la fuente si los módulos están habilitados.

Boolean; optional; default is False

Si es 1, cualquier paquete o objeto binario que dependa (directa o indirectamente) de esta biblioteca se vinculará en todos los archivos de objetos para los archivos enumerados en srcs y non_arc_srcs, incluso si algunos no contienen símbolos al que hace referencia el objeto binario. Esto resulta útil si tu código no se llama explícitamente mediante código en el objeto binario, p.ej., si se registra para recibir una devolución de llamada proporcionada por algún servicio.
copts

List of strings; optional

Marcas adicionales para pasar al compilador. Sujeto a la sustitución "Make variable" y la tokenización de shell Bourne. Estas marcas solo se aplicarán a este destino y no a aquellos de los que depende o a aquellos que dependen de él.

Ten en cuenta que, para el proyecto de Xcode generado, las rutas de directorio especificadas con las marcas “-I” en copts se analizan, se les antepone “$(WORKSPACE_ROOT)/” si son rutas relativas y se agregan a las rutas de búsqueda de encabezados del destino de Xcode asociado.

defines

List of strings; optional

Marcas -D adicionales para pasar al compilador Deben tener el formato KEY=VALUE o simplemente KEY, y se pasan no solo al compilador para este destino (como sucede con copts), sino también a todos los objc_ dependencias de este destino. Sujeto a la sustitución "Make variable" y la tokenización de shell Bourne.
enable_modules

Boolean; optional; default is False

Habilita la compatibilidad con el módulo de Clang (a través de -fmodules). Configurarlo en 1 te permitirá usar @import encabezados del sistema y otros destinos: @import UIKit; @import path_to_package_target;
includes

List of strings; optional

Lista de rutas de búsqueda de #include/#import para agregar a este destino y a todos los destinos dependientes. El objetivo de esto es admitir bibliotecas de terceros y de código abierto que no especifican la ruta de acceso completa del lugar de trabajo en sus declaraciones #import/#include.

Las rutas de acceso se interpretan en relación con el directorio del paquete, y los archivos genfiles y las raíces binarias (p.ej., blaze-genfiles/pkg/includedir y blaze-out/pkg/includedir) se incluyen además de la raíz de cliente real.

A diferencia de COPTS, estas marcas se agregan para esta regla y para cada regla que depende de ella. (Nota: No son las reglas de las que depende). Ten mucho cuidado, ya que esto puede tener efectos de gran alcance. Si tienes dudas, agrega las marcas "-iQuote" a COPTS.

linkopts

List of strings; optional

Marcas adicionales para pasar al vinculador.
module_map

Label; optional

Un mapa personalizado de módulos de Clang para este destino No se recomienda el uso de un mapa de módulos personalizado. La mayoría de los usuarios deben usar mapas de módulos generados por Bazel. Si se especifica, Bazel no generará un mapa de módulos para este destino, pero pasará el mapa del módulo proporcionado al compilador.
module_name

String; optional

Establece el nombre de módulo para este destino. De forma predeterminada, el nombre del módulo es la ruta de destino en la que todos los símbolos especiales se reemplazan por _; p.ej., //foo/baz:bar se puede importar como foo_baz_bar.
non_arc_srcs

List of labels; optional

La lista de archivos Objective-C que se procesan para crear el destino de la biblioteca que NO usan ARC. Los archivos en este atributo se tratan de manera muy similar a los del atributo srcs, pero se compilan sin ARC habilitado.
pch

Label; optional

Archivo de encabezado que se debe anteponer a cada archivo de origen que se compila (tanto en arco como que no sean de arco). No se recomienda activamente el uso de archivos pch en los archivos BUILD, por lo que debe considerarse obsoleto. Como los archivos pch en realidad no se compilan previamente, no se trata de una mejora de la velocidad de compilación, sino que es solo una dependencia global. Desde el punto de vista de la eficiencia de compilación, en realidad eres mejor incluir lo que necesitas directamente en las fuentes donde lo necesitas.
runtime_deps

List of labels; optional

La lista de objetivos del framework que se cargan con retraso durante el tiempo de ejecución. Se incluyen en el paquete de aplicación, pero no se vinculan en el tiempo de compilación.
sdk_dylibs

List of strings; optional

Nombres de las bibliotecas .dylib del SDK con las que se vinculará. Por ejemplo, "libz" o "libarchive". "libc++" se incluye automáticamente si el objeto binario tiene fuentes C++ u Objective-C++ en su árbol de dependencias. Cuando se vincula un objeto binario, se usan todas las bibliotecas nombradas en el gráfico de dependencia transitiva de ese objeto binario.
sdk_frameworks

List of strings; optional

Nombres de frameworks de SDK con los que se vinculará (p.ej., "AddressBook", "QuartzCore"). "UIKit" y "Foundation" siempre se incluyen cuando compilas para las plataformas iOS, tvOS y watchOS. Para macOS, solo se incluye “Foundation”.

Cuando se vincula un objeto binario de Apple de nivel superior, se vinculan todos los frameworks del SDK que se indican en el gráfico de dependencias transitivas de ese objeto binario.

sdk_includes

List of strings; optional

Lista de rutas de búsqueda de #include/#import para agregar a este destino y a todos los destinos dependientes, en la que cada ruta de acceso está relacionada con $(SDKROOT)/usr/include.
textual_hdrs

List of labels; optional

Lista de archivos C, C++, Objective-C y Objective-C++ que se incluyen como encabezados por archivos de origen en esta regla o por usuarios de esta biblioteca. A diferencia de los HD, estos no se compilarán por separado de las fuentes.
weak_sdk_frameworks

List of strings; optional

Nombres de frameworks del SDK para vincular de forma débil Por ejemplo, "MediaAccessibility". A diferencia de los frameworks de SDK vinculados regularmente, los símbolos de marcos de trabajo con vínculos débiles no causan un error si no están presentes en el tiempo de ejecución.

available_xcodes

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

Una instancia de regla xcode_config puede depender de dos objetivos de esta regla para indicar las versiones de Xcode disponibles de forma remota y local. Esto permite seleccionar una versión oficial de Xcode entre los Xcode disponibles en conjunto.

Argumentos

Atributos
name

Name; required

Un nombre único para este destino.

default

Label; required; nonconfigurable

Es la versión de Xcode predeterminada para esta plataforma.
versions

List of labels; optional; nonconfigurable

Las versiones de Xcode disponibles en esta plataforma.

xcode_config

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

La marca de compilación --xcode_version_config puede hacer referencia a un solo destino de esta regla para traducir la marca --xcode_version a una versión oficial de Xcode aceptada. Esto permite seleccionar una versión oficial de Xcode entre un número de alias registrados.

Argumentos

Atributos
name

Name; required

Un nombre único para este destino.

default

Label; optional; nonconfigurable

Es la versión oficial predeterminada de Xcode. Se usará la versión especificada por el destino xcode_version proporcionado si no se especifica ninguna marca de compilación xcode_version. Es obligatorio si se configura algún versions. Es posible que esto no esté configurado si se configuran remote_versions o local_versions.
local_versions

Label; optional; nonconfigurable

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

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

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. aceptado(s)

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 una única versión oficial de Xcode con alias aceptables para esa versión de Xcode. Consulta la regla xcode_config.

Argumentos

Atributos
name

Name; required

Un nombre único para este destino.

default_ios_sdk_version

String; optional; nonconfigurable

Es la versión del SDK de iOS que se usa de forma predeterminada cuando se utiliza esta versión de Xcode. La marca de compilación ios_sdk_version anulará el valor especificado aquí.
default_macos_sdk_version

String; optional; nonconfigurable

La versión del SDK de macOS que se usa de forma predeterminada cuando se utiliza esta versión de Xcode. La marca de compilación macos_sdk_version anulará el valor especificado aquí.
default_tvos_sdk_version

String; optional; nonconfigurable

La versión del SDK de tvos que se usa de forma predeterminada cuando se usa esta versión de Xcode. La marca de compilación tvos_sdk_version anulará el valor especificado aquí.
default_watchos_sdk_version

String; optional; nonconfigurable

La versión del SDK de watchos que se usa de forma predeterminada cuando se utiliza esta versión de Xcode. La marca de compilación watchos_sdk_version anulará el valor especificado aquí.
version

String; required; nonconfigurable

Es el número de versión oficial de una versión de Xcode.