iOS Xcode SPM सुपरक्लास को गिराने में विफल रहा


9

मेरा ऐप कई परियोजनाओं (चौखटों) से बना है, प्रत्येक मुख्य विशेषता के लिए एक और सभी प्रकार की चीजों के साथ एक सामान्य ढांचा है जिसे मुझे अपनी कई विशेषताओं में उपयोग करने की आवश्यकता है।

मैं निर्भरता जोड़ने के लिए Xcode 11 के स्विफ्ट पैकेज मैनेजर का उपयोग कर रहा हूं।

सामान्य ढांचे में एक RxSwift निर्भरता है, जिसका उपयोग मैं पूरे प्रोजेक्ट में करता हूं।

जब मैं अपने किसी भी फीचर फ्रेमवर्क में RxTest का उपयोग करने का प्रयास करता हूं तो मुझे समस्याओं का सामना करना पड़ रहा है।

यदि मैं सीधे परीक्षण लक्ष्य के लिए SPM के माध्यम से RxTest जोड़ता हूं और परीक्षण चलाता हूं, तो मुझे मिलता है

'क्लास नाम' के सुपरक्लॉस को मंगली नाम 'दूसरे वर्ग के नाम' से हटाने में नाकाम रहे

और बहुत

क्लास 'क्लास नेम' को 'कॉमन फ्रेमवर्क पाथ' और 'टेस्ट टार्गेट पाथ' दोनों में लागू किया जाता है।

जहां ये सभी वर्ग Rx से संबंधित हैं। 'त्रुटि को विफल करने में विफल' परीक्षण क्रैश कर जाता है और केवल तब होता है जब मैं एक आरएक्सटेस्ट क्लास को आरंभीकृत करने का प्रयास करता हूं।

यदि मैं RxTest को सामान्य ढांचे में जोड़ता हूं, तो परीक्षण ठीक चलते हैं, लेकिन जब मैं एप्लिकेशन चलाता हूं, तो मुझे मिलता है

dyld: पुस्तकालय लोड नहीं: @ rpath / XCTest.framework / XCTest

जो समझ में आता है, क्योंकि मैं एक गैर-परीक्षण ढांचे में एक परीक्षण ढांचा जोड़ रहा हूं, और ऐसा करना कुछ अच्छा नहीं है।

इसलिए मूल रूप से, मैं एक कॉन्फ़िगरेशन प्राप्त करने में सक्षम नहीं था, जहां परीक्षण और ऐप दोनों ठीक चलते हैं। या तो ऐप चलता है या परीक्षण चलता है।

मुझे यह काम कैसे मिल सकता है? क्या RxTest को सामान्य ढाँचे पर शामिल करने का एक तरीका है जब मैं इसे एक परीक्षण लक्ष्य पर बनाता हूं? या RxTest को केवल परीक्षण लक्ष्य पर शामिल किया जाना चाहिए और मुझे कुछ कॉन्फ़िगरेशन याद आ रही है?

जवाबों:


2

SPM निर्भरता वाले Xcode कई लक्ष्यों में एक ही SPM निर्भरता को संभाल नहीं सकते हैं जो अभी एक दूसरे पर निर्भर हैं। प्रत्येक निर्भरता को इस समय केवल एकल लक्ष्य में होना चाहिए। मैं नहीं जानता कि क्यों अब के रूप में, लेकिन मैं और अधिक की जाँच करने की कोशिश करेंगे और बग दर्ज अगर यह अभी तक दायर नहीं किया है।


नमस्ते, किसी भी अधिक पता लगाने भाग्य?
जंहा

इस बारे में कुछ भी पता चला?
बोगन

अब तक कुछ भी नहीं है :) मुद्दा वास्तव में यह है कि यह निर्भरता को लक्ष्य में सांख्यिकीय रूप से जोड़ता है।
Zden11k Topič

0

आपकी समस्या यह है कि लाइब्रेरी डायनामिक लिंकिंग के बजाय स्थैतिक लिंकिंग का उपयोग कर रही है। SwiftPM में आप एक पुस्तकालय को स्थिर या गतिशील होने के रूप में निर्दिष्ट कर सकते हैं यदि आप चाहते हैं या आप केवल बिल्ड सिस्टम को यह तय करने दे सकते हैं कि आपके पैकेज क्या हैं। Xcode स्थैतिक दृष्टिकोण का पक्ष लेता है जब यह SwiftPM के साथ बनाता है जिसके परिणामस्वरूप आपके द्वारा बनाए जा रहे निर्माण समस्याएँ होती हैं।

यदि आप संशोधित करने के Package.swiftलिए RxTestएक गतिशील पुस्तकालय होना चाहिए इसके बजाय यह काम करना चाहिए। आप RxSwiftइस लाइन का क्लोनिंग और संशोधन करके इसे आसानी से परख सकते हैं :

.library(name: "RxTest", targets: ["RxTest"]),

में:

.library(name: "RxTest", type: .dynamic, targets: ["RxTest"]),

और फिर RxSwiftअपने Xcode प्रोजेक्ट नेविगेटर में स्थानीय प्रतिलिपि खींच रहा है । यह Xcode द्वारा क्लोन किए गए एक के बजाय पैकेज की अपनी स्थानीय प्रति का उपयोग करेगा।

एक बार जब आप ऐसा करते हैं, तो आप इसे किसी भी लक्ष्य के खिलाफ लिंक कर सकते हैं, जिसकी आपको आवश्यकता है और यह काम करना चाहिए। यदि यह वास्तव में समस्या को ठीक करता है तो आपके दीर्घकालिक समाधान की संभावना है:

1) एक कांटा है जो बस इसे एक गतिशील पुस्तकालय में बदलता है।

2) RxSwiftअपने उत्पादों को गतिशील में बदलने के लिए या डिफ़ॉल्ट के अलावा गतिशील संस्करणों को बदलने के लिए समुदाय को समझाना।

3) RxTestकई स्थानों पर उपयोग या समान चीजों का उपयोग न करें ।


यह भी ध्यान देने योग्य है, कि Xcode 11.3 और पहले डायनेमिक स्विफ्ट पैकेज के साथ संग्रह करने का समर्थन नहीं करता है। इसलिए यदि आप गतिशील मार्ग से नीचे जाते हैं तो आपको Xcode 11.4 का इंतजार करना होगा।


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

हां यह एक दर्द है। मैं मानता हूँ कि गतिशील यहाँ अपेक्षित व्यवहार होगा। सबसे अच्छा हम वह परिवर्तन कर सकते हैं जो Apple के साथ फीडबैक अनुरोध दर्ज करना है।
bscothern
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.