Quy tắc Objective-C

Quy tắ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)

Quy tắc này sử dụng J2ObjC để dịch các tệp nguồn Java sang Objective-C. Sau đó, các tệp này có thể được dùng làm phần phụ thuộc của các quy tắc objc_library và objc_binary. Bạn có thể tìm thấy thông tin chi tiết về J2ObjC tại trang web J2ObjC

Bạn có thể chỉ định cờ dịch chuyển J2ObjC tuỳ chỉnh bằng cách sử dụng cờ bản dựng --j2objc_translation_flags trong dòng lệnh.

Xin lưu ý rằng các tệp đã dịch có trong mục tiêu j2objc_library sẽ được biên dịch bằng cấu hình biên dịch mặc định, tương tự cấu hình như đối với các nguồn của quy tắc objc_library không có lựa chọn biên dịch nào được chỉ định trong các thuộc tính.

Ngoài ra, mã đã tạo sẽ được loại bỏ trùng lặp ở cấp đích, chứ không phải ở cấp nguồn. Nếu có hai mục tiêu Java khác nhau bao gồm cùng một tệp nguồn Java, thì bạn có thể thấy lỗi biểu tượng trùng lặp tại thời điểm liên kết. Cách chính xác để giải quyết vấn đề này là di chuyển các tệp nguồn Java dùng chung sang một mục tiêu chung riêng biệt có thể được phụ thuộc.

Đối số

Thuộc tính
name

Name; required

Tên dành riêng cho mục tiêu này.

deps

List of labels; optional

Danh sách các mục tiêu j2objc_library, java_library, java_importjava_proto_library có chứa các tệp Java cần được sao chép sang Objective-C.

Tất cả các mục tiêu java_libraryjava_import có thể đạt được bắc cầu qua exports, depsruntime_deps sẽ được dịch và biên dịch. Hiện tại, chúng tôi không hỗ trợ các tệp được tạo bằng tính năng xử lý chú giải Java hoặc các mục tiêu java_import không được chỉ định srcjar.

Quá trình dịch J2ObjC hoạt động theo cách khác nhau tuỳ thuộc vào loại tệp nguồn Java nguồn có trong phần đóng bắc cầu. Đối với mỗi tệp nguồn .java có trong srcs của java_library, một tệp nguồn .h và .m tương ứng sẽ được tạo. Đối với mỗi jar nguồn có trong srcs của java_library hoặc srcjar của java_import, một tệp nguồn .h và .m tương ứng sẽ được tạo với tất cả mã cho jar đó.

Người dùng có thể nhập các tệp tiêu đề do J2ObjC tạo trong mã của họ. Đường dẫn nhập cho các tệp này là đường dẫn tương đối gốc của cấu phần phần mềm Java gốc. Ví dụ: //some/package/foo.java có đường dẫn nhập là some/package/foo.h//some/package/bar.srcjarsome/package/bar.h

Nếu các quy tắc proto_library đang đóng bắc cầu của quy tắc này, thì các protos J2ObjC cũng sẽ được tạo, biên dịch và liên kết ở cấp nhị phân. Đối với proto //some/proto/foo.proto, người dùng có thể tham chiếu mã đã tạo bằng cách sử dụng đường dẫn nhập some/proto/foo.j2objc.pb.h.

entry_classes

List of strings; optional

Danh sách các lớp Java có bản dịch ObjC sẽ được mã ObjC người dùng tham chiếu trực tiếp. Thuộc tính này là bắt buộc nếu cờ --j2objc_dead_code_removal đang bật. Lớp Java phải được chỉ định trong tên chuẩn của chúng, như được xác định trong Thông số kỹ thuật ngôn ngữ Java. Khi chỉ định cờ --j2objc_dead_code_removal, danh sách các lớp mục nhập sẽ được thu thập theo cách bắc cầu và dùng làm điểm truy cập để thực hiện việc phân tích mã không hoạt động. Sau đó, các lớp không dùng đến sẽ bị xoá khỏi gói ứng dụng ObjC cuối cùng.
jre_deps

List of labels; optional

Danh sách thư viện mô phỏng JRE bổ sung bắt buộc phải có bởi tất cả mã Java được dịch theo quy tắc j2objc_library này. Chỉ có chức năng JRE cốt lõi được liên kết theo mặc định.

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)

Quy tắc này đóng gói một thư viện tĩnh đã biên dịch dưới dạng tệp .a. Tính năng này cũng cho phép xuất tiêu đề và tài nguyên bằng cách sử dụng các thuộc tính mà objc_library hỗ trợ.

Đối số

Thuộc tính
name

Name; required

Tên dành riêng cho mục tiêu này.

hdrs

List of labels; optional

Danh sách các tệp tiêu đề C, C++, Objective-C và Objective-C++ do thư viện này phát hành để đưa vào các nguồn trong các quy tắc phụ thuộc.

Những tiêu đề này mô tả giao diện công khai của thư viện và sẽ được cung cấp để các nguồn tham gia quy tắc này hoặc trong các quy tắc phụ thuộc. Các tiêu đề không phải do ứng dụng của thư viện này sử dụng nên được liệt kê trong thuộc tính srcs.

Các mô-đun này sẽ được biên dịch riêng biệt với nguồn nếu bật các mô-đun.

Boolean; optional; default is False

Nếu là 1, mọi gói hoặc tệp nhị phân phụ thuộc (trực tiếp hoặc gián tiếp) vào thư viện này đều sẽ liên kết trong mọi tệp đối tượng cho các tệp được liệt kê trong srcsnon_arc_srcs, ngay cả khi một số gói không chứa ký hiệu mà tệp nhị phân tham chiếu. Điều này sẽ hữu ích nếu mã của bạn không được gọi rõ ràng bằng mã trong tệp nhị phân, chẳng hạn như khi mã của bạn đăng ký nhận một số lệnh gọi lại do một số dịch vụ cung cấp.
archives

List of labels; required

Danh sách tệp .a được cung cấp cho các mục tiêu Objective-C phụ thuộc vào mục tiêu này.
includes

List of strings; optional

Danh sách đường dẫn tìm kiếm #include/#import cần thêm vào mục tiêu này và tất cả các mục tiêu tuỳ thuộc. Việc này nhằm hỗ trợ các thư viện bên thứ ba và thư viện nguồn mở không chỉ định toàn bộ đường dẫn không gian làm việc trong các câu lệnh #import/#include.

Các đường dẫn được diễn giải tương ứng với thư mục gói, cũng như các genfile và gốc bin (ví dụ: blaze-genfiles/pkg/includedirblaze-out/pkg/includedir) được đưa vào ngoài thư mục gốc thực tế của ứng dụng.

Không giống như COPTS, những cờ này được thêm cho quy tắc này và mọi quy tắc phụ thuộc vào quy tắc đó. (Lưu ý: không phải các quy tắc mà nó phụ thuộc vào!) Hãy hết sức cẩn trọng vì việc này có thể gây ra những ảnh hưởng rất lớn. Khi không chắc chắn, hãy thêm cờ "-i ngôn ngữ" vào COPTS.

sdk_dylibs

List of strings; optional

Tên của các thư viện SDK .dylib để liên kết. Ví dụ: "libz" hoặc "liblưu". "libc++" sẽ được tự động đưa vào nếu tệp nhị phân có bất kỳ nguồn C++ hoặc Objective-C++ nào trong cây phần phụ thuộc. Khi liên kết một tệp nhị phân, tất cả các thư viện có tên trong biểu đồ phần phụ thuộc bắc cầu của tệp nhị phân đó đều được sử dụng.
sdk_frameworks

List of strings; optional

Tên của khung SDK để liên kết (ví dụ: "Addressbook", "QuartzCore"). "UIKit" và "Foundation" luôn được đưa vào khi xây dựng cho các nền tảng iOS, tvOS và watchOS. Đối với macOS, chỉ có "Foundation" (Nền tảng) luôn được đưa vào.

Khi liên kết một tệp nhị phân Apple cấp cao nhất, tất cả khung SDK có trong biểu đồ phần phụ thuộc bắc cầu của tệp nhị phân đó đều được liên kết.

sdk_includes

List of strings; optional

Danh sách đường dẫn tìm kiếm #include/#import cần thêm vào mục tiêu này và tất cả các mục tiêu phụ thuộc, trong đó mỗi đường dẫn đều tương ứng với $(SDKROOT)/usr/include.
textual_hdrs

List of labels; optional

Danh sách các tệp C, C++, Objective-C và Objective-C++ được đưa vào dưới dạng tiêu đề theo tệp nguồn trong quy tắc này hoặc do người dùng của thư viện này đưa vào. Không giống như hdr, các tệp này sẽ không được biên dịch riêng biệt với các nguồn.
weak_sdk_frameworks

List of strings; optional

Tên của khung SDK cần liên kết yếu. Ví dụ: "MediaAccessibility". Khác với các khung SDK được liên kết thường xuyên, biểu tượng của các khung liên kết yếu sẽ không gây ra lỗi nếu không có trong thời gian chạy.

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)

Quy tắc này tạo ra một thư viện tĩnh từ các tệp nguồn Objective-C đã cho.

Đối số

Thuộc tính
name

Name; required

Tên dành riêng cho mục tiêu này.

deps

List of labels; optional

Danh sách các mục tiêu được liên kết với nhau để tạo thành gói cuối cùng.
srcs

List of labels; optional

Danh sách các tệp nguồn và tiêu đề C, C++, Objective-C và Objective-C++ và/hoặc tệp nguồn tập hợp (`.s`, ".S" hoặc ".asm") được xử lý để tạo mục tiêu cho thư viện. Đây là các tệp đã xác nhận có mặt cùng với mọi tệp đã tạo. Các tệp nguồn được biên dịch thành các tệp .o bằng Clang. Bất kỳ nguồn hoặc tiêu đề nào cũng có thể đưa tệp tiêu đề vào/nhập trong thuộc tính srcs của mục tiêu này, chứ không phải bằng tiêu đề trong hdr hay bất kỳ mục tiêu nào phụ thuộc vào quy tắc này. Ngoài ra, các tệp .o được biên dịch trước có thể được cung cấp dưới dạng srcs. Hãy cẩn thận để đảm bảo tính nhất quán trong cấu trúc của các tệp .o được cung cấp và của bản dựng để tránh lỗi thiếu trình liên kết biểu tượng.
hdrs

List of labels; optional

Danh sách các tệp tiêu đề C, C++, Objective-C và Objective-C++ do thư viện này phát hành để đưa vào các nguồn trong các quy tắc phụ thuộc.

Những tiêu đề này mô tả giao diện công khai của thư viện và sẽ được cung cấp để các nguồn tham gia quy tắc này hoặc trong các quy tắc phụ thuộc. Các tiêu đề không phải do ứng dụng của thư viện này sử dụng nên được liệt kê trong thuộc tính srcs.

Các mô-đun này sẽ được biên dịch riêng biệt với nguồn nếu bật các mô-đun.

Boolean; optional; default is False

Nếu là 1, mọi gói hoặc tệp nhị phân phụ thuộc (trực tiếp hoặc gián tiếp) vào thư viện này đều sẽ liên kết trong mọi tệp đối tượng cho các tệp được liệt kê trong srcsnon_arc_srcs, ngay cả khi một số gói không chứa ký hiệu mà tệp nhị phân tham chiếu. Điều này sẽ hữu ích nếu mã của bạn không được gọi rõ ràng bằng mã trong tệp nhị phân, chẳng hạn như khi mã của bạn đăng ký nhận một số lệnh gọi lại do một số dịch vụ cung cấp.
copts

List of strings; optional

Cờ bổ sung để truyền đến trình biên dịch. Có thể thay thế "Tạo biến"mã thông báo shell shell. Những cờ này sẽ chỉ áp dụng cho mục tiêu này chứ không áp dụng cho các mục tiêu phụ thuộc vào mục tiêu hoặc những mục tiêu phụ thuộc vào mục tiêu đó.

Xin lưu ý rằng đối với dự án Xcode đã tạo, các đường dẫn thư mục được chỉ định bằng cờ "-I" trong copts sẽ được phân tích cú pháp, thêm vào trước "$(WORKSPACE_ROOT)/" nếu chúng là đường dẫn tương đối và được thêm vào đường dẫn tìm kiếm ở tiêu đề cho mục tiêu Xcode được liên kết.

defines

List of strings; optional

Bổ sung cờ -D để truyền đến trình biên dịch. Chúng phải ở dạng KEY=VALUE hoặc đơn giản là KEY và được chuyển không chỉ cho trình biên dịch cho mục tiêu này (dưới dạng copts) mà còn được chuyển cho tất cả những phần phụ thuộc objc_ của mục tiêu này. Có thể thay thế "Tạo biến"mã thông báo shell shell.
enable_modules

Boolean; optional; default is False

Bật tính năng hỗ trợ mô-đun clang (thông qua -fmodules). Nếu đặt giá trị này thành 1, thì bạn có thể @import tiêu đề hệ thống và các mục tiêu khác: @import UIKit; @import path_to_package_target;
includes

List of strings; optional

Danh sách đường dẫn tìm kiếm #include/#import cần thêm vào mục tiêu này và tất cả các mục tiêu tuỳ thuộc. Việc này nhằm hỗ trợ các thư viện bên thứ ba và thư viện nguồn mở không chỉ định toàn bộ đường dẫn không gian làm việc trong các câu lệnh #import/#include.

Các đường dẫn được diễn giải tương ứng với thư mục gói, cũng như các genfile và gốc bin (ví dụ: blaze-genfiles/pkg/includedirblaze-out/pkg/includedir) được đưa vào ngoài thư mục gốc thực tế của ứng dụng.

Không giống như COPTS, những cờ này được thêm cho quy tắc này và mọi quy tắc phụ thuộc vào quy tắc đó. (Lưu ý: không phải các quy tắc mà nó phụ thuộc vào!) Hãy hết sức cẩn trọng vì việc này có thể gây ra những ảnh hưởng rất lớn. Khi không chắc chắn, hãy thêm cờ "-i ngôn ngữ" vào COPTS.

linkopts

List of strings; optional

Cờ bổ sung để truyền đến trình liên kết.
module_map

Label; optional

Bản đồ mô-đun Clang tuỳ chỉnh cho mục tiêu này. Bạn không nên sử dụng bản đồ mô-đun tuỳ chỉnh. Hầu hết người dùng nên sử dụng bản đồ mô-đun do Bazel tạo. Nếu được chỉ định, Bazel sẽ không tạo bản đồ mô-đun cho mục tiêu này mà sẽ truyền bản đồ mô-đun được cung cấp cho trình biên dịch.
module_name

String; optional

Đặt tên mô-đun cho mục tiêu này. Theo mặc định, tên mô-đun là đường dẫn mục tiêu với tất cả các ký hiệu đặc biệt được thay thế bằng _, ví dụ: //foo/baz:bar có thể được nhập dưới dạng foo_baz_bar.
non_arc_srcs

List of labels; optional

Danh sách các tệp Objective-C được xử lý để tạo mục tiêu thư viện KHÔNG sử dụng ARC. Các tệp trong thuộc tính này được xử lý rất giống với các tệp trong thuộc tính srcs, nhưng được biên dịch mà không bật ARC.
pch

Label; optional

Tệp tiêu đề để thêm vào trước mọi tệp nguồn đang được biên dịch (cả cung và không phải vòng cung). Chúng tôi chủ động không khuyến khích sử dụng tệp pch trong tệp BUILD và bạn nên coi tệp này là không được dùng nữa. Vì các tệp pch không thực sự được biên dịch trước, nên đây không phải là một tính năng nâng cao tốc độ bản dựng mà chỉ là một phần phụ thuộc chung. Từ góc độ hiệu quả xây dựng, bạn thực sự sẽ làm tốt hơn việc đưa những dữ liệu cần thiết ngay vào nguồn của nơi bạn cần.
runtime_deps

List of labels; optional

Danh sách các mục tiêu khung được tải trễ trong thời gian chạy. Các API này có trong gói ứng dụng nhưng không được liên kết với nhau tại thời điểm xây dựng.
sdk_dylibs

List of strings; optional

Tên của các thư viện SDK .dylib để liên kết. Ví dụ: "libz" hoặc "liblưu". "libc++" sẽ được tự động đưa vào nếu tệp nhị phân có bất kỳ nguồn C++ hoặc Objective-C++ nào trong cây phần phụ thuộc. Khi liên kết một tệp nhị phân, tất cả các thư viện có tên trong biểu đồ phần phụ thuộc bắc cầu của tệp nhị phân đó đều được sử dụng.
sdk_frameworks

List of strings; optional

Tên của khung SDK để liên kết (ví dụ: "Addressbook", "QuartzCore"). "UIKit" và "Foundation" luôn được đưa vào khi xây dựng cho các nền tảng iOS, tvOS và watchOS. Đối với macOS, chỉ có "Foundation" (Nền tảng) luôn được đưa vào.

Khi liên kết một tệp nhị phân Apple cấp cao nhất, tất cả khung SDK có trong biểu đồ phần phụ thuộc bắc cầu của tệp nhị phân đó đều được liên kết.

sdk_includes

List of strings; optional

Danh sách đường dẫn tìm kiếm #include/#import cần thêm vào mục tiêu này và tất cả các mục tiêu phụ thuộc, trong đó mỗi đường dẫn đều tương ứng với $(SDKROOT)/usr/include.
textual_hdrs

List of labels; optional

Danh sách các tệp C, C++, Objective-C và Objective-C++ được đưa vào dưới dạng tiêu đề theo tệp nguồn trong quy tắc này hoặc do người dùng của thư viện này đưa vào. Không giống như hdr, các tệp này sẽ không được biên dịch riêng biệt với các nguồn.
weak_sdk_frameworks

List of strings; optional

Tên của khung SDK cần liên kết yếu. Ví dụ: "MediaAccessibility". Khác với các khung SDK được liên kết thường xuyên, biểu tượng của các khung liên kết yếu sẽ không gây ra lỗi nếu không có trong thời gian chạy.

available_xcodes

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

Một thực thể quy tắc xcode_config có thể dựa vào 2 mục tiêu của quy tắc này để cho biết các phiên bản xcode có sẵn từ xa và cục bộ. Điều này cho phép lựa chọn phiên bản xcode chính thức từ các xcodes có sẵn chung.

Đối số

Thuộc tính
name

Name; required

Tên dành riêng cho mục tiêu này.

default

Label; required; nonconfigurable

Phiên bản xcode mặc định cho nền tảng này.
versions

List of labels; optional; nonconfigurable

Các phiên bản xcode có trên nền tảng này.

xcode_config

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

Một mục tiêu duy nhất của quy tắc này có thể được tham chiếu bằng cờ bản dựng --xcode_version_config để chuyển đổi cờ --xcode_version thành phiên bản xcode chính thức được chấp nhận. Điều này cho phép lựa chọn phiên bản xcode chính thức từ một số bí danh đã đăng ký.

Đối số

Thuộc tính
name

Name; required

Tên dành riêng cho mục tiêu này.

default

Label; optional; nonconfigurable

Phiên bản xcode chính thức mặc định để sử dụng. Phiên bản do mục tiêu xcode_version đã cung cấp chỉ định sẽ được sử dụng nếu không có cờ bản dựng xcode_version nào được chỉ định. Đây là yêu cầu bắt buộc nếu bạn đặt bất kỳ versions nào. Bạn không thể đặt chính sách này nếu đã đặt remote_versions hoặc 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. nội dung thay đổi được chấp nhận

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)

Đại diện cho một phiên bản xcode chính thức có các bí danh được chấp nhận cho phiên bản xcode đó. Xem quy tắc xcode_config.

Đối số

Thuộc tính
name

Name; required

Tên dành riêng cho mục tiêu này.

default_ios_sdk_version

String; optional; nonconfigurable

Phiên bản sdk iOS được sử dụng theo mặc định khi phiên bản xcode này đang được sử dụng. Cờ bản dựng ios_sdk_version sẽ ghi đè giá trị được chỉ định tại đây.
default_macos_sdk_version

String; optional; nonconfigurable

Phiên bản SDK macOS được sử dụng theo mặc định khi phiên bản xcode này đang được sử dụng. Cờ bản dựng macos_sdk_version sẽ ghi đè giá trị được chỉ định tại đây.
default_tvos_sdk_version

String; optional; nonconfigurable

Phiên bản SDK tvos được dùng theo mặc định khi phiên bản xcode này đang được sử dụng. Cờ bản dựng tvos_sdk_version sẽ ghi đè giá trị được chỉ định tại đây.
default_watchos_sdk_version

String; optional; nonconfigurable

Phiên bản SDK watchos được dùng theo mặc định khi sử dụng phiên bản xcode này. Cờ bản dựng watchos_sdk_version sẽ ghi đè giá trị được chỉ định tại đây.
version

String; required; nonconfigurable

Số phiên bản chính thức của một phiên bản Xcode.