Aturan Objective-C

Laporkan masalah Lihat sumber Nightly · 8.0 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Aturan

j2objc_library

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

Aturan ini menggunakan J2ObjC untuk menerjemahkan file sumber Java ke Objective-C, yang kemudian dapat digunakan sebagai dependensi aturan objc_library dan objc_binary. Informasi mendetail tentang J2ObjC itu sendiri dapat ditemukan di situs J2ObjC

Flag transpilasi J2ObjC kustom dapat ditentukan menggunakan flag build --j2objc_translation_flags di command line.

Perhatikan bahwa file terjemahan yang disertakan dalam target j2objc_library akan dikompilasi menggunakan konfigurasi kompilasi default, konfigurasi yang sama dengan sumber aturan objc_library tanpa opsi kompilasi yang ditentukan dalam atribut.

Selain itu, kode yang dihasilkan akan dihapus duplikatnya di tingkat target, bukan di tingkat sumber. Jika memiliki dua target Java yang berbeda yang menyertakan file sumber Java yang sama, Anda mungkin melihat error simbol duplikat pada waktu penautan. Cara yang benar untuk mengatasi masalah ini adalah dengan memindahkan file sumber Java bersama ke target umum terpisah yang dapat diandalkan.

Argumen

Atribut
name

Nama; wajib

Nama unik untuk target ini.

deps

Daftar label; default-nya adalah []

Daftar target j2objc_library, java_library, java_import, dan java_proto_library yang berisi file Java yang akan ditranspile ke Objective-C.

Semua target java_library dan java_import yang dapat dijangkau secara transitif melalui exports, deps, dan runtime_deps akan diterjemahkan dan dikompilasi, termasuk file yang dihasilkan oleh pemrosesan anotasi Java. Tidak ada dukungan untuk target code>java_import tanpa srcjar yang ditentukan.

Terjemahan J2ObjC berfungsi secara berbeda bergantung pada jenis file sumber Java yang disertakan dalam penutupan transitif. Untuk setiap file sumber .java yang disertakan dalam srcs dari java_library, file sumber .h dan .m yang sesuai akan dihasilkan. Untuk setiap jar sumber yang disertakan dalam srcs dari java_library atau srcjar dari java_import, file sumber .h dan .m yang sesuai akan dihasilkan dengan semua kode untuk jar tersebut.

Pengguna dapat mengimpor file header yang dibuat J2ObjC dalam kode mereka. Jalur impor untuk file ini adalah jalur relatif root dari artefak Java asli. Misalnya, //some/package/foo.java memiliki jalur impor some/package/foo.h dan //some/package/bar.srcjar memiliki some/package/bar.h

Jika aturan proto_library berada dalam penutupan transitif aturan ini, proto J2ObjC juga akan dihasilkan, dikompilasi, dan ditautkan di tingkat biner. Untuk proto //some/proto/foo.proto, pengguna dapat mereferensikan kode yang dihasilkan menggunakan jalur impor some/proto/foo.j2objc.pb.h.

entry_classes

Daftar string; default-nya adalah []

Daftar class Java yang ObjC-nya yang diterjemahkan akan direferensikan langsung oleh kode ObjC pengguna. Atribut ini diperlukan jika tanda --j2objc_dead_code_removal aktif. Class Java harus ditentukan dalam nama kanonisnya sebagaimana ditentukan oleh Spesifikasi Bahasa Java. Jika flag --j2objc_dead_code_removal ditentukan, daftar class entri akan dikumpulkan secara transitif dan digunakan sebagai titik entri untuk melakukan analisis kode mati. Class yang tidak digunakan kemudian akan dihapus dari app bundle ObjC akhir.
jre_deps

Daftar label; default-nya adalah []

Daftar library emulasi JRE tambahan yang diperlukan oleh semua kode Java yang diterjemahkan oleh aturan j2objc_library ini. Hanya fungsi JRE inti yang ditautkan secara default.

objc_import

Melihat sumber aturan
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)

Aturan ini mengenkapsulasi library statis yang telah dikompilasi dalam bentuk file .a. Hal ini juga memungkinkan ekspor header dan resource menggunakan atribut yang sama yang didukung oleh objc_library.

Argumen

Atribut
name

Nama; wajib

Nama unik untuk target ini.

deps

Daftar label; default-nya adalah []

Daftar target yang menjadi dependensi target ini.
hdrs

Daftar label; default-nya adalah []

Daftar file header C, C++, Objective-C, dan Objective-C++ yang dipublikasikan oleh library ini untuk disertakan oleh sumber dalam aturan dependen.

Header ini menjelaskan antarmuka publik untuk library dan akan tersedia untuk disertakan oleh sumber dalam aturan ini atau dalam aturan dependen. Header yang tidak dimaksudkan untuk disertakan oleh klien library ini harus dicantumkan dalam atribut srcs.

Ini akan dikompilasi secara terpisah dari sumber jika modul diaktifkan.

Boolean; default-nya adalah False

Jika 1, setiap paket atau biner yang bergantung (secara langsung atau tidak langsung) pada library ini akan menautkan semua file objek untuk file yang tercantum dalam srcs dan non_arc_srcs, meskipun beberapa tidak berisi simbol yang dirujuk oleh biner. Hal ini berguna jika kode Anda tidak dipanggil secara eksplisit oleh kode dalam biner, misalnya, jika kode Anda terdaftar untuk menerima beberapa callback yang disediakan oleh beberapa layanan.
archives

Daftar label; wajib diisi

Daftar file .a yang diberikan ke target Objective-C yang bergantung pada target ini.
includes

Daftar string; default-nya adalah []

Daftar jalur penelusuran #include/#import yang akan ditambahkan ke target ini dan semua target dependen. Hal ini untuk mendukung library pihak ketiga dan open source yang tidak menentukan seluruh jalur ruang kerja dalam pernyataan #import/#include-nya.

Jalur ditafsirkan secara relatif terhadap direktori paket, dan genfiles dan root bin (misalnya, blaze-genfiles/pkg/includedir dan blaze-out/pkg/includedir) disertakan selain root klien yang sebenarnya.

Tidak seperti COPTS, flag ini ditambahkan untuk aturan ini dan setiap aturan yang bergantung padanya. (Catatan: bukan aturan yang menjadi dependensinya!) Berhati-hatilah, karena hal ini dapat berdampak luas. Jika ragu, tambahkan flag "-iquote" ke COPTS.

sdk_dylibs

Daftar string; default-nya adalah []

Nama library .dylib SDK yang akan ditautkan. Misalnya, "libz" atau "libarchive". "libc++" disertakan secara otomatis jika biner memiliki sumber C++ atau Objective-C++ dalam hierarki dependensinya. Saat menautkan biner, semua library yang diberi nama dalam grafik dependensi transitif biner tersebut akan digunakan.
sdk_frameworks

Daftar string; default-nya adalah []

Nama framework SDK yang akan ditautkan (misalnya, "AddressBook", "QuartzCore"). "UIKit" dan "Foundation" selalu disertakan saat mem-build untuk platform iOS, tvOS, visionOS, dan watchOS. Untuk macOS, hanya "Foundation" yang selalu disertakan.

Saat menautkan biner Apple level teratas, semua framework SDK yang tercantum dalam grafik dependensi transitif biner tersebut akan ditautkan.

sdk_includes

Daftar string; default-nya adalah []

Daftar jalur penelusuran #include/#import yang akan ditambahkan ke target ini dan semua target dependen, dengan setiap jalur relatif terhadap $(SDKROOT)/usr/include.
textual_hdrs

Daftar label; default-nya adalah []

Daftar file C, C++, Objective-C, dan Objective-C++ yang disertakan sebagai header oleh file sumber dalam aturan ini atau oleh pengguna library ini. Tidak seperti hdr, file ini tidak akan dikompilasi secara terpisah dari sumber.
weak_sdk_frameworks

Daftar string; default-nya adalah []

Nama framework SDK yang akan ditautkan secara lemah. Misalnya, "MediaAccessibility". Berbeda dengan framework SDK yang ditautkan secara rutin, simbol dari framework yang ditautkan secara lemah tidak menyebabkan error jika tidak ada saat runtime.

objc_library

Melihat sumber aturan
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)

Aturan ini menghasilkan library statis dari file sumber Objective-C yang diberikan.

Argumen

Atribut
name

Nama; wajib

Nama unik untuk target ini.

deps

Daftar label; default-nya adalah []

Daftar target yang ditautkan bersama untuk membentuk paket akhir.
srcs

Daftar label; default-nya adalah []

Daftar file header dan sumber C, C++, Objective-C, dan Objective-C++, dan/atau file sumber assembly (`.s`, `.S`, atau `.asm`), yang diproses untuk membuat target library. Ini adalah file yang Anda check in, beserta file yang dihasilkan. File sumber dikompilasi menjadi file .o dengan Clang. File header dapat disertakan/diimpor oleh sumber atau header apa pun dalam atribut srcs target ini, tetapi tidak oleh header dalam hdrs atau target apa pun yang bergantung pada aturan ini. Selain itu, file .o yang telah dikompilasi sebelumnya dapat diberikan sebagai src. Berhati-hatilah untuk memastikan konsistensi dalam arsitektur file .o yang disediakan dan build untuk menghindari error linker simbol yang hilang.
hdrs

Daftar label; default-nya adalah []

Daftar file header C, C++, Objective-C, dan Objective-C++ yang dipublikasikan oleh library ini untuk disertakan oleh sumber dalam aturan dependen.

Header ini menjelaskan antarmuka publik untuk library dan akan tersedia untuk disertakan oleh sumber dalam aturan ini atau dalam aturan dependen. Header yang tidak dimaksudkan untuk disertakan oleh klien library ini harus dicantumkan dalam atribut srcs.

Ini akan dikompilasi secara terpisah dari sumber jika modul diaktifkan.

Boolean; default-nya adalah False

Jika 1, setiap paket atau biner yang bergantung (secara langsung atau tidak langsung) pada library ini akan menautkan semua file objek untuk file yang tercantum dalam srcs dan non_arc_srcs, meskipun beberapa tidak berisi simbol yang dirujuk oleh biner. Hal ini berguna jika kode Anda tidak dipanggil secara eksplisit oleh kode dalam biner, misalnya, jika kode Anda terdaftar untuk menerima beberapa callback yang disediakan oleh beberapa layanan.
copts

Daftar string; default-nya adalah []

Flag tambahan yang akan diteruskan ke compiler. Tunduk pada penggantian "Make variable" dan tokenisasi shell Bourne. Flag ini hanya akan berlaku untuk target ini, dan bukan target yang menjadi dependensinya, atau target yang bergantung padanya.

Perhatikan bahwa untuk project Xcode yang dihasilkan, jalur direktori yang ditentukan menggunakan flag "-I" di copts akan diuraikan, diawali dengan "$(WORKSPACE_ROOT)/" jika merupakan jalur relatif, dan ditambahkan ke jalur penelusuran header untuk target Xcode terkait.

defines

Daftar string; default-nya adalah []

Flag -D tambahan yang akan diteruskan ke compiler. Fungsi ini harus dalam bentuk KEY=VALUE atau hanya KEY dan diteruskan tidak hanya ke compiler untuk target ini (seperti copts ), tetapi juga ke semua dependen objc_ dari target ini. Tunduk pada penggantian "Make variable" dan tokenisasi shell Bourne.
enable_modules

Boolean; default-nya adalah False

Mengaktifkan dukungan modul clang (melalui -fmodules). Menetapkan ini ke 1 akan memungkinkan Anda @import header sistem dan target lainnya: @import UIKit; @import path_to_package_target;
implementation_deps

Daftar label; default-nya adalah []

Daftar library lain yang menjadi dependensi target library. Tidak seperti deps, header dan jalur penyertaan library ini (dan semua dependensi transitifnya) hanya digunakan untuk kompilasi library ini, dan bukan library yang bergantung padanya. Library yang ditentukan dengan implementation_deps masih ditautkan dalam target biner yang bergantung pada library ini.
includes

Daftar string; default-nya adalah []

Daftar jalur penelusuran #include/#import yang akan ditambahkan ke target ini dan semua target dependen. Hal ini untuk mendukung library pihak ketiga dan open source yang tidak menentukan seluruh jalur ruang kerja dalam pernyataan #import/#include-nya.

Jalur ditafsirkan secara relatif terhadap direktori paket, dan genfiles dan root bin (misalnya, blaze-genfiles/pkg/includedir dan blaze-out/pkg/includedir) disertakan selain root klien yang sebenarnya.

Tidak seperti COPTS, flag ini ditambahkan untuk aturan ini dan setiap aturan yang bergantung padanya. (Catatan: bukan aturan yang menjadi dependensinya!) Berhati-hatilah, karena hal ini dapat berdampak luas. Jika ragu, tambahkan flag "-iquote" ke COPTS.

linkopts

Daftar string; default-nya adalah []

Flag tambahan yang akan diteruskan ke penaut.
module_map

Label; default-nya adalah None

Peta modul Clang kustom untuk target ini. Penggunaan peta modul kustom tidak dianjurkan. Sebagian besar pengguna harus menggunakan peta modul yang dihasilkan oleh Bazel. Jika ditentukan, Bazel tidak akan membuat peta modul untuk target ini, tetapi akan meneruskan peta modul yang disediakan ke compiler.
module_name

String; default-nya adalah ""

Menetapkan nama modul untuk target ini. Secara default, nama modul adalah jalur target dengan semua simbol khusus diganti dengan _, misalnya //foo/baz:bar dapat diimpor sebagai foo_baz_bar.
non_arc_srcs

Daftar label; default-nya adalah []

Daftar file Objective-C yang diproses untuk membuat target library yang TIDAK menggunakan ARC. File dalam atribut ini diperlakukan sangat mirip dengan file dalam atribut srcs, tetapi dikompilasi tanpa mengaktifkan ARC.
pch

Label; default-nya adalah None

File header yang akan ditambahkan ke setiap file sumber yang dikompilasi (baik arc maupun non-arc). Penggunaan file pch secara aktif tidak dianjurkan dalam file BUILD, dan hal ini harus dianggap tidak digunakan lagi. Karena file pch tidak benar-benar dikompilasi sebelumnya, ini bukan peningkatan kecepatan build, melainkan hanya dependensi global. Dari sudut pandang efisiensi build, Anda sebenarnya lebih baik menyertakan hal yang Anda butuhkan langsung di sumber tempat Anda membutuhkannya.
sdk_dylibs

Daftar string; default-nya adalah []

Nama library .dylib SDK yang akan ditautkan. Misalnya, "libz" atau "libarchive". "libc++" disertakan secara otomatis jika biner memiliki sumber C++ atau Objective-C++ dalam hierarki dependensinya. Saat menautkan biner, semua library yang diberi nama dalam grafik dependensi transitif biner tersebut akan digunakan.
sdk_frameworks

Daftar string; default-nya adalah []

Nama framework SDK yang akan ditautkan (misalnya, "AddressBook", "QuartzCore"). "UIKit" dan "Foundation" selalu disertakan saat mem-build untuk platform iOS, tvOS, visionOS, dan watchOS. Untuk macOS, hanya "Foundation" yang selalu disertakan.

Saat menautkan biner Apple level teratas, semua framework SDK yang tercantum dalam grafik dependensi transitif biner tersebut akan ditautkan.

sdk_includes

Daftar string; default-nya adalah []

Daftar jalur penelusuran #include/#import yang akan ditambahkan ke target ini dan semua target dependen, dengan setiap jalur relatif terhadap $(SDKROOT)/usr/include.
textual_hdrs

Daftar label; default-nya adalah []

Daftar file C, C++, Objective-C, dan Objective-C++ yang disertakan sebagai header oleh file sumber dalam aturan ini atau oleh pengguna library ini. Tidak seperti hdr, file ini tidak akan dikompilasi secara terpisah dari sumber.
weak_sdk_frameworks

Daftar string; default-nya adalah []

Nama framework SDK yang akan ditautkan secara lemah. Misalnya, "MediaAccessibility". Berbeda dengan framework SDK yang ditautkan secara rutin, simbol dari framework yang ditautkan secara lemah tidak menyebabkan error jika tidak ada saat runtime.

available_xcodes

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

Dua target aturan ini dapat diandalkan oleh instance aturan xcode_config untuk menunjukkan versi xcode yang tersedia secara jarak jauh dan lokal. Hal ini memungkinkan pemilihan versi xcode resmi dari xcode yang tersedia secara kolektif.

Argumen

Atribut
name

Nama; wajib

Nama unik untuk target ini.

default

Label; tidak dapat dikonfigurasi; wajib

Versi xcode default untuk platform ini.
versions

Daftar label; tidak dapat dikonfigurasi; default-nya adalah []

Versi xcode yang tersedia di platform ini.

xcode_config

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

Satu target aturan ini dapat direferensikan oleh flag build --xcode_version_config untuk menerjemahkan flag --xcode_version menjadi versi xcode resmi yang diterima. Hal ini memungkinkan pemilihan versi xcode resmi dari sejumlah alias terdaftar.

Argumen

Atribut
name

Nama; wajib

Nama unik untuk target ini.

default

Label; tidak dapat dikonfigurasi; defaultnya adalah None

Versi resmi default xcode yang akan digunakan. Versi yang ditentukan oleh target xcode_version yang disediakan akan digunakan jika tidak ada flag build xcode_version yang ditentukan. Hal ini diperlukan jika ada versions yang ditetapkan. Ini mungkin tidak ditetapkan jika remote_versions atau local_versions ditetapkan.
local_versions

Label; tidak dapat dikonfigurasi; defaultnya adalah None

Target xcode_version yang tersedia secara lokal. Ini digunakan bersama dengan local_versions untuk memilih versi yang tersedia secara bersama. Nilai ini mungkin tidak ditetapkan jika versions ditetapkan.
remote_versions

Label; tidak dapat dikonfigurasi; defaultnya adalah None

Target xcode_version yang tersedia dari jarak jauh. Ini digunakan bersama dengan remote_versions untuk memilih versi yang tersedia secara bersama. Nilai ini mungkin tidak ditetapkan jika versions ditetapkan.
versions

Daftar label; tidak dapat dikonfigurasi; default-nya adalah []

Target xcode_version yang diterima dan dapat digunakan. Jika nilai flag build xcode_version cocok dengan salah satu alias atau nomor versi target xcode_version yang diberikan, target yang cocok akan digunakan. Ini mungkin tidak ditetapkan jika remote_versions atau local_versions ditetapkan.

xcode_version

Melihat sumber aturan
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)

Mewakili satu versi xcode resmi dengan alias yang dapat diterima untuk versi xcode tersebut. Lihat aturan xcode_config.

Argumen

Atribut
name

Nama; wajib

Nama unik untuk target ini.

default_ios_sdk_version

String; tidak dapat dikonfigurasi; default-nya adalah ""

Versi ios sdk yang digunakan secara default saat versi xcode ini digunakan. Flag build ios_sdk_version akan mengganti nilai yang ditentukan di sini.
default_macos_sdk_version

String; tidak dapat dikonfigurasi; default-nya adalah ""

Versi macosx sdk yang digunakan secara default saat versi xcode ini digunakan. Flag build macos_sdk_version akan mengganti nilai yang ditentukan di sini.
default_tvos_sdk_version

String; tidak dapat dikonfigurasi; default-nya adalah ""

Versi tvos sdk yang digunakan secara default saat versi xcode ini digunakan. Flag build tvos_sdk_version akan mengganti nilai yang ditentukan di sini.
default_visionos_sdk_version

String; tidak dapat dikonfigurasi; default-nya adalah ""

Versi visionos sdk yang digunakan secara default saat versi xcode ini digunakan. Flag build visionos_sdk_version akan mengganti nilai yang ditentukan di sini.
default_watchos_sdk_version

String; tidak dapat dikonfigurasi; default-nya adalah ""

Versi watchos sdk yang digunakan secara default saat versi xcode ini digunakan. Flag build watchos_sdk_version akan mengganti nilai yang ditentukan di sini.
version

String; tidak dapat dikonfigurasi; wajib

Nomor versi resmi versi Xcode.