2012-03-30 18 views
18

पर आईओएस ऐप डिबग करना मेरे पास कोड है जो ऐप को अपग्रेड या इंस्टॉल करने के बाद ही लॉन्च पर ट्रिगर किया गया है। मैं इस कोड को डीबग करना चाहता हूं, लेकिन ऐसा करने के तरीके के बारे में सोच नहीं सकता।पहली लॉन्च

मैं ऐप लॉन्च नहीं कर सकता क्योंकि यह मौजूदा ऐप को ओवरराइट करेगा और अपडेट को ट्रिगर नहीं करेगा।

मैं मैन्युअल रूप से प्रक्रिया में एक्सकोड संलग्न नहीं कर सकता क्योंकि जिस कोड को मैं डीबग करना चाहता हूं, वह उस समय तक निष्पादित होगा जब मैं एक्सकोड संलग्न करता हूं।

क्या यह इस बात को दूर करने का कोई तरीका है कि मुझे याद आ रही है?

+0

रोलबैक/रिवर्ट प्रबंधित करने के लिए आप स्नैपशॉट्स या वर्जन कंट्रोल का उपयोग नहीं कर सकते हैं, इसलिए "मौजूदा ऐप ओवरराइटिंग" के साथ कोई चिंता नहीं है? – rwyland

+0

यदि आप नहीं चाहते हैं कि यह आपके मौजूदा उत्पाद को एक्सकोड में ओवरराइट करें, तो आप हमेशा प्रोजेक्ट फ़ोल्डर की प्रति बना सकते हैं और उस से काम कर सकते हैं। – John

उत्तर

39

"लॉन्च करने के लिए MyApp.app के लिए प्रतीक्षा करें" विकल्प का उपयोग करें।

एक्सकोड में, विकल्प कुंजी दबाए रखें और उत्पाद-> चलाएं ... चुनें (जब आप विकल्प नीचे रखते हैं तो लंबवत जोड़े जाते हैं)। यह रन योजना के साथ योजना संपादक लाएगा। इन्फो टैब पर क्लिक करें, और परिणामी जानकारी पैनल पर आपको दो विकल्प के साथ "लॉन्च" लेबल वाला एक रेडियो समूह दिखाई देगा: "स्वचालित रूप से" और "लॉन्च करने के लिए MyApp.app के लिए प्रतीक्षा करें"। यदि आप दूसरा विकल्प चुनते हैं, तो एक्सकोड डीबगर शुरू करेगा और आपके एप्लिकेशन को मैन्युअल रूप से लॉन्च करने का इंतजार करेगा। आप उस कोड की शुरुआत में ब्रेकपॉइंट सेट कर सकते हैं, जिसे आप डिबग करना चाहते हैं, और डीबगर वहां रुक जाएगा।

ऐप को अपने पिछले राज्य में रीसेट करें।

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

यूनिट परीक्षण।

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

+1

संपूर्ण प्रतिक्रिया के लिए धन्यवाद! मेरी समस्या यह थी कि जब डीबगिंग करते हैं, तो एक्सकोड अनिवार्य रूप से डिवाइस पर ऐप का एक नया संस्करण धक्का देता है, और मुझे अद्यतन प्रक्रिया को एक मनमाना संस्करण से वर्तमान संस्करण में परीक्षण करने की आवश्यकता होती है।अंत में मैंने स्रोत नियंत्रण से पुरानी शाखा को खींच लिया, डिवाइस पर स्थापित किया, और फिर सामान्य संस्करण को एक्सकोड से सामान्य रूप से चलाया। इसने मुझे अद्यतन प्रक्रिया का पालन करने की अनुमति दी। –

+0

इसके अलावा, पहले विकल्प के बारे में ... अगर मैं "प्रतीक्षा मोड" में डिबगिंग शुरू करता हूं, तो क्या मैं ऐप स्टोर या सफारी के माध्यम से डीबगर शुरू करने और ऐप लॉन्च करने के बीच ऐप अपडेट कर सकता हूं? –

+0

इसी प्रकार - मैं "दूसरा रन" का परीक्षण कैसे कर सकता हूं। मतलब मैं परीक्षण करना चाहता हूं कि ऐप बंद करने के बाद क्या होता है और इसे फिर से खोलें ... –

0

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

- (void) determineWhetherToForceSync { 
    NSString *currentVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];  
    NSString *savedVersionKey = @"savedVersionKey"; 
    NSString *savedVersion = [[NSUserDefaults standardUserDefaults] valueForKey:savedVersionKey]; 
    if (!savedVersion) { 
     //This is a fresh install.... 

    } else { 
     //They have a saved version, so check if it's the same as current version 
     if (![currentVersion isEqualToString:savedVersion]) { //They have done an upgrade    
      //This is an update 

     } //.... else they are starting the app on a second attempt 
    } 

    //Save the current version 
    [[NSUserDefaults standardUserDefaults] setObject:currentVersion forKey:savedVersionKey]; 
} 

पुन: परीक्षण करने के लिए, ऐप को हटाएं और पुनः इंस्टॉल करें। या अपना संस्करण संख्या बदलें।

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