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

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

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

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

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

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

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

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

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

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

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

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

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

आपको 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/ नाम की एक डायरेक्ट्री बनाता है. इस डायरेक्ट्री में, Basel के लिए कई सैंपल प्रोजेक्ट शामिल हैं. इस ट्यूटोरियल की प्रोजेक्ट फ़ाइलें $HOME/examples/tutorial/ios-app में हैं.

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

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

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

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

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

objc_library नियम जोड़ें

Basel ने बिल्ड के कई नियम दिए हैं. इन नियमों का इस्तेमाल करके, iOS प्लैटफ़ॉर्म पर ऐप्लिकेशन बनाया जा सकता है. इस ट्यूटोरियल के लिए, आपको सबसे पहले objc_library नियम का इस्तेमाल करके, बेज़ल को ऐप्लिकेशन के सोर्स कोड और 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 रेपो की मुख्य ब्रांच में मौजूद हैं. आप अतिरिक्त सहायता या समस्या का हल पाने के लिए अपने काम की तुलना पूरी हो चुकी फ़ाइलों से कर सकते हैं.

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

पक्का करें कि आपकी मौजूदा वर्किंग डायरेक्ट्री, आपके Basel Workspace में मौजूद है:

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 सिम्युलेटर चुनें, और Run पर क्लिक करें.

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

आपका ऐप्लिकेशन बनाने के लिए, ताकि वह किसी 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 पैरामीटर जोड़ें.

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

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

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

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

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

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

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