iOS 10 NSLogs को प्रिंट नहीं करता है


88

NSLogXcode 8.0 बीटा (8S128d) पर कुछ भी प्रिंट नहीं करता है । printfअपरिवर्तित है

यहाँ मेरा कोड है:

NSLog(@"hello from NSLog");
printf("hello from printf");

यहाँ iOS 9 सिम्युलेटर पर आउटपुट दिया गया है:

2016-06-17 09:49:10.887 calmapp-dev[28517:567025] hello from NSLog
hello from printf

यहां iOS 10 सिम्युलेटर पर आउटपुट दिया गया है:

hello from printf

मेरा मुद्दा भी ऐसा ही था। लेकिन iOS 8.1 में, Xcode 8. मैंने यहां हर उत्तर की जाँच की। पता चला कि मैं सब कुछ सही ढंग से कर रहा था। वास्तव में कुछ भी मदद नहीं की। इसलिए, मैंने डिवाइस को बंद कर दिया और इसे स्विच कर दिया। यह काम करता हैं। मैंने यह टिप्पणी यहाँ इसलिए लिखी ताकि इससे दूसरों को भी इसी तरह की समस्या का सामना करने में मदद मिल सके
कृष्णा

जवाबों:


229

यह हो सकता है कि आपने संपत्ति "OS_ACTIVITY_MODE" को जोड़ा: योजना पर्यावरण चर में "अक्षम" (ओएस आउटपुट को सिम्युलेटर से छिपाने के लिए) और इसके बारे में भूल गए, और अब एक वास्तविक डिवाइस पर चल रहे हैं।

Xcode 8 में:

Product -> Scheme -> Edit Scheme -> Run -> Arguments -> Environment Variables

केवल जोड़ें OS_ACTIVITY_MODEऔर इसे जांचें add मान नहीं जोड़ें (

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

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

सारांश: यह Xcode 8 + iOS10 का एक बग है, हम इसे इस तरह से हल कर सकते हैं:

  • सिम्युलेटर का उपयोग करते समय, नाम "OS_ACTIVITY_MODE" और मान "अक्षम करें" जोड़ें और इसे जांचें।

  • जब एक वास्तविक डिवाइस पर, केवल "OS_ACTIVITY_MODE" जोड़ें और इसे जांचें add मूल्य जोड़ें नहीं। आपको Xcode8 कंसोल में NSLog दिखाई देगा।


4
> "मान न जोड़ें" मैंने इसे "अक्षम" करने के लिए सेट किया है और यह काम करता है! खाली मैदान मेरे लिए काम नहीं करता है।
mBbabs

क्या आपको यकीन है कि यह असली iphone डिवाइस डीबगिंग का काम करता है, सिम्युलेटर का नहीं? अगर मैं इसे "अक्षम" करने के लिए सेट करता हूं, तो कंसोल असली iphone डिबगिंग करते समय NSLog नहीं कर सकता है।
user6833743

मैंने अब "अक्षम" के बिना जाँच की है, यह अब डिवाइस पर काम करता है, लेकिन सिम्युलेटर पर टूट गया है, यह अब सब कुछ फिर से दिखाता है ...
mqbabs

2
वहाँ वैसे भी इस प्रक्रिया को स्वचालित करने के लिए है? यह वास्तव में कष्टप्रद है कि हमें इस तरह आगे और पीछे जाना याद रखना है: /
ग्रीनहाउस

2
यह समाधान Xcode 9 से शुरू होने वाले सभी NSLog को छिपा देगा । NSLog को रखने के लिए, के disableसाथ बदलें default
कोयूर

27

यदि आप Xcode 8 बीटा रिलीज़ नोटों की जाँच करते हैं , तो आप पाएंगे कि यह कहता है:

सिम्युलेटर पर चल रहे ऐप को डीबग करते समय, कंसोल में लॉग दिखाई नहीं दे सकते हैं। समाधान: NSLogs देखने के लिए कंसोल ऐप में सिस्टम लॉग को खोलने के लिए Simulator.app में कमांड + / का उपयोग करें। (26457535)


9
मैं असली iOS 10 डिवाइस में न तो NSLog आउटपुट देख सकता हूं और न ही। यदि आप वास्तविक उपकरणों का उपयोग कर रहे हैं, तो आप डिवाइस विंडो (Shift + Command + 2) खोल सकते हैं और वहां डिवाइस लॉग देख सकते हैं, लेकिन डिबगिंग ऐप लॉग को देखना कठिन है क्योंकि कंसोल सिस्टम और ऐप से सभी लॉग दिखाता है।
कियंटक्स

19

NSlog या प्रिंट वास्तव में निष्पादित होता है, लेकिन इस मुद्दे को हल करने के लिए कई अन्य कंसोल डिबग आउटपुट के बीच छिपा हुआ है ओपन Xcode8:

Product -> Scheme -> Edit Scheme -> Run -> Arguments -> Environment Variables

"OS_ACTIVITY_MODE" जोड़ें और मान को "अक्षम करें" पर सेट करें और इसे जांचें।

पास क्लिक करें

xcode9

"OS_ACTIVITY_MODE" जोड़ें और "डिफ़ॉल्ट" मान सेट करें और इसे जांचें।

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


यह मेरे लिए काम नहीं करता है। NSLogs परिनियोजित अनुप्रयोगों के लिए नहीं दिखा। मैं iOS 10 डिवाइस के साथ xcode 8.1 (मैक 10.11 पर चलने वाला) का उपयोग करता हूं।
mobjug

21
यह समाधान Xcode 9 से शुरू होने वाले सभी NSLog को छिपा देगा । NSLog को रखने के लिए, के disableसाथ बदलें default
कोयूर

3
इस उत्तर को Xcode 9 के लिए @ Cœur के सुधार के लिए अद्यतन करने के लिए अद्यतन किया जाना चाहिए
जोएल

7

मैं असली iOS 10 डिवाइस में न तो NSLog आउटपुट देख सकता हूं और न ही। यदि आप वास्तविक उपकरणों का उपयोग कर रहे हैं, तो आप Xcode (Shift + Command + 2) से डिवाइस विंडो खोल सकते हैं और वहां डिवाइस लॉग देख सकते हैं, लेकिन आपके ऐप के लॉग को देखना कठिन है क्योंकि कंसोल सिस्टम और सभी ऐप से लॉग दिखाता है।

(मैं Xcode 7 का उपयोग कर रहा हूं, इसलिए यह Xcode की समस्या नहीं है, लेकिन iOS 10 की समस्या है)


मैं iOS 10 जीएम के तहत डिवाइस विंडो में अपने ऐप के लिए NSLogs नहीं देख रहा हूं ... क्या आपको भी यही समस्या है?
ताहोवेलेवराइन

मैं iOS 10 GM के साथ Xcode 7 में लॉग देख सकता हूं, अब डिवाइस विंडो खोलने की कोई आवश्यकता नहीं है।
कियंटक्स

2
मैं Xcode से चलने के बारे में बात नहीं कर रहा हूं, हालांकि, मैं एक तैनात ऐप से लॉग के प्रिंट होने की बात कर रहा हूं।
तेहोवोल्वरिन

इस पर कोई प्रगति?
झुर्रे 22

NSLogs और printf को तैनात अनुप्रयोगों में iOS 10 डिवाइस लॉग से छोड़ा गया है। आप सीधे कॉल के साथ इसे बदलने के लिए एक वैश्विक मैक्रो जोड़ सकते हैं os_log
एलिस्टेंट

7

इसके अलावा, सुनिश्चित करें कि कंसोल वास्तव में Xcode में दिखाई दे रहा है (यानी, सुनिश्चित करें कि दाईं ओर का आइकन नीले रंग में हाइलाइट किया गया है, नीचे की छवि के अनुसार)। मैंने Xcode को अपग्रेड करने के बाद, यह कंसोल को छिपा दिया और मुझे केवल चर के दृश्य दिखाए। इससे ऐसा लग NSLog()रहा था कि यह ठीक से काम नहीं कर रहा है, जबकि यह वास्तव में सही काम कर रहा था, मैं सिर्फ आउटपुट नहीं देख सकता था।

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


इसके अलावा Shift + ⌘ + CXcode संस्करण 8.3.3
डीजे 2

5

हम्म ... ऐसा लगता है जैसे संपत्ति "OS_ACTIVITY_MODE": "अक्षम" पूर्वावलोकन NSlog को Xcode 9 लॉग में दिखाने से।

मेरी योजना में इस मूल्य को अनचेक करने से मेरे लॉग बहाल हो गए।


5

भविष्य में जो कोई भी इस पर आएगा। NSLog आईओएस 10 और iOS 11 में syslog को प्रिंट नहीं करता है इसका कारण Apple द्वारा यूनिफाइड लॉगिंग में परिवर्तन है।

आप इसके बारे में डब्ल्यूडब्ल्यूडीसी से यहां बातचीत कर सकते हैं: https://developer.apple.com/videos/play/wwdc2016/721/

यहाँ प्रलेखन: https://developer.apple.com/documentation/os/logging

10 पर से आपको NSLog के बजाय os_log का उपयोग करना चाहिए।

डिस्क पर लॉग कैसे खोजें: https://www.blackbagtech.com/blog/2017/09/22/accessing-unified-logs-image/

संक्षेप में, लॉग स्थित हैं /var/db/diagnosticsजिसमें वीएम पर पाया जा सकता है/Users/USERNAME/Library/Developer/CoreSimulator/Devices/SIMULATOR-GUID/data/var/db/

अंदर diagnosticsऔर uuidtextएक ही फ़ोल्डर में सभी वस्तुओं की प्रतिलिपि बनाएँ (फ़ोल्डर्स निदान या uuidtext को शामिल न करें जो अंदर है)।

उस फ़ोल्डर का नाम बदलें foldername.xarchive

इसे Console.app में खोलें या OSX उपयोग करें log:log show <path to archive> --info --predicate <options>


IOS पर क्या?
काक्यो

1

मैं Xcode 8 का उपयोग कर रहा हूं, इसलिए मुझे भी यही समस्या आई। और मैंने value = disableसिम्युलेटर पर जोड़कर इस समस्या को हल किया , लेकिन एक वास्तविक मशीन पर मैं मूल्य नहीं जोड़ता।


1
मैं Xcode 9 के साथ कुछ मुद्दों पर चल रहा हूँ। मैंने तर्क दिया: OS_ACTIVITY_MODE, लेकिन ऐसा लगता है कि यह काम नहीं करता है ...
Alessio Campanelli

4
यह समाधान Xcode 9 से शुरू होने वाले सभी NSLog को छिपा देगा । NSLog को रखने के लिए, के disableसाथ बदलें default
कोयूर

मेरी राय में यह सही उत्तर है। OS_ACTIVITY_MODEके साथ disableया defaultप्रत्यक्ष है
ग्रेग

1

NSLogजब मैंने Xcode 9.1 + iOS 11.1 में अपग्रेड किया तो संदेश प्रदर्शित नहीं होते। प्रारंभ में स्वीकृत उत्तर ने मुझे कंसोल ऐप का उपयोग करते हुए और सिम्युलेटर ( लुकास का उत्तर देखें ) को सक्षम करने के लिए इसके चारों ओर काम करने का एक तरीका दिया ।

कंसोल ऐप में Actionमैंने चयन करने Include Debug Messagesऔर अचयनित करने की कोशिश की Include Info Messages(ताकि कंसोल सिस्टम संदेशों से स्वाहा न हो)। NSLogसंदेश Xcode में कंसोल विंडो में दिखाई दिए, लेकिन कंसोल ऐप में नहीं।

मैंने महसूस किया कि इस उत्तर के उत्तर में कोइयर की टिप्पणी के लिए धन्यवाद disable(सक्षम default) होने के लिए एक अधिक प्रत्यक्ष तरीका या सक्षम होना चाहिए मेरी राय में यह सबसे अच्छा जवाब है क्योंकि सेटिंग करना या शुरुआती लोगों के लिए अधिक समझ में आएगा।NSLogsOS_ACTIVITY_MODEdisabledefault

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