<html devsite>
<head>
  <meta name="project_path" value="/_project.yaml">
  <meta name="book_path" value="/versions/7.3.0/_book.yaml">
</head>
<body>
<!--
 This document is synchronized with Bazel releases.
 To edit, submit changes to the Bazel source code.
-->

<!-- Generated by //src/main/java/com/google/devtools/build/docgen:build-encyclopedia.zip -->
<html>
<body>

<h1 class="page-title">Objective-C Rules</h1>

{% dynamic setvar source_file "src/main/java/com/google/devtools/build/docgen/templates/be/rules.vm" %}
{% dynamic setvar version "7.3.0" %}
{% dynamic setvar original_path "/reference/be/objective-c" %}
{% include "_buttons.html" %}



<h2>Rules</h2>
<ul>
  <li>
    <a href="#j2objc_library">
      j2objc_library    </a>
  </li>
  <li>
    <a href="#objc_import">
      objc_import    </a>
  </li>
  <li>
    <a href="#objc_library">
      objc_library    </a>
  </li>
  <li>
    <a href="#available_xcodes">
      available_xcodes    </a>
  </li>
  <li>
    <a href="#xcode_config">
      xcode_config    </a>
  </li>
  <li>
    <a href="#xcode_version">
      xcode_version    </a>
  </li>
</ul>

  <h2 id="j2objc_library">
    j2objc_library
  </h2>

  <a class="button button-with-icon" href="https://github.com/bazelbuild/bazel/blob/master/src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelJ2ObjcLibraryRule.java" target="_blank">
  View rule source<span class="material-icons icon-after" aria-hidden="true">open_in_new</span>
  </a>

  <pre class="rule-signature">j2objc_library(<a href="#j2objc_library.name">name</a>, <a href="#j2objc_library.deps">deps</a>, <a href="common-definitions.html#common.compatible_with">compatible_with</a>, <a href="common-definitions.html#common.deprecation">deprecation</a>, <a href="common-definitions.html#common.distribs">distribs</a>, <a href="#j2objc_library.entry_classes">entry_classes</a>, <a href="common-definitions.html#common.features">features</a>, <a href="#j2objc_library.jre_deps">jre_deps</a>, <a href="common-definitions.html#typical.licenses">licenses</a>, <a href="common-definitions.html#common.restricted_to">restricted_to</a>, <a href="common-definitions.html#common.tags">tags</a>, <a href="common-definitions.html#common.target_compatible_with">target_compatible_with</a>, <a href="common-definitions.html#common.testonly">testonly</a>, <a href="common-definitions.html#common.visibility">visibility</a>)</pre>


<p> This rule uses <a href="https://github.com/google/j2objc">J2ObjC</a> to translate Java source
files to Objective-C, which then can be used used as dependencies of objc_library and objc_binary
rules. Detailed information about J2ObjC itself can be found at  <a href="http://j2objc.org">the
J2ObjC site</a>
</p>
<p>Custom J2ObjC transpilation flags can be specified using the build flag
<code>--j2objc_translation_flags</code> in the command line.
</p>
<p>Please note that the translated files included in a j2objc_library target will be
compiled using the default compilation configuration, the same configuration as for the sources of
an objc_library rule with no compilation options specified in attributes.
</p>
<p>Plus, generated code is de-duplicated at target level, not source level. If you have two
different Java targets that include the same Java source files, you may see a duplicate symbol error
at link time. The correct way to resolve this issue is to move the shared Java source files into a
separate common target that can be depended upon.
</p>




  <h3 id="j2objc_library_args">Arguments</h3>
  <table class="table table-condensed table-bordered table-params">
    <colgroup>
      <col class="col-param" />
      <col class="param-description" />
    </colgroup>
    <thead>
      <tr>
        <th colspan="2">Attributes</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td id="j2objc_library.name"><code>name</code></td>
        <td>
          <p><a href="/versions/7.3.0/concepts/labels#target-names">Name</a>; required</p>
          <p>A unique name for this target.</p>

        </td>
      </tr>
                <tr>
        <td id="j2objc_library.deps">
          <code>deps</code>
        </td>
        <td>
                    <p>List of <a href="/versions/7.3.0/concepts/labels">labels</a>; default is <code>[]</code></p>
                            A list of <code>j2objc_library</code>, <code>java_library</code>,
        <code>java_import</code> and <code>java_proto_library</code> targets that contain
        Java files to be transpiled to Objective-C.
        <p>All <code>java_library</code> and <code>java_import</code> targets that can be reached
        transitively through <code>exports</code>, <code>deps</code> and <code>runtime_deps</code>
        will be translated and compiled, including files generated by Java annotation processing.
        There is no support for code>java_import</code> targets with no <code>srcjar</code>
        specified.
        </p>
        <p>The J2ObjC translation works differently depending on the type of source Java source
        files included in the transitive closure. For each .java source files included in
        <code>srcs</code> of <code>java_library</code>, a corresponding .h and .m source file
        will be generated. For each source jar included in <code>srcs</code> of
        <code>java_library</code> or <code>srcjar</code> of <code>java_import</code>, a
        corresponding .h and .m source file will be generated with all the code for that jar.
        </p>
        <p>Users can import the J2ObjC-generated header files in their code. The import paths for
        these files are the root-relative path of the original Java artifacts. For example,
        <code>//some/package/foo.java</code> has an import path of <code>some/package/foo.h</code>
        and <code>//some/package/bar.srcjar</code> has <code>some/package/bar.h</code
        </p>
        <p>
        If proto_library rules are in the transitive closure of this rule, J2ObjC protos will also
        be generated, compiled and linked-in at the binary level. For proto
        <code>//some/proto/foo.proto</code>, users can reference the generated code using import
        path <code>some/proto/foo.j2objc.pb.h</code>.
        </p>

        </td>
      </tr>
                                                    <tr>
        <td id="j2objc_library.entry_classes">
          <code>entry_classes</code>
        </td>
        <td>
                    <p>List of strings; default is <code>[]</code></p>
                            The list of Java classes whose translated ObjC counterparts will be referenced directly
        by user ObjC code. This attribute is required if flag <code>--j2objc_dead_code_removal
        </code> is on. The Java classes should be specified in their canonical names as defined by
        <a href="http://docs.oracle.com/javase/specs/jls/se8/html/jls-6.html#jls-6.7">the Java
        Language Specification.</a>
        When flag <code>--j2objc_dead_code_removal</code> is specified, the list of entry classes
        will be collected transitively and used as entry points to perform dead code analysis.
        Unused classes will then be removed from the final ObjC app bundle.

        </td>
      </tr>
                                <tr>
        <td id="j2objc_library.jre_deps">
          <code>jre_deps</code>
        </td>
        <td>
                    <p>List of <a href="/versions/7.3.0/concepts/labels">labels</a>; default is <code>[]</code></p>
                            The list of additional JRE emulation libraries required by all Java code translated by this
        <code>j2objc_library</code> rule. Only core JRE functionality is linked by default.

        </td>
      </tr>
                                                                          </tbody>
  </table>
  <h2 id="objc_import">
    objc_import
  </h2>

  <a class="button button-with-icon" href="https://github.com/bazelbuild/bazel/blob/master/src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelObjcImportRule.java" target="_blank">
  View rule source<span class="material-icons icon-after" aria-hidden="true">open_in_new</span>
  </a>

  <pre class="rule-signature">objc_import(<a href="#objc_import.name">name</a>, <a href="#objc_import.deps">deps</a>, <a href="#objc_import.hdrs">hdrs</a>, <a href="#objc_import.alwayslink">alwayslink</a>, <a href="#objc_import.archives">archives</a>, <a href="common-definitions.html#common.compatible_with">compatible_with</a>, <a href="common-definitions.html#common.deprecation">deprecation</a>, <a href="common-definitions.html#common.distribs">distribs</a>, <a href="common-definitions.html#common.features">features</a>, <a href="#objc_import.includes">includes</a>, <a href="common-definitions.html#typical.licenses">licenses</a>, <a href="common-definitions.html#common.restricted_to">restricted_to</a>, <a href="#objc_import.sdk_dylibs">sdk_dylibs</a>, <a href="#objc_import.sdk_frameworks">sdk_frameworks</a>, <a href="#objc_import.sdk_includes">sdk_includes</a>, <a href="common-definitions.html#common.tags">tags</a>, <a href="common-definitions.html#common.target_compatible_with">target_compatible_with</a>, <a href="common-definitions.html#common.testonly">testonly</a>, <a href="#objc_import.textual_hdrs">textual_hdrs</a>, <a href="common-definitions.html#common.visibility">visibility</a>, <a href="#objc_import.weak_sdk_frameworks">weak_sdk_frameworks</a>)</pre>


<p>This rule encapsulates an already-compiled static library in the form of an
<code>.a</code> file. It also allows exporting headers and resources using the same
attributes supported by <code>objc_library</code>.</p>



  <h3 id="objc_import_args">Arguments</h3>
  <table class="table table-condensed table-bordered table-params">
    <colgroup>
      <col class="col-param" />
      <col class="param-description" />
    </colgroup>
    <thead>
      <tr>
        <th colspan="2">Attributes</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td id="objc_import.name"><code>name</code></td>
        <td>
          <p><a href="/versions/7.3.0/concepts/labels#target-names">Name</a>; required</p>
          <p>A unique name for this target.</p>

        </td>
      </tr>
                <tr>
        <td id="objc_import.deps">
          <code>deps</code>
        </td>
        <td>
                    <p>List of <a href="/versions/7.3.0/concepts/labels">labels</a>; default is <code>[]</code></p>
                            The list of targets that this target depend on.

        </td>
      </tr>
                      <tr>
        <td id="objc_import.hdrs">
          <code>hdrs</code>
        </td>
        <td>
                    <p>List of <a href="/versions/7.3.0/concepts/labels">labels</a>; default is <code>[]</code></p>
                              The list of C, C++, Objective-C, and Objective-C++ header files published
          by this library to be included by sources in dependent rules.
          <p>
          These headers describe the public interface for the library and will be
          made available for inclusion by sources in this rule or in dependent
          rules. Headers not meant to be included by a client of this library
          should be listed in the srcs attribute instead.
          <p>
          These will be compiled separately from the source if modules are enabled.

        </td>
      </tr>
                      <tr>
        <td id="objc_import.alwayslink">
          <code>alwayslink</code>
        </td>
        <td>
                    <p>Boolean; default is <code>False</code></p>
                              If 1, any bundle or binary that depends (directly or indirectly) on this
          library will link in all the object files for the files listed in
          <code>srcs</code> and <code>non_arc_srcs</code>, even if some contain no
          symbols referenced by the binary.
          This is useful if your code isn't explicitly called by code in
          the binary, e.g., if your code registers to receive some callback
          provided by some service.

        </td>
      </tr>
                      <tr>
        <td id="objc_import.archives">
          <code>archives</code>
        </td>
        <td>
                    <p>List of <a href="/versions/7.3.0/concepts/labels">labels</a>; required</p>
                            The list of <code>.a</code> files provided to Objective-C targets that
        depend on this target.

        </td>
      </tr>
                                                              <tr>
        <td id="objc_import.includes">
          <code>includes</code>
        </td>
        <td>
                    <p>List of strings; default is <code>[]</code></p>
                              List of <code>#include/#import</code> search paths to add to this target
          and all depending targets.

          This is to support third party and open-sourced libraries that do not
          specify the entire workspace path in their
          <code>#import/#include</code> statements.
          <p>
          The paths are interpreted relative to the package directory, and the
          genfiles and bin roots (e.g. <code>blaze-genfiles/pkg/includedir</code>
          and <code>blaze-out/pkg/includedir</code>) are included in addition to the
          actual client root.
          <p>
          Unlike <a href="/versions/7.3.0/reference/be/objective-c.html#objc_library.copts">COPTS</a>, these flags are added for this rule
          and every rule that depends on it. (Note: not the rules it depends upon!) Be
          very careful, since this may have far-reaching effects.  When in doubt, add
          "-iquote" flags to <a href="/versions/7.3.0/reference/be/objective-c.html#objc_library.copts">COPTS</a> instead.

        </td>
      </tr>
                                          <tr>
        <td id="objc_import.sdk_dylibs">
          <code>sdk_dylibs</code>
        </td>
        <td>
                    <p>List of strings; default is <code>[]</code></p>
                              Names of SDK .dylib libraries to link with. For instance, "libz" or
          "libarchive".

          "libc++" is included automatically if the binary has any C++ or
          Objective-C++ sources in its dependency tree. When linking a binary,
          all libraries named in that binary's transitive dependency graph are
          used.

        </td>
      </tr>
                      <tr>
        <td id="objc_import.sdk_frameworks">
          <code>sdk_frameworks</code>
        </td>
        <td>
                    <p>List of strings; default is <code>[]</code></p>
                              Names of SDK frameworks to link with (e.g. "AddressBook", "QuartzCore"). "UIKit" and
          "Foundation" are always included when building for the iOS, tvOS, visionOS,
          and watchOS platforms. For macOS, only "Foundation" is always included.

          <p> When linking a top level Apple binary, all SDK frameworks listed in that binary's
          transitive dependency graph are linked.

        </td>
      </tr>
                      <tr>
        <td id="objc_import.sdk_includes">
          <code>sdk_includes</code>
        </td>
        <td>
                    <p>List of strings; default is <code>[]</code></p>
                              List of <code>#include/#import</code> search paths to add to this target
          and all depending targets, where each path is relative to
          <code>$(SDKROOT)/usr/include</code>.

        </td>
      </tr>
                                                    <tr>
        <td id="objc_import.textual_hdrs">
          <code>textual_hdrs</code>
        </td>
        <td>
                    <p>List of <a href="/versions/7.3.0/concepts/labels">labels</a>; default is <code>[]</code></p>
                              The list of C, C++, Objective-C, and Objective-C++ files that are
          included as headers by source files in this rule or by users of this
          library. Unlike hdrs, these will not be compiled separately from the
          sources.

        </td>
      </tr>
                                <tr>
        <td id="objc_import.weak_sdk_frameworks">
          <code>weak_sdk_frameworks</code>
        </td>
        <td>
                    <p>List of strings; default is <code>[]</code></p>
                              Names of SDK frameworks to weakly link with. For instance,
          "MediaAccessibility".

          In difference to regularly linked SDK frameworks, symbols
          from weakly linked frameworks do not cause an error if they
          are not present at runtime.

        </td>
      </tr>
              </tbody>
  </table>
  <h2 id="objc_library">
    objc_library
  </h2>

  <a class="button button-with-icon" href="https://github.com/bazelbuild/bazel/blob/master/src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelObjcLibraryRule.java" target="_blank">
  View rule source<span class="material-icons icon-after" aria-hidden="true">open_in_new</span>
  </a>

  <pre class="rule-signature">objc_library(<a href="#objc_library.name">name</a>, <a href="#objc_library.deps">deps</a>, <a href="#objc_library.srcs">srcs</a>, <a href="common-definitions.html#typical.data">data</a>, <a href="#objc_library.hdrs">hdrs</a>, <a href="#objc_library.alwayslink">alwayslink</a>, <a href="common-definitions.html#common.compatible_with">compatible_with</a>, <a href="#objc_library.copts">copts</a>, <a href="#objc_library.defines">defines</a>, <a href="common-definitions.html#common.deprecation">deprecation</a>, <a href="common-definitions.html#common.distribs">distribs</a>, <a href="#objc_library.enable_modules">enable_modules</a>, <a href="common-definitions.html#common.exec_compatible_with">exec_compatible_with</a>, <a href="common-definitions.html#common.exec_properties">exec_properties</a>, <a href="common-definitions.html#common.features">features</a>, <a href="#objc_library.implementation_deps">implementation_deps</a>, <a href="#objc_library.includes">includes</a>, <a href="common-definitions.html#typical.licenses">licenses</a>, <a href="#objc_library.linkopts">linkopts</a>, <a href="#objc_library.module_map">module_map</a>, <a href="#objc_library.module_name">module_name</a>, <a href="#objc_library.non_arc_srcs">non_arc_srcs</a>, <a href="#objc_library.pch">pch</a>, <a href="common-definitions.html#common.restricted_to">restricted_to</a>, <a href="#objc_library.sdk_dylibs">sdk_dylibs</a>, <a href="#objc_library.sdk_frameworks">sdk_frameworks</a>, <a href="#objc_library.sdk_includes">sdk_includes</a>, <a href="common-definitions.html#common.tags">tags</a>, <a href="common-definitions.html#common.target_compatible_with">target_compatible_with</a>, <a href="common-definitions.html#common.testonly">testonly</a>, <a href="#objc_library.textual_hdrs">textual_hdrs</a>, <a href="common-definitions.html#common.toolchains">toolchains</a>, <a href="common-definitions.html#common.visibility">visibility</a>, <a href="#objc_library.weak_sdk_frameworks">weak_sdk_frameworks</a>)</pre>


<p>This rule produces a static library from the given Objective-C source files.</p>



  <h3 id="objc_library_args">Arguments</h3>
  <table class="table table-condensed table-bordered table-params">
    <colgroup>
      <col class="col-param" />
      <col class="param-description" />
    </colgroup>
    <thead>
      <tr>
        <th colspan="2">Attributes</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td id="objc_library.name"><code>name</code></td>
        <td>
          <p><a href="/versions/7.3.0/concepts/labels#target-names">Name</a>; required</p>
          <p>A unique name for this target.</p>

        </td>
      </tr>
                <tr>
        <td id="objc_library.deps">
          <code>deps</code>
        </td>
        <td>
                    <p>List of <a href="/versions/7.3.0/concepts/labels">labels</a>; default is <code>[]</code></p>
                              The list of targets that are linked together to form the final bundle.

        </td>
      </tr>
                      <tr>
        <td id="objc_library.srcs">
          <code>srcs</code>
        </td>
        <td>
                    <p>List of <a href="/versions/7.3.0/concepts/labels">labels</a>; default is <code>[]</code></p>
                              The list of C, C++, Objective-C, and Objective-C++ source and header
          files, and/or (`.s`, `.S`, or `.asm`) assembly source files, that are processed to create
          the library target.
          These are your checked-in files, plus any generated files.
          Source files are compiled into .o files with Clang. Header files
          may be included/imported by any source or header in the srcs attribute
          of this target, but not by headers in hdrs or any targets that depend
          on this rule.
          Additionally, precompiled .o files may be given as srcs.  Be careful to
          ensure consistency in the architecture of provided .o files and that of the
          build to avoid missing symbol linker errors.

        </td>
      </tr>
                                <tr>
        <td id="objc_library.hdrs">
          <code>hdrs</code>
        </td>
        <td>
                    <p>List of <a href="/versions/7.3.0/concepts/labels">labels</a>; default is <code>[]</code></p>
                              The list of C, C++, Objective-C, and Objective-C++ header files published
          by this library to be included by sources in dependent rules.
          <p>
          These headers describe the public interface for the library and will be
          made available for inclusion by sources in this rule or in dependent
          rules. Headers not meant to be included by a client of this library
          should be listed in the srcs attribute instead.
          <p>
          These will be compiled separately from the source if modules are enabled.

        </td>
      </tr>
                      <tr>
        <td id="objc_library.alwayslink">
          <code>alwayslink</code>
        </td>
        <td>
                    <p>Boolean; default is <code>False</code></p>
                              If 1, any bundle or binary that depends (directly or indirectly) on this
          library will link in all the object files for the files listed in
          <code>srcs</code> and <code>non_arc_srcs</code>, even if some contain no
          symbols referenced by the binary.
          This is useful if your code isn't explicitly called by code in
          the binary, e.g., if your code registers to receive some callback
          provided by some service.

        </td>
      </tr>
                                <tr>
        <td id="objc_library.copts">
          <code>copts</code>
        </td>
        <td>
                    <p>List of strings; default is <code>[]</code></p>
                              Extra flags to pass to the compiler.
          Subject to <a href="/versions/7.3.0/reference/be/make-variables">"Make variable"</a> substitution and
          <a href="/versions/7.3.0/reference/be/common-definitions#sh-tokenization">Bourne shell tokenization</a>.
          These flags will only apply to this target, and not those upon which
          it depends, or those which depend on it.
          <p>
          Note that for the generated Xcode project, directory paths specified using "-I" flags in
          copts are parsed out, prepended with "$(WORKSPACE_ROOT)/" if they are relative paths, and
          added to the header search paths for the associated Xcode target.

        </td>
      </tr>
                      <tr>
        <td id="objc_library.defines">
          <code>defines</code>
        </td>
        <td>
                    <p>List of strings; default is <code>[]</code></p>
                              Extra <code>-D</code> flags to pass to the compiler. They should be in
          the form <code>KEY=VALUE</code> or simply <code>KEY</code> and are
          passed not only to the compiler for this target (as <code>copts</code>
          are) but also to all <code>objc_</code> dependers of this target.
          Subject to <a href="/versions/7.3.0/reference/be/make-variables">"Make variable"</a> substitution and
          <a href="/versions/7.3.0/reference/be/common-definitions#sh-tokenization">Bourne shell tokenization</a>.

        </td>
      </tr>
                                          <tr>
        <td id="objc_library.enable_modules">
          <code>enable_modules</code>
        </td>
        <td>
                    <p>Boolean; default is <code>False</code></p>
                              Enables clang module support (via -fmodules).
          Setting this to 1 will allow you to @import system headers and other targets:
          @import UIKit;
          @import path_to_package_target;

        </td>
      </tr>
                                                    <tr>
        <td id="objc_library.implementation_deps">
          <code>implementation_deps</code>
        </td>
        <td>
                    <p>List of <a href="/versions/7.3.0/concepts/labels">labels</a>; default is <code>[]</code></p>
                              The list of other libraries that the library target depends on. Unlike with
          <code>deps</code>, the headers and include paths of these libraries (and all their
          transitive deps) are only used for compilation of this library, and not libraries that
          depend on it. Libraries specified with <code>implementation_deps</code> are still linked
          in binary targets that depend on this library.

        </td>
      </tr>
                      <tr>
        <td id="objc_library.includes">
          <code>includes</code>
        </td>
        <td>
                    <p>List of strings; default is <code>[]</code></p>
                              List of <code>#include/#import</code> search paths to add to this target
          and all depending targets.

          This is to support third party and open-sourced libraries that do not
          specify the entire workspace path in their
          <code>#import/#include</code> statements.
          <p>
          The paths are interpreted relative to the package directory, and the
          genfiles and bin roots (e.g. <code>blaze-genfiles/pkg/includedir</code>
          and <code>blaze-out/pkg/includedir</code>) are included in addition to the
          actual client root.
          <p>
          Unlike <a href="/versions/7.3.0/reference/be/objective-c.html#objc_library.copts">COPTS</a>, these flags are added for this rule
          and every rule that depends on it. (Note: not the rules it depends upon!) Be
          very careful, since this may have far-reaching effects.  When in doubt, add
          "-iquote" flags to <a href="/versions/7.3.0/reference/be/objective-c.html#objc_library.copts">COPTS</a> instead.

        </td>
      </tr>
                                <tr>
        <td id="objc_library.linkopts">
          <code>linkopts</code>
        </td>
        <td>
                    <p>List of strings; default is <code>[]</code></p>
                              Extra flags to pass to the linker.

        </td>
      </tr>
                      <tr>
        <td id="objc_library.module_map">
          <code>module_map</code>
        </td>
        <td>
                    <p><a href="/versions/7.3.0/concepts/labels">Label</a>; default is <code>None</code></p>
                              A custom Clang module map for this target. Use of a custom module map is discouraged. Most
          users should use module maps generated by Bazel.
          If specified, Bazel will not generate a module map for this target, but will pass the
          provided module map to the compiler.

        </td>
      </tr>
                      <tr>
        <td id="objc_library.module_name">
          <code>module_name</code>
        </td>
        <td>
                    <p>String; default is <code>""</code></p>
                              Sets the module name for this target. By default the module name is the target path with
          all special symbols replaced by _, e.g. //foo/baz:bar can be imported as foo_baz_bar.

        </td>
      </tr>
                      <tr>
        <td id="objc_library.non_arc_srcs">
          <code>non_arc_srcs</code>
        </td>
        <td>
                    <p>List of <a href="/versions/7.3.0/concepts/labels">labels</a>; default is <code>[]</code></p>
                              The list of Objective-C files that are processed to create the
          library target that DO NOT use ARC.
          The files in this attribute are treated very similar to those in the
          srcs attribute, but are compiled without ARC enabled.

        </td>
      </tr>
                      <tr>
        <td id="objc_library.pch">
          <code>pch</code>
        </td>
        <td>
                    <p><a href="/versions/7.3.0/concepts/labels">Label</a>; default is <code>None</code></p>
                              Header file to prepend to every source file being compiled (both arc
          and non-arc).
          Use of pch files is actively discouraged in BUILD files, and this should be
          considered deprecated. Since pch files are not actually precompiled this is not
          a build-speed enhancement, and instead is just a global dependency. From a build
          efficiency point of view you are actually better including what you need directly
          in your sources where you need it.

        </td>
      </tr>
                                <tr>
        <td id="objc_library.sdk_dylibs">
          <code>sdk_dylibs</code>
        </td>
        <td>
                    <p>List of strings; default is <code>[]</code></p>
                              Names of SDK .dylib libraries to link with. For instance, "libz" or
          "libarchive".

          "libc++" is included automatically if the binary has any C++ or
          Objective-C++ sources in its dependency tree. When linking a binary,
          all libraries named in that binary's transitive dependency graph are
          used.

        </td>
      </tr>
                      <tr>
        <td id="objc_library.sdk_frameworks">
          <code>sdk_frameworks</code>
        </td>
        <td>
                    <p>List of strings; default is <code>[]</code></p>
                              Names of SDK frameworks to link with (e.g. "AddressBook", "QuartzCore"). "UIKit" and
          "Foundation" are always included when building for the iOS, tvOS, visionOS,
          and watchOS platforms. For macOS, only "Foundation" is always included.

          <p> When linking a top level Apple binary, all SDK frameworks listed in that binary's
          transitive dependency graph are linked.

        </td>
      </tr>
                      <tr>
        <td id="objc_library.sdk_includes">
          <code>sdk_includes</code>
        </td>
        <td>
                    <p>List of strings; default is <code>[]</code></p>
                              List of <code>#include/#import</code> search paths to add to this target
          and all depending targets, where each path is relative to
          <code>$(SDKROOT)/usr/include</code>.

        </td>
      </tr>
                                                    <tr>
        <td id="objc_library.textual_hdrs">
          <code>textual_hdrs</code>
        </td>
        <td>
                    <p>List of <a href="/versions/7.3.0/concepts/labels">labels</a>; default is <code>[]</code></p>
                              The list of C, C++, Objective-C, and Objective-C++ files that are
          included as headers by source files in this rule or by users of this
          library. Unlike hdrs, these will not be compiled separately from the
          sources.

        </td>
      </tr>
                                          <tr>
        <td id="objc_library.weak_sdk_frameworks">
          <code>weak_sdk_frameworks</code>
        </td>
        <td>
                    <p>List of strings; default is <code>[]</code></p>
                              Names of SDK frameworks to weakly link with. For instance,
          "MediaAccessibility".

          In difference to regularly linked SDK frameworks, symbols
          from weakly linked frameworks do not cause an error if they
          are not present at runtime.

        </td>
      </tr>
              </tbody>
  </table>
  <h2 id="available_xcodes">
    available_xcodes
  </h2>

  <a class="button button-with-icon" href="https://github.com/bazelbuild/bazel/blob/master/src/main/java/com/google/devtools/build/lib/rules/apple/AvailableXcodesRule.java" target="_blank">
  View rule source<span class="material-icons icon-after" aria-hidden="true">open_in_new</span>
  </a>

  <pre class="rule-signature">available_xcodes(<a href="#available_xcodes.name">name</a>, <a href="#available_xcodes.default">default</a>, <a href="common-definitions.html#common.deprecation">deprecation</a>, <a href="common-definitions.html#common.distribs">distribs</a>, <a href="common-definitions.html#common.features">features</a>, <a href="common-definitions.html#typical.licenses">licenses</a>, <a href="common-definitions.html#common.tags">tags</a>, <a href="common-definitions.html#common.testonly">testonly</a>, <a href="#available_xcodes.versions">versions</a>, <a href="common-definitions.html#common.visibility">visibility</a>)</pre>


<p>Two targets of this rule can be depended on by an <code>xcode_config</code> rule instance to
indicate the remotely and locally available xcode versions.
This allows selection of an official xcode version from the collectively available xcodes.</p>



  <h3 id="available_xcodes_args">Arguments</h3>
  <table class="table table-condensed table-bordered table-params">
    <colgroup>
      <col class="col-param" />
      <col class="param-description" />
    </colgroup>
    <thead>
      <tr>
        <th colspan="2">Attributes</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td id="available_xcodes.name"><code>name</code></td>
        <td>
          <p><a href="/versions/7.3.0/concepts/labels#target-names">Name</a>; required</p>
          <p>A unique name for this target.</p>

        </td>
      </tr>
                <tr>
        <td id="available_xcodes.default">
          <code>default</code>
        </td>
        <td>
                    <p><a href="/versions/7.3.0/concepts/labels">Label</a>; <a href="common-definitions.html#configurable-attributes">nonconfigurable</a>; required</p>
                            The default xcode version for this platform.

        </td>
      </tr>
                                                                                  <tr>
        <td id="available_xcodes.versions">
          <code>versions</code>
        </td>
        <td>
                    <p>List of <a href="/versions/7.3.0/concepts/labels">labels</a>; <a href="common-definitions.html#configurable-attributes">nonconfigurable</a>; default is <code>[]</code></p>
                            The xcode versions that are available on this platform.

        </td>
      </tr>
                        </tbody>
  </table>
  <h2 id="xcode_config">
    xcode_config
  </h2>

  <a class="button button-with-icon" href="https://github.com/bazelbuild/bazel/blob/master/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeConfigRule.java" target="_blank">
  View rule source<span class="material-icons icon-after" aria-hidden="true">open_in_new</span>
  </a>

  <pre class="rule-signature">xcode_config(<a href="#xcode_config.name">name</a>, <a href="#xcode_config.default">default</a>, <a href="common-definitions.html#common.deprecation">deprecation</a>, <a href="common-definitions.html#common.distribs">distribs</a>, <a href="common-definitions.html#common.features">features</a>, <a href="common-definitions.html#typical.licenses">licenses</a>, <a href="#xcode_config.local_versions">local_versions</a>, <a href="#xcode_config.remote_versions">remote_versions</a>, <a href="common-definitions.html#common.tags">tags</a>, <a href="common-definitions.html#common.testonly">testonly</a>, <a href="#xcode_config.versions">versions</a>, <a href="common-definitions.html#common.visibility">visibility</a>)</pre>


<p>A single target of this rule can be referenced by the <code>--xcode_version_config</code> build
flag to translate the <code>--xcode_version</code> flag into an accepted official xcode version.
This allows selection of an official xcode version from a number of registered aliases.</p>



  <h3 id="xcode_config_args">Arguments</h3>
  <table class="table table-condensed table-bordered table-params">
    <colgroup>
      <col class="col-param" />
      <col class="param-description" />
    </colgroup>
    <thead>
      <tr>
        <th colspan="2">Attributes</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td id="xcode_config.name"><code>name</code></td>
        <td>
          <p><a href="/versions/7.3.0/concepts/labels#target-names">Name</a>; required</p>
          <p>A unique name for this target.</p>

        </td>
      </tr>
                <tr>
        <td id="xcode_config.default">
          <code>default</code>
        </td>
        <td>
                    <p><a href="/versions/7.3.0/concepts/labels">Label</a>; <a href="common-definitions.html#configurable-attributes">nonconfigurable</a>; default is <code>None</code></p>
                            The default official version of xcode to use.
        The version specified by the provided <code>xcode_version</code> target is to be used if
        no <code>xcode_version</code> build flag is specified. This is required if any
        <code>versions</code> are set. This may not be set if <code>remote_versions</code> or
        <code>local_versions</code> is set.

        </td>
      </tr>
                                                              <tr>
        <td id="xcode_config.local_versions">
          <code>local_versions</code>
        </td>
        <td>
                    <p><a href="/versions/7.3.0/concepts/labels">Label</a>; <a href="common-definitions.html#configurable-attributes">nonconfigurable</a>; default is <code>None</code></p>
                            The <code>xcode_version</code> targets that are available locally.
        These are used along with <code>local_versions</code> to select a mutually available
        version. This may not be set if <code>versions</code> is set.

        </td>
      </tr>
                      <tr>
        <td id="xcode_config.remote_versions">
          <code>remote_versions</code>
        </td>
        <td>
                    <p><a href="/versions/7.3.0/concepts/labels">Label</a>; <a href="common-definitions.html#configurable-attributes">nonconfigurable</a>; default is <code>None</code></p>
                            The <code>xcode_version</code> targets that are available remotely.
        These are used along with <code>remote_versions</code> to select a mutually available
        version. This may not be set if <code>versions</code> is set.

        </td>
      </tr>
                                          <tr>
        <td id="xcode_config.versions">
          <code>versions</code>
        </td>
        <td>
                    <p>List of <a href="/versions/7.3.0/concepts/labels">labels</a>; <a href="common-definitions.html#configurable-attributes">nonconfigurable</a>; default is <code>[]</code></p>
                            Accepted <code>xcode_version</code> targets that may be used.
        If the value of the <code>xcode_version</code> build flag matches one of the aliases
        or version number of any of the given <code>xcode_version</code> targets, the matching
        target will be used. This may not be set if <code>remote_versions</code> or
        <code>local_versions</code> is set.

        </td>
      </tr>
                        </tbody>
  </table>
  <h2 id="xcode_version">
    xcode_version
  </h2>

  <a class="button button-with-icon" href="https://github.com/bazelbuild/bazel/blob/master/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionRule.java" target="_blank">
  View rule source<span class="material-icons icon-after" aria-hidden="true">open_in_new</span>
  </a>

  <pre class="rule-signature">xcode_version(<a href="#xcode_version.name">name</a>, <a href="#xcode_version.default_ios_sdk_version">default_ios_sdk_version</a>, <a href="#xcode_version.default_macos_sdk_version">default_macos_sdk_version</a>, <a href="#xcode_version.default_tvos_sdk_version">default_tvos_sdk_version</a>, <a href="#xcode_version.default_visionos_sdk_version">default_visionos_sdk_version</a>, <a href="#xcode_version.default_watchos_sdk_version">default_watchos_sdk_version</a>, <a href="common-definitions.html#common.deprecation">deprecation</a>, <a href="common-definitions.html#common.distribs">distribs</a>, <a href="common-definitions.html#common.features">features</a>, <a href="common-definitions.html#typical.licenses">licenses</a>, <a href="common-definitions.html#common.tags">tags</a>, <a href="common-definitions.html#common.testonly">testonly</a>, <a href="#xcode_version.version">version</a>, <a href="common-definitions.html#common.visibility">visibility</a>)</pre>


<p>Represents a single official xcode version with acceptable aliases for that xcode version.
See the <code>xcode_config</code> rule.</p>



  <h3 id="xcode_version_args">Arguments</h3>
  <table class="table table-condensed table-bordered table-params">
    <colgroup>
      <col class="col-param" />
      <col class="param-description" />
    </colgroup>
    <thead>
      <tr>
        <th colspan="2">Attributes</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td id="xcode_version.name"><code>name</code></td>
        <td>
          <p><a href="/versions/7.3.0/concepts/labels#target-names">Name</a>; required</p>
          <p>A unique name for this target.</p>

        </td>
      </tr>
                <tr>
        <td id="xcode_version.default_ios_sdk_version">
          <code>default_ios_sdk_version</code>
        </td>
        <td>
                    <p>String; <a href="common-definitions.html#configurable-attributes">nonconfigurable</a>; default is <code>""</code></p>
                            The ios sdk version that is used by default when this version of xcode is being used.
        The <code>ios_sdk_version</code> build flag will override the value specified here.

        </td>
      </tr>
                      <tr>
        <td id="xcode_version.default_macos_sdk_version">
          <code>default_macos_sdk_version</code>
        </td>
        <td>
                    <p>String; <a href="common-definitions.html#configurable-attributes">nonconfigurable</a>; default is <code>""</code></p>
                            The macosx sdk version that is used by default when this version of xcode is being used.
        The <code>macos_sdk_version</code> build flag will override the value specified here.

        </td>
      </tr>
                      <tr>
        <td id="xcode_version.default_tvos_sdk_version">
          <code>default_tvos_sdk_version</code>
        </td>
        <td>
                    <p>String; <a href="common-definitions.html#configurable-attributes">nonconfigurable</a>; default is <code>""</code></p>
                            The tvos sdk version that is used by default when this version of xcode is being used.
        The <code>tvos_sdk_version</code> build flag will override the value specified here.

        </td>
      </tr>
                      <tr>
        <td id="xcode_version.default_visionos_sdk_version">
          <code>default_visionos_sdk_version</code>
        </td>
        <td>
                    <p>String; <a href="common-definitions.html#configurable-attributes">nonconfigurable</a>; default is <code>""</code></p>
                            The visionos sdk version that is used by default when this version of xcode is being used.
        The <code>visionos_sdk_version</code> build flag will override the value specified here.

        </td>
      </tr>
                      <tr>
        <td id="xcode_version.default_watchos_sdk_version">
          <code>default_watchos_sdk_version</code>
        </td>
        <td>
                    <p>String; <a href="common-definitions.html#configurable-attributes">nonconfigurable</a>; default is <code>""</code></p>
                            The watchos sdk version that is used by default when this version of xcode is being used.
        The <code>watchos_sdk_version</code> build flag will override the value specified here.

        </td>
      </tr>
                                                                                  <tr>
        <td id="xcode_version.version">
          <code>version</code>
        </td>
        <td>
                    <p>String; <a href="common-definitions.html#configurable-attributes">nonconfigurable</a>; required</p>
                            The official version number of a version of Xcode.

        </td>
      </tr>
                        </tbody>
  </table>

<!-- Generated footer -->

</body>
</html>
