Bazel ट्यूटोरियल: iOS ऐप्लिकेशन बनाएं

किसी समस्या की शिकायत करें सोर्स देखें Nightly · 7.4 .

इस ट्यूटोरियल में, Bazel का इस्तेमाल करके आसान iOS ऐप्लिकेशन बनाने का तरीका बताया गया है.

आपको क्या सीखने को मिलेगा

इस ट्यूटोरियल में, आपको ये काम करने का तरीका पता चलेगा:

  • Baज़र और Xcode इंस्टॉल करके, और प्रोजेक्ट का सैंपल डाउनलोड करके, एनवायरमेंट सेट अप करें
  • Bazel वर्कस्पेस सेट अप करें, जिसमें ऐप्लिकेशन का सोर्स कोड और WORKSPACE फ़ाइल हो. यह फ़ाइल, वर्कस्पेस डायरेक्ट्री के सबसे ऊपरी लेवल की पहचान करती है
  • ज़रूरी बाहरी डिपेंडेंसी के रेफ़रंस शामिल करने के लिए, WORKSPACE फ़ाइल को अपडेट करें
  • BUILD फ़ाइल बनाएं
  • सिम्युलेटर और iOS डिवाइस के लिए ऐप्लिकेशन बनाने के लिए, Bazel चलाना
  • ऐप्लिकेशन को सिम्युलेटर और iOS डिवाइस पर चलाना

अपना एनवायरमेंट सेट अप करना

शुरू करने के लिए, Basel और Xcode इंस्टॉल करें और सैंपल प्रोजेक्ट पाएं.

Basel इंस्टॉल करें

Bazel और उससे जुड़ी डिपेंडेंसी इंस्टॉल करने के लिए, इंस्टॉल करने के निर्देशों का पालन करें.

Xcode इंस्टॉल करें

Xcode को डाउनलोड और इंस्टॉल करें. Xcode में कंपाइलर, SDK टूल, और ऐसे अन्य टूल होते हैं जिनकी ज़रूरत, Apple ऐप्लिकेशन बनाने के लिए Bazel को होती है.

सैंपल प्रोजेक्ट पाना

आपको GitHub से ट्यूटोरियल के लिए सैंपल प्रोजेक्ट भी चाहिए. GitHub रेपो में दो ब्रांच हैं: source-only और main. source-only ब्रांच में, सिर्फ़ प्रोजेक्ट की सोर्स फ़ाइलें शामिल होती हैं. इस ट्यूटोरियल में, इस शाखा में मौजूद फ़ाइलों का इस्तेमाल किया जाएगा. main ब्रांच में, सोर्स फ़ाइलें शामिल हैं. साथ ही, इसमें बेज़ल WORKSPACE और BUILD, दोनों फ़ाइलें शामिल हैं. ट्यूटोरियल के चरणों को पूरा करने के बाद, इस शाखा में मौजूद फ़ाइलों का इस्तेमाल करके, अपने काम की जांच की जा सकती है.

source-only शाखा में फ़ाइलें पाने के लिए, कमांड लाइन पर यह जानकारी डालें:

cd $HOME
git clone -b source-only https://github.com/bazelbuild/examples

git clone कमांड, $HOME/examples/ नाम की डायरेक्ट्री बनाता है. इस डायरेक्ट्री में, Bazel के लिए कई सैंपल प्रोजेक्ट मौजूद हैं. इस ट्यूटोरियल के लिए प्रोजेक्ट फ़ाइलें $HOME/examples/tutorial/ios-app में हैं.

फ़ाइल फ़ोल्डर सेट अप करना

वर्कस्पेस एक डायरेक्ट्री होती है. इसमें एक या उससे ज़्यादा सॉफ़्टवेयर प्रोजेक्ट की सोर्स फ़ाइलें होती हैं. साथ ही, इसमें WORKSPACE फ़ाइल और BUILD फ़ाइलें भी होती हैं. इनमें वे निर्देश होते हैं जिनका इस्तेमाल Bazel, सॉफ़्टवेयर बनाने के लिए करता है. इस फ़ाइल फ़ोल्डर में, आउटपुट डायरेक्ट्री के सिम्बॉलिक लिंक भी हो सकते हैं.

फ़ाइल फ़ोल्डर की डायरेक्ट्री, आपके फ़ाइल सिस्टम में कहीं भी हो सकती है. इसे, रूट में मौजूद WORKSPACE फ़ाइल से दिखाया जाता है. इस ट्यूटोरियल में, आपकी Workspace डायरेक्ट्री $HOME/examples/tutorial/ है. इसमें सैंपल प्रोजेक्ट फ़ाइलें शामिल हैं, जिन्हें आपने पिछले चरण में GitHub रेपो से क्लोन किया है.

अपनी सुविधा के लिए, $WORKSPACE एनवायरमेंट वैरिएबल को अभी सेट करें, ताकि वह आपकी वर्कस्पेस की डायरेक्ट्री का रेफ़रंस दे. कमांड लाइन में, यह डालें:

export WORKSPACE=$HOME/examples/tutorial

Workspace फ़ाइल बनाएं

हर वर्कस्पेस में, WORKSPACE नाम की एक टेक्स्ट फ़ाइल होनी चाहिए. यह फ़ाइल, टॉप लेवल की फ़ाइल फ़ोल्डर की डायरेक्ट्री में मौजूद होनी चाहिए. यह फ़ाइल खाली हो सकती है या इसमें, सॉफ़्टवेयर बनाने के लिए ज़रूरी बाहरी डिपेंडेंसी के रेफ़रंस हो सकते हैं.

फ़िलहाल, आपको एक खाली WORKSPACE फ़ाइल बनानी होगी. इससे सिर्फ़ वर्कस्पेस डायरेक्ट्री की पहचान की जा सकेगी. बाद के चरणों में, बाहरी डिपेंडेंसी की जानकारी जोड़ने के लिए, फ़ाइल को अपडेट किया जाएगा.

कमांड लाइन में यह जानकारी लिखें:

touch $WORKSPACE/WORKSPACE
open -a Xcode $WORKSPACE/WORKSPACE

इससे खाली WORKSPACE फ़ाइल बनती है और खुलती है.

Workspace फ़ाइल अपडेट करें

Apple डिवाइसों के लिए ऐप्लिकेशन बनाने के लिए, Bazel को अपने GitHub डेटा स्टोर करने की जगह से, Apple के नए बिल्ड नियम खींचने होंगे. इसे चालू करने के लिए, अपनी WORKSPACE फ़ाइल में ये git_repository नियम जोड़ें:

load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")

git_repository(
    name = "build_bazel_rules_apple",
    remote = "https://github.com/bazelbuild/rules_apple.git",
    tag = "0.19.0",
)

git_repository(
    name = "build_bazel_rules_swift",
    remote = "https://github.com/bazelbuild/rules_swift.git",
    tag = "0.13.0",
)

git_repository(
    name = "build_bazel_apple_support",
    remote = "https://github.com/bazelbuild/apple_support.git",
    tag = "0.7.2",
)

git_repository(
    name = "bazel_skylib",
    remote = "https://github.com/bazelbuild/bazel-skylib.git",
    tag = "0.9.0",
)

सोर्स फ़ाइलों की समीक्षा करें

$WORKSPACE/ios-app/UrlGet में मौजूद ऐप्लिकेशन की सोर्स फ़ाइलें देखें. एक बार फिर, ऐप्लिकेशन के स्ट्रक्चर के बारे में जानने के लिए, आप इन फ़ाइलों को देख रहे हैं. इस ट्यूटोरियल को पूरा करने के लिए, आपको किसी भी सोर्स फ़ाइल में बदलाव करने की ज़रूरत नहीं है.

एक BUILD फ़ाइल बनाएं

बदलाव करने के लिए, कमांड-लाइन प्रॉम्प्ट पर नई BUILD फ़ाइल खोलें:

touch $WORKSPACE/ios-app/BUILD
open -a Xcode $WORKSPACE/ios-app/BUILD

नियम लोड करने का स्टेटमेंट जोड़ना

iOS टारगेट बनाने के लिए, Bazel को हर बार GitHub रिपॉज़िटरी से, बाइल्ड के नियम लोड करने होंगे. अपने प्रोजेक्ट के लिए ये नियम उपलब्ध कराने के लिए, अपनी BUILD फ़ाइल की शुरुआत में यह लोड स्टेटमेंट जोड़ें:

load("@build_bazel_rules_apple//apple:ios.bzl", "ios_application")

आपको सिर्फ़ ios_application नियम को लोड करना होगा, क्योंकि objc_library नियम, Bazel पैकेज में पहले से मौजूद होता है.

objc_library नियम जोड़ें

Basel ने बिल्ड के कई नियम दिए हैं. इन नियमों का इस्तेमाल करके, iOS प्लैटफ़ॉर्म पर ऐप्लिकेशन बनाया जा सकता है. इस ट्यूटोरियल में, आपको सबसे पहले objc_library नियम का इस्तेमाल करके, Bazel को ऐप्लिकेशन के सोर्स कोड और Xib फ़ाइलों से स्टैटिक लाइब्रेरी बनाने का तरीका बताना होगा. इसके बाद, ios_application नियम का इस्तेमाल करके, आपको ऐप्लिकेशन बाइनरी और .ipa बंडल बनाने का तरीका बताना होगा.

अपनी BUILD फ़ाइल में ये चीज़ें जोड़ें:

objc_library(
    name = "UrlGetClasses",
    srcs = [
         "UrlGet/AppDelegate.m",
         "UrlGet/UrlGetViewController.m",
         "UrlGet/main.m",
    ],
    hdrs = glob(["UrlGet/*.h"]),
    data = ["UrlGet/UrlGetViewController.xib"],
)

नियम का नाम, UrlGetClasses नोट करें.

कोई ios_application नियम जोड़ें

ios_application नियम, ऐप्लिकेशन बाइनरी बनाता है और .ipa बंडल फ़ाइल बनाता है.

अपनी BUILD फ़ाइल में ये चीज़ें जोड़ें:

ios_application(
    name = "ios-app",
    bundle_id = "Google.UrlGet",
    families = [
        "iphone",
        "ipad",
    ],
    minimum_os_version = "9.0",
    infoplists = [":UrlGet/UrlGet-Info.plist"],
    visibility = ["//visibility:public"],
    deps = [":UrlGetClasses"],
)

ध्यान दें कि deps एट्रिब्यूट, ऊपर BUILD फ़ाइल में जोड़े गए UrlGetClasses नियम के आउटपुट का रेफ़रंस कैसे देता है.

अब, फ़ाइल को सेव करें और बंद करें. GitHub रेपो की main ब्रांच में, अपनी BUILD फ़ाइल की तुलना ठीक किए गए उदाहरण से की जा सकती है.

ऐप्लिकेशन बनाना और उसे डिप्लॉय करना

अब आपका ऐप्लिकेशन बनाने और उसे सिम्युलेटर और iOS डिवाइस पर डिप्लॉय करने का समय आ गया है.

बनाया गया ऐप्लिकेशन, $WORKSPACE/bazel-bin डायरेक्ट्री में मौजूद है.

इस ट्यूटोरियल की पूरी हो चुकी WORKSPACE और BUILD फ़ाइलें, GitHub रेपो की मुख्य ब्रांच में मौजूद हैं. ज़्यादा मदद पाने या समस्या हल करने के लिए, अपने काम की तुलना, पहले से तैयार फ़ाइलों से की जा सकती है.

सिम्युलेटर के लिए ऐप्लिकेशन बनाना

पक्का करें कि आपकी मौजूदा वर्किंग डायरेक्ट्री, आपके Bazel फ़ाइल फ़ोल्डर में हो:

cd $WORKSPACE

अब, सैंपल ऐप्लिकेशन बनाने के लिए, यह जानकारी डालें:

bazel build //ios-app:ios-app

Baज़र, सैंपल ऐप्लिकेशन को लॉन्च करके उसे बनाता है. बिल्ड प्रोसेस के दौरान, उसका आउटपुट कुछ ऐसा दिखेगा:

INFO: Found 1 target...
Target //ios-app:ios-app up-to-date:
  bazel-bin/ios-app/ios-app.ipa
INFO: Elapsed time: 0.565s, Critical Path: 0.44s

बिल्ड आउटपुट खोजना

.ipa फ़ाइल और अन्य आउटपुट, $WORKSPACE/bazel-bin/ios-app डायरेक्ट्री में मौजूद हैं.

सिम्युलेटर में ऐप्लिकेशन को चलाना और डीबग करना

अब iOS सिम्युलेटर का इस्तेमाल करके, Xcode से ऐप्लिकेशन चलाया जा सकता है. सबसे पहले, Tulsi का इस्तेमाल करके Xcode प्रोजेक्ट जनरेट करें.

इसके बाद, Xcode में प्रोजेक्ट खोलें और रनटाइम स्कीम के तौर पर कोई iOS सिम्युलेटर चुनें. इसके बाद, रन करें पर क्लिक करें.

किसी डिवाइस के लिए ऐप्लिकेशन बनाएं

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

  1. अपने Apple Developer Account में जाएं और अपने डिवाइस के लिए सही प्रॉविज़निंग प्रोफ़ाइल डाउनलोड करें. ज़्यादा जानकारी के लिए, Apple के दस्तावेज़ पढ़ें.

  2. अपनी प्रोफ़ाइल को $WORKSPACE में ले जाएं.

  3. (ज़रूरी नहीं) .gitignore फ़ाइल में अपनी प्रोफ़ाइल जोड़ें.

  4. अपनी BUILD फ़ाइल में ios_application टारगेट में यह लाइन जोड़ें:

    provisioning_profile = "<your_profile_name>.mobileprovision",
    

अब अपने डिवाइस के लिए ऐप्लिकेशन बनाएं:

bazel build //ios-app:ios-app --ios_multi_cpus=armv7,arm64

यह ऐप्लिकेशन को फ़ैट बाइनरी के तौर पर बनाता है. किसी खास डिवाइस आर्किटेक्चर के लिए, बिल्ड के विकल्पों में से उसको चुनें.

Xcode के किसी खास वर्शन को बनाने के लिए, --xcode_version विकल्प का इस्तेमाल करें. SDK टूल का कोई खास वर्शन बनाने के लिए, --ios_sdk_version विकल्प का इस्तेमाल करें. ज़्यादातर मामलों में, --xcode_version विकल्प काफ़ी होता है.

iOS का कम से कम ज़रूरी वर्शन तय करने के लिए, अपनी BUILD फ़ाइल के ios_application बिल्ड नियम में minimum_os_version पैरामीटर जोड़ें.

कमांड लाइन के बजाय जीयूआई का इस्तेमाल करके, ऐप्लिकेशन बनाने के लिए भी Tulsi का इस्तेमाल किया जा सकता है.

किसी डिवाइस पर ऐप्लिकेशन इंस्टॉल करना

डिवाइस पर ऐप्लिकेशन इंस्टॉल करने का सबसे आसान तरीका यह है कि Xcode लॉन्च करें और Windows > Devices कमांड का इस्तेमाल करें. बाईं ओर मौजूद सूची से, प्लग-इन किया गया डिवाइस चुनें. इसके बाद, "इंस्टॉल किए गए ऐप्लिकेशन" में जाकर, जोड़ें (प्लस का निशान) बटन पर क्लिक करके ऐप्लिकेशन जोड़ें. इसके बाद, अपनी बनाई गई .ipa फ़ाइल चुनें.

अगर आपका ऐप्लिकेशन आपके डिवाइस पर इंस्टॉल नहीं हो पाता है, तो पक्का करें कि आपने अपनी BUILD फ़ाइल में सही प्रावधान प्रोफ़ाइल तय की है (पिछले सेक्शन में चौथा चरण).

अगर आपका ऐप्लिकेशन लॉन्च नहीं हो पा रहा है, तो पक्का करें कि आपका डिवाइस, आपकी प्रोविज़निंग प्रोफ़ाइल का हिस्सा हो. Xcode में Devices स्क्रीन पर मौजूद View Device Logs बटन से, आपको गड़बड़ी के बारे में अन्य जानकारी मिल सकती है.

इसके बारे में और पढ़ें

ज़्यादा जानकारी के लिए, GitHub रेपो की मुख्य ब्रांच देखें.