iOS 10 ไม่พิมพ์ NSLogs


89

ไม่มีอะไรพิมพ์จากNSLogบน Xcode 8.0 beta (8S128d) printfไม่เปลี่ยนแปลง

นี่คือรหัสของฉัน:

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

นี่คือผลลัพธ์บน iOS 9 Simulator:

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

นี่คือผลลัพธ์บน iOS 10 Simulator:

hello from printf

ฉันมีปัญหาที่คล้ายกัน แต่ใน iOS 8.1, Xcode 8 ฉันตรวจสอบทุกคำตอบที่นี่ ปรากฎว่าฉันทำทุกอย่างถูกต้อง ไม่มีอะไรช่วยจริงๆ ดังนั้นฉันจึงปิดอุปกรณ์และเปิดเครื่อง มันได้ผล. ฉันเขียนความคิดเห็นนี้ที่นี่เพื่อที่จะช่วยให้ผู้อื่นประสบปัญหาคล้าย ๆ กัน
KrishnaCA

คำตอบ:


229

อาจเป็นไปได้ว่าคุณเพิ่มคุณสมบัติ "OS_ACTIVITY_MODE": "ปิดการใช้งาน" ในตัวแปรสภาพแวดล้อม Scheme (เพื่อซ่อนเอาต์พุต OS จากเครื่องจำลอง) และลืมไปและตอนนี้กำลังทำงานบนอุปกรณ์จริง

ใน Xcode 8:

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

เพิ่มOS_ACTIVITY_MODEและตรวจสอบเท่านั้น (ไม่ต้องเพิ่มค่า)

ป้อนคำอธิบายภาพที่นี่

ป้อนคำอธิบายภาพที่นี่

สรุป: นี่เป็นข้อบกพร่องของ Xcode 8 + iOS10 เราสามารถแก้ไขได้ด้วยวิธีนี้:

  • เมื่อใช้เครื่องจำลองให้เพิ่มชื่อ "OS_ACTIVITY_MODE" และค่า "ปิดการใช้งาน" แล้วตรวจสอบ

  • เมื่ออยู่บนอุปกรณ์จริงให้เพิ่มเฉพาะ "OS_ACTIVITY_MODE" แล้วเลือก (ไม่ต้องเพิ่มค่า) คุณจะเห็น NSLog ในคอนโซล Xcode8


4
> "ไม่ต้องเพิ่มค่า" ฉันตั้งค่าเป็น "ปิดการใช้งาน" และได้ผล! ช่องว่างไม่ได้ผลสำหรับฉัน
m8labs

คุณแน่ใจหรือไม่ว่าใช้งานได้เมื่อทำการดีบักอุปกรณ์ iPhone จริงไม่ใช่โปรแกรมจำลอง ถ้าฉันตั้งค่าเป็น "ปิดใช้งาน" คอนโซลจะไม่สามารถ NSLog เมื่อทำการดีบัก iPhone จริง
user6833743

ฉันตรวจสอบแล้วตอนนี้โดยไม่ต้อง "ปิดการใช้งาน" มันใช้งานได้บนอุปกรณ์ตอนนี้ แต่ใช้งานโปรแกรมจำลองไม่ได้มันแสดงทุกอย่างอีกครั้ง ...
m8labs

2
มีการทำให้กระบวนการนี้เป็นไปโดยอัตโนมัติหรือไม่? มันน่ารำคาญจริงๆที่เราต้องจำกลับไปกลับมาแบบนี้ /
เรือนกระจก

2
การแก้ปัญหานี้จะซ่อนทั้งหมด NSLog เริ่มต้นกับ Xcode 9. เพื่อให้ NSLog แทนที่ด้วยdisable default
Cœur

27

หากคุณตรวจสอบบันทึกย่อประจำรุ่น Xcode 8 เบต้าคุณจะพบว่า:

เมื่อทำการดีบักแอปที่ทำงานบน Simulator บันทึกอาจไม่ปรากฏในคอนโซล วิธีแก้ปัญหา: ใช้คำสั่ง + / ใน Simulator.app เพื่อเปิดบันทึกระบบในแอปคอนโซลเพื่อดู NSLogs (26457535)


9
ฉันไม่เห็นผลลัพธ์ NSLog ในอุปกรณ์ iOS 10 จริงทั้งสองอย่าง หากคุณใช้อุปกรณ์จริงคุณสามารถเปิดหน้าต่างอุปกรณ์ (Shift + Command + 2) และดูบันทึกอุปกรณ์ได้ที่นั่น แต่เป็นการยากที่จะดูบันทึกการแก้ไขข้อบกพร่องของแอปเนื่องจากคอนโซลจะแสดงบันทึกทั้งหมดจากระบบและแอป
kientux

19

NSlog หรือ print ถูกเรียกใช้งานจริง แต่ถูกซ่อนอยู่ท่ามกลางผลลัพธ์การดีบักของคอนโซลอื่น ๆ เพื่อแก้ปัญหานี้เปิด Xcode8:

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

เพิ่ม "OS_ACTIVITY_MODE" และตั้งค่าเป็น "ปิดการใช้งาน" และตรวจสอบ

คลิกปิด

xcode9

เพิ่ม "OS_ACTIVITY_MODE" และตั้งค่าเป็น "ค่าเริ่มต้น" และตรวจสอบ

ป้อนคำอธิบายภาพที่นี่ ป้อนคำอธิบายภาพที่นี่


สิ่งนี้ไม่ได้ผลสำหรับฉัน NSLogs ไม่ปรากฏขึ้นสำหรับแอปพลิเคชันที่ปรับใช้ ฉันใช้ xcode 8.1 (ทำงานบน Mac 10.11) กับอุปกรณ์ iOS 10
mobjug

22
การแก้ปัญหานี้จะซ่อนทั้งหมด NSLog เริ่มต้นกับ Xcode 9. เพื่อให้ NSLog แทนที่ด้วยdisable default
Cœur

3
คำตอบนี้ควรได้รับการอัปเดตเป็นบัญชีสำหรับการแก้ไขของ @ Cœurสำหรับ Xcode 9
Joel

8

ตรวจสอบให้แน่ใจว่าคอนโซลสามารถมองเห็นได้จริงใน Xcode (เช่นตรวจสอบให้แน่ใจว่าไอคอนด้านขวามือถูกไฮไลต์ด้วยสีน้ำเงินตามภาพด้านล่าง) หลังจากที่ฉันอัปเกรด Xcode มันจะซ่อนคอนโซลและแสดงให้ฉันเห็นเฉพาะมุมมองตัวแปร สิ่งนี้ทำให้ดูเหมือนว่าNSLog()ทำงานไม่ถูกต้องในขณะที่มันทำงานได้ถูกต้องจริงๆฉันไม่เห็นผลลัพธ์

ป้อนคำอธิบายภาพที่นี่


นอกจากนี้ยังสามารถเปิดใช้งานคอนโซลด้วยShift + ⌘ + CXcode เวอร์ชัน 8.3.3
DJ2

สิ่งที่ได้รับการออกแบบ UI @Apple ดี fullof ไอคอนที่ไม่รู้จักความหมาย
Ornithopter

7

ฉันไม่เห็นผลลัพธ์ NSLog ในอุปกรณ์ iOS 10 จริงทั้งสองอย่าง หากคุณใช้อุปกรณ์จริงคุณสามารถเปิดหน้าต่างอุปกรณ์จาก Xcode (Shift + Command + 2) และดูบันทึกอุปกรณ์ได้ที่นั่น แต่เป็นการยากที่จะดูบันทึกของแอปของคุณเนื่องจากคอนโซลแสดงบันทึกจากระบบและแอปทั้งหมด

(ฉันใช้ Xcode 7 ดังนั้นอาจไม่ใช่ปัญหาของ Xcode แต่เป็นปัญหาของ iOS 10)


ฉันไม่เห็น NSLogs สำหรับแอปของฉันในหน้าต่างอุปกรณ์ภายใต้ iOS 10 GM ... คุณมีปัญหาเดียวกันหรือไม่
TahoeWolverine

ฉันสามารถดูบันทึกใน Xcode 7 ด้วย iOS 10 GM ได้โดยไม่จำเป็นต้องเปิดหน้าต่างอุปกรณ์อีกต่อไป
kientux

2
ฉันไม่ได้พูดถึงการเรียกใช้จาก Xcode แต่ฉันกำลังพูดถึงบันทึกที่พิมพ์จากแอปที่ปรับใช้แล้ว
TahoeWolverine

มีความคืบหน้าเกี่ยวกับเรื่องนี้หรือไม่?
jhurray

NSLogs และ printf ถูกละเว้นจากการเข้าสู่ระบบอุปกรณ์ iOS 10 ในแอปพลิเคชันที่ปรับใช้ os_logคุณสามารถเพิ่มมาโครทั่วโลกที่จะแทนที่ด้วยการโทรโดยตรงกับ
Elist

6

อืม ... ดูเหมือนว่าคุณสมบัติ "OS_ACTIVITY_MODE": "ปิดการใช้งาน" ไม่ให้ NSlog ปรากฏในบันทึก Xcode 9

การยกเลิกการเลือกค่านี้ในโครงการของฉันจะเรียกคืนบันทึกของฉัน


6

สำหรับใครก็ตามที่เกิดขึ้นในอนาคต สาเหตุที่ NSLog ไม่พิมพ์ลง syslog ใน iOS 10 และ iOS 11 เกิดจากการที่ Apple เปลี่ยนเป็น Unified Logging

คุณสามารถดู WWDC พูดคุยเกี่ยวกับเรื่องนี้ได้ที่นี่: https://developer.apple.com/videos/play/wwdc2016/721/

เอกสารที่นี่: https://developer.apple.com/documentation/os/logging

ตั้งแต่ 10 เป็นต้นไปคุณควรใช้ os_log แทน NSLog

วิธีค้นหาบันทึกบนดิสก์: https://www.blackbagtech.com/blog/2017/09/22/accessing-unified-logs-image/

สรุปได้ว่าบันทึกจะอยู่ใน /var/db/diagnosticsที่ซึ่งสามารถพบได้สำหรับ VM ที่/Users/USERNAME/Library/Developer/CoreSimulator/Devices/SIMULATOR-GUID/data/var/db/

คัดลอกรายการทั้งหมดภายในdiagnosticsและuuidtextลงในโฟลเดอร์เดียว (อย่ารวมการวินิจฉัยโฟลเดอร์หรือ uuidtext เฉพาะสิ่งที่อยู่ภายใน)

เปลี่ยนชื่อโฟลเดอร์นั้น foldername.xarchiveนั้น

เปิดใน Console.app หรือใช้ OSX util log:log show <path to archive> --info --predicate <options>


แล้วบน iOS ล่ะ?
kakyo

1

ฉันใช้ Xcode 8 ดังนั้นฉันก็พบปัญหาเดียวกัน และฉันแก้ไขปัญหานี้โดยเพิ่มvalue = disableในเครื่องจำลอง แต่ในเครื่องจริงฉันไม่ได้เพิ่มมูลค่า


1
ฉันมีปัญหากับ Xcode 9 ฉันแทรกอาร์กิวเมนต์: OS_ACTIVITY_MODE แต่ดูเหมือนว่าจะไม่ทำงาน ...
Alessio Campanelli

4
การแก้ปัญหานี้จะซ่อนทั้งหมด NSLog เริ่มต้นกับ Xcode 9. เพื่อให้ NSLog แทนที่ด้วยdisable default
Cœur

ในความคิดของฉันนี่คือคำตอบที่ถูกต้อง OS_ACTIVITY_MODEมีdisableหรือdefaultโดยตรง
เกร็ก

1

NSLogข้อความไม่แสดงอีกต่อไปเมื่อฉันอัปเกรดเป็น Xcode 9.1 + iOS 11.1 เริ่มแรกคำตอบที่ยอมรับทำให้ฉันมีวิธีแก้ไขปัญหานี้โดยใช้แอปคอนโซลและเปิดใช้งานโปรแกรมจำลอง ( ดูคำตอบของลูคัส )

ในแอปคอนโซลภายใต้ActionฉันพยายามเลือกInclude Debug MessagesและยกเลิกการเลือกInclude Info Messages(ดังนั้นคอนโซลจึงไม่เต็มไปด้วยข้อความระบบ) NSLogข้อความปรากฏในหน้าต่างคอนโซลใน Xcode แต่ไม่ปรากฏในแอปคอนโซล

ฉันตระหนักว่าต้องมีวิธีที่ตรงกว่าในการdisableหรือเปิดใช้งาน (กล่าวคือdefault) NSLogsขอบคุณความคิดเห็นของ Coeur ในการตอบสนองต่อคำตอบนี้ ในความคิดของฉันมันเป็นคำตอบที่ดีที่สุดเพราะการตั้งค่าOS_ACTIVITY_MODEไปdisableหรือdefaultจะทำให้รู้สึกมากขึ้นสำหรับผู้เริ่มต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.