इस ट्यूटोरियल में, Bazel का इस्तेमाल करके एक सामान्य iOS ऐप्लिकेशन बनाने का तरीका बताया गया है.
आपको क्या सीखने को मिलेगा
इस ट्यूटोरियल में, आपको इनके बारे में जानकारी मिलेगी:
- Bazel और Xcode इंस्टॉल करके एनवायरमेंट सेट अप करें. साथ ही, सैंपल प्रोजेक्ट डाउनलोड करें
- Bazel workspace सेट अप करें. इसमें ऐप्लिकेशन का सोर्स कोड और
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
एनवायरमेंट वैरिएबल को अभी सेट करें, ताकि आप अपनी वर्कस्पेस डायरेक्ट्री को रेफ़र कर सकें. कमांड लाइन में यह डालें:
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 नियम जोड़ना
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
एट्रिब्यूट, UrlGetClasses
नियम के आउटपुट को रेफ़रंस करता है. यह नियम, आपने ऊपर दी गई BUILD
फ़ाइल में जोड़ा था.
अब फ़ाइल को सेव करें और बंद करें. अपनी BUILD
फ़ाइल की तुलना, GitHub रिपो की main
ब्रांच में मौजूद पूरे उदाहरण से की जा सकती है.
ऐप्लिकेशन बनाना और उसे डिप्लॉय करना
अब आपके पास अपना ऐप्लिकेशन बनाने और उसे सिम्युलेटर और 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 को उस डिवाइस मॉडल के लिए सही प्रोविज़निंग प्रोफ़ाइल की ज़रूरत होती है. तो निम्न कार्य करें:
अपने Apple Developer खाते पर जाएं और अपने डिवाइस के लिए सही प्रोविज़निंग प्रोफ़ाइल डाउनलोड करें. ज़्यादा जानकारी के लिए, Apple के दस्तावेज़ देखें.
अपनी प्रोफ़ाइल को
$WORKSPACE
में भेजें.(ज़रूरी नहीं) अपनी प्रोफ़ाइल को
.gitignore
फ़ाइल में जोड़ें.अपनी
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 रिपॉज़िटरी की मुख्य ब्रांच देखें.