बैजल ट्यूटोरियल: iOS ऐप्लिकेशन बनाना

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.
समस्या की शिकायत करें स्रोत देखें

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

आप इन चीज़ों के बारे में जानेंगे

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

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

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

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

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

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

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

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

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

आपको GitHub से ट्यूटोरियल के लिए सैंपल प्रोजेक्ट भी लेना होगा. GitHub repo की दो ब्रांच हैं: source-only और main. source-only ब्रांच में सिर्फ़ प्रोजेक्ट की सोर्स फ़ाइलें होती हैं. इस ट्यूटोरियल में मौजूद फ़ाइलों को आप इस ट्यूटोरियल में इस्तेमाल करेंगे. main ब्रांच में सोर्स फ़ाइलें और Bzel 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 फ़ाइलें होती हैं जिनमें वे निर्देश होते हैं जिनका इस्तेमाल करके बेज़ल, सॉफ़्टवेयर बनाने के लिए करते हैं. इस फ़ाइल फ़ोल्डर में, आउटपुट डायरेक्ट्री भी हो सकती हैं.

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

अपनी सुविधा के लिए, $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 फ़ाइल खोलें:

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 नियम, बेज़ल पैकेज में बनाया गया है.

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 नियम के आउटपुट का रेफ़रंस कैसे देता है.

अब, फ़ाइल को सेव करें और बंद करें. आप BUILD फ़ाइल की तुलना GitHub repo की main ब्रांच में पूरी की गई जानकारी के साथ कर सकते हैं.

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

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

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

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

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

पक्का करें कि आपकी मौजूदा वर्क डायरेक्ट्री आपके 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 डेवलपर खाते पर जाएं और अपने डिवाइस के लिए सही प्रावधान प्रोफ़ाइल डाउनलोड करें. ज़्यादा जानकारी के लिए, 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 पैरामीटर जोड़ें.

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

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

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

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

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

आगे पढ़ना

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