NSLog के साथ iOS 8 एक्सटेंशन को कैसे डिबग करें?


90
- (void)viewDidLoad
{
    NSLog(@"%s", __func__);
    // ...
}

में viewDidLoadएक iOS 8 का विस्तारNSLogXcode में आउटपुट कुछ भी नहीं। NSLogकंटेनर ऐप में हमेशा की तरह काम करता है।

मैं एक्सटेंशन से डिबग संदेशों से आउटपुट कैसे प्राप्त कर सकता हूं?


मेरे पास भी यह मुद्दा है। शायद NSLog सिर्फ टूट गया है। मैं इस समय मूल्यों को डीबग करने के लिए ब्रेकप्वाइंट का उपयोग करता हूं। लेकिन वे वास्तव में छोटी गाड़ी भी हैं।
गैलिलियो

मेरे पास एक ऐसा ही मुद्दा है जहां डिबगर कभी भी पीछे नहीं हटता है और हमेशा कहता है कि "एक्सकोड में" अटैच करने का इंतजार कर रहा है। दुर्भाग्य से मुझे गोलगप्पे से कोई फायदा नहीं होता है और स्टैक पर एक प्रश्न पोस्ट किया है जिसका अभी तक कोई जवाब नहीं है।
एलेक्स बोल्बाच जूल

जवाबों:


95
  1. डिबगिंग ऐप एक्सटेंशन के लिए काम करता है।
  2. यह सिम्युलेटर पर भी काम करता है।
  3. यदि आपका ऐप सिम्युलेटर में दुर्घटनाग्रस्त हो जाता है, तो आप पा सकते हैं कि आपके ऐप को फिर से शुरू करना आसान नहीं है। अपने सिम्युलेटर को फिर से शुरू करना एक त्वरित समाधान है।
  4. एप्लिकेशन एक्सटेंशन को डीबग करने के चरण:

    1. कंटेनर ऐप चलाएं। इस चरण में, Xcode कंटेनर ऐप और ऐप एक्सटेंशन को डिवाइस या सिम्युलेटर पर अपलोड करता है।

    2. कंटेनर ऐप बंद करें। यह कदम महत्वपूर्ण है जब आप सिम्युलेटर में डीबग करते हैं। यदि आप ऐसा नहीं करते हैं, तो Xcode आपको बताएगा कि सिम्युलेटर उपयोग में है।

    3. Xcode में, प्रेस मेनू डिबग -> प्रक्रिया से संलग्न -> प्रक्रिया पहचानकर्ता (पीआईडी) या नाम से ..., एप्लिकेशन एक्सट्रा आइडेंटिफ़ायर को इनपुट करें, जैसे com.abc.ContainerApp.MyExtension, डीबगिंग शुरू करने के लिए। ब्रेक पॉइंट सेट करना न भूलें। (25 अगस्त 2014 को अपडेट करें: आप सीधे MyExtension (आपके एक्सटेंशन का नाम) पर इनपुट कर सकते हैं।)

    4. डिवाइस या सिम्युलेटर में, अपना ऐप एक्सटेंशन खोलें।


23 अगस्त 2014 को अपडेट:

मैंने पाया कि डिबगिंग के कदम एक्सकोड 6 बीटा 6 पर आईओएस 8 एसडीके बीटा 5 के साथ सिम्युलेटर पर अच्छी तरह से काम नहीं करते हैं।

उपाय:

  1. सिम्युलेटर में अपना एक्सटेंशन चलाएं।
  2. Xcode मेनू डिबग -> प्रक्रिया से संलग्न करें -> मेनू में सिस्टम अनुभाग में "MyExtension (आपके एक्सटेंशन का नाम)" चुनें।

ब्रेकप्वाइंट काम करते हैं। लेकिन मुझे नहीं पता कि आउटपुट विंडो में लॉग क्यों नहीं दिखाए जाते हैं।


8
अब तक डिबग करने का सबसे आसान तरीका (और NSLog देखें) मैंने पाया है कि इस चरण का अनुसरण कर रहा है: /// 1 /// एक कंटेनर एप्लिकेशन स्कीमा चुनें और इसे चलाएं। /// 2 /// एक बार इसके ऊपर और चलने के बाद - XCode पर वापस जाएं और (बिना स्टॉप बटन दबाए) एक एक्सटेंशन स्कीमा चुनें, फिर रन बटन दबाएँ। /// 3 /// जब ऐप को चलाने के लिए चुनने के लिए कहा जाए, तो आज का चयन करें। /// 4 /// अब ब्रेकप्वाइंट और NSLog को बिना किसी समस्या के काम करना चाहिए।
बाधित

1
यह आज भी काम नहीं कर रहा है, खासकर एक दुर्घटना के बाद। यह बहुत कष्टप्रद है, मुझे समझ नहीं आता कि इसे ठीक करना इतना कठिन क्यों है।
क्रिस्टी बालू

3
मैंने ऊपर दिए गए अद्यतन निर्देशों का उपयोग करने की कोशिश की और यह मेरे लिए काम कर गया। हालाँकि, चरण 2 में, अपने एक्सटेंशन नाम का उपयोग करने के बजाय, मैंने "बाय प्रोसेस आइडेंटिफ़ायर (पीआईडी) या नाम ..." का उपयोग किया और प्रक्रिया के पृष्ठ में प्रवेश किया। इसने जादुई रूप से मुझे अपने ब्रेक पॉइंट का उपयोग करने की अनुमति दी।
tony.tc.leung

डीबग> पीआईडी ​​या नाम से प्रोसेस करने के लिए अटैच करें: टेक्स्ट फील्ड में डीबग नेवीगेटर में प्रोसेस नाम दर्ज करें। com.company.AppName.AppName-ExtensionName
टाइगरकोडिंग

यह उत्तर प्रश्न के लिए प्रासंगिक नहीं है। OP पूछ रहा है कि NSLog संदेशों को कंसोल में विस्तार (एक वैध चिंता के रूप में मैं इस प्रश्न के साथ इस पृष्ठ पर आया था) को क्यों नहीं लिखा गया है। उन्होंने डिबगर से जुड़े मुद्दों के बारे में कुछ नहीं बताया।
जॉय कार्सन

49

मुझे भी यह समस्या हो रही है। यह मेरे लिए काम करता है अगर आप अपने सिम्युलेटर में मेनू डिबग के तहत जाते हैं -> ओपन सिस्टम लॉग ...

यहां से आप iPhone सिम्युलेटर के सभी लॉग देख सकते हैं (इसमें आपके एक्सटेंशन के लॉग शामिल हैं)।

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


यह "~ / लाइब्रेरी / लॉग / कोरसिमुलेटर / <DEVICE_IDENTIFIER> /system.log" खोलेगा, ताकि आप आसानी से अपने अन्य सिम्युलेटर उपकरणों के सभी लॉग वहां पा सकें, बस <DEVICE_IDENTIFIER> को सिम्युलेटर डिवाइस आईडी
Hofi

32

NSLog काम कर रहा है पूरी तरह है

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

एक्सटेंशन में संलग्न करने के लिए मुझे Xcode प्राप्त करने में विभिन्न सफलता मिली है। माना जाता है कि यह स्वचालित रूप से संलग्न होगा, और यह डिबग नाविक में "प्रतीक्षा करने के लिए संलग्न" के रूप में प्रकट होता है, लेकिन कभी संलग्न नहीं होता है।

कभी-कभी, मैं Xcode में अपना एक्सटेंशन लक्ष्य चलाने में सक्षम हूं:

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

और फिर मेरे एक्सटेंशन को चलाने के लिए किस एप्लिकेशन को चुनने का विकल्प है। इस मामले में, मैं "आज" की अपनी सिफारिश चुनूंगा, जो अधिसूचना केंद्र है।

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

और फिर यह कभी-कभी डिबगर को मेरे एक्सटेंशन से जोड़ देगा। ध्यान दें कि यह विधि केवल भौतिक उपकरणों पर काम करती है, ऐसा लगता है।

यदि यह संलग्न नहीं करता है तो आप @ VinceYaun के उत्तर में मैनुअल अटैचमेंट विधि का उपयोग कर सकते हैं,

मुझे लगाव के अन्य तरीकों का उपयोग करके भी अलग-अलग सफलता मिली है। अधिकांश असफल रहे हैं, और ऐसा लगता है कि वे सिर्फ बग हैं जो बाद की तारीख में तय किए जाएंगे।

अपने लॉग संदेशों को देखने के लिए आप शीर्ष बार में Window-> Devicesपर जाएँ और अपना डिवाइस चुनें। आप उस विंडो के नीचे से डिवाइस लॉग ला सकते हैं। यदि आप एक सिम्युलेटर पर परीक्षण कर रहे हैं, तो आप @ BalestraPatrick के उत्तर का उपयोग कर सकते हैं

कुछ कीड़े बीटा 2 में तय किए गए हैं, और मेरा अनुमान है कि अंततः डिबगर विस्तार शुरू करते समय स्वचालित रूप से संलग्न होगा।

अपडेट: iOS 8 बीटा 4 में जारी नोट :

एक्सटेंशन

बीटा 4 में तय किया गया

  • एक्सकोड से डिबगिंग के समय एक्सटेंशन्स कभी-कभी लॉन्च करने में विफल रहते हैं।
  • जब यूआई के साथ एक्सटेंशन को मार दिया जाता है, तो यह स्थानांतरित हो जाता है और खारिज नहीं किया जाता है।
  • कभी-कभी आपका शेयरिंग या एक्शन एक्सटेंशन लटक सकता है।
  • किसी एक्सटेंशन को Redeploy करने से वह Notification Center में अक्षम हो सकता है।

क्या आपने स्टोरेज एक्सटेंशन के लिए एक ही दृष्टिकोण की कोशिश की?
SRP-Achiever

इसने मेरे लिए Xcode 6 बीटा 2 में काम नहीं किया, लेकिन विंस युआन ने जवाब दिया। दुर्भाग्य से, Xcode 6 बीटा 3 एक्सटेंशन डिबगिंग में मेरे लिए बिल्कुल भी काम नहीं करता है। मुझे उस समस्या का हल नहीं मिला, शायद हमें अगली रिलीज़ का इंतज़ार करना होगा।
दाररस्की

@Darrarski मेरा जवाब बीटा 1 से बचा हुआ है। FYI करें, बीटा 3 बाहर है इसलिए आप अब तक उस पर होना चाहिए।
सांता क्लॉज

@SantaClaus बहुत स्पष्ट। मेरी टिप्पणी यह ​​सूचित करने के लिए थी कि दिए गए समाधानों में से कोई भी मेरे लिए Xcode 6 बीटा 3 में काम नहीं करता है। ऐसा लगता है कि इस रिलीज़ में एक्सटेंशन डीबगिंग और भी अधिक टूटी हुई है। आशा करते हैं कि अगला बीटा समस्या को ठीक करेगा।
दर्र्सकी

3
उन बगों में से कोई भी मुझे बीटा 4 (अब बीटा 5) में तय नहीं दिखता था।
मैट

18

मुझे भी यह समस्या हो रही है। Xcode कभी भी मेरे डिबगर को एक्सटेंशन से नहीं जोड़ता है या NSLog संदेशों को प्रदर्शित करता है। यदि आप अपने एक्सकोड डिबगर को अपनी विस्तार प्रक्रिया में मैन्युअल रूप से संलग्न करते हैं, तो कम से कम ब्रेकप्वाइंट एक आकर्षण की तरह काम करते हैं:

Debug->Attach to process->Your extension name (mine was "com.example.MyExtensionApp.MyExtension")

5
मैंने इसके साथ किस्मत को मिलाया है।
सांता क्लॉज

2
अपवोट, लेकिन हमेशा काम नहीं करता है, आशा है कि सेब भविष्य के रिलीज में एक्सटेंशन के लिए डिबगर को स्वचालित रूप से संलग्न कर सकता है।
जिंग

14
  1. अपने विस्तार के लिए योजना बनाएं
  2. योजना चलाएं
  3. एक संवाद में कंटेनर एप्लिकेशन चुनें
  4. का आनंद लें

यह मेरे लिए काम करता है :)


यह वही है जो मुझे चाहिए था
pob21

1
NSLogकेवल तभी काम करेंगे जब आप कंटेनर ऐप चला रहे हों। यह नहीं होगा आप कंटेनर के बजाय एप्लिकेशन-विस्तार चला रहे हैं काम करते हैं।
JaredH

यह मेरे लिए भी काम किया। धन्यवाद, Maciek Czarnik! उपरोक्त समाधानों ने मेरे लिए काम नहीं किया। मैं Xcode 8.1 का उपयोग कर रहा हूं।
plam4u

5

Xcode 8 एक्सटेंशन डिबग करने में सक्षम है:

  1. स्टॉप बटन के बगल में कॉम्बो में विस्तार योजना चुनें और इसे चलाएं।
  2. प्रकट होने वाले संवाद में मूल एप्लिकेशन का चयन करें।

परिणाम: ब्रेकप्वाइंट और लॉग काम हमेशा की तरह।


2
आज के विस्तार के मेरे मामले में काम नहीं कर रहा। CLANG त्रुटि: ld: पुस्तकालय नहीं मिला -lRPush क्लैंग के लिए: त्रुटि: लिंकर कमांड निकास कोड 1 के साथ विफल हुआ (उपयोग -v को देखने के लिए आह्वान)
बैडमिंटनकैट

यह एक असंबंधित त्रुटि है। आप एक लापता लाइब्रेरी से लिंक करने का प्रयास कर रहे हैं। अपने लक्ष्य में लाइफ़रे-पुश जोड़ें।
Jano

4

माइकल के सुझाव और ऐप्पल के दस्तावेज़ीकरण के आधार पर मुझे आखिरकार डिबगिंग क्षेत्र में लॉग देखने की अनुमति किसने दी :

सिम्युलेटर में एप्लिकेशन एक्सटेंशन बनाएं और चलाएं, जब मेजबान ऐप के लिए संकेत दिया जाता है, तो उस विशिष्ट ऐप को चुनें , जिसे आप एक्सटेंशन से कॉल करने जा रहे हैं । मेरे मामले में मैं एक पीडीएफ पर एक शेयर शीट खींचकर सफारी से अपना एक्शन एक्सटेंशन लॉन्च कर रहा था।

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

Apple के दस्तावेज़ से:

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


1

मुझे वास्तव में Xcode 6.3 में काफी सरलता से चलाने के लिए लॉग मिला। सबसे पहले, युक्त ऐप बनाएं और चलाएं। एक बार युक्त ऐप डिवाइस पर चल रहा है, तो स्कीम को ऐप एक्सटेंशन में बदलकर ऐप एक्सटेंशन बनाएं और चलाएं।

Apple के पास आपके ऐप एक्सटेंशन के डिबगिंग, प्रोफाइलिंग और परीक्षण से सीधे संबंधित दस्तावेज हैं।


1

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

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


1

मेरे लिए डिबगिंग का एकमात्र तरीका डीबग का चयन करके है-> पीआईडी ​​या नाम से प्रक्रिया को संलग्न करें फिर पीआईडी दर्ज करें न कि एक्सटेंशन नाम। आप एक डिवाइस पर एक्सटेंशन चलाकर पीआईडी ​​पा सकते हैं, विंडो-> डिवाइसेस पर जाएं। अपना उपकरण ढूंढें और कंसोल देखें। जब आप अपने एक्सटेंशन का नाम देखते हैं, तो उसके बाद 5 अंकों की संख्या होती है। वह पीआईडी ​​है

मैंने विस्तार में NSLog का एक गुच्छा भी रखा ताकि PID को भी खोजा जा सके। यह xCode 7 पर है


1

विस्तार के लिए एक ही समस्या का सामना करें NSLog, और अंक तोड़ें। मैंने कई दिनों तक इसका मुकाबला किया।

Device logनिम्नलिखित छवि के रूप में पाया जा सकता है। यह उस परXCode -> Window -> Devices and Simulators

प्रवेश करने के बाद Open Console, संवाद के शीर्ष-दाईं ओर एक खोज फ़ील्ड है। मैं वहाँ में फ़िल्टर नियम लागू कर सकता हूँ। उदाहरण के लिए, एक प्रक्रिया नाम में Notificationकुंजी शब्द होता है, या प्रक्रिया का नाम एक्सटेंशन लक्ष्य के नाम के बराबर होना चाहिए, उदा: MyNotificationServiceExtensionप्रक्रिया नाम के बराबर ।

डिवाइस लॉग


0

स्पष्ट रूप से Xcode6-B5 में कुछ टूट गया है।

अगर मैं सिम्युलेटर पर एक फोटो एक्सटेंशन चलाने की कोशिश करता हूं तो मैं एक्सटेंशन संलग्न करने की प्रक्रिया के लिए विकल्प के रूप में किसी भी Photos.app को नहीं देख सकता हूं।

सिम्युलेटर के भीतर डिबग विकल्प

वही, वास्तविक डिवाइस पर चल रहा है, मुझे सही व्यवहार दें।

एक असली डिवाइस के साथ डिबग विकल्प

पहले मामले में किसी भी ब्रेकपॉइंट का सम्मान नहीं किया जाता है। उत्तरार्द्ध मामले में, ब्रेकप्वाइंट एक आकर्षण की तरह काम करते हैं।


0

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

आप ज्यादातर समस्याओं का समाधान @ विंस युआन की विधि से कर सकते हैं।

हालाँकि, मेरी समस्या यह है कि Xcode डिबगर शायद ही आईओएस सिम्युलेटर और डिवाइसेस दोनों पर मेरे कीबोर्ड एक्सटेंशन पर हुक करता है, जैसे 7-8 रनों में 1 बार, यह पूरी तरह से संभावना की बात है। @ विंस युआन की विधि भी कभी-कभी काम करती है।

मेरा छोटा सा अनुभव यह है कि जब आप डिबग स्कीम चलाते हैं, अगर लेफ्ट पैनल में डिबग सेशन यह दर्शाता है कि 'नो डिबग सेशन' नहीं है, तो आपके एक्सटेंशन को खोलने और इसे टेस्ट करने की कोई आवश्यकता नहीं है, डिबगर ने हुक नहीं लगाया, बस चलाएं फिर से भाग्यशाली के लिए

लेकिन जब आप com.xxx.xxx.xxx देखते हैं तो अटैच होने का इंतजार होता है, एक्सटेंशन निश्चित रूप से डीबग हो सकता है।

यह एक छोटी सी चाल है जिसके लिए iOS एक्सटेंशन, विशेष रूप से कीबोर्ड एक्सटेंशन को डिबग नहीं किया जा सकता है।


0

Xcode 6 बीटा 5 के रूप में, मैं अपने एक्सटेंशन को डीबग करने के लिए iOS8 चलाने वाले वास्तविक डिवाइस का उपयोग करने में सक्षम रहा हूं। इसे एक डिवाइस पर चलाने की कोशिश करें और सफारी को लॉन्च करने के लिए चुनें


0

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


0

मैं अपने विवरण को नीचे बताए गए तरीके से डीबग कर सकता हूं:

  1. Xcode : Debug-> Attach to process by PID or Name। आपकी विस्तार योजना का नाम।
  2. फिर अपना चयन करें main app targetऔर चलाएं।

मुझे उम्मीद है कि यह आप लोगों के लिए भी काम करेगा।

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