2014-05-21 7 views
6

मैं एक स्थिर पुस्तकालय पर काम कर रहा हूं, जिसे Silicon कहा जाता है, जिसका उपयोग मैं अपने सभी आईओएस ऐप्स के लिए करता हूं।स्थिर स्थिर पुस्तकालयों वाले स्थिर पुस्तकालयों को जोड़ने के लिए सही प्रक्रिया क्या है?

क्योंकि मैं एक विशाल स्थैतिक पुस्तकालय नहीं बनाना चाहता जो कि बनाए रखने में कठोर हो सकता है, मैं कई छोटी स्थिर पुस्तकालयों को बना देता हूं जिन्हें मैं submodules के रूप में संलग्न करता हूं।

सिलिकॉन के लिए यह निर्भरता पेड़ लिखने के समय के रूप में इस प्रकार है:

Silicon
|
| ==>FDKeychain
| ==>FDDataClient
                |
                | =>FDRequestClient
                                |
                                | =>FDFoundationKit
| ==>FDSQLiteDatabase
                |
                | =>FDFoundationKit

आप देख सकते हैं दोनों FDRequestClient और FDSQLiteDatabase एक आम स्थिर पुस्तकालय के रूप में FDFoundationKit है।

ऐसा लगता है कि जब सिलिकॉन का उपयोग करने वाली एक परियोजना बनाई गई है तो यह परियोजनाओं के निर्माण के लिए सिलिकॉन की लक्षित निर्भरताओं के सभी बनाता है। FDDataClient और FDSQLiteDatabase के लिए भी यही बात होती है। तो किसी बिंदु पर FDRequestClient से FDFoundationKit को बिल्ड निर्देशिका के साथ-साथ FDSFiteationKit से FDFoundationKit में कॉपी और कॉपी किया गया है। जो भी बनाया गया है वह पिछली बार ओवरराइट करता है।

बस भाग्यशाली भाग्य से FDFoundationKit किसी भी गंभीर तरीके से नहीं बदल रहा है जैसे FDRequestClient और FDSQLiteDatabase हमेशा एक ही संस्करण का उपयोग नहीं कर सकता है लेकिन मैं गारंटी नहीं दे सकता कि यह हमेशा के लिए ऐसा होगा।

मैं यह पता लगाने की कोशिश कर रहा हूं कि सिलिकॉन का उपयोग करने के लिए एफडीएफउंडेशनकिट का कौन सा संस्करण निर्दिष्ट करने का कोई तरीका है, इसलिए यह सुनिश्चित करने के लिए सिलिकॉन की ज़िम्मेदारी हो सकती है कि इस्तेमाल किया गया संस्करण FDRequestClient, FDSQLiteDatabase और किसी अन्य निर्भरता दोनों के लिए काम करेगा। भविष्य में जोड़ें।

मुझे पता है कोकोपोड्स इस समस्या को हल करने का प्रयास करते हैं, लेकिन मैं किसी को अपनी लाइब्रेरी को काम करने के लिए बस इसे सेट अप नहीं करना चाहता हूं। अगर मैं सिलिकॉन को परिभाषित करने के किसी भी तरीके से पता लगा सकता हूं कि एफडीएफउंडेशनकिट का कौन सा संस्करण सब कुछ उपयोग करने के लिए पूरी तरह से काम करेगा।

+0

आप कोकोसपोड्स का उपयोग नहीं करना चाहते हैं क्योंकि आप "मेरी लाइब्रेरी को काम करने के लिए किसी को भी इसे सेट अप नहीं करना चाहते हैं"। मुझे पूरा यकीन है कि अधिकतर सुझाव जो अन्य उपयोगकर्ता यहां करेंगे, आपको सेटअप और प्रबंधन के लिए और अधिक समय लगेगा यदि आप एक निजी कोकोपोड्स का एक बार सेटअप करते हैं। – Emilie

+2

लेकिन सिलिकॉन के उपयोगकर्ताओं के लिए कोई सेटअप नहीं होगा। वे सिर्फ स्थिर पुस्तकालय को जोड़ते हैं और सबकुछ काम करता है। अगर मैं कोकोपोड्स पर स्विच करता हूं तो हर कोई जो इस पुस्तकालय का उपयोग करना चाहता है उसे इसे प्राप्त करने की आवश्यकता होगी। मैं इस लाइब्रेरी के साथ लेगवर्क करने की कोशिश कर रहा हूं ताकि यह सुनिश्चित किया जा सके कि यदि आप इसे लिंक करते हैं तो यह सही तरीके से निर्माण करेगा। –

उत्तर

0

इस समस्या का एकमात्र दो जवाब लग रहा है।

2) आपके द्वारा जारी किए गए किसी भी स्थिर पुस्तकालय या ढांचे में कोई लक्षित निर्भरता नहीं होनी चाहिए। उन्हें आपके पास किसी भी निर्भरता के खिलाफ लिंक करना चाहिए और यह आवश्यक पुस्तकालयों को एकीकृत करने के लिए आपकी लाइब्रेरी को एकीकृत करने वाले व्यक्ति की ज़िम्मेदारी है।

0

फ्रेमवर्क समर्थन संस्करण के रूप में, आप अपने सभी पुस्तकालयों को ढांचे में डाल सकते हैं (जैसा हम करते हैं)। फ्रेमवर्क एक सामान्य तरीके से कॉन्फ़िगर किया गया एक निर्देशिका पेड़ है। एक्सकोड सीधे ढांचे के निर्माण का समर्थन नहीं करता है, इसलिए आपको उन्हें एक स्क्रिप्ट में बनाना होगा, आमतौर पर आपके अंतिम चरण चरणों के रूप में। एक उदाहरण (jverkoey करने के लिए धन्यवाद) एक रूपरेखा के भीतर IOS- framework

में पाया जा सकता आप के भीतर

myLibrary.framework->Versions->n.n folders. 

myLibary.framework->Versions->Current प्रत्येक स्थिर पुस्तकालय के सभी संस्करणों को संग्रहीत कर सकती है नवीनतम संस्करण के फ़ोल्डर से एक लिंक।

चूंकि आप स्थैतिक पुस्तकालयों का उपयोग कर रहे हैं, इसलिए सिलिकॉन स्वयं संस्करणों (जो गतिशील पुस्तकालयों की आवश्यकता होगी) निर्दिष्ट नहीं कर सकता है, हालांकि सिलिकॉन के निर्माण के लिए उपयोग किए जाने वाले निर्माण, लिंकर या पर्यावरण झंडे निश्चित रूप से कर सकते हैं।

इस तरह, डिफ़ॉल्ट रूप से, ऐप्स हमेशा लाइब्रेरी के नवीनतम संस्करण का उपयोग करेंगे, लेकिन वास्तविक संस्करण को लिंक करते समय लिंकर झंडे द्वारा आसानी से ओवरराइड किया जा सकता है। साथ ही, सभी उपयोगकर्ताओं को बस अपनी परियोजना में सिलिकॉन ढांचे को किसी भी अन्य ढांचे के समान ही शामिल किया जाएगा, इसलिए डेवलपर्स के लिए यह बहुत आसान है।

1) CocoaPods या कार्थेज की तरह एक निर्भरता प्रबंधक का उपयोग करें:

+2

मुझे लगता है कि समस्या संस्करण नहीं है, लेकिन डुप्लिकेट प्रतीक जब एक ही प्रतीक एक से अधिक स्थिर पुस्तकालय (संग्रह) में दिखाई देता है, इससे कोई फर्क नहीं पड़ता कि आप अभिलेखागार कैसे बनाते हैं। गतिशील लिंक पुस्तकालयों में यह समस्या नहीं है। – CouchDeveloper

+0

ओपी केवल समस्या के रूप में संस्करण का उल्लेख करता है। –

+0

मैंने वास्तव में स्थिर पुस्तकालयों से फ्रेमवर्क तक सिलिकॉन को स्विच किया है और @CouchDeveloper सही है कि मैं यह सुनिश्चित करना चाहता हूं कि कोई डुप्लिकेट प्रतीक न हों। मेरी ओपन सोर्स प्रोजेक्ट्स में से कोई भी मेरा आदर्श परिदृश्य यह है कि मैं एक दूसरे पर निर्भर कर सकता हूं लेकिन अगर किसी ने मेरे दो ढांचे का उपयोग किया है, तो दोनों की समान निर्भरता थी, तो उन्हें टकराव नहीं होगा। –

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