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를 사용하여 자바 소스 파일을 ob-c_library 및 objc_binary 규칙의 종속 항목으로 사용할 수 있는 Objective-C로 변환합니다. J2ObjC 자체에 대한 자세한 내용은 J2ObjC 사이트를 참조하세요.

커스텀 J2ObjC 변환 플래그는 명령줄에서 빌드 플래그 --j2objc_translation_flags를 사용하여 지정할 수 있습니다.

j2objc_library 대상에 포함된 번역된 파일은 속성에 지정된 컴파일 옵션이 없는 objc_library 규칙의 소스와 동일한 구성인 기본 컴파일 구성을 사용하여 컴파일됩니다.

또한 생성된 코드는 소스 수준이 아닌 대상 수준에서 중복 삭제됩니다. 동일한 자바 소스 파일이 포함된 서로 다른 자바 대상 두 개가 있는 경우 연결 시 중복된 기호 오류가 표시될 수 있습니다. 이 문제를 해결하는 올바른 방법은 공유된 자바 소스 파일을 신뢰할 수 있는 별도의 일반 타겟으로 이동하는 것입니다.

인수

속성
name

Name; required

이 타겟의 고유한 이름입니다.

deps

List of labels; optional

Objective-C로 변환 컴파일할 자바 파일이 포함된 j2objc_library, java_library, java_importjava_proto_library 타겟 목록입니다.

자바 주석 처리를 통해 생성된 파일을 비롯하여 exports, deps, runtime_deps를 통해 전이하여 연결할 수 있는 모든 java_libraryjava_import 타겟은 변환되고 컴파일됩니다. srcjar가 지정되지 않은 code>java_import 타겟은 지원되지 않습니다.

J2ObjC 변환은 전이적 클로저에 포함된 소스 자바 소스 파일의 유형에 따라 다르게 작동합니다. java_librarysrcs에 포함된 각 .java 소스 파일에 대해 상응하는 .h 및 .m 소스 파일이 생성됩니다. java_librarysrcs 또는 java_importsrcjar에 포함된 각 소스 jar에 관해 상응하는 .h 및 .m 소스 파일이 이 jar의 모든 코드와 함께 생성됩니다.

사용자는 J2ObjC로 생성된 헤더 파일을 코드로 가져올 수 있습니다. 이러한 파일의 가져오기 경로는 원래 자바 아티팩트의 루트 상대 경로입니다. 예를 들어 //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

List of strings; optional

번역된 ObjC 클래스가 ObjC 코드에서 직접 참조되는 자바 클래스 목록입니다. --j2objc_dead_code_removal 플래그가 사용 설정되어 있으면 이 속성이 필요합니다. 자바 클래스는 자바 언어 사양에 정의된 대로 표준 이름으로 지정해야 합니다. --j2objc_dead_code_removal 플래그를 지정하면 입력 클래스 목록이 전이적으로 수집되어 데드 코드 분석을 수행하기 위한 진입점으로 사용됩니다. 그러면 사용되지 않는 클래스가 최종 ObjC App Bundle에서 삭제됩니다.
jre_deps

List of labels; optional

j2objc_library 규칙으로 번역된 모든 자바 코드에 필요한 추가 JRE 에뮬레이션 라이브러리 목록입니다. 기본적으로 핵심 JRE 기능만 연결됩니다.

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)

이 규칙은 이미 컴파일된 정적 라이브러리를 .a 파일 형식으로 캡슐화합니다. 또한 objc_library에서 지원하는 것과 동일한 속성을 사용하여 헤더와 리소스를 내보낼 수도 있습니다.

인수

속성
name

Name; required

이 타겟의 고유한 이름입니다.

hdrs

List of labels; optional

종속 규칙의 소스에 포함되도록 이 라이브러리에서 게시한 C, C++, Objective-C 및 Objective-C++ 헤더 파일의 목록입니다.

이러한 헤더는 라이브러리의 공개 인터페이스를 설명하며, 이 규칙 또는 종속 규칙의 소스에 포함할 수 있습니다. 이 라이브러리의 클라이언트에 포함되지 않는 헤더는 대신 srcs 속성에 나열해야 합니다.

모듈이 사용 설정된 경우 소스와 별도로 컴파일됩니다.

Boolean; optional; default is False

1인 경우 이 라이브러리에서 직간접적으로 종속되는 번들 또는 바이너리는 srcsnon_arc_srcs에 나열된 파일의 모든 객체 파일에 연결됩니다. 이는 바이너리에서 참조하는 기호가 포함되어 있지 않은 경우에도 마찬가지입니다. 이는 코드가 일부 서비스에서 제공하는 콜백을 수신하도록 등록한 경우와 같이 바이너리의 코드에서 명시적으로 호출하지 않는 경우에 유용합니다.
archives

List of labels; required

이 타겟에 종속된 Objective-C 대상에 제공된 .a 파일 목록
includes

List of strings; optional

이 대상과 모든 종속 대상에 추가할 #include/#import 검색 경로의 목록입니다. 이는 #import/#include 문에서 전체 작업공간 경로를 지정하지 않는 타사 및 오픈소스 라이브러리를 지원하기 위한 것입니다.

경로는 패키지 디렉터리를 기준으로 해석되며 genfiles 및 bin 루트 (예: blaze-genfiles/pkg/includedirblaze-out/pkg/includedir)는 실제 클라이언트 루트에 추가로 포함됩니다.

COPTS와 달리 이러한 플래그는 이 규칙 및 이 규칙을 사용하는 모든 규칙에 추가됩니다. (참고: 규칙이 적용되는 규칙이 아님). 광범위한 효과가 있을 수 있으므로 주의해야 합니다. 의심스러운 경우 대신 COPTS에 '-iquote' 플래그를 추가하세요.

sdk_dylibs

List of strings; optional

연결할 SDK .dylib 라이브러리의 이름입니다. 예: 'libz' 또는 'libarchive'. 바이너리에 종속 항목 트리에 C++ 또는 Objective-C++ 소스가 있는 경우 'libc++'가 자동으로 포함됩니다. 바이너리를 연결할 때 바이너리의 전이 종속 항목 그래프에 이름이 지정된 모든 라이브러리가 사용됩니다.
sdk_frameworks

List of strings; optional

연결할 SDK 프레임워크의 이름입니다 (예: 'AddressBook', 'QuartzCore'). iOS, tvOS 및 watchOS 플랫폼용으로 빌드할 때는 항상 'UIKit' 및 'Foundation'이 포함됩니다. macOS의 경우 항상 'Foundation'만 포함됩니다.

최상위 수준의 Apple 바이너리를 연결할 때 해당 바이너리의 전이 종속 항목 그래프에 나열된 모든 SDK 프레임워크가 연결됩니다.

sdk_includes

List of strings; optional

이 대상과 모든 종속 대상에 추가할 #include/#import 검색 경로의 목록입니다. 각 경로는 $(SDKROOT)/usr/include를 기준으로 합니다.
textual_hdrs

List of labels; optional

이 규칙의 소스 파일 또는 이 라이브러리의 사용자에 의해 헤더로 포함된 C, C++, Objective-C 및 Objective-C++ 파일 목록. hdrs와 달리 이러한 소스는 소스와 별개로 컴파일되지 않습니다.
weak_sdk_frameworks

List of strings; optional

약하게 연결할 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, 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

Name; required

이 타겟의 고유한 이름입니다.

deps

List of labels; optional

최종 번들을 형성하기 위해 함께 연결된 타겟의 목록입니다.
srcs

List of labels; optional

라이브러리 타겟을 생성하기 위해 처리되는 C, C++, Objective-C, Objective-C++ 소스 및 헤더 파일 및/또는 (..`, `.S` 또는 `.asm`) 어셈블리 소스 파일의 목록입니다. 이 파일에는 체크인된 파일 및 생성된 파일이 모두 포함됩니다. 소스 파일은 Clang을 사용하여 .o 파일로 컴파일됩니다. 헤더 파일은 이 타겟의 srcs 속성에 있는 모든 소스 또는 헤더에서 포함/가져오기될 수 있지만, 이 규칙에 종속된 hdrs 또는 헤더의 헤더에서는 포함하거나 가져올 수 없습니다. 또한 사전 컴파일된 .o 파일이 src로 제공될 수 있습니다. 기호 링커 오류를 피하려면 제공된 .o 파일 및 빌드 아키텍처의 일관성을 보장해야 합니다.
hdrs

List of labels; optional

종속 규칙의 소스에 포함되도록 이 라이브러리에서 게시한 C, C++, Objective-C 및 Objective-C++ 헤더 파일의 목록입니다.

이러한 헤더는 라이브러리의 공개 인터페이스를 설명하며, 이 규칙 또는 종속 규칙의 소스에 포함할 수 있습니다. 이 라이브러리의 클라이언트에 포함되지 않는 헤더는 대신 srcs 속성에 나열해야 합니다.

모듈이 사용 설정된 경우 소스와 별도로 컴파일됩니다.

Boolean; optional; default is False

1인 경우 이 라이브러리에서 직간접적으로 종속되는 번들 또는 바이너리는 srcsnon_arc_srcs에 나열된 파일의 모든 객체 파일에 연결됩니다. 이는 바이너리에서 참조하는 기호가 포함되어 있지 않은 경우에도 마찬가지입니다. 이는 코드가 일부 서비스에서 제공하는 콜백을 수신하도록 등록한 경우와 같이 바이너리의 코드에서 명시적으로 호출하지 않는 경우에 유용합니다.
copts

List of strings; optional

컴파일러에 전달할 추가 플래그입니다. '변수 만들기' 대체 및 본 셸 토큰화가 적용됩니다. 이러한 플래그는 이 타겟에만 적용되며 타겟에 종속되는 타겟이나 이에 종속되는 플래그는 적용되지 않습니다.

생성된 Xcode 프로젝트의 경우 copt에서 '-I' 플래그를 사용하여 지정된 디렉터리 경로가 파싱되고, 상대 경로인 경우 '$(WORKSPACE_ROOT)/'로 시작되며, 연결된 Xcode 대상의 헤더 검색 경로에 추가됩니다.

defines

List of strings; optional

컴파일러에 전달할 추가 -D 플래그입니다. KEY=VALUE 또는 KEY 형식이어야 하며 이 타겟의 컴파일러 (copts의 경우)뿐만 아니라 이 타겟의 모든 objc_ 종속 항목에도 전달됩니다. '변수 만들기' 대체 및 본 셸 토큰화가 적용됩니다.
enable_modules

Boolean; optional; default is False

-fmodules를 통해 clang 모듈 지원이 사용 설정됩니다. 1로 설정하면 시스템 헤더와 다른 타겟을 @import UIKit; @import path_to_package_target;
includes

List of strings; optional

이 대상과 모든 종속 대상에 추가할 #include/#import 검색 경로의 목록입니다. 이는 #import/#include 문에서 전체 작업공간 경로를 지정하지 않는 타사 및 오픈소스 라이브러리를 지원하기 위한 것입니다.

경로는 패키지 디렉터리를 기준으로 해석되며 genfiles 및 bin 루트 (예: blaze-genfiles/pkg/includedirblaze-out/pkg/includedir)는 실제 클라이언트 루트에 추가로 포함됩니다.

COPTS와 달리 이러한 플래그는 이 규칙 및 이 규칙을 사용하는 모든 규칙에 추가됩니다. (참고: 규칙이 적용되는 규칙이 아님). 광범위한 효과가 있을 수 있으므로 주의해야 합니다. 의심스러운 경우 대신 COPTS에 '-iquote' 플래그를 추가하세요.

linkopts

List of strings; optional

링커에 전달할 추가 플래그입니다.
module_map

Label; optional

이 타겟의 맞춤 Clang 모듈 맵입니다. 맞춤 모듈 맵의 사용은 권장하지 않습니다. 대부분의 사용자는 Bazel에서 생성된 모듈 지도를 사용해야 합니다. 지정하면 Bazel이 이 타겟의 모듈 맵을 생성하지 않지만 제공된 모듈 맵은 컴파일러에 전달합니다.
module_name

String; optional

이 타겟의 모듈 이름을 설정합니다. 기본적으로 모듈 이름은 모든 특수 기호가 _로 대체되는 타겟 경로입니다. 예를 들어 //foo/baz:bar를 foo_baz_bar로 가져올 수 있습니다.
non_arc_srcs

List of labels; optional

ARC를 사용하지 않는 라이브러리 타겟을 생성하기 위해 처리되는 Objective-C 파일의 목록입니다. 이 속성의 파일은 srcs 속성과 유사한 것으로 취급되지만 ARC를 사용 설정하지 않고 컴파일됩니다.
pch

Label; optional

컴파일되는 모든 소스 파일 앞에 추가되는 헤더 파일입니다 (호와 비원호 모두). BUILD에서는 pch 파일 사용을 권장하지 않으며 지원 중단된 것으로 간주해야 합니다. pch 파일은 실제로 사전 컴파일되지 않으므로 빌드 속도 향상이 아니라 전역 종속 항목입니다. 빌드 효율성 관점에서 볼 때 실제로는 필요한 것을 소스에 직접 포함하는 것이 좋습니다.
sdk_dylibs

List of strings; optional

연결할 SDK .dylib 라이브러리의 이름입니다. 예: 'libz' 또는 'libarchive'. 바이너리에 종속 항목 트리에 C++ 또는 Objective-C++ 소스가 있는 경우 'libc++'가 자동으로 포함됩니다. 바이너리를 연결할 때 바이너리의 전이 종속 항목 그래프에 이름이 지정된 모든 라이브러리가 사용됩니다.
sdk_frameworks

List of strings; optional

연결할 SDK 프레임워크의 이름입니다 (예: 'AddressBook', 'QuartzCore'). iOS, tvOS 및 watchOS 플랫폼용으로 빌드할 때는 항상 'UIKit' 및 'Foundation'이 포함됩니다. macOS의 경우 항상 'Foundation'만 포함됩니다.

최상위 수준의 Apple 바이너리를 연결할 때 해당 바이너리의 전이 종속 항목 그래프에 나열된 모든 SDK 프레임워크가 연결됩니다.

sdk_includes

List of strings; optional

이 대상과 모든 종속 대상에 추가할 #include/#import 검색 경로의 목록입니다. 각 경로는 $(SDKROOT)/usr/include를 기준으로 합니다.
textual_hdrs

List of labels; optional

이 규칙의 소스 파일 또는 이 라이브러리의 사용자에 의해 헤더로 포함된 C, C++, Objective-C 및 Objective-C++ 파일 목록. hdrs와 달리 이러한 소스는 소스와 별개로 컴파일되지 않습니다.
weak_sdk_frameworks

List of strings; optional

약하게 연결할 SDK 프레임워크의 이름입니다. 'MediaAccessibility'를 예로 들 수 있습니다. 정기적으로 연결된 SDK 프레임워크와 달리 약하게 연결된 프레임워크의 기호는 런타임에 존재하지 않는 경우 오류를 일으키지 않습니다.

이용 가능한_코드

규칙 소스 보기
available_xcodes(name, default, deprecation, distribs, features, licenses, tags, testonly, versions, visibility)

xcode_config 규칙 인스턴스는 이 규칙의 두 가지 대상에 종속되어 원격으로 사용할 수 있는 xcode 버전을 나타낼 수 있습니다. 이를 통해 공동으로 사용 가능한 xcode에서 공식 xcode 버전을 선택할 수 있습니다.

인수

속성
name

Name; required

이 타겟의 고유한 이름입니다.

default

Label; required; nonconfigurable

이 플랫폼의 기본 xcode 버전입니다.
versions

List of labels; optional; nonconfigurable

이 플랫폼에서 사용할 수 있는 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

Name; required

이 타겟의 고유한 이름입니다.

default

Label; optional; nonconfigurable

사용할 xcode의 기본 공식 버전입니다. xcode_version 빌드 플래그가 지정되지 않은 경우 제공된 xcode_version 타겟으로 지정된 버전을 사용해야 합니다. versions가 설정된 경우 필수입니다. remote_versions 또는 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. 개 승인됨

xcode 버전

규칙 소스 보기
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)

해당 xcode 버전에 허용되는 별칭이 있는 단일 공식 xcode 버전을 나타냅니다. xcode_config 규칙을 참고하세요.

인수

속성
name

Name; required

이 타겟의 고유한 이름입니다.

default_ios_sdk_version

String; optional; nonconfigurable

이 xcode 버전을 사용할 때 기본적으로 사용되는 iOS SDK 버전입니다. ios_sdk_version 빌드 플래그는 여기에 지정된 값을 재정의합니다.
default_macos_sdk_version

String; optional; nonconfigurable

이 xcode 버전을 사용할 때 기본적으로 사용되는 macosx SDK 버전입니다. macos_sdk_version 빌드 플래그는 여기에 지정된 값을 재정의합니다.
default_tvos_sdk_version

String; optional; nonconfigurable

이 xcode 버전을 사용할 때 기본적으로 사용되는 tvos SDK 버전입니다. tvos_sdk_version 빌드 플래그는 여기에 지정된 값을 재정의합니다.
default_watchos_sdk_version

String; optional; nonconfigurable

이 xcode 버전을 사용할 때 기본적으로 사용되는 watchos SDK 버전입니다. watchos_sdk_version 빌드 플래그는 여기에 지정된 값을 재정의합니다.
version

String; required; nonconfigurable

Xcode 버전의 공식 버전 번호입니다.