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

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 ファイルは srcs として指定される場合があります。シンボル リンカーの欠落エラーを回避するため、提供された .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 とは異なり、これらのフラグはこのルールおよびそれに依存するすべてのルールに追加されます。(注: コンテナが依存するルールではありません)。広範囲の影響が及ぶ可能性があるため、細心の注意を払ってください。判断に迷う場合は、代わりに「-iquote」フラグを COPTS に追加してください。

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 と non-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++ ファイルのリスト。hdrs とは異なり、ソースとは別にコンパイルされることはありません。
weak_sdk_frameworks

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

弱いリンクを設定する SDK フレームワークの名前。例: 「MediaAccessibility」。 定期的にリンクされる SDK フレームワークとは異なり、弱くリンクされたフレームワークのシンボルは、実行時に存在していなくてもエラーの原因になりません。

available_xcodes

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

リモートおよびローカルで利用可能な Xcode のバージョンを示すために、xcode_config ルール インスタンスによってこのルールの 2 つのターゲットを指定できます。これにより、まとめて利用可能な 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 バージョンの正式なバージョン番号。