
प्रविष्टि
सभी को नमस्कार। कुछ समय पहले, मैंने उसी समय एंड्रॉइड और आईओएस के लिए अपना प्रोजेक्ट बनाने का फैसला किया। स्वाभाविक रूप से, प्रौद्योगिकी की पसंद के बारे में सवाल उठे। कुछ हफ़्ते में मैंने लोकप्रिय ढेर को देखा और कोटलिन / मूल को चुना। चूंकि मैं एक एंड्रॉइड डेवलपर हूं, इसलिए मैं लंबे समय से कोटलिन से परिचित था, लेकिन मुझे स्विफ्ट के साथ बहुत अनुभव नहीं था और दोनों प्लेटफार्मों में अधिकांश कोड को प्राप्त करना चाहता था। इसलिए, सवाल तुरंत उठा, लेकिन iOS के लिए UI कैसे लिखना है। बाजार पर एक त्वरित नज़र ने सुझाव दिया कि फ़्लटर है, जो आपको दो प्लेटफार्मों के लिए एक साथ यूआई लिखने की अनुमति देता है। दरअसल, यह कहानी शुरू हुई।
यह लेख फ़्लटर के यूआई के रूप में बिल्ड अनुभव और कोर लॉजिक के लिए कोटलिन का वर्णन करता है।
महत्वपूर्ण: बिल्ली के नीचे परियोजना को इकट्ठा करने के तरीके पर बहुत सारे चित्र और निर्देश हैं
सामग्री की तालिका
भाग 1
कोटलिन पर एक साझा पुस्तकालय बनाना
- कोटलिन मोबाइल साझा पुस्तकालय चुनें

- आगे

- हमारे काम करने वाले फ़ोल्डर को निर्दिष्ट करें, यहां मैंने प्रोजेक्ट के लिए एक अलग फ़ोल्डर बनाया है। चूंकि मेरे पास 4 अलग-अलग परियोजनाएं होंगी और उन्हें एक स्थान पर रखना अधिक सुविधाजनक होगा

- यह
sdk.dir में sdk.dir को निर्दिष्ट करने के लिए बनी हुई है। परियोजनाएं और परियोजना का निर्माण शुरू होता है, मेरे पास पथ /Users/vlad/Library/Android/sdk

- प्रोजेक्ट संरचना,
sample habr.example से संकुल नाम sample habr.example

- यह प्रकाशन शुरू करने,
wrapper कॉल करने का समय है। उसके बाद, .gradlew .gradlew हमारी परियोजना में दिखाई देगी और टर्मिनल से इसके साथ काम करना संभव होगा

- टर्मिनल से चलाएँ
./gradlew publishToMavenLocal

- उसके बाद, स्थानीय मावेन रिपॉजिटरी में, हमारे पास 4 फ़ोल्डर होंगे जिसमें हमारे पुस्तकालय झूठ बोलेंगे

भाग २
Android एप्लिकेशन बनाना
Android प्रोजेक्ट बनाएं
- लेखन के समय, परियोजना एक "टूटी" निर्भरता के साथ उत्पन्न हो रही है, इसलिए हम इसे
jre7 के अंत में jre7 देते हैं, हमें koltin-stdlib मिलता है, जिसके बाद परियोजना का निर्माण शुरू होता है

build.gradle खोलें और repositories सेक्शन में mavenLocal जोड़ें। महत्वपूर्ण! repositories सेक्शन allprojects अंदर होना चाहिए और buildScript में नहीं

- अब हम अपनी लाइब्रेरी को एक निर्भरता के रूप में जोड़ सकते हैं
implementation 'habr.example:commonLibrary-jvm:0.0.1'

- हम
activity_main.xml खोलते activity_main.xml और हम main_activity_text id main_activity_text में निर्दिष्ट करते हैं

MainActivity.kt बस इस MainActivity.kt में टेक्स्ट सेट करें

- महान, इस बिंदु पर हमारे पास एक एंड्रॉइड एप्लिकेशन है जो हमारी लाइब्रेरी से
hello() फ़ंक्शन का उपयोग कर सकता है
भाग 3
एक iOS प्रोजेक्ट बनाएं
- एकल दृश्य ऐप चुनना

- मूल जानकारी भरें और फ़ोल्डर का चयन करें। हमारे अन्य प्रोजेक्ट्स के लिए फ़ोल्डर रूट चुनना महत्वपूर्ण है, क्योंकि इसमें Xcode प्रोजेक्ट के नाम के साथ एक सबफ़ोल्डर बनाएगा


- सबसे पहले,
CocoaPods जोड़ें। ऐसा करने के लिए, प्रोजेक्ट फ़ोल्डर में pod init चलाएं, प्रोजेक्ट को Xcode में बंद करें Xcode और pod install रन करें। हम देखते हैं कि स्थापना सफलतापूर्वक पूर्ण हुई

- महत्वपूर्ण!
CocoaPods /Pods CocoaPods को /Pods फ़ोल्डर जोड़ने की अनुशंसा नहीं करता है, लेकिन मैंने इसे वैसे भी किया। flutter को जोड़ने के बाद से, हम प्रत्येक build लिए निर्भरता को फिर से कॉन्फ़िगर करेंगे। अब तक, मुझे यह समाधान पसंद है - फ़ाइल
Awesome App.xcworkspace माध्यम से परियोजना खोलें

- हम टर्मिनल को खोलते हैं, इसमें हम अपने
commonLibrary फोल्डर में जाते हैं और रन करते हैं ./gradlew linkDebugFrameworkIos । उसके बाद, iOSFramework हमारे build फ़ोल्डर में दिखाई देता है iOSFramework

- लक्ष्य चुनें

- और इस लक्ष्य के लिए हम बाइनरी को जोड़ते हैं

- अन्य जोड़ें चुनें

- चरण 6 में प्राप्त
framework लिए पथ निर्दिष्ट करें ( commonLibrary.framework )


- अब परियोजना में इस
framework को प्रदर्शित किया जाना चाहिए

Build Settings जाएं और Enable Bitcode अक्षम Enable Bitcode

- अब आपको यह निर्दिष्ट करने की आवश्यकता है कि हमारे
framework को देखने के लिए, Framework Search Path खोलें

- पथ निर्दिष्ट करें
"${PODS_ROOT}/../../commonLibrary" । recursive का चयन करना सुनिश्चित करें। बेशक, आप इसके बिना कर सकते हैं, यदि आप पथ को अधिक सटीक रूप से कॉन्फ़िगर करते हैं। लेकिन, चूंकि यह केवल परियोजना की शुरुआत है, अब हमारे लिए यह सुनिश्चित करना महत्वपूर्ण है कि यह पूरा गुच्छा काम करेगा। और हम रास्ता बदल सकते हैं और फिर

- हमें यह सुनिश्चित करने की आवश्यकता है कि
Xcode में प्रत्येक build साथ Xcode हमारा framework gradle का उपयोग करके framework । Build Phases खोलें

- एक नया
Script Phase जोड़ें

- स्क्रिप्ट कोड जोड़ें।
cd "${PODS_ROOT}/../../commonLibrary" echo $(pwd) ./gradlew linkIos
यहाँ हम बस अपनी लाइब्रेरी के प्रोजेक्ट फोल्डर में जाते हैं और रन करते हैं ./gradlew linkIos । echo $(pwd) कॉल केवल कंसोल में दिखाने के लिए आवश्यक है जो हमें विशेष फ़ोल्डर में मिला है

- हम अपने
build phase को target dependencies ठीक बाद, शीर्ष पर धकेल देते हैं

- अब
ViewController खोलें और लाइब्रेरी से हमारे फ़ंक्शन में कॉल जोड़ें

- हम अपना प्रोजेक्ट लॉन्च करते हैं और देखते हैं

महान, इसका मतलब है कि हमने कोटलिन लाइब्रेरी को iOS प्रोजेक्ट से सही तरीके से जोड़ा है।
हमारे सभी अनुप्रयोगों में UI लिखने के लिए एक रूपरेखा के रूप में, स्पंदन जोड़ना बाकी है
भाग ४
एंड्रॉइड ऐप में स्पंदन जोड़ना
तब
गीथूब के एक लेख ने मेरी बहुत मदद की
- रूट फ़ोल्डर पर जाएं जहां हमारी सभी परियोजनाएं स्थित हैं और
flutter create -t module flutter_ui

settings.gradle खोलें settings.gradle और हमारे फ़्लटर-मॉड्यूल को एक सबप्रोजेक्ट के रूप में सक्षम करें

- बिल्ड.ग्रेड फ़ाइल खोलें और हमारे प्रोजेक्ट को जोड़ें

MainActivity.kt को FlutterActivity

App.kt जोड़ें, जिसमें हम एप्लिकेशन स्टार्टअप पर App.kt को इनिशियलाइज़ करेंगे

- प्रकटन को बदलें और कहें कि अब हमारे पास
Application लिए एक वर्ग है

java8 जोड़ना सुनिश्चित करें, इसके बिना स्पंदन शुरू नहीं होगा

- हम JVM लॉग से हैलो में UI देखते हैं, जिसका अर्थ है कि हमने यूआई को फ़्लटर पर और कोटलिन / नेटिव पर मुख्य पुस्तकालय में रखा है


MainActivity.kt एक विधि जोड़ें, जिसे हम MainActivity.kt से कॉल करेंगे। यहाँ, फ़्लटर से एक घटना पर, हम कोटलिन-लाइब्रेरी से अपना hello() लौटाते हैं

- और
main.dart कोड जोड़ें iOS/Android- एप्लिकेशन के iOS/Android- में विधि को कॉल करेगा

- हमें मिलता है

भाग 5
IOS ऐप में स्पंदन जोड़ना
- हमारे
Podfile अपडेट करना
flutter_application_path = File.expand_path("../flutter_ui", File.dirname(path)) eval(File.read( File.join( flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')), binding)


- यह महत्वपूर्ण है ।
framework search paths की पहली पंक्ति में $(inherited) जोड़ें। यह जांचना सुनिश्चित करें कि आपके framework search paths खाली नहीं framework search paths

जब आप some/path/my_flutter/pubspec.yaml में निर्भरताएँ some/path/my_flutter/pubspec.yaml , तो आपको some/path/my_flutter में निर्भरता को अपडेट करने के लिए some/path/my_flutter से flutter packages get होने वाले some/path/my_flutter flutter packages get चलाने की आवश्यकता podhelper.rb । उसके बाद, some/path/MyApp से pod install रन करें - केवल स्पंदन के लिए 1 और
Build Phase जोड़ें। ऊपर हमने जो Script phase भाग 3 में जोड़ा है
"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" embed

- हमारे
AppDelegate को FlutterAppDelegate AppDelegate

ViewController अपडेट करें

- एक
NavigatorController में हमारे ViewController लपेटें

- अब आवेदन शुरू होता है। लेकिन, अभी के लिए, हमारे पास पुस्तकालय और स्पंदन के बीच कोई संबंध नहीं है

- इस लिंक को
FlutterMethodChannel का उपयोग करके FlutterMethodChannel

- महान, अब iOS एप्लिकेशन मुख्य तर्क के लिए
UI और kotlin लिए flutter का उपयोग करता है।

निष्कर्ष
यहाँ क्या कहना महत्वपूर्ण है: मैं यह ढोंग नहीं करता कि आपने कुछ नया या अनोखा सीखा है। मैंने सिर्फ अपने अनुभव साझा किए, क्योंकि यह सब एक साथ करने के लिए, मैंने लगभग 4 कार्य दिवस बिताए। और मुझे प्रोजेक्ट कोड के उदाहरण नहीं मिले जो कोटलिन / मूल और स्पंदन दोनों का उपयोग करता है
अंतिम परियोजनाएं
- परियोजना समूह
- स्पंदन-ui
- ios
- एंड्रॉयड
- आम-पुस्तकालय
उन लिंक्स की सूची, जिन्होंने मेरी मदद की, लेकिन अभी नहीं
- खुद ही झड़ जाता है
- देशी कोड और UI फ़्लटर प्लेटफ़ॉर्म-चैनल के बीच संबंध
- मौजूदा github ऐप में स्पंदन जोड़ें
- कोटलिन नेटिव देशी-अवलोकन