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

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

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

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

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

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

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

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

Bazel इंस्टॉल करना

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

Xcode इंस्टॉल करना

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

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

आपको ट्यूटोरियल के लिए, GitHub से सैंपल प्रोजेक्ट भी चाहिए. GitHub रेपो में दो ब्रांच हैं: source-only और main. source-only शाखा में, सिर्फ़ प्रोजेक्ट की सोर्स फ़ाइलें होती हैं. इस ट्यूटोरियल में, इस शाखा में मौजूद फ़ाइलों का इस्तेमाल किया जाएगा. main शाखा में सोर्स फ़ाइलें और पूरी की गई Bazel 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 फ़ाइल से दिखाया जाता है. इस ट्यूटोरियल में, आपकी वर्कस्पेस डायरेक्ट्री $HOME/examples/tutorial/ है. इसमें, प्रोजेक्ट की सैंपल फ़ाइलें होती हैं. आपने पिछले चरण में, GitHub के डेटा स्टोर करने की जगह से इन फ़ाइलों को क्लोन किया था.

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

export WORKSPACE=$HOME/examples/tutorial

WORKSPACE फ़ाइल बनाना

हर फ़ाइल में 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 नियम जोड़ना

Bazel में कई बिल्ड नियम होते हैं. इनका इस्तेमाल करके, 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 repo की main शाखा में, अपनी BUILD फ़ाइल की तुलना पूरे किए गए उदाहरण से की जा सकती है.

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

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

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

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

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

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

cd $WORKSPACE

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

bazel build //ios-app:ios-app

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

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 डिवाइस पर इंस्टॉल और लॉन्च करने के लिए, Bazel को उस डिवाइस मॉडल के लिए सही प्रोविज़निंग प्रोफ़ाइल की ज़रूरत होती है. तो निम्न कार्य करें:

  1. अपने Apple Developer खाते पर जाएं और अपने डिवाइस के लिए सही प्रोविज़निंग प्रोफ़ाइल डाउनलोड करें. ज़्यादा जानकारी के लिए, 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 रिपॉज़िटरी की मुख्य शाखा देखें.