Objective-C ルール

問題を報告する ソースを表示 Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

ルール

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

名前(必須)

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

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 //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 アプリバンドルから削除されます。
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 ファイルを 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 とは異なり、これらのフラグは、このルールと、このルールに依存するすべてのルールに追加されます。(注: 依存するルールではありません)。広範囲に影響する可能性があるため、十分に注意してください。不明な場合は、代わりに 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++ ファイルのリスト。hdrs とは異なり、これらはソースとは別にコンパイルされません。
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)

このルールの単一のターゲットは、--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 が使用されている場合にデフォルトで使用される macosx 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 のバージョンの公式バージョン番号。