कोकोपोड्स के साथ Xcode यूनिट परीक्षण


119

मैं पिछले कुछ दिनों से इसके साथ एक दीवार के खिलाफ अपना सिर पीट रहा हूं, लेकिन कई Google / SO / Github खोजों के बावजूद मुझे उन मुद्दों का समाधान नहीं मिल रहा है जो मैं कर रहा हूं!

मैं जो कुछ करने की कोशिश कर रहा हूं वह मेरे ऐप के लिए कुछ यूनिट टेस्ट बना रहा है जो फायरबेस पॉड्स का उपयोग करता है।

मैं Xcode 7.3.1 और कोकोपोड्स 1.0.1 का उपयोग कर रहा हूं। अपडेट: इश्यू Xcode 8.0 के साथ रहता है

इस पॉडफाइल के साथ:

platform :ios, '9.0'
use_frameworks!
inhibit_all_warnings!

target 'MyApp' do
    pod 'Firebase'
    pod 'Firebase/Auth'
    pod 'Firebase/Database'
    pod 'Firebase/Storage'

    target 'MyAppTests' do
        inherit! :search_paths
    end
end

अपने XCTest वर्ग में मुझे मिलता है

गुम आवश्यक मॉड्यूल 'फायरबेस'

पर त्रुटि @testable import MyApp

वैकल्पिक रूप से इस पॉडफाइल के साथ:

platform :ios, '9.0'
use_frameworks!
inhibit_all_warnings!

def common_pods
    pod 'SwiftyTimer'
    pod 'Firebase'
    pod 'Firebase/Auth'
    pod 'Firebase/Database'
    pod 'Firebase/Storage'
end

target 'MyApp' do
    common_pods
end

target 'MyAppTests' do
    common_pods
end

परीक्षण का निर्माण होता है लेकिन मेरा कंसोल चेतावनियों से भरा होता है जैसे:

क्लास <-FirebaseClassName-> दोनों में लागू किया गया है ... MyApp ... और ... MyAppTests ... दोनों में से एक का उपयोग किया जाएगा। कौन सा अपरिभाषित है


मैं केवल Firebase Analytics का उपयोग कर रहा था। Google विश्लेषिकी में जाने के बाद सब कुछ एक आकर्षण की तरह काम करता है।
मैरोसैई

मैंने अभी तक उसका स्वयं प्रयास नहीं किया है, लेकिन मैं फायरबैस को मैन्युअल रूप से कोको फली का उपयोग न करने का प्रयास करने का प्रयास कर सकता हूं: firebase.google.com/docs/ios/setup#frameworks
Jonny

1
यह अभी भी एक मुद्दा है
एडवर्ड

जवाबों:


84

मेरी भी यही समस्या थी। मैंने इसे pod 'Firebase'अपने परीक्षण लक्ष्य पर ले जाकर हल किया । अपने पॉडफाइल को इसमें बदलें:

platform :ios, '9.0'
use_frameworks!
inhibit_all_warnings!

target 'MyApp' do
    pod 'Firebase/Auth'
    pod 'Firebase/Database'
    pod 'Firebase/Storage'

    target 'MyAppTests' do
        inherit! :search_paths
        pod 'Firebase'
    end
end

धन्यवाद, लेकिन मैंने अभी भी कोशिश की है और मेरे पास अभी भी "क्लास ... दोनों में लागू है ..." मुद्दा है।
प्रात:

1
इसने मेरे लिए काम किया लेकिन यह अभी भी मेरे लिए मायने नहीं रखता है। यह पहली बार नहीं है जब मैं बता सकता हूं कि फायरबेस अपने पॉडसेप्स को अजीब तरह से स्थापित कर रहे हैं, सीएफ। twitter.com/dirtyhenry/status/836240557311684608 लेकिन फायरबेस टीम जवाब नहीं देती :(
डर्टी हेनरी

4
यह परिवर्तन करने से चेतावनी तुरंत स्पष्ट नहीं हुई, लेकिन मेरे दौड़ने के बाद इसे हल किया गया pod install
ब्लविंटर्स

आधी समस्या हल हो गई। और अन्य आधे को आपके टेस्ट के लक्ष्य "$ {PODS_ROOT} / Firebase / Core / Sources" द्वारा केवल बिल्ड सेटिंग्स -> हैडर खोज पथ
ArgaPK

के बाद आप इस परिवर्तन को चलाने के लिए मत भूलना बनाने के pod installअद्यतन परियोजना निर्भरता के लिए;)
जवाद

57

विरासत को बदलने की कोशिश करें :complete:

target 'MyAppTests' do
    inherit! :complete
end

महत्वपूर्ण रूप से यह किसी और को आपके रेपो की जाँच करने की अनुमति देता है, बस फाइलों या अन्य हैकरी pod updateको कॉपी करने के लिए सामान्य रूप .xcconfigसे करना चाहिए।


1
यह भी "क्लास ... दोनों में लागू किया गया है ..." मुद्दा
डिओगो टी

इसने संकलित समय त्रुटि को गायब कर दिया, लेकिन रनटाइम पर यह एक कारण बना: क्लैंग: त्रुटि: लिंकर कमांड निकास कोड 1 के साथ विफल रहा (उपयोग -v को देखने के लिए आह्वान)
CMont

मेरे लिए भी काम किया! धन्यवाद :)
smapps

52
  1. अपने यूनिट टेस्ट लक्ष्य सेटिंग का चयन करें।
  2. बिल्ड सेटिंग्स पर जाएं।
  3. हैडर खोज पथ खोजें।
  4. इस मान को $ (SRCROOT) / पॉड्स को पुनरावर्ती के साथ जोड़ें, फिर Xcode आपके लिए मार्ग का समाधान करेगा।

उदाहरण


1
धन्यवाद @ कनिका शर्मा
राहुल के राजन

34

मुद्दा यह है कि CocasePods सेटिंग के लिए अपना मान उत्पन्न करने के बाद Firebase हैडर सर्च पाथ्स के साथ कुछ खास करता है इसलिए CocoPods इसे टेस्ट टारगेट पर ले जाने के लिए इस बदलाव को नहीं लेता है। आप इसे दो तरीकों से हल कर सकते हैं:

  1. पता लगाएँ MyAppTests.<configuration>.xcconfigफ़ाइल नाविक में और करने के लिए निम्नलिखित जोड़ने HEADER_SEARCH_PATHS:

    ${PODS_ROOT}/Firebase/Analytics/Sources [*]

  2. बिल्ड सेटिंग्स में हेडर सर्च पाथ्स के लिए सेटिंग खोजें और सूची में विकल्प 1 के समान मूल्य जोड़ें। आपको इसे पुनरावर्ती के रूप में सेट करने की आवश्यकता नहीं है।

* AKM की टिप्पणी के अनुसार, यह ${PODS_ROOT}/Firebase/Core/Sourcesसंस्करण 3.14.0 में बदल गया


कोशिश की, लेकिन अभी भी एक ही चेतावनी मिल रही है
doovers

8
Firebase 3.14.0 के रूप में, यह समाधान मान्य है, हालांकि पैच को बदल दिया गया${PODS_ROOT}/Firebase/Core/Sources
AKM

1
नया रास्ता मेरे लिए भी काम कर गया! मैं CocoaPods संस्करण 1.2.0 चला रहा हूं , लेकिन ध्यान रखें कि मुझे inherit! :search_pathsटेस्ट टारगेट में भी जोड़ना था Podfile
पाउलो मटोस

2. मेरे लिए काम नहीं करता है। फायरबेस 3.x (नवीनतम 4.x नहीं) का उपयोग करना
जॉनी

इस मुद्दे का पालन यहां किया जा सकता है: github.com/firebase/firebase-ios-sdk/issues/58
CMont

7

इससे पहले कि मैं काम कर पाता तीन कदम:

कोकोआपोड्स: 1.5.0 स्विफ्ट 4 फायरबेस: 4.13.0

चरण 1: निम्नलिखित लक्ष्य ब्लॉक को अपने पॉडफाइल में जोड़ना सुनिश्चित करें।

# Uncomment the next line to define a global platform for your project
platform :ios, '11.3'

target 'TIMII' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!

# Pods for TIMII
pod 'Firebase/Core'
pod 'Firebase/Database'
pod 'Firebase/Auth'
pod 'Firebase/Storage'

    target 'TIMIITests' do
        inherit! :search_paths
        pod 'Firebase/Core'
    end

end

चरण 2: YourAppTests प्रोजेक्ट नेविगेटर बिल्ड सेटिंग्स टैब के भीतर। शीर्ष लेख खोज पथ पंक्ति को ढूँढें और निम्न पंक्ति को डीबग करें

$ (विरासत में मिली) $ {PODS_ROOT} / फायरबेस / कोर / स्रोत

चरण 3: टर्मिनल रन में:

फली अद्यतन


7

समस्या यहां फायरबेस प्रोजेक्ट में दर्ज है:

https://github.com/firebase/firebase-ios-sdk/issues/58

वर्कअराउंड है:

अपने टेस्ट लक्ष्य के लिए "$ {PODS_ROOT} / Firebase / Core / Sources" केवल बिल्ड सेटिंग्स -> हैडर खोज पथ के अंतर्गत जोड़ें

लेकिन यह भी कोकोआ 1.4.0 या बाद में अपग्रेड करके तय किया गया है, जो एक बेहतर उपाय है।

जिस समय मैं यह लिख रहा हूँ (नवंबर 2017) cocoapods 1.4.0 अभी भी बीटा में है, इसलिए इसे स्थापित करने के लिए आपको बीटा को स्पष्ट रूप से अनुरोध करने की आवश्यकता है:

gem install cocoapods --pre

यह और फिर pod installमेरे परीक्षणों को चलाने वाली समस्या को हल करना।


1
यह "PODS_ROOT" क्या है ??
ArgaPK

@ArgaPK यह एक वैरिएबल है जो कोकोपोड्स सेट करता है। बस वही लिखें जो मैंने Xcode में "" के बीच लिखा था। वास्तव में सबसे अच्छा तरीका है कि आप अपने कोकोपॉड्स को> = 1.4.0 पर अपग्रेड करें।
जोसेफ

1
@ जोसेफ ने 1.5.2 पर मेरे कोकोपॉड्स को अपडेट किया, दुर्भाग्य से समस्या हल नहीं हुई।
स्टेसी स्मिथ

@AnastasiaKovaleva क्या आपने pod installअपग्रेड करने के बाद चलाया ?
जोसेफ

@ जोसेफ रनिंग pod installने मेरी समस्या हल कर दी! आपका बहुत बहुत धन्यवाद!
स्टेसी स्मिथ

4

मेरे लिए समाधान 1.1.0.rc.2 संस्करण के लिए कोकोपीड्स को अपडेट करना था।

sudo gem install cocoapods --pre


दुर्भाग्य से यह मेरे लिए काम नहीं करता है ... मुझे अपना उत्थान वापस लेना है!
जेब

क्षमा करें यह तुम बाहर लोगों की मदद नहीं की, यकीन नहीं क्यों यह मेरे लिए समस्या हल नहीं है और आप ...
doovers

मैं १.२० पर हूं और कोई किस्मत नहीं
यूकेडॉटगीक

4

मैंने उपरोक्त सभी की कोशिश की और विभिन्न विभिन्न त्रुटियों में भाग गया, मूल रूप से शुरू हो रहा है Missing required module 'Firebase', फिर हो रही है "Class ... is implemented in both ... "या लिंकर मुद्दों अगर मैंने अपने परीक्षण लक्ष्य में फायरबेस पॉड्स को जोड़ने की कोशिश की।

समाधान जो मेरे लिए काम करता था:

  1. पूरी तरह से पॉडफाइल से टेस्ट टारगेट निकालें और XCode प्रोजेक्ट को सिंक करने के लिए 'पॉड अपडेट' चलाएं।
  2. मेरे परीक्षण लक्ष्य का निर्माण सेटिंग्स खोलें और केवल 3 आइटमों को शामिल करने के लिए हेडर खोज पथ अपडेट करें:
    • $(inherited) non-recursive
    • $(SRCROOT)/Pods/Headers/Public recursive
    • $(SRCROOT)/Pods/Firebase recursive

इस बिंदु पर बिल्ड फोल्डर को साफ करना, फिर से निर्माण करना, मेरे लिए काम किए गए परीक्षणों को फिर से चलाना। आशा है कि यह किसी की मदद करता है!


इस धागे पर बाकी सब कुछ करने की कोशिश करने के बाद - यही एकमात्र जवाब था जो मेरे लिए काम कर रहा था। धन्यवाद!
अली पारा

4

${SRCROOT}/Pods/Firebase/CoreOnly/Sourcesइकाई परीक्षण लक्ष्य में "हेडर खोज पथ" को जोड़ना समस्या को तय करता है। कदम:

  1. अपने इकाई परीक्षण लक्ष्य का चयन करें
  2. बिल्ड सेटिंग्स पर जाएं
  3. हेडर खोज पथ के लिए खोजें
  4. जोड़े $ {SRCROOT} / फलियाँ / Firebase / CoreOnly / सूत्रों का कहना है

यहां छवि विवरण दर्ज करें

इसके बाद परीक्षण चल सकते हैं और त्रुटि गायब हो जाएगी।


2

मुझे भी ऐसी ही समस्या का समाधान करना पड़ा था। आपके प्रश्न के संदर्भ में, मैंने अपनी MyApp.<configuration>.xcconfigफ़ाइल की सामग्री को अपनी फ़ाइल में कॉपी कर लिया है MyAppTests.<configuration>.xcconfig। मैंने साफ किया और परीक्षणों का निर्माण किया, और यह काम किया।


यह एकमात्र समाधान था जिसने मेरे लिए काम किया। धन्यवाद! मैं एक पोस्ट करने के बारे में सोच रहा हूँ कि यह करने के लिए पॉडफाइल में एक पोस्ट इन्स्टॉल प्रोसेसिंग है
SauloT

1

जोड़ें "$ {PODS_ROOT} / Firebase / कोर / सूत्रों का कहना है" अपने टेस्ट के लिए केवल के तहत लक्षित कर सेटिंग बिल्ड -> हैडर खोजें पथ


यह क्या है ? PODS_ROOT
ArgaPK

यह फली के लिए निर्देशिका
लाएगा

1

जैसा कि कोकिलोपॉड इंस्टॉलेशन के बाद @ill ने हेडर सर्च पाथ्स के आसपास एक समस्या का उल्लेख किया ।

मेरे पास कई लक्ष्यों के साथ एक परियोजना है जहां पॉड 'फायरबेस' अलग मॉड्यूल में एम्बेडेड है, जो कहता है MyProject-Shared । 'पॉडफाइल' में फायरबेस पॉड केवल 'MyProject- साझा' लक्ष्य के लिए स्थापित किया गया था। अन्य मॉड्यूल, जो 'MyProject-Shared' का उपयोग करना चाहते हैं, उन्हें एक त्रुटि के कारण संकलित नहीं किया जा सकता है:

'लापता आवश्यक मॉड्यूल "फायरबेस"

मेरे मामले में चाल प्रत्येक लक्ष्य की अनुपलब्ध हेडर खोज पथ को एनालिटिक्स-फ्रेमवर्क के संदर्भ में बिल्ड सेटिंग्स को जोड़ने के लिए थी :

"${PODS_ROOT}/Firebase/CoreOnly/Sources"

कृपया नीचे तस्वीर देखें: हैडर खोज पथ

आशा है कि यह आपका समय बचाएगा।


1

एक सरल विधि जो भी काम करती है:

target 'MyApp' do
    pod 'Firebase/Auth'
    pod 'Firebase/Database'
    pod 'Firebase/Storage'

    target :MyAppTests
end

0

Missing required module Firebase कोई कोकोपोड्स घोल नहीं

जो लोग एक ही समस्या का सामना करते हैं, लेकिन कोकोआपोड्स का उपयोग नहीं कर रहे हैं:

यदि आप फायरबेस का उपयोग कर रहे हैं, तो आपके पास कुछ फ़ोल्डर युक्त Firebase.hऔर module.modulemapफ़ाइल है। उदाहरण के लिए -YOUR_PROJECT_DIR/Linking

यदि आपका मुख्य प्रोजेक्ट लक्ष्य सही तरीके से काम कर रहा है, तो आपको प्रोजेक्टसेटिंग -> लक्ष्य पर जाना चाहिए। परीक्षण लक्ष्य चुनें। के लिए User headersपथ खोजें और जोड़ें YOUR_PROJECT_DIR/Linkingrecursiveविकल्प चुनें और आपको जाना अच्छा होना चाहिए।

अधिक विवरण के लिए स्क्रीनशॉट देखें:

यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.