2014-09-02 11 views
23

जैसा कि मैंने शीर्षक में कहा था, मैं आईफोन के लिए एक ऐप लिख रहा हूं जो डीबग मोड में पूरी तरह से चलता है लेकिन जब मैं इसे रिलीज के रूप में बनाता हूं और इसे टेस्टफलाइट के माध्यम से इंस्टॉल करता हूं, तो यह क्रैश हो जाता है। दुर्घटना के कारण लोग इन यह इस लाइनों के साथ कुछ करने के लिए हो सकता है:ऐप रिलीज बिल्ड में क्रैश हो गया है लेकिन डीबग

let path = NSBundle.mainBundle().pathForResource("PrinterList", ofType: "plist") 
if path != nil { 
    let printerDic = NSDictionary(contentsOfFile: path!) 
    let printerList = NSArray(array: printerDic.allKeys) 
    printerNames = printerList as [String] 
} 

मैं भाई से एक ढांचे का उपयोग कर रहा AirPrint बिना मुद्रित करने के लिए, लेकिन मुझे नहीं लगता है कि thats समस्या क्योंकि साथ कुछ कर रहा से पहले एप्लिकेशन क्रैश ढांचा। यह केवल इस व्यू कंट्रोलर में क्रैश होता है जहां मैं इन पंक्तियों को निष्पादित करता हूं। मुझे केवल इस व्यू कंट्रोलर में ढांचे की आवश्यकता है।

+7

के तहत यदि आप रिलीज निर्माण के लिए स्विफ्ट संकलक अनुकूलन बंद कर देते हैं, और इसे फिर से कोशिश करते हैं, तो आप अभी भी दुर्घटना मिलता है? (स्विफ्ट कंपाइलर/कोड जनरेशन के तहत बिल्ड सेटिंग्स में) –

+0

यदि मैं ऐसा करता हूं तो मैं इसे टेस्टफलाइट के माध्यम से इंस्टॉल नहीं कर सकता: 'अमान्य प्रोफ़ाइल: वितरण निर्माण एंटाइटेलमेंट्स को गेट-टास्क-सेट को गलत पर सेट होना चाहिए।' लेकिन मैं आईट्यून्स के साथ प्रयास करता हूं .. संपादित करें: स्थापित करने के लिए आईट्यून्स और एक्सकोड के साथ काम नहीं करता .. – Ben

+0

हाँ! इसने काम कर दिया! बहुत बहुत धन्यवाद। ताकि मेरे मन में सही जवाब – Ben

उत्तर

36

कई कारण हैं कि एक ऐप रिलीज मोड में क्रैश हो सकता है लेकिन डीबग मोड में नहीं है (उदाहरण के लिए मेमोरी आवंटन अंतर एक बग दिखा रहा है जो वास्तव में दोनों बिल्डों में मौजूद है।) वे ट्रैक करने के लिए बहुत सारे काम कर सकते हैं, यहां तक ​​कि एक गैर-बीटा संकलक/भाषा के साथ।

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

अब, इसलिए, मैं इसे देखकर रोक दूंगा। ऑप्टिमाइज़ेशन के बिना रिलीज़ करें जब तक कि हम कंपाइलर का पूर्ण रिलीज़ संस्करण प्राप्त न करें। फिर, ऑप्टिमाइज़ेशन को वापस चालू करें और देखें कि क्या आपको अभी भी समस्या है या नहीं। यदि आप करते हैं, आपकी ऊर्जा को यह पता लगाने की कोशिश कर रहा है कि यह आपके कोड में एक कंपाइलर बग या बग है या नहीं।

+0

इस महान जवाब के लिए धन्यवाद! – Ben

+1

मैं उसी तरह से था, ऐप बस डीबग मोड पर ठीक काम कर रहा था, लेकिन परीक्षण उड़ान का उपयोग करके यह दुर्घटनाग्रस्त हो गया। लेकिन अब मैंने आपकी सलाह का पालन किया और यह ठीक काम कर रहा है। आपका बहुत बहुत धन्यवाद! "यदि आप रिलीज निर्माण के लिए स्विफ्ट संकलक अनुकूलन बंद कर देते हैं, और इसे फिर से कोशिश करते हैं, तो आप अभी भी दुर्घटना (स्विफ्ट संकलक/कोड पीढ़ी के तहत निर्माण सेटिंग्स में) मिलता है?" – mizerablebr

+0

यह सुधार के लिए धन्यवाद! स्विफ्ट 1.2 अभी भी इस मुद्दे है। – werm098

7

मुझे एक ही समस्या है। अंततः whole module optimization चालू करके इसे ठीक किया गया। access control के सही कार्यान्वयन के साथ संयुक्त यह आपके क्रैश को ठीक करना चाहिए।

पूरे मॉड्यूल अनुकूलन एप्पल के अनुसार:

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

आप अपने प्रोजेक्ट सेटिंग्स में इस सक्षम कर सकते हैं:

Whole Module Optimization

लेकिन ध्यान रखें इस विकल्प को एक साथ एक लक्ष्य में फ़ाइलों के सभी का अनुकूलन और वृद्धि संकलन समय की कीमत पर बेहतर प्रदर्शन के लिए सक्षम बनाता हो।

+0

धन्यवाद, आपने मेरा सप्ताहांत बचाया। – kubilay

0

ऐप्पल एक ज्ञात issue का भी वर्णन करता है। अगर कोई उत्तर की तलाश में है और पिछला समाधान काम नहीं करता है तो मैं संक्षेप में इसका वर्णन करता हूं।

Dyld Error Message: 
    Library not loaded: @rpath/libswiftCore.dylib 

या

[....] [deny-mmap] mapped file has no team identifier and is not a platform binary: 
/private/var/mobile/Containers/Bundle/Application/5D8FB2F7-1083-4564-94B2-0CB7DC75C9D1/YourAppNameHere.app/Frameworks/libswiftCore.dylib 

तरह त्रुटियों के लिए अपने crashlog चेक करें और पालन सेब guidance अगर आप ऊपर की तरह समान दुर्घटना उत्पादन की है।

पीएस: आप एक्सकोड में विंडो -> डिवाइस के नीचे भी आसानी से लॉग की जांच कर सकते हैं। डिवाइस पर क्लिक करें और डिवाइस लॉग देखने पर क्लिक करें।

0

दुर्घटना परीक्षण को पकड़ने के लिए, डीबग मोड में सबसे तेज़, सबसे छोटे [-Os] को ऑप्टिमाइज़ेशन लेवल सेट के साथ & उपयोगकर्ता के डिवाइस पर चलने वाले कोड को अधिक बारीकी से अनुकरण करने के लिए।

आप निर्माण सेटिंग्स में सेट कर सकते हैं, स्विफ्ट संकलक/कोड जनरेशन

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