2016-11-19 10 views
8

मैं स्विफ्ट में प्लग-इन आर्किटेक्चर पर लागू करने का एक तरीका ढूंढ रहा हूं।स्विफ्ट प्लग-इन आर्किटेक्चर

प्रकरण उपयोग

वाला कोई एप्लिकेशन, fx। एक सीएलआई में एक फ़ोल्डर है जहां से इसे निष्पादित किया जाता है जहां प्लग-इन रखा जा सकता है और एप्लिकेशन शुरू होने पर लोड हो जाएगा।

आवश्यकताओं

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

मैं क्या कोशिश की है

मैं Process का उपयोग किया है एक निष्पादन जहां मैं भी तर्क जोड़ सकते हैं शुरू करने के लिए। लेकिन यह मेरी आवश्यकताओं को पूरा नहीं करता है।

मैं इसे कैसे किया जा सकता की इस post भर में आया है, लेकिन इतना है कि या तो अच्छा नहीं है कि NSBundle के उपयोग और ऑब्जेक्टिव-सी की आवश्यकता है।

मुझे सच में यकीन नहीं है कि इस बारे में कैसे जाना है। सही दिशा में किसी भी मदद या पॉइंटर्स की सराहना की जाएगी।

+0

क्या आप इस काम को लिनक्स पर रखने की योजना बना रहे हैं? ऐप स्टोर के बारे में क्या? – Kametrixom

+0

@ कैमेट्रिक्सॉम लिनक्स एक लक्ष्य है। ऐप स्टोर एक आवश्यकता नहीं है। –

+0

हाय। क्या आप स्विफ्ट में आर्किटेक्चर में इस प्लग को प्राप्त करने में सक्षम हैं? यही वह है जो मुझे अभी काम करने की ज़रूरत है। आपके लिए मेरे पास कोई सुझाव है? – Subi

उत्तर

1

स्विफ्ट में वर्तमान में स्थिर एबीआई नहीं है, इसलिए आप अभी तक देशी इंटरफेस पर भरोसा नहीं कर सकते हैं। (यह स्विफ्ट 4 द्वारा हल किया जाने की उम्मीद है)

मैं अब के लिए दो विकल्पों के बारे में सोच सकता हूं, लेकिन मेजबान और प्लग-इन के बीच किसी प्रकार के संचार प्रोटोकॉल को परिभाषित करने पर निर्भर करता है। यदि आप उद्देश्य-सी का उपयोग नहीं कर सकते हैं तो आपको अपनी आवश्यकताओं (सुविधाओं का आत्मनिरीक्षण आदि) भी लागू करना होगा।

  1. सी एबीआई के निचले स्तर पर। आपको जिस फ़ंक्शन की आवश्यकता है, उसे स्विफ्ट में @convention(c) एनोटेशन के साथ बुलाए गए पक्ष पर लागू करें और इसे बाहरी लिंकेज के लिए शीर्षलेख में कॉलर पक्ष पर घोषित करें। आप दो बार फ़ंक्शन को लागू करने में सक्षम नहीं होंगे, इसलिए आपको कॉलबैक-आधारित API को परिभाषित करना चाहिए जो प्लग-इन स्वयं को पंजीकृत करता है।

  2. एक (उदा। सॉकेट-आधारित) संचार प्रोटोकॉल को परिभाषित करें और स्विफ्ट स्रोत फ़ाइलों को प्रत्येक प्लग-इन में आयात करने के लिए लिखें। प्लग-इन निष्पादन योग्य बनाएं, जो मेजबान अनुप्रयोग द्वारा लॉन्च होने पर, संचार शुरू करें।

मैं व्यक्तिगत रूप से विकल्प 2 पसंद करते हैं क्योंकि यह linkers और इस तरह के साथ mingling की आवश्यकता नहीं है और आप प्लग-इन के उपयोग के लिए स्विफ्ट प्रकार और कार्यों को परिभाषित करने के अतिरिक्त लाभ मिलता है। इसके अलावा, चूंकि प्लग-इन एक फोर्कड बच्चा है, इसलिए यह होस्ट को प्रभावित किए बिना क्रैश हो सकता है।

संबंधित मुद्दे