2012-09-24 26 views
36

कमांड लाइन के माध्यम से मेरे यूनिट परीक्षण चलाते समय एक्सकोड 4.5 को अपडेट करने के बाद से कोई समस्या है। निम्नलिखित उत्पादन जब मैं अपने परीक्षणएक्सकोड 4.5 कमांड लाइन यूनिट परीक्षण

Unknown Device Type. Using UIUserInterfaceIdiomPad based on screen size 
Terminating since there is no workspace. 
/Applications/Xcode.app/Contents/Developer/Tools/RunPlatformUnitTests.include:334: note: Passed tests for architecture 'i386' (GC OFF) 

/Applications/Xcode.app/Contents/Developer/Tools/RunPlatformUnitTests.include:345: note: Completed tests for architectures 'i386' 

चलाने का प्रयास मैं दिखाई दे रही है भले ही यह कहना है परीक्षण पारित कर दिया और पूरा कर लिया है, मुझे नहीं लगता कि वे वास्तव में किया गया है चलाने के लिए है।

मैं परीक्षण चलाने के लिए निम्न आदेश का उपयोग कर रहा xcodebuild -workspace MyApp.xcworkspace -scheme MyAppTests -sdk iphonesimulator विन्यास डीबग स्वच्छ निर्माण TEST_AFTER_BUILD = हाँ

किसी को भी एक ही समस्या में पड़ गया है और पेशकश कर सकते हैं एक तरकीब?

+0

मेरे पास एक ही समस्या है, और अन्य लोग भी ऐसा करते हैं: https://github.com/gabriel/gh-unit/issues/96। अभी के लिए कोई समाधान नहीं। –

+1

मैं एक ही मुद्दे की पुष्टि कर सकता हूं। यह पहले बीटा के बाद से रहा है, लेकिन चूंकि यह "असमर्थित कार्यक्षमता" है, इसलिए ऐप्पल ने इसकी सहायता नहीं की है। मेरा समाधान वैक्ससिम का उपयोग करके लॉन्च एक अलग ओसीयूनीट/सेनटेस्ट टेस्ट धावक लिखना है। यह आंशिक रूप से लिखा गया है, लेकिन अब तक काम कर रहा है, एक बार यह – Stew

+0

समाप्त होने के बाद साझा होगा। सबसे अच्छा मैंने पाया है (फिर भी मुझे यह काम नहीं मिला है) - http://www.gerardcondon.com/blog/2012/09/20/further-jenkins-setup-code-signing/ –

उत्तर

29

बस मैं भी साझा करना चाहिए कि मैं क्या इस मुद्दे के समाधान के लिए किया था सोचा। मैंने https://stackoverflow.com/a/10823483/666943 में उल्लिखित समाधान का पालन किया लेकिन रूबी स्क्रिप्ट को खोल में परिवर्तित कर दिया। अंत में मैं मूल रूप से homebrew के माध्यम से ios-sim स्थापित किया है और निम्नलिखित के साथ अपने टेस्ट लक्ष्य की Build Phases में Run Script बदल देते हैं:

if [ "$RUN_UNIT_TEST_WITH_IOS_SIM" = "YES" ]; then 
    test_bundle_path="$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.$WRAPPER_EXTENSION" 
    ios-sim launch "$(dirname "$TEST_HOST")" --setenv DYLD_INSERT_LIBRARIES=/../../Library/PrivateFrameworks/IDEBundleInjection.framework/IDEBundleInjection --setenv XCInjectBundle="$test_bundle_path" --setenv XCInjectBundleInto="$TEST_HOST" --args -SenTest All "$test_bundle_path" 
    echo "Finished running tests with ios-sim" 
else 
    "${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests" 
fi 

परीक्षण शुरू करने के लिए अब मैं तर्क RUN_UNIT_TEST_WITH_IOS_SIM=YES उदा में पारित

xcodebuild -workspace MyApp.xcworkspace -scheme MyAppTests -sdk iphonesimulator -configuration Debug clean build RUN_UNIT_TEST_WITH_IOS_SIM=YES 
+3

मुझे हमेशा निम्न त्रुटि मिलती है: '[DEBUG] सत्र प्रारंभ नहीं किया जा सका: त्रुटि डोमेन = DTiPhoneSimulatorErrorDomain कोड = 2" सिम्युलेटर सत्र का समय समाप्त हो गया। " UserInfo = 0x7fd323c2a4a0 {NSLocalizedDescription = सिम्युलेटर सत्र का समय समाप्त हो गया।} ' – fabb

+0

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

+1

गैर, मैंने अभी जेनकींस के बिना यह कोशिश की। मैंने इसे टेस्ट स्कीम चलाकर एक्सकोड से भाग लिया (मैं कमांड लाइन से भी कोशिश करूंगा, शायद वह त्रुटि है जहां से त्रुटि आती है)। और: मेरे पास एक अलग जेनकिंस सर्वर है और नोड बनाएं। ज्यादातर मामलों में, निर्माण नोड पर 'जेनकिन्स' उपयोगकर्ता * नहीं * लॉग इन होता है। सर्वर बस एसएसएच के माध्यम से उससे जुड़ता है। यह इस हैक के साथ एक्सकोड 4.4.1 में ठीक काम करता था: http://www.raingrove.com/2012/03/28/running-ocunit-and-specta-tests-from-command-line.html – fabb

9

मैंने इस समस्या को एक्सकोड 4.5/आईओएस 6 के बीटा संस्करणों में देखा। मैं इस समस्या के आसपास काम करने के लिए एक स्टैंडअलोन यूनिट परीक्षण धावक पर काम कर रहा हूं। यह आपके यूनिट टेस्ट बंडल को संकलित करके काम करता है, फिर आपके ऐप के एक संस्करण को संकलित करता है जो स्वचालित रूप से सिम्युलेटर वातावरण में यूनिट परीक्षण चलाता है।

उपकरण किसी भी तरह से पूर्ण नहीं है, लेकिन पर्याप्त लोगों को यह समस्या होने लगती है कि मैं अभी तक उपकरण जारी कर रहा हूं। कृपया कांटा या टिप्पणी करें ताकि मैं टूल को बेहतर बना सकूं।

xcodetest: https://github.com/sgleadow/xcodetest

इसके अलावा इस मुद्दे http://openradar.appspot.com/12306879

+0

मैं पुष्टि कर सकता हूं कि स्टू का जवाब मुझे यूनिट परीक्षण चलाने में मदद करता था। – Jessedc

+0

यह काम करता है! लेकिन मुझे स्क्रिप्ट में दो 'xcodebuild' घटनाओं में' -arch i386' जोड़ना पड़ा। – fabb

+0

क्या काम नहीं करता है एक ही योजना के भीतर लाइब्रेरी सबप्रोजेक्ट से अन्य परीक्षण निष्पादित कर रहा है। – fabb

6

संस्करण 5.1 के लिए iphonesimulator स्थापना पर इस रडार पर नज़र रखने के समस्या को हल करने लगता है। इस मुद्दे पर रडार कीड़े भर गई हैं।

यह लेख भी पालन करने के लिए एक अच्छा समाधान का उल्लेख:

http://baolei.tumblr.com/post/32428168156/ios-unit-test-from-command-line-ios6-xcode4-5

+1

मैं उत्तर के आधार पर प्रदान किए गए लिंक के समान समाधान के लिए जा रहा हूं http://stackoverflow.com/a/10823483/666943। –

+0

मुझे लगता है कि आपको अभी भी यहां वर्णित 'RunPlatformUnitTests' पैच करने की आवश्यकता है? http://www.raingrove.com/2012/03/28/running-ocunit-and-specta-tests-from-command-line.html – fabb

+0

युप, RunPlatformUnitTests को पैच करना भी आवश्यक है। मेरे यहां एक नमूना है: https://github.com/victorlima/AutoBuild/blob/master/scripts/RunPlatformUnitTests.patched। अगर यह काम करता है तो मुझे बताएं। –

2

इसके अलावा वहाँ कुछ हैक है जो आईओएस 6 पर कमांड लाइन परीक्षण चलाने में मदद कर सकता है।

सबसे पहले, आप एक छोटे से अपने मुख्य फ़ाइल अद्यतन करने की आवश्यकता:: 0 सिम्युलेटर एसडीके

मैं देवदार का उपयोग कर रहा हूँ और इस ट्वीक मुझे मदद की

// Faking up that workspace port 
    CFMessagePortCreateLocal(NULL, (CFStringRef) @"PurpleWorkspacePort", NULL, NULL,NULL); 
    return UIApplicationMain(argc, argv, nil, @"CedarApplicationDelegate"); 

दूसरे, आप श्रेणी जोड़ने की जरूरत UIWindow के लिए: unittest

@implementation UIWindow (Private) 
- (void)_createContext { 
    // Doing nothing here. Just for crash avoidance 
} 
@end 

देवदार ठीक कुछ क्रम के साथ चलेंगे, चेतावनियां, लेकिन, कम से कम वे दौड़ने में सक्षम होंगे :)