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

अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है किसी समस्या की शिकायत करें सोर्स देखें रात · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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

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

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

  • Basel को उन सभी फ़ाइलों की ज़रूरत होती है जिन पर प्रोजेक्ट मौजूद होना चाहिए Workspace डायरेक्ट्री के अंदर या WORKSPACE में इंपोर्ट के तौर पर बताया गया है फ़ाइल से लिए जाते हैं.

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

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

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

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

  2. अगर आपको Basel और इसके कॉन्सेप्ट के बारे में नहीं पता है, तो iOS ऐप्लिकेशन ट्यूटोरियल). आपको बेज़ल को समझना चाहिए फ़ाइल फ़ोल्डर के साथ-साथ WORKSPACE और BUILD फ़ाइलों कॉन्सेप्ट, बिल्ड रूल, और बेज़ल पैकेज की जानकारी शामिल है.

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

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

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

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

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

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

  1. WORKSPACE फ़ाइल बनाएं

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

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

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

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

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

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

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

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

पहला चरण: WORKSPACE फ़ाइल बनाना

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

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

SwiftPM डिपेंडेंसी को swift_bazel के साथ, Baखाते के Workspace खाते में इंटिग्रेट करने के लिए, आपको उन्हें नीचे दिए गए ट्यूटोरियल में बताए गए तरीके से Basel पैकेज में बदलना होगा.

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

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

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

चरण 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 बिल्ड के नियम से जुड़ी सहायता Apple के सभी प्लैटफ़ॉर्म पर यूनिट और यूज़र इंटरफ़ेस (यूआई) की जांच कर रहा है. टेस्ट टारगेट इस तरह जोड़ें:

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

  • 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 का उदाहरण डायरेक्ट्री. उदाहरण के लिए:

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

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

bazel build //:<application_target>

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

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

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

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

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

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

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

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

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

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

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

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

  • BUILD फ़ाइलों में हर बड़े बदलाव के बाद प्रोजेक्ट बनाएं और उसे ठीक करें तो आपको गड़बड़ियों का पता चलते ही उन्हें हल करना.

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

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

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

bazel build //:my-target

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

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

समस्या का हल

बेज़ेल की गड़बड़ियां तब आ सकती हैं, जब चुने गए 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 चलाकर भी देख सकते हैं.