Xcode से Bazel पर माइग्रेट करना

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

इस पेज में बताया गया है कि Baज़र के साथ Xcode प्रोजेक्ट को बनाने या टेस्ट करने का तरीका क्या है. यह Xcode और Basel के बीच के अंतर के बारे में बताता है. साथ ही, Xcode प्रोजेक्ट को Bagel प्रोजेक्ट में बदल देता है. यह समस्याओं को हल करने का तरीका भी समाधान.

Xcode और Baज़र के बीच अंतर

  • Baज़र के लिए, आपको हर बिल्ड टारगेट को साफ़ तौर पर बताना होगा. साथ ही, डिपेंडेंसी और बिल्ड नियमों के ज़रिए उनसे जुड़ी बिल्ड सेटिंग.

  • Baज़र के लिए, ऐसी सभी फ़ाइलें होना ज़रूरी है जिन पर प्रोजेक्ट मौजूद होना चाहिए Workspace डायरेक्ट्री या MODULE.bazel में डिपेंडेंसी के तौर पर बताया गया है फ़ाइल से लिए जाते हैं.

  • Basel के साथ Xcode प्रोजेक्ट बनाते समय, BUILD फ़ाइल(फ़ाइलें) सबसे भरोसेमंद सोर्स है. अगर आप Xcode में प्रोजेक्ट पर काम करते हैं, तो आपको Xcode प्रोजेक्ट का नया वर्शन जो इसका इस्तेमाल करके BUILD फ़ाइलों से मेल खाता है rules_xcodeproj जब भी आप BUILD फ़ाइलों को अपडेट करते है. BUILD फ़ाइलों में कुछ बदलाव किए गए हैं जैसे कि टारगेट में डिपेंडेंसी जोड़ने के लिए, जिससे डेवलपमेंट की रफ़्तार तेज़ हो सकती है. अगर Xcode का इस्तेमाल नहीं किया जा रहा है, तो bazel build और bazel test निर्देश, बिल्ड और टेस्ट करने की सुविधाएं देते हैं कुछ सीमाओं के बारे में बताया गया है, जिनके बारे में इस गाइड में बाद में बताया गया है.

शुरू करने से पहले

शुरू करने से पहले, ये काम करें:

  1. अगर आपने पहले से ऐसा नहीं किया है, तो Baze इंस्टॉल करें.

  2. अगर आपको Bagel और इसके सिद्धांतों के बारे में नहीं पता है, तो iOS ऐप्लिकेशन डाउनलोड करें ट्यूटोरियल). आपको बेज़ल वर्कस्पेस के बारे में जानना चाहिए, इसमें MODULE.bazel और BUILD फ़ाइलों के साथ-साथ, टारगेट, बिल्ड रूल, और बेज़ल पैकेज की जानकारी शामिल है.

  3. प्रोजेक्ट की डिपेंडेंसी का विश्लेषण करना और उसे समझना.

प्रोजेक्ट डिपेंडेंसी का विश्लेषण करना

Xcode के उलट, Basel की आपको सभी डिपेंडेंसी के बारे में साफ़ तौर पर बताना होगा BUILD फ़ाइल में हर टारगेट.

बाहरी डिपेंडेंसी के बारे में ज़्यादा जानकारी के लिए, एक्सटर्नल डिपेंडेंसी के साथ काम करना डिपेंडेंसी.

Basel की मदद से Xcode प्रोजेक्ट बनाएं या टेस्ट करें

Basel के साथ Xcode प्रोजेक्ट बनाने या टेस्ट करने के लिए, ये काम करें:

  1. MODULE.bazel फ़ाइल बनाएं

  2. (प्रयोग के तौर पर) SwiftPM डिपेंडेंसी इंटिग्रेट करें

  3. BUILD फ़ाइल बनाएं:

    a. ऐप्लिकेशन टारगेट जोड़ना

    b. (ज़रूरी नहीं) टेस्ट के टारगेट जोड़ें

    c. लाइब्रेरी के टारगेट जोड़ें

  4. (ज़रूरी नहीं) बिल्ड को बेहतर तरीके से तैयार करना

  5. बिल्ड चलाना

  6. Terms_xcodeproj की मदद से Xcode प्रोजेक्ट जनरेट करना

पहला चरण: MODULE.bazel फ़ाइल बनाना

नई डायरेक्ट्री में MODULE.bazel फ़ाइल बनाएं. यह डायरेक्ट्री बन जाती है बेज़ल वर्कस्पेस रूट. अगर प्रोजेक्ट किसी बाहरी डिपेंडेंसी का इस्तेमाल नहीं करता है, तो यह फ़ाइल खाली हो सकता है. अगर प्रोजेक्ट उन फ़ाइलों या पैकेज पर निर्भर करता है जो इनमें से किसी एक में नहीं हैं प्रोजेक्ट की डायरेक्ट्री का इस्तेमाल कर रहे हैं, तो MODULE.bazel फ़ाइल.

दूसरा चरण: (प्रयोग के तौर पर) SwiftPM डिपेंडेंसी इंटिग्रेट करना

SwiftPM डिपेंडेंसी को बेज़ल वर्कस्पेस में इंटिग्रेट करने के लिए, swift_bazel, ज़रूरी होता है को नीचे दिए गए तरीके से बेज़ल पैकेज में कन्वर्ट करेगा ट्यूटोरियल को अपनाएं.

तीसरा चरण: BUILD फ़ाइल बनाना

वर्कस्पेस और एक्सटर्नल डिपेंडेंसी तय करने के बाद, आपको एक BUILD फ़ाइल बनाएं जो Ba पैकेज को बताती है कि इस प्रोजेक्ट का स्ट्रक्चर कैसा है. अपनी ऑडियंस के लिए BUILD फ़ाइल को बेज़ल वर्कस्पेस के रूट में सेव करें और इसे ऐसा करने के लिए कॉन्फ़िगर करें: इस तरह से प्रोजेक्ट बनाया जाएगा:

सलाह: पैकेज और Basel के अन्य सिद्धांतों के बारे में ज़्यादा जानने के लिए, Workspaces, और टारगेट के बारे में ज़्यादा जानें.

चरण 3a: ऐप्लिकेशन टारगेट जोड़ना

जोड़ें macos_application या एक ios_application नियम का टारगेट. यह टारगेट, macOS या iOS ऐप्लिकेशन बंडल बनाता है. टारगेट में, इन्हें कम से कम तय करें:

  • bundle_id - इसका बंडल आईडी (रिवर्स-डीएनएस पाथ के बाद ऐप्लिकेशन का नाम) बाइनरी.

  • provisioning_profile - आपके Apple डेवलपर की ओर से उपलब्ध कराई गई प्रोफ़ाइल (अगर iOS डिवाइस के लिए बना रहे हैं).

  • families (सिर्फ़ iOS के लिए) - iPhone, iPad के लिए ऐप्लिकेशन बनाना है या नहीं, या दोनों.

  • infoplists - फ़ाइनल Info .plist फ़ाइल में मिलने के लिए.plist फ़ाइलों की सूची.

  • minimum_os_version - macOS या iOS का वह वर्शन जिसे उपलब्ध कराता है. इससे यह पक्का होता है कि Baज़र, ऐप्लिकेशन को सही एपीआई लेवल.

तीसरे चरण का दूसरा हिस्सा: (ज़रूरी नहीं) जांच के लिए टारगेट जोड़ना

Basel का Apple बिल्ड नियम चलाने की सुविधा यूनिट और यूज़र इंटरफ़ेस (यूआई) की जांच की जा सकती है. टेस्ट टारगेट इस तरह जोड़ें:

  • macos_unit_test का इस्तेमाल, macOS पर लाइब्रेरी और ऐप्लिकेशन पर आधारित यूनिट टेस्ट के लिए किया जाता है.

  • ios_unit_test का इस्तेमाल, iOS पर लाइब्रेरी-आधारित यूनिट टेस्ट बनाने और चलाने के लिए किया जाता है.

  • ios_ui_test का इस्तेमाल, iOS सिम्युलेटर में यूज़र इंटरफ़ेस टेस्ट बनाने और चलाने के लिए किया जाता है.

  • जांच के मिलते-जुलते नियम इनके लिए मौजूद हैं tvOS, watchOS और visionOS.

कम से कम, minimum_os_version एट्रिब्यूट के लिए वैल्यू सेट करें. हालांकि अन्य पैकेजिंग एट्रिब्यूट, जैसे कि bundle_identifier और infoplists, सबसे ज़्यादा इस्तेमाल होने वाली वैल्यू को डिफ़ॉल्ट के तौर पर सेट करती हैं, तो पक्का करें कि वे डिफ़ॉल्ट वैल्यू साथ ही, उसमें ज़रूरत के हिसाब से बदलाव भी कर सकता है. उन टेस्ट के लिए जिनके लिए iOS का इस्तेमाल करना ज़रूरी है सिम्युलेटर का इस्तेमाल करके, ios_application टारगेट नाम को test_host एट्रिब्यूट की वैल्यू सबमिट करें.

चरण 3c: लाइब्रेरी के टारगेट जोड़ना

हर एक के लिए objc_library टारगेट जोड़ें Objective-C लाइब्रेरी और swift_library टारगेट के तौर पर इस्तेमाल कर सकते हैं.

लाइब्रेरी के टारगेट इस तरह जोड़ें:

  • ऐप्लिकेशन लाइब्रेरी टारगेट को ऐप्लिकेशन की डिपेंडेंसी के तौर पर जोड़ें टारगेट के लिए.

  • टेस्ट लाइब्रेरी टारगेट को टेस्ट टारगेट पर डिपेंडेंसी के तौर पर जोड़ें.

  • srcs एट्रिब्यूट में, लागू करने के सोर्स की सूची बनाएं.

  • hdrs एट्रिब्यूट में हेडर की सूची बनाएं.

आप इसमें अलग-अलग तरह के ऐप्लिकेशन के मौजूदा उदाहरण ब्राउज़ कर सकते हैं. नियमों_एप्पल के उदाहरण डायरेक्ट्री में उपलब्ध है. इसके लिए उदाहरण:

बिल्ड रूल के बारे में ज़्यादा जानकारी पाने के लिए, Apple के नियम देखें बेज़ल.

इस समय, बिल्ड की जांच करना एक अच्छा आइडिया है:

bazel build //:<application_target>

चौथा चरण: (ज़रूरी नहीं) बिल्ड को बेहतर तरीके से तैयार करना

अगर प्रोजेक्ट बड़ा है या समय के साथ बढ़ता जा रहा है, तो इसे कई हिस्सों में बांटें बेज़ल पैकेज. जानकारी के इस बेहतर लेवल से, ये चीज़ें मिलती हैं:

  • बिल्ड की बढ़ती हुई क्षमता,

  • बिल्ड टास्क पर एक साथ ज़्यादा काम करना,

  • आने वाले समय के उपयोगकर्ताओं के लिए बेहतर रखरखाव,

  • टारगेट और पैकेज में, सोर्स कोड को देखने की सेटिंग पर बेहतर कंट्रोल. यह इससे लाइब्रेरी जैसी समस्याओं को रोकता है, जिनमें लागू करने की जानकारी के लीक होने की जानकारी होती है सार्वजनिक एपीआई में इस्तेमाल किया जा सकता है.

प्रोजेक्ट की जानकारी देने के लिए सलाह:

  • हर लाइब्रेरी को उसके अपने Basel पैकेज में रखें. उन लोगों के साथ शुरू करें जिन्हें बनाने की ज़रूरत है कम से कम डिपेंडेंसी इस्तेमाल करें और डिपेंडेंसी ट्री तक अपने-आप काम करें.

  • BUILD फ़ाइलें जोड़ने और टारगेट तय करने पर, इन नए टारगेट को टारगेट के deps एट्रिब्यूट, जो इन पर निर्भर करते हैं.

  • glob() फ़ंक्शन पैकेज की सीमाओं को पार नहीं करता, इसलिए पैकेज की संख्या बढ़ाने पर, glob() से मैच होने वाली फ़ाइलें कम हो जाती हैं.

  • BUILD फ़ाइल को main डायरेक्ट्री में जोड़ते समय, BUILD फ़ाइल भी जोड़ें संबंधित test डायरेक्ट्री.

  • सभी पैकेज में यह तय करें कि वे ज़्यादा से ज़्यादा कितने लोगों को दिखें.

  • BUILD फ़ाइलों में हर बड़े बदलाव के बाद प्रोजेक्ट बनाएं और बिल्ड ठीक करें में कोई गड़बड़ी हुई है.

पांचवां चरण: बिल्ड चलाना

पूरी तरह से माइग्रेट किए गए बिल्ड को चलाएं, ताकि यह पक्का किया जा सके कि यह बिना किसी गड़बड़ी या चेतावनी के पूरा हो गया है. सोर्स खोजने के लिए, हर ऐप्लिकेशन को चलाएं और टारगेट को अलग-अलग टेस्ट करें की सूचना मिलती है.

उदाहरण के लिए:

bazel build //:my-target

छठा चरण: criteria_xcodeproj की मदद से Xcode प्रोजेक्ट जनरेट करना

Basel के साथ बनाते समय, MODULE.bazel और BUILD फ़ाइलें सोर्स बन जाती हैं में सच्चाई का पता होना चाहिए. Xcode को इसके बारे में जानने के लिए, आपको एक इसका इस्तेमाल करके, Baज़र के साथ काम करने वाले Xcode प्रोजेक्ट का इस्तेमाल किया जा सकता है rules_xcodeproj को अपनाएं.

समस्या का हल

बेज़ेल की गड़बड़ियां तब आ सकती हैं, जब चुने गए Xcode वर्शन के साथ यह सिंक से बाहर हो जाता है, जैसे कि जब आप कोई अपडेट लागू करते हैं. यहां कुछ चीज़ें दी गई हैं जिन्हें आज़माया जा सकता है, अगर आप Xcode के साथ गड़बड़ी हो रही है, उदाहरण के लिए "Xcode वर्शन को Apple CROSSTOOL का इस्तेमाल करें".

  • Xcode को मैन्युअल तरीके से चलाएं और सभी नियम और शर्तों को स्वीकार करें.

  • Xcode चुनने का इस्तेमाल करके सही वर्शन बताएं, लाइसेंस स्वीकार करें, और को साफ़ करने के लिए किया जा सकता है.

  sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
  sudo xcodebuild -license
  bazel sync --configure
  • अगर यह काम नहीं करता, तो आप bazel clean --expunge चलाकर भी देख सकते हैं.