Reglas de Objective-C

7.3 · 7.2 · 7.1 · 7.0 · 6.5

Reglas

j2objc_library

Ver el origen de la regla
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 J2ObjC personalizadas se pueden especificar mediante 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 con 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, el código generado se quita del nivel de destino, no del nivel de origen. Si tienes dos objetivos de Java diferentes que incluyen los mismos archivos fuente de Java, es posible que veas un error de símbolo duplicado en el tiempo de vinculación. La forma correcta de resolver este problema es mover los archivos fuente de Java compartidos a un destino común separado en el que se pueda confiar.

Argumentos

Atributos
name

Nombre: Obligatorio

Un nombre único para este destino.

deps

Es una lista de etiquetas. El valor predeterminado es [].

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

Se traducirán y compilarán todos los destinos java_library y java_import a los que se pueda acceder de forma transitiva a través de exports, deps y runtime_deps, incluidos los archivos generados por el procesamiento de anotaciones de Java. No se admite código>java_import sin srcjar especificado.

La traducción de J2ObjC funciona de manera diferente según el tipo de archivos fuente de Java que se incluyen en la clausura transitiva. Para cada archivo fuente .java incluido en srcs de java_library, se generará un archivo fuente .h y .m correspondiente. Para cada archivo JAR de origen 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 de ese archivo JAR.

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

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

entry_classes

Es una lista de cadenas. El valor predeterminado es [].

Es la lista de clases Java a cuyas contrapartes de ObjC traducidas hará referencia directamente el código de ObjC del usuario. Este atributo es obligatorio si la marca --j2objc_dead_code_removal está activada. Las clases de Java deben especificarse con 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 recopilará de forma transitiva y se usará como puntos de entrada para realizar el análisis de código muerto. Luego, se quitarán las clases sin usar del paquete de aplicación ObjC final.
jre_deps

Es una lista de etiquetas. El valor predeterminado es [].

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

objc_import

Ver el origen de la regla
objc_import(name, deps, 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 con los mismos atributos que admite objc_library.

Argumentos

Atributos
name

Nombre: Obligatorio

Un nombre único para este destino.

deps

Lista de etiquetas; el valor predeterminado es []

Es la lista de objetivos de los que depende este objetivo.
hdrs

Es una lista de etiquetas. El valor predeterminado es [].

Es la lista de archivos de encabezados C, C++, Objective-C y Objective-C++ que publica esta biblioteca para que las fuentes los incluyan en reglas dependientes.

Estos encabezados describen la interfaz pública de la biblioteca y estarán disponibles para que las fuentes los incluyan en esta regla o en reglas dependientes. Los encabezados que no están destinados a ser incluidos por un cliente de esta biblioteca deben aparecer en el atributo srcs.

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

Booleano; el valor predeterminado es False

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

Lista de etiquetas; obligatorio

Es la lista de archivos .a proporcionados a los destinos de Objective-C que dependen de este destino.
includes

Es una lista de cadenas. El valor predeterminado es [].

Es la lista de rutas de acceso de búsqueda de #include/#import que se agregarán a este objetivo y a todos los objetivos dependientes. Esto es para admitir bibliotecas de terceros y de código abierto que no especifican toda la ruta de acceso del espacio de trabajo en sus sentencias #import/#include.

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

A diferencia de COPTS, estas marcas se agregan para esta regla y 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 largo alcance. Si tienes dudas, agrega marcas “-iquote” a COPTS.

sdk_dylibs

Es una lista de cadenas. El valor predeterminado es [].

Son los 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 de C++ o Objective-C++ en su árbol de dependencias. Cuando se vincula un objeto binario, se usan todas las bibliotecas nombradas en el grafo de dependencias transitivas de ese objeto.
sdk_frameworks

Lista de cadenas; el valor predeterminado es []

Son los nombres de los frameworks de SDK con los que se vinculará (p. ej., "AddressBook", "QuartzCore"). "UIKit" y "Foundation" siempre se incluyen cuando se compila para las plataformas iOS, tvOS, visionOS y watchOS. En macOS, solo se incluye siempre "Foundation".

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

sdk_includes

Es una lista de cadenas. El valor predeterminado es [].

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

Es una lista de etiquetas. El valor predeterminado es [].

Es la lista de archivos C, C++, Objective-C y Objective-C++ que los archivos fuente de esta regla o los usuarios de esta biblioteca incluyen como encabezados. A diferencia de los hdr, no se compilarán por separado de las fuentes.
weak_sdk_frameworks

Es una lista de cadenas. El valor predeterminado es [].

Nombres de frameworks del SDK con los que se vinculará de manera débil. Por ejemplo, “MediaAccessibility”. A diferencia de los frameworks de SDK vinculados de forma habitual, los símbolos de los frameworks vinculados de forma débil no causan un error si no están presentes en el tiempo de ejecución.

objc_library

Ver la fuente de la regla
objc_library(name, deps, srcs, data, hdrs, alwayslink, compatible_with, copts, defines, deprecation, distribs, enable_modules, exec_compatible_with, exec_properties, features, implementation_deps, includes, licenses, linkopts, module_map, module_name, non_arc_srcs, pch, restricted_to, 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 determinados.

Argumentos

Atributos
name

Name; obligatorio

Un nombre único para este destino.

deps

Es una lista de etiquetas. El valor predeterminado es [].

Es la lista de destinos que están vinculados para formar el paquete final.
srcs

Es una lista de etiquetas. El valor predeterminado es [].

La lista de archivos de origen y de encabezado de C, C++, Objective-C y Objective-C++, o archivos de origen de ensamblado (`.s`, `.S` o `.asm`), que se procesan para crear el destino de la biblioteca. Estos son los archivos registrados, más los archivos generados. Los archivos de origen se compilan en archivos .o con Clang. Los archivos de encabezado se pueden incluir o importar desde cualquier fuente o encabezado en el atributo srcs de este destino, pero no desde los encabezados en hdrs ni desde ningún destino que dependa de esta regla. Además, los archivos .o precompilados se pueden proporcionar como srcs. Ten cuidado de asegurarte de la coherencia en la arquitectura de los archivos .o proporcionados y de la compilación para evitar errores de vinculación de símbolos faltantes.
hdrs

Es una lista de etiquetas. El valor predeterminado es [].

Es la lista de archivos de encabezados C, C++, Objective-C y Objective-C++ que publica esta biblioteca para que las fuentes los incluyan en reglas dependientes.

Estos encabezados describen la interfaz pública de la biblioteca y estarán disponibles para que las fuentes los incluyan en esta regla o en reglas dependientes. Los encabezados que no están destinados a ser incluidos por un cliente de esta biblioteca deben aparecer en el atributo srcs.

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

Booleano; el valor predeterminado es False

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

Es una lista de cadenas. El valor predeterminado es [].

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

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

defines

Es una lista de cadenas. El valor predeterminado es [].

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

Booleano; el valor predeterminado es False

Habilita la compatibilidad con el módulo clang (a través de -fmodules). Si estableces este valor en 1, podrás @importar encabezados del sistema y otros destinos: @import UIKit; @import path_to_package_target;
implementation_deps

Lista de etiquetas; el valor predeterminado es []

Es la lista de otras bibliotecas de las que depende la biblioteca objetivo. A diferencia de deps, los encabezados y las rutas de inclusión de estas bibliotecas (y todas sus dependencias transitivas) solo se usan para la compilación de esta biblioteca, no para las bibliotecas que dependen de ella. Las bibliotecas especificadas con implementation_deps aún están vinculadas en los destinos binarios que dependen de esta biblioteca.
includes

Es una lista de cadenas. El valor predeterminado es [].

Es la lista de rutas de acceso de búsqueda de #include/#import que se agregarán a este objetivo y a todos los objetivos dependientes. Esto es para admitir bibliotecas de terceros y de código abierto que no especifican toda la ruta de acceso del espacio de trabajo en sus sentencias #import/#include.

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

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

linkopts

Es una lista de cadenas. El valor predeterminado es [].

Marcas adicionales para pasar al vinculador.
module_map

Etiqueta (Label); el valor predeterminado es None

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

Cadena; el valor predeterminado es ""

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

Es una lista de etiquetas. El valor predeterminado es [].

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

Etiqueta (Label); el valor predeterminado es None

Es el archivo de encabezado que se agregará a cada archivo fuente que se compilará (tanto con ARC como sin ARC). Se desaconseja el uso de archivos PCH en los archivos BUILD, y se debe considerar que están obsoletos. Dado que los archivos PCH no se precompilan, esta no es una mejora de la velocidad de compilación, sino solo una dependencia global. Desde el punto de vista de la eficiencia de compilación, es mejor incluir directamente lo que necesitas en las fuentes donde lo necesites.
sdk_dylibs

Lista de cadenas; el valor predeterminado es []

Son los 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 de C++ o Objective-C++ en su árbol de dependencias. Cuando se vincula un objeto binario, se usan todas las bibliotecas nombradas en el grafo de dependencias transitivas de ese objeto.
sdk_frameworks

Lista de cadenas; el valor predeterminado es []

Son los nombres de los frameworks de SDK con los que se vinculará (p. ej., "AddressBook", "QuartzCore"). "UIKit" y "Foundation" siempre se incluyen cuando se compila para las plataformas iOS, tvOS, visionOS y watchOS. En macOS, solo se incluye siempre "Foundation".

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

sdk_includes

Es una lista de cadenas. El valor predeterminado es [].

Es la lista de rutas de acceso de búsqueda de #include/#import que se agregarán a este destino y a todos los destinos dependientes, en los que cada ruta es relativa a $(SDKROOT)/usr/include.
textual_hdrs

Es una lista de etiquetas. El valor predeterminado es [].

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

Es una lista de cadenas. El valor predeterminado es [].

Nombres de frameworks del SDK con los que se vinculará de manera débil. Por ejemplo, “MediaAccessibility”. A diferencia de los frameworks de SDK vinculados de forma habitual, los símbolos de los frameworks vinculados de forma débil no causan un error si no están presentes en el tiempo de ejecución.

available_xcodes

Ver la fuente de la regla
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 de los Xcodes disponibles de forma colectiva.

Argumentos

Atributos
name

Nombre: Obligatorio

Un nombre único para este objetivo.

default

Etiqueta; no configurable; obligatorio

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

Es una lista de etiquetas no configurables. El valor predeterminado es [].

Las versiones de Xcode que están disponibles en esta plataforma

xcode_config

Ver la fuente de la regla
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 objetivo de esta regla para traducir la marca --xcode_version en una versión oficial aceptada de Xcode. Esto permite seleccionar una versión oficial de Xcode entre varios alias registrados.

Argumentos

Atributos
name

Nombre: Obligatorio

Un nombre único para este objetivo.

default

Etiqueta; no configurable; el valor predeterminado es None

Es la versión oficial predeterminada de Xcode que se debe usar. Se debe usar la versión especificada por el objetivo xcode_version proporcionado si no se especifica ninguna marca de compilación xcode_version. Esto es obligatorio si se configura algún versions. Es posible que no se establezca si se establece remote_versions o local_versions.
local_versions

Etiqueta; no configurable; el valor predeterminado es None

Los objetivos de xcode_version que están disponibles a nivel local Se usan junto con local_versions para seleccionar una versión mutuamente disponible. Es posible que no se establezca si se establece versions.
remote_versions

Etiqueta; no configurable; el valor predeterminado es None

Los destinos xcode_version que están disponibles de forma remota. Se usan junto con remote_versions para seleccionar una versión mutuamente disponible. Es posible que no se establezca si se establece versions.
versions

Lista de etiquetas; no configurable; el valor predeterminado es []

Son los objetivos xcode_version aceptados que se pueden usar. Si el valor de la marca de compilación xcode_version coincide con uno de los alias o el número de versión de cualquiera de los destinos xcode_version determinados, se usará el destino coincidente. Es posible que no se establezca si se establece remote_versions o local_versions.

xcode_version

Ver el origen de la regla
xcode_version(name, default_ios_sdk_version, default_macos_sdk_version, default_tvos_sdk_version, default_visionos_sdk_version, default_watchos_sdk_version, deprecation, distribs, features, licenses, tags, testonly, version, visibility)

Representa una sola versión oficial de Xcode con alias aceptables para esa versión. Consulta la regla xcode_config.

Argumentos

Atributos
name

Name; obligatorio

Un nombre único para este destino.

default_ios_sdk_version

String; no configurable; el valor predeterminado es ""

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

Cadena; no configurable; el valor predeterminado es ""

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

Cadena; no configurable; el valor predeterminado es ""

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

Cadena; no configurable; el valor predeterminado es ""

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

String; no configurable; el valor predeterminado es ""

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

Cadena; no configurable; obligatoria

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