Objective-C ルール

ルール

j2objc_library

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

このルールは、J2ObjC を使用して Java ソースファイルを Objective-C に変換し、objc_library ルールと objc_binary ルールの依存関係として使用できます。J2ObjC 自体の詳細については、J2ObjC のサイトをご覧ください。

カスタム J2ObjC トランスパイル フラグは、コマンドラインでビルドフラグ --j2objc_translation_flags を使用して指定できます。

j2objc_library ターゲットに含まれる変換済みファイルは、デフォルトのコンパイル構成を使用してコンパイルされます。これは、属性でコンパイル オプションが指定されていない objc_library ルールのソースと同じ構成です。

さらに、生成されたコードはソースレベルではなくターゲット レベルで重複除去されます。同じ Java ソースファイルを含む 2 つの異なる Java ターゲットがある場合、リンク時にシンボルの重複エラーが発生することがあります。この問題を解決する正しい方法は、共有 Java ソースファイルを信頼できる別の共通のターゲットに移動することです。

引数

属性
name

Name; required

このターゲットの一意の名前。

deps

List of labels; optional

Objective-C にトランスパイルされる Java ファイルを含む j2objc_libraryjava_libraryjava_importjava_proto_library ターゲットのリスト。

exportsdepsruntime_deps で推移的に到達できるすべての java_library ターゲットと java_import ターゲットは、変換されてコンパイルされます。現在、srcjar が指定されていない java_import ターゲットまたは Java アノテーション処理によって生成されたファイルはサポートされていません。

J2ObjC 変換の動作は、推移的クロージャに含まれるソース Java ソースファイルのタイプに応じて異なります。java_librarysrcs に含まれる .java ソースファイルごとに、対応する .h ソースファイルと .m ソースファイルが生成されます。java_librarysrcs または java_importsrcjar に含まれるソース JAR ごとに、その JAR のすべてのコードで対応する .h ソースファイルと .m ソースファイルが生成されます。

ユーザーは、J2ObjC で生成されたヘッダー ファイルをコードにインポートできます。これらのファイルのインポート パスは、元の Java アーティファクトのルート相対パスです。たとえば、//some/package/foo.java のインポートパスは some/package/foo.h で、//some/package/bar.srcjar のインポートパスは some/package/bar.h です。

proto_library ルールがこのルールの推移的終了にある場合、J2ObjC proto もバイナリレベルで生成、コンパイル、リンクインされます。proto //some/proto/foo.proto の場合、ユーザーはインポートパス some/proto/foo.j2objc.pb.h を使用して、生成されたコードを参照できます。

entry_classes

List of strings; optional

変換後の ObjC がユーザーの ObjC コードによって直接参照される Java クラスのリスト。--j2objc_dead_code_removal フラグがオンの場合、この属性は必須です。Java クラスは、Java 言語仕様で定義されている正規名で指定する必要があります。フラグ --j2objc_dead_code_removal を指定すると、エントリクラスのリストが推移的に収集され、デッドコード分析を行うエントリ ポイントとして使用されます。使用されていないクラスは、最終的な ObjC App Bundle から削除されます。
jre_deps

List of labels; optional

この j2objc_library ルールによって変換されるすべての Java コードに必要な追加の JRE エミュレーション ライブラリのリスト。デフォルトでリンクされるのは、JRE のコア機能のみです。

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)

このルールは、すでにコンパイルされている静的ライブラリを .a ファイルの形式でカプセル化します。また、objc_library でサポートされているのと同じ属性を使用して、ヘッダーとリソースをエクスポートすることもできます。

引数

属性
name

Name; required

このターゲットの一意の名前。

hdrs

List of labels; optional

このライブラリで公開される C、C++、Objective-C、Objective-C++ ヘッダー ファイルのリスト。依存ルールのソースによってインクルードされます。

これらのヘッダーはライブラリの公開インターフェースを記述するもので、このルールまたは依存ルールのソースによって組み込まれるようになります。このライブラリのクライアントに含めることを想定していないヘッダーは、代わりに srcs 属性に記載する必要があります。

モジュールが有効になっている場合、これらはソースとは別にコンパイルされます。

Boolean; optional; default is False

1 の場合、このライブラリに直接的または間接的に依存するバンドルまたはバイナリは、バイナリによって参照されるシンボルが含まれていなくても、srcsnon_arc_srcs にリストされているファイルのすべてのオブジェクト ファイルにリンクします。 これは、バイナリ内のコードによってコードが明示的に呼び出されない場合(サービスがなんらかのサービスから提供されるコールバックを受け取るようにコードが登録されている場合など)に有用です。
archives

List of labels; required

Objective-C ターゲットに提供される、このターゲットに依存する .a ファイルのリスト。
includes

List of strings; optional

このターゲットに追加する #include/#import 検索パスと、それに依存するすべてのターゲットのリスト。これは、#import/#include ステートメントでワークスペース パス全体を指定しないサードパーティ ライブラリとオープンソース ライブラリをサポートするためです。

パスはパッケージ ディレクトリを基準とする相対パスで解釈され、実際のクライアント ルートに加えて、genfile とビンルート(例: blaze-genfiles/pkg/includedirblaze-out/pkg/includedir)が含まれます。

COPTS とは異なり、これらのフラグは、このルールと、それに依存するすべてのルールに追加されます。(注: この関数が依存するルールとは異なります)。これは広範囲にわたる影響を及ぼす可能性があるため、十分に注意してください。判断に迷う場合は、代わりに COPTS に「-iquote」フラグを追加してください。

sdk_dylibs

List of strings; optional

リンクする SDK の .dylib ライブラリの名前。例: "libz"、"libarchive"。 依存関係ツリーにバイナリの C++ または Objective-C++ のソースがある場合は、「libc++」が自動的にインクルードされます。バイナリをリンクすると、そのバイナリの推移的依存関係グラフで指定されたすべてのライブラリが使用されます。
sdk_frameworks

List of strings; optional

リンクする SDK フレームワークの名前(「AddressBook」、「QuartzCore」など)。iOS、tvOS、watchOS のプラットフォーム向けにビルドする場合は、「UIKit」と「Foundation」が常に含まれます。 macOS の場合、常に [Foundation] のみが含まれます。

トップレベル Apple バイナリをリンクすると、そのバイナリの推移的依存関係グラフにリストされているすべての SDK フレームワークがリンクされます。

sdk_includes

List of strings; optional

このターゲットに追加する #include/#import 検索パスとそれに依存するすべてのターゲットのリスト(各パスは $(SDKROOT)/usr/include からの相対パス)。
textual_hdrs

List of labels; optional

このルールのソースファイル、またはこのライブラリのユーザーがヘッダーとして含める C、C++、Objective-C、Objective-C++ ファイルのリスト。hdr とは異なり、これらはソースとは別にコンパイルされません。
weak_sdk_frameworks

List of strings; optional

弱くリンクする SDK フレームワークの名前。たとえば、「MediaAccessibility」です。定期的にリンクされた SDK フレームワークとは異なり、脆弱なフレームワークのシンボルは、実行時に存在しない場合、エラーになりません。

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)

このルールは、指定された Objective-C ソースファイルから静的ライブラリを生成します。

引数

属性
name

Name; required

このターゲットの一意の名前。

deps

List of labels; optional

まとめてリンクされて最終的なバンドルを形成するターゲットのリスト。
srcs

List of labels; optional

ライブラリ ターゲットを作成するために処理される C、C++、Objective-C、Objective-C++ のソースファイルとヘッダー ファイル、またはアセンブリ ソースファイル(.s、.S、.asm)のリスト。 チェックインしたファイルと生成されたファイルは次のとおりです。 ソースファイルは、Clang を使用して .o ファイルにコンパイルされます。ヘッダー ファイルは、このターゲットの srcs 属性の任意のソースまたはヘッダーによってインクルードまたはインポートできますが、hdrs またはこのルールに依存するターゲット内のヘッダーではインクルードできません。 また、プリコンパイルされた .o ファイルは srcs として指定できます。指定された .o ファイルのアーキテクチャとビルドのアーキテクチャの整合性を保つことで、シンボル リンカーの欠落エラーを回避するように注意してください。
hdrs

List of labels; optional

このライブラリで公開される C、C++、Objective-C、Objective-C++ ヘッダー ファイルのリスト。依存ルールのソースによってインクルードされます。

これらのヘッダーはライブラリの公開インターフェースを記述するもので、このルールまたは依存ルールのソースによって組み込まれるようになります。このライブラリのクライアントに含めることを想定していないヘッダーは、代わりに srcs 属性に記載する必要があります。

モジュールが有効になっている場合、これらはソースとは別にコンパイルされます。

Boolean; optional; default is False

1 の場合、このライブラリに直接的または間接的に依存するバンドルまたはバイナリは、バイナリによって参照されるシンボルが含まれていなくても、srcsnon_arc_srcs にリストされているファイルのすべてのオブジェクト ファイルにリンクします。 これは、バイナリ内のコードによってコードが明示的に呼び出されない場合(サービスがなんらかのサービスから提供されるコールバックを受け取るようにコードが登録されている場合など)に有用です。
copts

List of strings; optional

コンパイラに渡す追加のフラグ。 "Make variable" 置換と Bourne シェルトークン化が適用されます。 これらのフラグは、このターゲットにのみ適用され、依存するターゲットやターゲットに依存するターゲットには適用されません。

生成された Xcode プロジェクトでは、copt で -I フラグを使用して指定されたディレクトリ パスが解析され、相対パスの場合は先頭に「$(WORKSPACE_ROOT)/」が付加され、関連する Xcode ターゲットのヘッダー検索パスに追加されます。

defines

List of strings; optional

コンパイラに渡す追加の -D フラグ。これらは KEY=VALUE または単に KEY の形式である必要があり、このターゲットのコンパイラだけでなく(copts と同様に)、このターゲットのすべての objc_ 依存者にも渡されます。 "Make variable" 置換と Bourne シェルトークン化が適用されます。
enable_modules

Boolean; optional; default is False

clang モジュールのサポートを有効にします(-fmodules 経由)。 これを 1 に設定すると、システム ヘッダーなどのターゲットを @import でインポートできます。 @import UIKit; @import path_to_package_target;
includes

List of strings; optional

このターゲットに追加する #include/#import 検索パスと、それに依存するすべてのターゲットのリスト。これは、#import/#include ステートメントでワークスペース パス全体を指定しないサードパーティ ライブラリとオープンソース ライブラリをサポートするためです。

パスはパッケージ ディレクトリを基準とする相対パスで解釈され、実際のクライアント ルートに加えて、genfile とビンルート(例: blaze-genfiles/pkg/includedirblaze-out/pkg/includedir)が含まれます。

COPTS とは異なり、これらのフラグは、このルールと、それに依存するすべてのルールに追加されます。(注: この関数が依存するルールとは異なります)。これは広範囲にわたる影響を及ぼす可能性があるため、十分に注意してください。判断に迷う場合は、代わりに COPTS に「-iquote」フラグを追加してください。

linkopts

List of strings; optional

リンカーに渡す追加のフラグ。
module_map

Label; optional

このターゲットのカスタム Clang モジュール マップ。カスタム モジュール マップの使用はおすすめしません。ほとんどのユーザーは、Bazel で生成されたモジュール マップを使用する必要があります。 指定すると、Bazel はこのターゲットのモジュール マップを生成しませんが、指定したモジュール マップをコンパイラに渡します。
module_name

String; optional

このターゲットのモジュール名を設定します。デフォルトでは、モジュール名はターゲット パスであり、特殊文字はすべて _ に置き換えられます。たとえば、//foo/baz:bar は foo_baz_bar としてインポートできます。
non_arc_srcs

List of labels; optional

ARC を使用しないライブラリ ターゲットを作成するために処理される Objective-C ファイルのリスト。 この属性のファイルは srcs 属性のファイルと同じように扱われますが、ARC を有効にせずにコンパイルされます。
pch

Label; optional

コンパイルされるすべてのソースファイル(arc と非 arc の両方)の先頭に追加するヘッダー ファイル。 BUILD ファイルでは pch ファイルの使用は推奨されていないので、非推奨とみなす必要があります。pch ファイルは実際にはプリコンパイルされないため、ビルド速度の向上ではなく、単にグローバルな依存関係であるだけです。ビルド効率の観点から見ると、実際には、必要なものを必要なソースに直接追加できる方がよいでしょう。
runtime_deps

List of labels; optional

実行時に遅延読み込みされるフレームワーク ターゲットのリスト。これらは App Bundle に含まれていますが、ビルド時にはリンクされません。
sdk_dylibs

List of strings; optional

リンクする SDK の .dylib ライブラリの名前。例: "libz"、"libarchive"。 依存関係ツリーにバイナリの C++ または Objective-C++ のソースがある場合は、「libc++」が自動的にインクルードされます。バイナリをリンクすると、そのバイナリの推移的依存関係グラフで指定されたすべてのライブラリが使用されます。
sdk_frameworks

List of strings; optional

リンクする SDK フレームワークの名前(「AddressBook」、「QuartzCore」など)。iOS、tvOS、watchOS のプラットフォーム向けにビルドする場合は、「UIKit」と「Foundation」が常に含まれます。 macOS の場合、常に [Foundation] のみが含まれます。

トップレベル Apple バイナリをリンクすると、そのバイナリの推移的依存関係グラフにリストされているすべての SDK フレームワークがリンクされます。

sdk_includes

List of strings; optional

このターゲットに追加する #include/#import 検索パスとそれに依存するすべてのターゲットのリスト(各パスは $(SDKROOT)/usr/include からの相対パス)。
textual_hdrs

List of labels; optional

このルールのソースファイル、またはこのライブラリのユーザーがヘッダーとして含める C、C++、Objective-C、Objective-C++ ファイルのリスト。hdr とは異なり、これらはソースとは別にコンパイルされません。
weak_sdk_frameworks

List of strings; optional

弱くリンクする SDK フレームワークの名前。たとえば、「MediaAccessibility」です。定期的にリンクされた SDK フレームワークとは異なり、脆弱なフレームワークのシンボルは、実行時に存在しない場合、エラーになりません。

available_xcodes

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

このルールの 2 つのターゲットは、xcode_config ルール インスタンスによって依存して、リモートおよびローカルで利用可能な xcode バージョンを示します。これにより、まとめて利用可能な Xcode から正式な Xcode バージョンを選択できます。

引数

属性
name

Name; required

このターゲットの一意の名前。

default

Label; required; nonconfigurable

このプラットフォームのデフォルトの xcode バージョン。
versions

List of labels; optional; nonconfigurable

このプラットフォームで利用可能な xcode バージョン。

xcode_config

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

--xcode_version_config ビルドフラグでこのルールの単一のターゲットを参照し、--xcode_version フラグを承認済みの公式 xcode バージョンに変換できます。これにより、多数の登録済みエイリアスから正式な xcode バージョンを選択できます。

引数

属性
name

Name; required

このターゲットの一意の名前。

default

Label; optional; nonconfigurable

使用する xcode のデフォルトの公式バージョン。xcode_version ビルドフラグが指定されていない場合、指定された xcode_version ターゲットで指定されたバージョンが使用されます。versions が設定されている場合は必須です。remote_versions または 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.

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)

1 つの公式 xcode バージョンを表します。その xcode バージョンに受け入れ可能なエイリアスが含まれます。xcode_config ルールをご覧ください。

引数

属性
name

Name; required

このターゲットの一意の名前。

default_ios_sdk_version

String; optional; nonconfigurable

このバージョンの xcode が使用されているときにデフォルトで使用される iOS SDK バージョン。ios_sdk_version ビルドフラグは、ここで指定された値をオーバーライドします。
default_macos_sdk_version

String; optional; nonconfigurable

このバージョンの xcode が使用されているときにデフォルトで使用される macosx SDK のバージョン。macos_sdk_version ビルドフラグは、ここで指定された値をオーバーライドします。
default_tvos_sdk_version

String; optional; nonconfigurable

このバージョンの xcode が使用されているときにデフォルトで使用される tvos SDK のバージョン。 tvos_sdk_version ビルドフラグは、ここで指定された値をオーバーライドします。
default_watchos_sdk_version

String; optional; nonconfigurable

このバージョンの xcode が使用されているときにデフォルトで使用される watchos SDK のバージョン。watchos_sdk_version ビルドフラグは、ここで指定された値をオーバーライドします。
version

String; required; nonconfigurable

Xcode のバージョンの公式バージョン番号。