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

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 फ़ाइलें हैं.

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

ट्रांसीटिव क्लोज़र में शामिल सोर्स 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 प्रोटो भी जनरेट किए जाएंगे, संकलित किए जाएंगे, और बाइनरी लेवल पर लिंक किए जाएंगे. प्रोटो //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 स्टेटमेंट में पूरे फ़ाइल फ़ोल्डर के पाथ की जानकारी नहीं देती.

पाथ की व्याख्या पैकेज डायरेक्ट्री के हिसाब से की जाती है और असल क्लाइंट रूट के साथ, genfile और 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 के लिए, सिर्फ़ "फ़ाउंडेशन" हमेशा शामिल होता है.

टॉप लेवल की 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

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

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

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

defines

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

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

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

-fmodules के ज़रिए क्लैंग मॉड्यूल सपोर्ट को चालू करता है. इसे 1 पर सेट करने पर, सिस्टम हेडर और दूसरे टारगेट को @इंपोर्ट किया जा सकेगा: @Import UIKit; @Import path_to_package_target;
implementation_deps

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

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

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

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

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

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

linkopts

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

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

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

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

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

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

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

Objective-C फ़ाइलों की सूची, जिन्हें प्रोसेस करके लाइब्रेरी टारगेट बनाया जाता है. यह टारगेट, ARC का इस्तेमाल नहीं करता. इस एट्रिब्यूट में मौजूद फ़ाइलों को, srcs एट्रिब्यूट में मौजूद फ़ाइलों की तरह ही माना जाता है. हालांकि, उन्हें ARC चालू किए बिना कंपाइल किया जाता है.
pch

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

हेडर फ़ाइल, कंपाइल की जा रही हर सोर्स फ़ाइल के शुरू होने से पहले जोड़ी जाती है (आर्क और नॉन-आर्क दोनों). बिल्ड फ़ाइलों में Pch फ़ाइलों के इस्तेमाल की सलाह नहीं दी जाती है. इसलिए, इस प्रोसेस को बंद माना जाना चाहिए. Pch फ़ाइलों को असल में पहले से कंपाइल नहीं किया जाता है. इसलिए, यह किसी फ़ाइल की रफ़्तार को बेहतर बनाने की सुविधा नहीं है. इसके बजाय, यह सिर्फ़ ग्लोबल डिपेंडेंसी है. बिल्ड की क्षमता के हिसाब से, आपको उन सोर्स में सीधे तौर पर जानकारी देनी होती है जिनकी आपको ज़रूरत है.
sdk_dylibs

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

SDK टूल की उन .dylib लाइब्रेरी के नाम जिनसे लिंक करना है. उदाहरण के लिए, "libz" या "libarchive". अगर बाइनरी के डिपेंडेंसी ट्री में C++ या Objective-C++ सोर्स हैं, तो "libc++" अपने-आप शामिल हो जाता है. किसी बाइनरी को लिंक करते समय, उस बाइनरी के ट्रांज़िटिव डिपेंडेंसी ग्राफ़ में दी गई सभी लाइब्रेरी इस्तेमाल की जाती हैं.
sdk_frameworks

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

SDK टूल के उन फ़्रेमवर्क के नाम जिनसे लिंक करना है (उदाहरण के लिए, "AddressBook", "QuartzCore"). iOS, tvOS, visionOS, और watchOS प्लैटफ़ॉर्म के लिए, ऐप्लिकेशन बनाते समय "UIKit" और "Foundation" हमेशा शामिल किए जाते हैं. macOS के लिए, सिर्फ़ "फ़ाउंडेशन" हमेशा शामिल होता है.

टॉप लेवल की 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 वर्शन के बारे में बताने के लिए, xcode_config नियम के इंस्टेंस के आधार पर इस नियम के दो टारगेट पर भरोसा किया जा सकता है. इससे, एक साथ उपलब्ध 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

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

iOS sdk वर्शन, जिसे Xcode के इस वर्शन के इस्तेमाल के दौरान डिफ़ॉल्ट रूप से इस्तेमाल किया जाता है. 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 के किसी वर्शन का आधिकारिक वर्शन नंबर.