ios - अजीब अवांछित एक्सकोड लॉग छुपाएं




xcode logging xcode8 ios10 (10)

@rustyshelf से मूल tweet पर बिल्डिंग, और iDevzilla से सचित्र उत्तर, यहां एक समाधान है जो डिवाइस से NSLog आउटपुट को अक्षम किए बिना सिम्युलेटर से शोर को शांत करता है।

  1. उत्पाद> योजना> योजना संपादित करें ...> चलाएं (डीबग), OS_ACTIVITY_MODE पर्यावरण चर को $ {DEBUG_ACTIVITY_MODE} पर सेट करें, इसलिए ऐसा लगता है:

  1. अपनी प्रोजेक्ट बिल्ड सेटिंग्स पर जाएं, और DEBUG_ACTIVITY_MODE नामक उपयोगकर्ता-निर्धारित सेटिंग जोड़ने के लिए + पर क्लिक करें। इस सेटिंग का विस्तार करें और प्लेटफ़ॉर्म-विशिष्ट मान जोड़ने के लिए डीबग के बगल में + पर क्लिक करें। ड्रॉपडाउन का चयन करें और इसे "कोई भी आईओएस सिम्युलेटर" में बदलें। फिर अपना मान "अक्षम" पर सेट करें ताकि ऐसा दिखाई दे:

एक्सकोड 8+ का उपयोग करते समय और एक नई खाली परियोजना बनाने के दौरान, अनुप्रयोग चलाने के दौरान निम्न लॉग दिखाई देते हैं:

2016-06-13 16:33:34.406093 TestiOS10[8209:100611] bundleid: com.appc.TestiOS10, enable_level: 0, persist_level: 0, propagate_with_activity: 0
2016-06-13 16:33:34.406323 TestiOS10[8209:100607] Created DB, header sequence number = 248
2016-06-13 16:33:34.409564 TestiOS10[8209:100611] subsystem: com.apple.UIKit, category: HIDEvents, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
2016-06-13 16:33:34.504117 TestiOS10[8209:100607] Created DB, header sequence number = 248
2016-06-13 16:33:34.548023 TestiOS10[8209:100607] subsystem: com.apple.BaseBoard, category: MachPort, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
2016-06-13 16:33:34.568458 TestiOS10[8209:100608] subsystem: com.apple.FrontBoard, category: Common, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0

हो सकता है कि किसी को पहले से संभालने के लिए कॉन्फ़िगरेशन मिले?


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

समस्या यह है कि इन सभी चीजों को उत्पन्न करने वाली समस्याएं एक्सकोड निर्देशिका में स्थित हैं। एक प्रक्रिया है जिसे कॉन्फ़िगर किया जाता है जिसे सिम शुरू होता है जब सिम शुरू होता है जो प्लस को पढ़ता है और डिबगिंग जानकारी प्रिंट करता है यदि plists निर्दिष्ट करते हैं कि उन्हें लॉग किया जाना चाहिए।

प्लेस्ट यहां स्थित हैं:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Preferences/Logging/Subsystems

यदि आप बीटा के साथ खेल रहे हैं, तो ध्यान दें कि डीआईआर अलग होगा।

आप इस निर्देशिका में कई plists देखेंगे। अब, अपना एप्लिकेशन बनाएं और चलाएं और लॉग का निरीक्षण करें। आप तुरंत उपप्रणाली के बाद सामग्री की तलाश कर रहे हैं : भाग। यह तुरंत नाम है जो इसी समस्याग्रस्त plist का प्रतिनिधित्व करता है।

वहां से, या तो डिबगिंग [लेवल] कुंजी / मान को नकारने के लिए प्लिस्ट को संशोधित करें जो "Enable" => "Default" कुंजी / मान वाला एक शब्दकोश है या बस बस प्लेलिस्ट को हटा दें। ध्यान दें, कि इनमें से किसी एक को करने के लिए आपको रूट होने की आवश्यकता होगी क्योंकि वे एक्सकोड एप्लिकेशन में स्थित हैं।

plutil -p कमांड भी आपके लिए उपयोग किया जा सकता है। अर्थात

plutil -p /Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/SDKs/AppleTVSimulator.sdk/System/Library/Preferences/Logging/Subsystems/com.apple.BackBoardServices.fence.plist

इसने मुझे समस्याग्रस्त plists में से एक दिया जिसमें निहित है:

{ "DEFAULT-OPTIONS" => { "Level" => { "Enable" => "Default" }}}

सौभाग्य :]


OS_ACTIVITY_MODE मेरे लिए काम नहीं करता है (ऐसा इसलिए हो सकता है क्योंकि मैंने टाइप के रूप में disabled , लेकिन यह अधिक प्राकृतिक नहीं है?!?), या कम से कम संदेशों को बहुत कम नहीं किया है। तो यहां पर्यावरण चर के साथ असली सौदा है।

https://llvm.org/svn/llvm-project/lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp

lldb_private::Error
PlatformDarwin::LaunchProcess(lldb_private::ProcessLaunchInfo &launch_info) {
  // Starting in Fall 2016 OSes, NSLog messages only get mirrored to stderr
  // if the OS_ACTIVITY_DT_MODE environment variable is set.  (It doesn't
  // require any specific value; rather, it just needs to exist).
  // We will set it here as long as the IDE_DISABLED_OS_ACTIVITY_DT_MODE flag
  // is not set.  Xcode makes use of IDE_DISABLED_OS_ACTIVITY_DT_MODE to tell
  // LLDB *not* to muck with the OS_ACTIVITY_DT_MODE flag when they
  // specifically want it unset.
  const char *disable_env_var = "IDE_DISABLED_OS_ACTIVITY_DT_MODE";
  auto &env_vars = launch_info.GetEnvironmentEntries();
  if (!env_vars.ContainsEnvironmentVariable(disable_env_var)) {
    // We want to make sure that OS_ACTIVITY_DT_MODE is set so that
    // we get os_log and NSLog messages mirrored to the target process
    // stderr.
    if (!env_vars.ContainsEnvironmentVariable("OS_ACTIVITY_DT_MODE"))
      env_vars.AppendArgument(llvm::StringRef("OS_ACTIVITY_DT_MODE=enable"));
  }

  // Let our parent class do the real launching.
  return PlatformPOSIX::LaunchProcess(launch_info);
}

तो पर्यावरण चर में "NO" को OS_ACTIVITY_DT_MODE सेट OS_ACTIVITY_DT_MODE (मुख्य उत्तर में योजनाओं स्क्रीनशॉट में OS_ACTIVITY_DT_MODE जीयूआई विधि) यह मेरे लिए काम करता है।

जहां तक NSLog सिस्टम संदेशों, त्रुटियों और आपके स्वयं के डिबगिंग के लिए डंपिंग ग्राउंड है: वास्तविक लॉगिंग दृष्टिकोण शायद किसी भी तरह से कहा जाता है, उदाहरण के लिए https://github.com/fpillet/NSLogger

या

नई कुल-एड पीएं: http://asciiwwdc.com/2016/sessions/721 https://developer.apple.com/videos/play/wwdc2016/721/ यह आश्चर्य की बात नहीं है कि पूरे ओवरहाल करने के बाद कुछ हिचकिचाहट हैं लॉगिंग एपीआई।

परिशिष्ट

वैसे भी, NSLog सिर्फ एक शिम है:

https://developer.apple.com/library/content/releasenotes/Miscellaneous/RN-Foundation-OSX10.12/

एनएसएलओजी / सीएफएलओजी

एनएसएलओजी अब ज्यादातर परिस्थितियों में os_log के लिए एक झुकाव है।

अन्य एनवी चर के लिए स्रोत उद्धृत करने के लिए केवल समझ में आता है। एप्पल आंतरिक से इस बार काफी अलग जगह है। यकीन नहीं है कि वे ओवरलैप क्यों कर रहे हैं। [ NSLog बारे में गलत टिप्पणी हटा दी गई]

[22 सितंबर को संपादित]: मुझे आश्चर्य है कि "रिलीज" और "स्ट्रीम" "डीबग" से अलग तरीके से क्या करती है। पर्याप्त स्रोत नहीं है।

https://github.com/macosforge/libdispatch/blob/8e63547ea4e5abbfe55c0c3064181c4950a791d3/src/voucher.c

e = getenv("OS_ACTIVITY_MODE");
if (e) {
    if (strcmp(e, "release") == 0) {
        mode = voucher_activity_mode_release;
    } else if (strcmp(e, "debug") == 0) {
        mode = voucher_activity_mode_debug;
    } else if (strcmp(e, "stream") == 0) {
        mode = voucher_activity_mode_stream;
    } else if (strcmp(e, "disable") == 0) {
        mode = voucher_activity_mode_disable;
    }
}

यह अभी भी मेरे लिए एक्सकोड संस्करण 8.0 बीटा 2 (8 एस 162 मीटर) में तय नहीं है और एक्सकोड कंसोल में अतिरिक्त लॉग भी दिखाई दे रहे हैं

** 8/1/16 संपादित करें: इसे अभी भी जारी रखने वाले मुद्दों के रूप में एक्सकोड 8 बीटा 4 (8 एस 188o) के रिलीज नोट्स में स्वीकार किया गया है।

एक्सकोड 8 बीटा 4 - आईडीई में ज्ञात मुद्दे

डिबगिंग

• सिम्युलेटर में अनुप्रयोगों को डीबग करते समय एक्सकोड डीबग कंसोल सिस्टम फ्रेमवर्क से अतिरिक्त लॉगिंग दिखाता है। (27331147, 26652255)

संभावित रूप से यह जीएम रिलीज द्वारा हल किया जाएगा। तब तक धैर्य और हालांकि आदर्श नहीं है लेकिन एक कामकाज मैं नीचे उपयोग कर रहा हूँ ...

पिछले जवाब के समान मुझे यह करना है:

  • किसी भी प्रकार के विशेष चरित्र (जैसे * या ^ या! इत्यादि) के साथ मेरे प्रिंट लॉग को उपसर्ग करें

  • फिर कंसोल फलक के निचले दाएं भाग पर खोज बॉक्स का उपयोग करके मेरे कंसोल लॉग को फ़िल्टर करने के लिए मेरे चुने हुए विशेष चरित्र को इनपुट करके कंसोल प्राप्त करने के लिए कंसोल प्राप्त करें


एक ट्वीट के लिए मेरा जवाब था - tweet

पागल की तरह लॉगिंग से एक्सकोड 8 आईओएस सिम्युलेटर को रोकने के लिए, एक पर्यावरण परिवर्तनीय OS_ACTIVITY_MODE = अपनी डीबग योजना में अक्षम करें।

इसने काम कर दिया।


इसे इस्तेमाल करे:

1- एक्सकोड मेनू से खुला: उत्पाद> योजना> योजना संपादित करें

2- आपके पर्यावरण चर पर OS_ACTIVITY_MODE = disable सेट करें


मेरा समाधान ब्रेकपॉइंट्स में डीबगर कमांड और / या लॉग संदेश का उपयोग करना है।

और सभी आउटपुट से कंसोल के आउटपुट को डीबगर आउटपुट में बदलें


यह एक्सकोड 8 बीटा रिलीज नोट्स (डब्ल्यूडब्ल्यूडीसी में एक इंजीनियर से पूछा गया) में लॉगिंग के साथ ज्ञात समस्या से संबंधित है।

वॉच सिम्युलेटर में वॉचोज़ अनुप्रयोगों को डीबग करते समय, ओएस अत्यधिक असुरक्षित लॉगिंग का उत्पादन कर सकता है। (26652255)

वर्तमान में कोई वर्कअराउंड उपलब्ध नहीं है, आपको एक्सकोड के नए संस्करण की प्रतीक्षा करनी होगी।

7/5/16 संपादित करें: यह माना जाता है कि एक्सकोड 8 बीटा 2 के रूप में तय किया गया है:

एक्सकोड 8 बीटा 2 - आईडीई में हल किया गया

डिबगिंग

  • सिम्युलेटर पर एक ऐप डीबग करते समय, लॉग दिखाई दे रहे हैं। (26457535)

एक्सकोड 8 बीटा 2 रिलीज नोट्स


यह अब xcode 8.1 में कोई समस्या नहीं है (परीक्षण संस्करण 8.1 बीटा (8T46g)) । आप अपनी योजना से OS_ACTIVITY_MODE पर्यावरण परिवर्तक को हटा सकते हैं।

https://developer.apple.com/go/?id=xcode-8.1-beta-rn

डिबगिंग

• सिम्युलेटर में अनुप्रयोगों को डीबग करते समय एक्सकोड डीबग कंसोल सिस्टम फ्रेमवर्क से अतिरिक्त लॉगिंग नहीं दिखाता है। (26652255, 27331147)


नोट: git whatchanged बहिष्कृत है, इसके बजाए git log उपयोग करें

नए उपयोगकर्ताओं को इसके बजाय गिट-लॉग [1] का उपयोग करने के लिए प्रोत्साहित किया जाता है। whatchanged कमांड अनिवार्य रूप से गिट-लॉग [1] जैसा ही है लेकिन कच्चे प्रारूप को आउटपुट आउटपुट दिखाने और विलय को छोड़ने के लिए डिफ़ॉल्ट है।

आदेश मुख्य रूप से ऐतिहासिक कारणों से रखा जाता है; गिट git log से पहले गिट सीखने वाले कई लोगों की उंगलियों का आविष्कार लिनक्स कर्नेल मेलिंग सूची को पढ़ने के लिए प्रशिक्षित किया जाता है।

आप प्रत्येक प्रतिबद्धता (प्रतिबद्ध संदेश के साथ) में परिवर्तित फ़ाइलों की एक सूची प्राप्त करने के लिए git whatchanged --stat कमांड का उपयोग कर सकते हैं।

संदर्भ







ios xcode logging xcode8 ios10