ऑब्जेक्टिव-सी के नियम

किसी समस्या की शिकायत करें सोर्स देखें Nightly · 8.0 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

नियम

j2objc_library

नियम का सोर्स देखें
j2objc_library(name, deps, compatible_with, deprecation, distribs, entry_classes, features, jre_deps, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)

यह नियम, Java सोर्स फ़ाइलों को Objective-C में बदलने के लिए J2ObjC का इस्तेमाल करता है. इसके बाद, इनका इस्तेमाल objc_library और objc_binary नियमों की डिपेंडेंसी के तौर पर किया जा सकता है. J2ObjC के बारे में ज़्यादा जानकारी J2ObjC की साइट पर मिल सकती है

कमांड लाइन में मौजूद बिल्ड फ़्लैग --j2objc_translation_flags का इस्तेमाल करके, कस्टम J2ObjC ट्रांसपाइलेशन फ़्लैग तय किए जा सकते हैं.

कृपया ध्यान दें कि j2objc_library टारगेट में शामिल अनुवाद की गई फ़ाइलों को, डिफ़ॉल्ट कंपाइलेशन कॉन्फ़िगरेशन का इस्तेमाल करके कंपाइल किया जाएगा. यह वही कॉन्फ़िगरेशन है जो objc_library नियम के सोर्स के लिए इस्तेमाल किया जाता है. इसमें एट्रिब्यूट में कंपाइलेशन के कोई विकल्प नहीं दिए जाते.

साथ ही, जनरेट किए गए कोड को सोर्स लेवल पर नहीं, बल्कि टारगेट लेवल पर डुप्लीकेट से हटाया जाता है. अगर आपके पास दो अलग-अलग Java टारगेट हैं और उनमें एक ही Java सोर्स फ़ाइलें शामिल हैं, तो लिंक करने के समय आपको डुप्लीकेट सिंबल की गड़बड़ी दिख सकती है. इस समस्या को ठीक करने का सही तरीका यह है कि शेयर की गई Java सोर्स फ़ाइलों को एक अलग सामान्य टारगेट में ले जाएं, जिस पर भरोसा किया जा सके.

तर्क

विशेषताएं
name

नाम; यह ज़रूरी है

इस टारगेट के लिए यूनीक नाम.

deps

लेबल की सूची; डिफ़ॉल्ट [] है

j2objc_library, java_library, java_import, और java_proto_library टारगेट की सूची, जिनमें Objective-C में ट्रांसपाइल की जाने वाली Java फ़ाइलें शामिल हैं.

exports, deps, और runtime_deps के ज़रिए ट्रांज़िटिव तरीके से पहुंचाए जा सकने वाले सभी java_library और java_import टारगेट का अनुवाद किया जाएगा और उन्हें कंपाइल किया जाएगा. इनमें, Java एनोटेशन प्रोसेसिंग से जनरेट की गई फ़ाइलें भी शामिल हैं. code>java_import टारगेट के लिए, srcjar की वैल्यू तय करना ज़रूरी है.

ट्रांसीटिव क्लोज़र में शामिल सोर्स Java सोर्स फ़ाइलों के टाइप के आधार पर, J2ObjC ट्रांसलेशन अलग-अलग तरीके से काम करता है. java_library के srcs में शामिल हर .java सोर्स फ़ाइल के लिए, एक मिलती-जुलती .h और .m सोर्स फ़ाइल जनरेट की जाएगी. java_library के srcs या java_import के srcjar में शामिल हर सोर्स जार के लिए, उस जार के सभी कोड के साथ एक मिलती-जुलती .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

स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से []

उन Java क्लास की सूची जिनके अनुवाद किए गए ObjC वर्शन का रेफ़रंस, उपयोगकर्ता के ObjC कोड से सीधे तौर पर दिया जाएगा. अगर फ़्लैग --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 है, तो इस लाइब्रेरी पर (सीधे या किसी दूसरे तरीके से) निर्भर रहने वाला कोई भी बंडल या बाइनरी, srcs और non_arc_srcs में दी गई फ़ाइलों के लिए सभी ऑब्जेक्ट फ़ाइलों को लिंक करेगा. भले ही, कुछ फ़ाइलों में बाइनरी के रेफ़रंस वाले कोई भी सिंबल न हो. यह तब काम आता है, जब आपके कोड को बाइनरी में कोड से साफ़ तौर पर कॉल न किया गया हो. उदाहरण के लिए, अगर आपका कोड किसी सेवा से मिलने वाला कॉलबैक पाने के लिए रजिस्टर करता है.
archives

लेबल की सूची; ज़रूरी है

Objective-C टारगेट के लिए उपलब्ध .a फ़ाइलों की सूची, जो इस टारगेट पर निर्भर करती हैं.
includes

स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से []

इस टारगेट और उससे जुड़े सभी टारगेट में जोड़ने के लिए, #include/#import सर्च पाथ की सूची. यह सुविधा, तीसरे पक्ष और ओपन सोर्स वाली उन लाइब्रेरी के साथ काम करती है जो अपने #import/#include स्टेटमेंट में, वर्कस्पेस का पूरा पाथ नहीं बताती हैं.

पाथ को पैकेज डायरेक्ट्री के हिसाब से समझा जाता है. साथ ही, असल क्लाइंट रूट के अलावा, genfiles और bin रूट (जैसे, blaze-genfiles/pkg/includedir और blaze-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 है, तो इस लाइब्रेरी पर (सीधे या किसी दूसरे तरीके से) निर्भर रहने वाला कोई भी बंडल या बाइनरी, srcs और non_arc_srcs में दी गई फ़ाइलों के लिए सभी ऑब्जेक्ट फ़ाइलों को लिंक करेगा. भले ही, कुछ फ़ाइलों में बाइनरी के रेफ़रंस वाले कोई भी सिंबल न हो. यह तब काम आता है, जब आपके कोड को बाइनरी में कोड से साफ़ तौर पर कॉल न किया गया हो. उदाहरण के लिए, अगर आपका कोड किसी सेवा से मिलने वाला कॉलबैक पाने के लिए रजिस्टर करता है.
copts

स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से []

कंपाइलर को पास करने के लिए अतिरिक्त फ़्लैग. "Make variable" के बदले और Bourne shell टोकनाइज़ेशन के हिसाब से. ये फ़्लैग सिर्फ़ इस टारगेट पर लागू होंगे, न कि उन पर जिन पर यह टारगेट निर्भर करता है या जिन पर यह टारगेट निर्भर करता है.

ध्यान दें कि जनरेट किए गए Xcode प्रोजेक्ट के लिए, copts में "-I" फ़्लैग का इस्तेमाल करके बताए गए डायरेक्ट्री पाथ को पार्स किया जाता है. अगर ये रिलेटिव पाथ हैं, तो "$(WORKSPACE_ROOT)/" से पहले जोड़े जाते हैं और इससे जुड़े Xcode टारगेट के हेडर सर्च पाथ में जोड़े जाते हैं.

defines

स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से []

कंपाइलर को पास करने के लिए अतिरिक्त -D फ़्लैग. ये KEY=VALUE या सिर्फ़ KEY फ़ॉर्मैट में होने चाहिए. साथ ही, इन्हें सिर्फ़ इस टारगेट के लिए कंपाइलर (जैसा कि copts होता है) को ही नहीं, बल्कि इस टारगेट के सभी objc_ डिपेंडर को भी पास किया जाता है. "Make variable" के बदले और Bourne shell टोकनाइज़ेशन के हिसाब से.
enable_modules

बूलियन; डिफ़ॉल्ट तौर पर False

-fmodules के ज़रिए, clang मॉड्यूल की सुविधा चालू करता है. इसे 1 पर सेट करने से, आपको सिस्टम हेडर और अन्य टारगेट @import करने की अनुमति मिलेगी: @import UIKit; @import path_to_package_target;
implementation_deps

लेबल की सूची; डिफ़ॉल्ट [] है

लाइब्रेरी टारगेट पर निर्भर अन्य लाइब्रेरी की सूची. deps के उलट, इन लाइब्रेरी के हेडर और शामिल किए गए पाथ (और उन सभी ट्रांज़िशन डिपेंडेंसी) का इस्तेमाल सिर्फ़ इस लाइब्रेरी को कंपाइल करने के लिए किया जाता है, न कि उन लाइब्रेरी के लिए जिन पर यह निर्भर करती है. implementation_deps के साथ बताई गई लाइब्रेरी अब भी उन बाइनरी टारगेट में लिंक की गई हैं जो इस लाइब्रेरी पर निर्भर हैं.
includes

स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से []

इस टारगेट और उससे जुड़े सभी टारगेट में जोड़ने के लिए, #include/#import सर्च पाथ की सूची. यह सुविधा, तीसरे पक्ष और ओपन सोर्स वाली उन लाइब्रेरी के साथ काम करती है जो अपने #import/#include स्टेटमेंट में, वर्कस्पेस का पूरा पाथ नहीं बताती हैं.

पाथ को पैकेज डायरेक्ट्री के हिसाब से समझा जाता है. साथ ही, असल क्लाइंट रूट के अलावा, genfiles और bin रूट (जैसे, blaze-genfiles/pkg/includedir और blaze-out/pkg/includedir) भी शामिल किए जाते हैं.

COPTS के उलट, ये फ़्लैग इस नियम और उस पर निर्भर हर नियम के लिए जोड़े जाते हैं. (ध्यान दें: उन नियमों के बारे में नहीं जिन पर यह निर्भर करता है!) बहुत सावधान रहें, क्योंकि इससे कई चीज़ों पर असर पड़ सकता है. अगर आपको कोई संदेह है, तो COPTS में "-iquote" फ़्लैग जोड़ें.

linkopts

स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से []

लिंकर को पास करने के लिए अतिरिक्त फ़्लैग.
module_map

लेबल; डिफ़ॉल्ट None है

इस टारगेट के लिए कस्टम Clang मॉड्यूल मैप. कस्टम मॉड्यूल मैप का इस्तेमाल करने का सुझाव नहीं दिया जाता. ज़्यादातर उपयोगकर्ताओं को Bazel से जनरेट किए गए मॉड्यूल मैप का इस्तेमाल करना चाहिए. अगर यह जानकारी दी जाती है, तो Bazel इस टारगेट के लिए मॉड्यूल मैप जनरेट नहीं करेगा. हालांकि, यह दिए गए मॉड्यूल मैप को कंपाइलर को पास कर देगा.
module_name

स्ट्रिंग; डिफ़ॉल्ट रूप से ""

इस टारगेट के लिए मॉड्यूल का नाम सेट करता है. डिफ़ॉल्ट रूप से, मॉड्यूल का नाम टारगेट पाथ होता है, जिसमें सभी खास सिंबल को _ से बदल दिया जाता है. उदाहरण के लिए, //foo/baz:bar को foo_baz_bar के तौर पर इंपोर्ट किया जा सकता है.
non_arc_srcs

लेबल की सूची; डिफ़ॉल्ट [] है

Objective-C फ़ाइलों की सूची, जिन्हें प्रोसेस करके ऐसा लाइब्रेरी टारगेट बनाया जाता है जो ARC का इस्तेमाल नहीं करता. इस एट्रिब्यूट में मौजूद फ़ाइलों को, 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_config नियम के किसी इंस्टेंस में, इस नियम के दो टारगेट का इस्तेमाल किया जा सकता है. इससे, रिमोट और लोकल तौर पर उपलब्ध Xcode वर्शन के बारे में पता चलता है. इससे, एक साथ उपलब्ध xcodes में से किसी आधिकारिक 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 फ़्लैग को स्वीकार किए गए आधिकारिक xcode वर्शन में बदलने के लिए, इस नियम के किसी एक टारगेट का रेफ़रंस --xcode_version_config बिल्ड फ़्लैग से दिया जा सकता है. इससे, रजिस्टर किए गए कई उपनामों में से, 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

स्ट्रिंग; कॉन्फ़िगर नहीं की जा सकती; डिफ़ॉल्ट "" है

macosx SDK टूल का वह वर्शन जिसका इस्तेमाल, Xcode के इस वर्शन का इस्तेमाल करते समय डिफ़ॉल्ट रूप से किया जाता है. macos_sdk_version बिल्ड फ़्लैग, यहां दी गई वैल्यू को बदल देगा.
default_tvos_sdk_version

स्ट्रिंग; कॉन्फ़िगर नहीं की जा सकती; डिफ़ॉल्ट "" है

tvOS SDK टूल का वह वर्शन जिसका इस्तेमाल, Xcode के इस वर्शन का इस्तेमाल करते समय डिफ़ॉल्ट रूप से किया जाता है. tvos_sdk_version बिल्ड फ़्लैग, यहां दी गई वैल्यू को बदल देगा.
default_visionos_sdk_version

स्ट्रिंग; कॉन्फ़िगर नहीं की जा सकती; डिफ़ॉल्ट "" है

visionos SDK टूल का वह वर्शन जिसका इस्तेमाल, Xcode के इस वर्शन का इस्तेमाल करते समय डिफ़ॉल्ट रूप से किया जाता है. visionos_sdk_version बिल्ड फ़्लैग, यहां दी गई वैल्यू को बदल देगा.
default_watchos_sdk_version

स्ट्रिंग; कॉन्फ़िगर नहीं की जा सकती; डिफ़ॉल्ट "" है

watchOS SDK टूल का वह वर्शन जिसका इस्तेमाल, Xcode के इस वर्शन का इस्तेमाल करते समय डिफ़ॉल्ट रूप से किया जाता है. watchos_sdk_version बिल्ड फ़्लैग, यहां दी गई वैल्यू को बदल देगा.
version

स्ट्रिंग; कॉन्फ़िगर नहीं की जा सकती; ज़रूरी है

Xcode के किसी वर्शन का आधिकारिक वर्शन नंबर.