Objective-C ルール

問題を報告 ソースを表示 Nightly · 7.4 .

ルール

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 に変換します。Objective-C は、objc_library ルールと objc_binary ルールの依存関係として使用できます。J2ObjC 自体の詳細については、J2ObjC のサイトをご覧ください。

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

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

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

引数

属性
name

名前: 必須

このターゲットの名前。

deps

ラベルのリスト。デフォルトは [] です。

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

exportsdepsruntime_deps を介して到達可能なすべての java_library ターゲットと java_import ターゲット(Java アノテーション処理によって生成されたファイルを含む)が変換され、コンパイルされます。srcjar が指定されていない code>java_import ターゲットはサポートされていません。

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

文字列のリスト。デフォルトは [] です。

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

ラベルのリスト。デフォルトは [] です。

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

objc_import

ルールソースを表示
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)

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

引数

属性
name

名前: 必須

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

deps

ラベルのリスト。デフォルトは [] です。

このターゲットが依存するターゲットのリスト。
hdrs

ラベルのリスト。デフォルトは [] です。

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

これらのヘッダーはライブラリの公開インターフェースを記述し、このルールまたは依存するルールのソースによって使用できるようになります。このライブラリのクライアントによってインクルードされることを意図していないヘッダーは、srcs 属性でリストする必要があります。

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

ブール値。デフォルトは False です。

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

ラベルのリスト(必須)

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

文字列のリスト。デフォルトは [] です。

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

パスはパッケージ ディレクトリを基準に解釈され、実際のクライアント ルートに加えて、genfiles ルートおよび bin ルート(blaze-genfiles/pkg/includedirblaze-out/pkg/includedir など)が含まれます。

COPTS とは異なり、これらのフラグはこのルールおよびそれに依存するすべてのルールに追加されます。(注: コンテナが依存するルールではありません)。広範囲の影響が及ぶ可能性があるため、細心の注意を払ってください。不明な場合は、代わりに COPTS に「-iquote」フラグを追加します。

sdk_dylibs

文字列のリスト。デフォルトは [] です。

リンクする SDK .dylib ライブラリの名前。たとえば、「libz」、「libarchive」など。バイナリの依存関係ツリーに C++ ソースまたは Objective-C++ ソースが含まれている場合は、libc++ が自動的にインクルードされます。バイナリをリンクするときに、そのバイナリの伝播依存関係グラフに名前が指定されているすべてのライブラリが使用されます。
sdk_frameworks

文字列のリスト。デフォルトは [] です。

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

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

sdk_includes

文字列のリスト。デフォルトは [] です。

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

ラベルのリスト。デフォルトは [] です。

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

文字列のリスト。デフォルトは [] です。

弱いリンクを設定したい 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, 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)

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

引数

属性
name

名前(必須)

このターゲットの名前。

deps

ラベルのリスト。デフォルトは [] です。

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

ラベルのリスト。デフォルトは [] です。

ライブラリ ターゲットの作成時に処理される C、C++、Objective-C、Objective-C++ のソースファイルとヘッダー ファイル、またはアセンブリ ソースファイル(.s、.S、.asm)のリスト。これらは、チェックインしたファイルと、生成されたすべてのファイルです。 ソースファイルは Clang で .o ファイルにコンパイルされます。ヘッダー ファイルは、このターゲットの srcs 属性内の任意のソースまたはヘッダーによってインクルードまたはインポートできますが、hdrs 内のヘッダーや、このルールに依存するターゲットによってインポートすることはできません。また、事前コンパイルされた .o ファイルを src として指定することもできます。シンボル リンカー エラーが発生しないように、指定された .o ファイルのアーキテクチャとビルドのアーキテクチャの整合性を確認してください。
hdrs

ラベルのリスト。デフォルトは [] です。

依存ルールのソースによってインクルードされるように、このライブラリによってパブリッシュされる、C、C++、Objective-C、Objective-C++ のヘッダー ファイルのリスト。

これらのヘッダーはライブラリの公開インターフェースを記述し、このルールまたは依存するルールのソースによって使用できるようになります。このライブラリのクライアントによってインクルードされることを意図していないヘッダーは、srcs 属性でリストする必要があります。

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

ブール値。デフォルトは False です。

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

文字列のリスト。デフォルトは [] です。

コンパイラに渡す追加のフラグ。「変数を作成」の置換と Bourne シェルのトークン化の対象となります。これらのフラグは、このターゲットにのみ適用され、このターゲットに依存するターゲットや、このターゲットに依存するターゲットには適用されません。

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

defines

文字列のリスト。デフォルトは [] です。

コンパイラに渡す追加の -D フラグ。これらは KEY=VALUE 形式または単純に KEY 形式で、このターゲットのコンパイラ(copts の場合と同様に)だけでなく、このターゲットのすべての objc_ 依存関係にも渡されます。「変数を作成」の置換と Bourne シェルのトークン化の対象となります。
enable_modules

ブール値。デフォルトは False

clang モジュールのサポートを有効にします(-fmodules を介して)。これを 1 に設定すると、システム ヘッダーや他のターゲットを @import できます。 @import UIKit; @import path_to_package_target;
implementation_deps

ラベルのリスト。デフォルトは [] です。

ライブラリ ターゲットが依存する他のライブラリのリスト。deps とは異なり、これらのライブラリのヘッダーとインクルードパス(およびそのすべての推移的な依存関係)は、このライブラリのコンパイルにのみ使用され、このライブラリに依存するライブラリには使用されません。implementation_deps で指定されたライブラリは、このライブラリに依存するバイナリ ターゲットでも引き続きリンクされます。
includes

文字列のリスト。デフォルトは [] です。

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

パスはパッケージ ディレクトリを基準に解釈され、実際のクライアント ルートに加えて、genfiles ルートおよび bin ルート(blaze-genfiles/pkg/includedirblaze-out/pkg/includedir など)が含まれます。

COPTS とは異なり、これらのフラグはこのルールおよびそれに依存するすべてのルールに追加されます。(注: 依存するルールではありません)。影響が広範囲に及ぶ可能性があるため、十分に注意してください。不明な場合は、代わりに COPTS に「-iquote」フラグを追加します。

linkopts

文字列のリスト。デフォルトは [] です。

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

ラベル(デフォルトは None

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

文字列。デフォルトは "" です。

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

ラベルのリスト。デフォルトは [] です。

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

ラベル(デフォルトは None

コンパイルされるすべてのソースファイル(ARC と非 ARC の両方)の先頭に追加するヘッダー ファイル。BUILD ファイルでは pch ファイルの使用は積極的におすすめしません。これは非推奨と見なされます。pch ファイルは実際には事前コンパイルされないため、これはビルド速度の向上ではなく、単なるグローバル依存関係です。ビルドの効率の観点から見ると、実際に必要なものは、必要な場所にソースに直接含めるほうがよいでしょう。
sdk_dylibs

文字列のリスト。デフォルトは [] です。

リンクする SDK .dylib ライブラリの名前。たとえば、「libz」、「libarchive」など。バイナリの依存関係ツリーに C++ ソースまたは Objective-C++ ソースが含まれている場合は、libc++ が自動的にインクルードされます。バイナリをリンクするときに、そのバイナリの伝播依存関係グラフに名前が指定されているすべてのライブラリが使用されます。
sdk_frameworks

文字列のリスト。デフォルトは [] です。

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

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

sdk_includes

文字列のリスト。デフォルトは [] です。

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

ラベルのリスト。デフォルトは [] です。

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

文字列のリスト。デフォルトは [] です。

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

available_xcodes

ルールソースを表示
available_xcodes(name, default, deprecation, distribs, features, licenses, tags, testonly, versions, visibility)

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

引数

属性
name

名前: 必須

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

default

ラベル構成不可。必須

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

ラベルのリスト。構成不可。デフォルトは []

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

xcode_config

ルールソースを表示
xcode_config(name, default, deprecation, distribs, features, licenses, local_versions, remote_versions, tags, testonly, versions, visibility)

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

引数

属性
name

名前: 必須

このターゲットの名前。

default

ラベル構成不可。デフォルトは None

使用する Xcode のデフォルトの公式バージョン。xcode_version ビルドフラグが指定されていない場合は、指定された xcode_version ターゲットで指定されたバージョンが使用されます。これは、versions が設定されている場合に必須です。remote_versions または local_versions が設定されている場合は設定できません。
local_versions

ラベル構成不可。デフォルトは None

ローカルで利用可能な xcode_version ターゲット。これらは local_versions とともに使用され、相互に利用可能なバージョンを選択します。versions が設定されている場合、この値は設定されないことがあります。
remote_versions

ラベル: 構成不可、デフォルトは None

リモートで使用可能な xcode_version ターゲット。これらは remote_versions とともに使用され、相互に利用可能なバージョンを選択します。versions が設定されている場合、この値は設定されないことがあります。
versions

ラベルのリスト。構成不可。デフォルトは []

使用できる承認済みの xcode_version ターゲット。xcode_version ビルドフラグの値が、指定された xcode_version ターゲットのいずれかのエイリアスまたはバージョン番号と一致する場合、一致するターゲットが使用されます。remote_versions または local_versions が設定されている場合は設定できません。

xcode_version

ルールのソースを表示
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)

その xcode バージョンの有効なエイリアスを使用して、単一の公式 xcode バージョンを表します。 xcode_config ルールを確認します。

引数

属性
name

名前: 必須

このターゲットの名前。

default_ios_sdk_version

文字列。構成不可。デフォルトは "" です。

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

文字列。構成不可。デフォルトは "" です。

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

文字列。構成不可。デフォルトは "" です。

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

文字列。構成不可。デフォルトは "" です。

このバージョンの Xcode が使用されている場合にデフォルトで使用される visionos sdk バージョン。visionos_sdk_version ビルドフラグは、ここで指定された値をオーバーライドします。
default_watchos_sdk_version

文字列、設定不可、デフォルトは ""

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

文字列。構成不可。必須

Xcode バージョンの正式なバージョン番号。