@ परीक्षण का उपयोग करते समय 'मॉड्यूल को परीक्षण के लिए संकलित नहीं किया गया था


146

मैं @testableअपनी कक्षाओं को परीक्षण लक्ष्य में उजागर करने के लिए स्विफ्ट 2 की नई घोषणा का उपयोग करने की कोशिश कर रहा हूं । हालाँकि मुझे यह संकलक त्रुटि मिल रही है:

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

Intervalsवह मॉड्यूल है जिसमें वह कक्षाएं हैं जिन्हें मैं उजागर करने की कोशिश कर रहा हूं। मैं इस त्रुटि से कैसे छुटकारा पाऊं?

जवाबों:


238

अपने मुख्य लक्ष्य में आपको सेट करने की आवश्यकता है Enable Testability हां बिल्ड विकल्प ।

नीचे @earnshavian की टिप्पणी के अनुसार, इसका उपयोग केवल ऐप्पल रिलीज़ नोट्स के अनुसार डीबग बिल्ड पर किया जाना चाहिए: "सक्षमता परीक्षण सेटिंग सक्षम करें का उपयोग केवल आपके डीबग कॉन्फ़िगरेशन में किया जाना चाहिए, क्योंकि यह उन ऑप्टिमाइज़ेशन को प्रतिबंधित करता है जो आंतरिक प्रतीकों का निर्यात नहीं करने पर निर्भर करते हैं एप्लिकेशन या फ्रेमवर्क " https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid-TP40001051-CH1-SW326


नमस्ते, मैं एक ही त्रुटि हो रही है, लेकिन सक्षमता परीक्षण विकल्प नहीं देख रहा हूँ और xcode 7 का उपयोग कर रहा हूँ। कोई भी विचार जो मुझे करना चाहिए?
user1601259

2
@ user1601259 - आप शीर्ष स्तर की परियोजना का चयन करके विकल्प चुन सकते हैं, बिल्ड सेटिंग्स पर जा सकते हैं और बिल्ड विकल्प शीर्षक के नीचे देख सकते हैं।
hgwhittle

@hgwhittle - जब मैं शीर्ष स्तर की परियोजना का चयन करता हूं, तो मैं सभी बिल्ड विकल्प देखता हूं "डिबग सूचना प्रारूप" और "बिल्ड उत्पाद को मान्य करें।" जब मैं निर्माण विकल्पों में लक्ष्य का चयन करता हूं तो मैं देखता हूं "एम्बेडेड सामग्री में स्विफ्ट कोड होता है।" बस। जब मैं निर्माण सेटिंग्स में खोज करता हूं तो मुझे नहीं मिल पाता है। क्या इसकी वजह एक्सकोड 7 है?
user1601259

1
यह संभव है कि आपने अपनी "बिल्ड सेटिंग्स" में "बेसिक" का चयन किया हो। यदि आप बाईं ओर "ऑल" चुनते हैं, तो आप "एनेबल टेस्टेबिलिटी" देखेंगे
ऐरे

1
रिलीज़ बिल्ड के लिए वास्तव में यह कैसे काम करना चाहिए, जहां परीक्षण चलेंगे (इतनी आवश्यकता @testable) लेकिन ऐप स्टोर में सबमिट करने की आवश्यकता है? यदि Enable Testabilityसिर्फ डिबग बिल्ड के लिए है, तो इसके आसपास क्या तरीका है? क्या मुझे रिलीज के लिए अपना टेस्ट कोड निकालना होगा?
टाइमगर्लसन

15

मेरे मामले में मैंने परीक्षण के लिए एक कस्टम बिल्ड कॉन्फ़िगरेशन का उपयोग किया (बुलाया Test) और भीcocoapods एक निर्भरता प्रबंधक के रूप में

Podfileपरीक्षण क्षमता को सक्षम करने के लिए मुझे अपने अंत में निम्नलिखित पंक्तियों को जोड़ना था

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            if config.name == 'Test'
                config.build_settings['ENABLE_TESTABILITY'] = 'YES'
            end
        end
    end
end

डिफ़ॉल्ट रूप से केवल बिल्ड के लिए cocoapodsसेट करता हैENABLE_TESTABILITYYESDebug


13

सुनिश्चित करें कि आपने अपने ऐप स्कीम के तहत अपने चेकबॉक्स को ठीक से निर्धारित किया है। आप आर्काइव बिल्ड के लिए अपने परीक्षण के लक्ष्य को बचाएंगे

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


2
अधिक जानकारी के लिए यहां देखें: developer.apple.com/library/mac/technotes/tn2215/_index.html
P. Pawluś

8

आप में से जो केवल Xcode Profiler चलाने पर इसका अनुभव कर रहे हैं: अपनी योजना प्रबंधन में प्रोफ़ाइल निर्माण कॉन्फ़िगरेशन को उस पर ले जाएं जिसमें परीक्षण क्षमता सक्षम हो - और जो कि अधिकांश मामलों में डीबग की जाएगी:

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


4

यह संभवतः इसलिए है क्योंकि आपका मुख्य लक्ष्य Enable Testabilityनिर्धारित है NO। आपको इसे सेट करना चाहिएYES डिबग स्कीम में (जिसका उपयोग आपके परीक्षण चलाने के लिए किया जाता है)।

यदि आप कार्थेज का उपयोग करते हैं, तो यह समस्या फ्रेमवर्क के आयात के कारण हो सकती है @testable , क्योंकि वे रिलीज़ स्कीम के साथ निर्मित होते हैं।

अधिकांश बार यह उपसर्ग के साथ चौखटे आयात करने के लिए बुरा अभ्यास है, इसलिए आप इससे बच सकते हैं। यदि आप नहीं कर सकते, तो आपको Enable Testabilityफ्रेमवर्क रिलीज स्कीम में होना चाहिए । https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW326


2
मैं @testable का उपयोग करके फ्रेमवर्क आयात करने से कैसे बच सकता हूं? यहाँ अच्छा अभ्यास क्या है?
जोनाथन कैबरेरा

3

मुझे यह त्रुटि तब शुरू हुई जब बिट्रस का उपयोग करके परीक्षण चला रहा था।

विपरीत अन्य उपयोगकर्ताओं का कहना है, यह नहीं है प्रति Targetआधार, या प्रति Schemaआधार है, यह है प्रति Configurationआधार। चुनें Target-> Build Settingsटैब -> के लिए देखो testability-> इसे उस कॉन्फ़िगरेशन पर सक्षम करें जो आप उपयोग कर रहे हैं

कृपया ध्यान दें कि Apple डिबगिंग के लिए आपके द्वारा उपयोग किए जा रहे कॉन्फ़िगरेशन पर इसे सक्षम करने की अनुशंसा करता है, AppStore के लिए नहीं।


0

यदि आप फली / कार्थेज का उपयोग कर रहे हैं तो उपरोक्त समाधान ठीक है। लेकिन अगर आप आईओएस से ही 'जैसे कॉन्टेक्ट्स' के फ्रेमवर्क का उपयोग कर रहे हैं, तो आपको अपने मुख्य प्रोजेक्ट के टारगेट के 'लाइब्रेरी सर्च पाथ्स' में इन फ्रेमवर्क के लिए रास्ता जोड़ना होगा। यहाँ छवि विवरण दर्ज करें


0

यदि आप ढांचे का परीक्षण करने की कोशिश कर रहे हैं:

परीक्षण लक्ष्य पर जाएं -> चरण बनाएं -> नई कॉपी फ़ाइलें चरण बनाएं -> फ्रेमवर्क चुनें -> सभी पुनरावर्ती उपयोग किए गए फ्रेमवर्क जोड़ें


0

अगर किसी भी तरह से आपके पास है

install! 'cocoapods',
         generate_multiple_pod_projects: true,
         incremental_installation: true

फिर, यह इसे करने का तरीका है।

    # generated_projects only returns results if the we run "pod install --clean-install"
    # or install a pod for the first time

    installer.generated_projects.each do |project|
        project.build_configurations.each do |configuration|
            configuration.build_settings["ENABLE_TESTABILITY"] = "YES" 
        end
    end

-3

यह Xcode 8 से पहले की मेरी परियोजनाओं में नहीं हुआ था, लेकिन मैंने Xcode 8 में अपग्रेड करने के बाद, यह मुझे हैरान कर दिया।

यहां पोस्ट किए गए उत्तरों से मेरी समस्याएं हल नहीं हुईं। मेरे लिए, मैंने केवल इन परीक्षणों को खोद लिया क्योंकि इसकी आवश्यकता नहीं है। तो परीक्षण बटन अनचेक करें:

यहाँ छवि विवरण दर्ज करें और अब त्रुटि निकल गई है।


1
यदि आपको परीक्षणों की आवश्यकता नहीं है, तो सभी बिल्ड से उन्हें हटाने के बजाय अपने प्रोजेक्ट से परीक्षण लक्ष्यों को निकालना बेहतर हो सकता है।
जोनाथन कैबरेरा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.