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

समस्या की शिकायत करें सोर्स देखें Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

नियम

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 टारगेट की सूची. इनमें ऐसी Java फ़ाइलें होती हैं जिन्हें Objective-C में ट्रांसपाइल किया जाना है.

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

J2ObjC ट्रांसलेशन, ट्रांज़िटिव क्लोज़र में शामिल Java सोर्स फ़ाइलों के टाइप के हिसाब से अलग-अलग तरीके से काम करता है. java_library के srcs में शामिल हर .java सोर्स फ़ाइल के लिए, उससे जुड़ी .h और .m सोर्स फ़ाइल जनरेट की जाएगी. srcs के java_library या srcjar के java_import में शामिल हर सोर्स जार के लिए, उससे जुड़ी .h और .m सोर्स फ़ाइल जनरेट की जाएगी. इसमें उस जार का पूरा कोड होगा.

उपयोगकर्ता, J2ObjC से जनरेट की गई हेडर फ़ाइलों को अपने कोड में इंपोर्ट कर सकते हैं. इन फ़ाइलों के इंपोर्ट पाथ, ओरिजनल Java आर्टफ़ैक्ट का रूट-रिलेटिव पाथ होता है. उदाहरण के लिए, //some/package/foo.java का इंपोर्ट पाथ some/package/foo.h है और //some/package/bar.srcjar का इंपोर्ट पाथ some/package/bar.h है

अगर proto_library के नियम, इस नियम के ट्रांज़िटिव क्लोज़र में हैं, तो J2ObjC protos भी बाइनरी लेवल पर जनरेट, कंपाइल, और लिंक किए जाएंगे. प्रोटो //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 में "-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_includes

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

इस टारगेट और टारगेट करने के लिए चुने गए सभी आइटम में जोड़ने के लिए, #include/#import खोज पाथ की सूची. इसमें हर पाथ, $(SDKROOT)/usr/include के हिसाब से होता है.
textual_hdrs

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

इस नियम में सोर्स फ़ाइलों या इस लाइब्रेरी के उपयोगकर्ताओं ने हेडर के तौर पर जिन C, C++, Objective-C, और Objective-C++ फ़ाइलों को शामिल किया है उनकी सूची. एचडीआर के उलट, इन्हें सोर्स से अलग से कंपाइल नहीं किया जाएगा.
weak_sdk_frameworks

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

उन एसडीके फ़्रेमवर्क के नाम जिनसे कमज़ोर लिंक करना है. उदाहरण के लिए, "MediaAccessibility". आम तौर पर लिंक किए गए एसडीके फ़्रेमवर्क के मुकाबले, कमज़ोर तरीके से लिंक किए गए फ़्रेमवर्क के सिंबल, रनटाइम में मौजूद न होने पर गड़बड़ी नहीं करते.

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 प्रोजेक्ट के लिए, copts में "-I" फ़्लैग का इस्तेमाल करके तय किए गए डायरेक्ट्री पाथ को पार्स किया जाता है. अगर वे रिलेटिव पाथ हैं, तो उनके पहले "$(WORKSPACE_ROOT)/" जोड़ा जाता है. साथ ही, उन्हें Xcode के टारगेट से जुड़े हेडर सर्च पाथ में जोड़ा जाता है.

defines

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

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

बूलियन; डिफ़ॉल्ट वैल्यू False है

इस विकल्प से, clang मॉड्यूल के साथ काम करने की सुविधा चालू होती है (via -fmodules). इसे 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 में "-iquote" फ़्लैग जोड़ें.

linkopts

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

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

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

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

स्ट्रिंग; डिफ़ॉल्ट वैल्यू "" है

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

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

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

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

हर सोर्स फ़ाइल में सबसे ऊपर जोड़ने के लिए हेडर फ़ाइल. इसमें एआरसी और नॉन-एआरसी, दोनों तरह की फ़ाइलें शामिल हैं. 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_includes

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

इस टारगेट और टारगेट करने के लिए चुने गए सभी आइटम में जोड़ने के लिए, #include/#import खोज पाथ की सूची. इसमें हर पाथ, $(SDKROOT)/usr/include के हिसाब से होता है.
textual_hdrs

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

इस नियम में सोर्स फ़ाइलों या इस लाइब्रेरी के उपयोगकर्ताओं ने हेडर के तौर पर जिन C, C++, Objective-C, और Objective-C++ फ़ाइलों को शामिल किया है उनकी सूची. एचडीआर के उलट, इन्हें सोर्स से अलग से कंपाइल नहीं किया जाएगा.
weak_sdk_frameworks

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

उन एसडीके फ़्रेमवर्क के नाम जिनसे कमज़ोर लिंक करना है. उदाहरण के लिए, "MediaAccessibility". आम तौर पर लिंक किए गए एसडीके फ़्रेमवर्क के मुकाबले, कमज़ोर तरीके से लिंक किए गए फ़्रेमवर्क के सिंबल, रनटाइम में मौजूद न होने पर गड़बड़ी नहीं करते.

available_xcodes

नियम का सोर्स देखें
available_xcodes(name, default, deprecation, distribs, features, licenses, tags, testonly, versions, visibility)

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