ios - अजीब अवांछित Xcode लॉग छिपाएँ




logging xcode8 (8)

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

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

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

https://code.i-harness.com

Xcode 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

शायद किसी को पहले से ही इसे संभालने के लिए एक विन्यास मिला?


OS_ACTIVITY_MODE ने मेरे लिए काम नहीं किया (यह हो सकता है क्योंकि मैं टाइपो disable रूप में 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);
}

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

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

या

नया Kool-Aid पियें: 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/

NSLog / CFLog

NSLog अब ज्यादातर परिस्थितियों में os_log के लिए एक शिम है।

केवल अन्य env वैरिएबल के लिए स्रोत को उद्धृत करने के लिए अब समझ में आता है। काफी अलग जगह, इस बार Apple इंटर्नल्स से। यह सुनिश्चित नहीं है कि वे अतिव्यापी क्यों हैं। [ 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;
    }
}

कृपया नीचे दिए गए चरणों का पता लगाएं।

  1. उत्पाद का चयन करें => योजना => योजना संपादित करें या शॉर्टकट का उपयोग करें: CMD + <
  2. बाईं ओर से Run विकल्प चुनें।
  3. पर्यावरण चर अनुभाग पर, चर OS_ACTIVITY_MODE = अक्षम करें

अधिक जानकारी के लिए नीचे दिए गए GIF प्रतिनिधित्व को देखें।


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

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

यहाँ पर स्थित हैं:

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

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

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

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

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

इससे मुझे समस्याग्रस्त पौधों में से एक मिला, जिसमें निहित था:

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

सौभाग्य :]


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

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

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


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

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

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

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

Xcode 8 बीटा 2 - IDE में हल किया गया

डिबगिंग

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

Xcode 8 बीटा 2 रिलीज नोट्स


यह समाधान मेरे लिए काम कर रहा है:

  1. सिम्युलेटर में एप्लिकेशन चलाएँ
  2. सिस्टम लॉग खोलें ( + / )

यह सभी डीबग डेटा और आपके NSLogs को डंप कर देगा।

केवल अपने NSLog स्टेटमेंट को फ़िल्टर करने के लिए:

  1. प्रत्येक को प्रतीक के साथ उपसर्ग करें, उदाहरण के लिए: NSLog(@"^ Test Log")
  2. ऊपर दाईं ओर स्थित "दाईं ओर" ^ पर खोज बॉक्स का उपयोग करके परिणामों को फ़िल्टर करें

यह वही है जो आपको मिलना चाहिए:


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

** EDIT 8/1/16: यह Xcode 8 Beta 4 (8S188o) के लिए जारी नोटों में स्वीकार किया गया है क्योंकि अभी भी एक मुद्दा है

Xcode 8 बीटा 4 में ज्ञात मुद्दे - IDE

डिबगिंग

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

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

पिछले उत्तर के समान ही मैं यहां आ रहा हूं:

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

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






ios10