ฉันจะรับบันทึกคอนโซลจาก iOS Simulator ได้อย่างไร


241

ฉันต้องการดูว่าเกิดอะไรขึ้นใน iOS Simulator ถ้าฉันไม่ได้ทดสอบแอพใน Xcode

ตัวอย่างเช่นถ้าฉันเปิดลิงก์ในโปรแกรมจำลองการซาฟารีดูว่าเกิดอะไรขึ้นในคอนโซลหรือถ้าฉันติดตั้งเว็บแอปให้ดูลิงก์ที่ฉันกดในคอนโซล

ฉันจะทำสิ่งนี้ได้อย่างไร

ฉันต้องการที่จะเห็นมันใน Xcode หรือเทอร์มินัล แต่ก็ไม่เป็นปัญหาหากฉันต้องใช้ซอฟต์แวร์อีกเล็กน้อย


ดูเพิ่มเติมที่: stackoverflow.com/a/29310542/59087
Dave Jarvis

คำตอบ:


271

iOS Simulator> แถบเมนู> แก้ไขข้อบกพร่อง> เปิดบันทึกระบบ


วิธีเก่า:

iOS Simulator พิมพ์บันทึกของตนโดยตรงไปยัง stdout ดังนั้นคุณสามารถดูบันทึกที่ปะปนกับบันทึกของระบบ

เปิด Terminal และประเภท: tail -f /var/log/system.log

จากนั้นเรียกใช้โปรแกรมจำลอง

แก้ไข:

สิ่งนี้หยุดทำงานกับ Mavericks / Xcode 5 ตอนนี้คุณสามารถเข้าถึงบันทึกการจำลองในโฟลเดอร์ของตนเอง: ~/Library/Logs/iOS Simulator/<sim-version>/system.log

คุณสามารถใช้ Console.app เพื่อดูสิ่งนี้หรือทำหาง (ตัวอย่างเช่น iOS 7.0.3 64 บิต):

tail -f ~/Library/Logs/iOS\ Simulator/7.0.3-64/system.log

แก้ไข 2:

ตอนนี้พวกเขาอยู่ใน ~/Library/Logs/CoreSimulator/<simulator-hash>/system.log

tail -f ~/Library/Logs/CoreSimulator/<simulator-hash>/system.log


8
นี่ยังแม่นยำหรือไม่? ฉันไม่เห็นอะไรจากconsole.logในบันทึกเหล่านี้โดยใช้tailหรือConsole.app
Jeff

3
ฉันไม่ได้รับผลลัพธ์ใด ๆ ทั้งใน OSX 10.10 บันทึกเหล่านั้นมี แต่เครื่องมือจำลองของฉันคือรุ่น 8.1 และบันทึกทั้งหมดเป็นรุ่น 7.1 *
skift

65
iOS Simulator> แถบเมนู> แก้ไขข้อบกพร่อง> เปิดบันทึกระบบ
pkamb

4
ขอบคุณ! ~ / Library / Logs / CoreSimulator / <simulator-hash> มัน /system.log ทุกวันนี้
calimarkus

6
คำตอบจาก BYossarian คือคำตอบที่ "ถูกต้อง" "พัฒนาเมนูในเดสก์ท็อปซาฟารีที่ให้คุณเห็นคอนโซลตัวจำลอง iOS: พัฒนา -> ตัวจำลอง iPhone -> ชื่อไซต์"
snobojohan

224

คุณสามารถดูคอนโซลสำหรับ iOS Simulator ผ่านเดสก์ท็อป Safari มันคล้ายกับวิธีที่คุณใช้เดสก์ท็อป Safari เพื่อดูคอนโซลสำหรับอุปกรณ์ iOS จริง

เมื่อใดก็ตามที่เครื่องมือจำลองทำงานและมีหน้าเว็บเปิดอยู่จะมีตัวเลือกภายใต้เมนูพัฒนาในซาฟารีบนเดสก์ท็อปที่ให้คุณเห็นคอนโซลจำลองของ iOS:

พัฒนา -> iPhone Simulator -> ชื่อไซต์


31
นี่คือคำตอบที่ดีที่สุดเช่นเดียวกับคอนโซล "ของจริง" ของเบราว์เซอร์และคุณสามารถประมวลผลคำสั่งจาวาสคริปต์ได้ทันที ขอบคุณ.
Jorge Fuentes González

4
ทำไมฉันไม่เห็นเอกสารนี้ที่อื่นเลย สุกใส
หัวผักกาด

4
ตัวตรวจสอบเว็บ (เมื่อเข้าถึงด้วยวิธีนี้) จะแสดงค่าว่างเปล่าสำหรับฉัน (Mavericks Macbook Pro - ติดตั้งการอัปเดตทั้งหมด - Safari 7.0.5)
jamis0n

5
Safari ดูเหมือนว่าจะตรวจพบว่า simultor เปิดอยู่ แต่จะแจ้งว่า "ไม่มีแอปพลิเคชันที่ตรวจสอบได้"
nickmorss

4
คุณกำลังพูดถึงเรื่องอะไร ... นี่เป็นเพียงการเปิดเว็บดีบั๊กสำหรับเว็บไซต์ที่เปิดในทุก ๆ มุมมองของโปรแกรมจำลอง ข้อความคอนโซลที่คุณเห็นมีการบันทึกไว้ในบริบทของจาวาสคริปต์ สิ่งเหล่านี้ไม่ใช่บันทึกของเครื่องมือจำลอง iOS ฉันพลาดอะไรไปรึเปล่า? บางทีแอปเปิ้ลเปลี่ยนบางสิ่งบางอย่างตั้งแต่ปี 2013 แต่ ณ วันนี้คำตอบนี้มีคะแนนสูงอย่างน่าขันสำหรับชื่อของคำถาม
Radu Simionescu


90

iOS 8 และ iOS 9

ใน iOS 8 และ iOS 9 ตำแหน่งนี้อยู่ในขณะนี้:

~/Library/Logs/CoreSimulator/<DEVICE_CODE>

ดังนั้นสิ่งต่อไปนี้จะได้ผล:

tail -f ~/Library/Logs/CoreSimulator/<DEVICE_CODE>/system.log

DEVICE_CODEค่าสามารถพบได้ผ่านทางคำสั่งคอนโซลต่อไปนี้:

instruments -s devices

1
ในการค้นหาตัวระบุอุปกรณ์: ใน Xcode คลิก Windows> อุปกรณ์ อุปกรณ์และตัวระบุจะปรากฏในบานหน้าต่างด้านขวา
neilco

3
คุณสามารถพิมพ์instruments -s devicesในคอนโซล
viteinfinite

2
s / console / terminal window /
mharper

สิ่งนี้ไม่ได้ผลสำหรับฉัน xcrun simctl spawn booted log stream --level=debug | grep App_Debug_Stringทำงาน
rustyMagnet

29

instruments -sคุณไม่ควรพึ่งพา เครื่องมือที่สนับสนุนอย่างเป็นทางการสำหรับการทำงานกับ Simulators จากบรรทัดคำสั่งคือxcrun simctlเครื่องมือสนับสนุนอย่างเป็นทางการสำหรับการทำงานกับจำลองจากบรรทัดคำสั่งคือ

สามารถค้นหาไดเรกทอรีล็อกสำหรับอุปกรณ์ได้ xcrun simctl getenv booted SIMULATOR_LOG_ROOTไดเรกทอรีบันทึกสำหรับอุปกรณ์ที่สามารถพบได้กับสิ่งนี้จะถูกต้องเสมอแม้ว่าจะมีการเปลี่ยนแปลงตำแหน่ง

ตอนนี้สิ่งต่าง ๆ จะย้ายไปที่os_logมันจะง่ายกว่าที่จะเปิด Console.app บนโฮสต์ Mac เครื่องจำลองที่ถูกบู๊ตควรแสดงเป็นแหล่งบันทึกทางด้านซ้ายเช่นเดียวกับอุปกรณ์ทางกายภาพ คุณยังสามารถเรียกใช้คำสั่งบันทึกในโปรแกรมจำลองการบู๊ต:

# os_log equivalent of tail -f
xcrun simctl spawn booted log stream --level=debug

# filter log output
xcrun simctl spawn booted log stream --predicate 'processImagePath endswith "myapp"'
xcrun simctl spawn booted log stream --predicate 'eventMessage contains "error" and messageType == info'

# a log dump that Console.app can open
xcrun simctl spawn booted log collect

# open location where log collect will write the dump
cd `xcrun simctl getenv booted SIMULATOR_SHARED_RESOURCES_DIRECTORY`

หากคุณต้องการใช้เครื่องมือสำหรับนักพัฒนา Safari (รวมถึงคอนโซล JS) ด้วยหน้าเว็บในเครื่องมือจำลอง : เริ่มโปรแกรมจำลองสถานการณ์หนึ่งเปิด Safari จากนั้นไปที่ Safari บน mac ของคุณและคุณควรเห็นเครื่องมือจำลองในเมนู

คุณสามารถเปิด URL ใน Simulator โดยการลากจากแถบที่อยู่ของ Safari และวางลงบนหน้าต่าง Simulator xcrun simctl openurl booted <url>นอกจากนี้คุณยังสามารถใช้


นี่เป็นคำตอบที่ถูกต้องในตอนนี้เนื่องจาก Xcode 9.3, iOS 11 ตำแหน่งที่กล่าวถึงในคำตอบอื่น ๆ นั้นไม่ถูกต้องอีกต่อไป
Michael McGuire

สิ่งนี้ใช้ได้กับฉันใน Xcode เวอร์ชัน 10.1 (10B61), iOS 12.1 Simulator ใช้เพื่อดูเอาต์พุตคอนโซลแอป iOS ใน Emacs คำตอบอื่น ๆ ที่ทำงานในอดีต แต่ไม่อีกต่อไป
tboyce12

สำหรับฉันสิ่งที่ได้ผลคือการสั่งซื้อ (ฉันเปิด Safari ไว้ก่อน Simulator แล้วดังนั้นรายการเมนูจึงไม่ปรากฏใน Safari)!
Shmarkus

คุณพบเอกสารของการตั้งค่าสถานะ "เพรดิเคต" ที่ใด
Hjulle

ใหม่สำหรับเครื่องจำลอง macOS 11 และ iOS 14: log help predicatesจะให้ข้อมูลเพิ่มเติมแก่คุณ รูปแบบเพรดิเคตเป็นไปตาม NSPredicate
russbishop

18

หากคุณใช้Swiftโปรดจำไว้ว่าprintlnจะพิมพ์ไปยังบันทึกการดีบักเท่านั้น (ซึ่งจะปรากฏในพื้นที่การดีบักของ xCode) หากคุณต้องการพิมพ์ไปที่ system.log คุณต้องใช้NSLogเหมือนในอดีต

จากนั้นคุณสามารถดูบันทึกจำลองผ่านทางเมนูดีบั๊ก> เปิดบันทึกระบบ ... (cmd + /)


12

หาง/var/log/system.logไม่ได้ทำงานสำหรับฉัน Console.appผมพบว่าบันทึกของฉันโดยใช้ พวกเขาอยู่ใน

~/Library/Logs/iOS Simulator/{version}/system.log


นี่เป็นวิธีที่ยอดเยี่ยมในการดูบันทึกจากเช่นวันที่ผ่านมา
ทรอย

10

คุณสามารถใช้Consoleแอปพลิเคชัน (เลือกอุปกรณ์ของคุณในอุปกรณ์) บน Mac ของคุณเพื่อดูข้อความบันทึกที่ถูกส่งโดยใช้NSLog(คุณจะไม่เห็นบันทึกจากprintฟังก์ชั่น)

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

โปรดทราบว่าหากคุณต้องการดูบันทึกจากWebViewคุณควรใช้Safary -> Develop -> device

[ค้นหาบันทึกข้อผิดพลาด]


กดcmd then space bar พิมพ์ " Console" enterกด Btw นั่นควรเป็นคำตอบที่ถูกต้องในวันนี้
เหงา

7

XCode> 6.0 และ iOS> 8.0 สคริปต์ด้านล่างใช้งานได้หากคุณมีรุ่น XCode> 8.0

ฉันใช้สคริปต์ขนาดเล็กด้านล่างเพื่อตัดบันทึกการจำลองลงบนคอนโซลระบบ

#!/bin/sh
sim_dir=`xcrun instruments -s | grep "iPhone 6 (8.2 Simulator)" | awk {'print $NF'} | tr -d '[]'`
tail -f ~/Library/Logs/CoreSimulator/$sim_dir/system.log

คุณสามารถส่งผ่านประเภทเครื่องจำลองที่ใช้ใน Grep เป็นอาร์กิวเมนต์ ดังกล่าวในโพสต์ข้างต้นมีคำสั่ง simctl และเครื่องมือเพื่อดูประเภทของการจำลองที่มีอยู่สำหรับการใช้งานขึ้นอยู่กับรุ่น Xcode เพื่อดูรายการอุปกรณ์ / ตัวจำลองที่มีอยู่

xcrun instruments -s

หรือ

xcrun simctl list

ตอนนี้คุณสามารถส่งรหัสอุปกรณ์หรือประเภทเครื่องมือจำลองเป็นอาร์กิวเมนต์ของสคริปต์และแทนที่ "iPhone 6 (เครื่องมือจำลอง 8.2)" ใน grep เป็น $ 1


0

ฉันสามารถเปิดบันทึกได้โดยตรงผ่านตัวจำลอง iOS: Debug -> Open System Log...ไม่แน่ใจว่าเมื่อไรที่มีการเปิดตัวดังนั้นจึงอาจไม่สามารถใช้ได้กับรุ่นก่อนหน้า


0

คุณสามารถเห็นหน้าต่างคอนโซล Simulator รวมถึง Safari Web Inspector และเครื่องมือพัฒนาเว็บทั้งหมดโดยใช้แอพ Safari Technology Preview เปิดหน้าเว็บของคุณใน Safari บน Simulator แล้วไปที่ Safari Technology Preview> Develop> Simulator

เครื่องมือพัฒนาเว็บไซต์


0

ไม่มีNSLogหรือprintเนื้อหาจะเขียนถึงsystem.logซึ่งสามารถเปิดได้โดยเลือกSimulator -> Debug -> Open System logบน Xcode 11

ฉันคิดหาวิธีเขียนบันทึกลงในไฟล์และเปิดxx.logด้วยTerminal.app. จากนั้นบันทึกจะปรากฏในTerminal.appมีชีวิตชีวา

ฉันใช้CocoaLumberjackเพื่อให้ได้สิ่งนี้

ขั้นตอนที่ 1:

เพิ่มDDFileLogger DDOSLoggerและพิมพ์เส้นทางบันทึก config()ควรเรียกเมื่ออาหารกลางวันของแอป

static func config() {
    #if DEBUG
    DDLog.add(DDOSLogger.sharedInstance) // Uses os_log
    let fileLogger: DDFileLogger = DDFileLogger() // File Logger
    fileLogger.rollingFrequency = 60 * 60 * 24 // 24 hours
    fileLogger.logFileManager.maximumNumberOfLogFiles = 7
    DDLog.add(fileLogger)
    DDLogInfo("DEBUG LOG PATH: " + (fileLogger.currentLogFileInfo?.filePath ?? ""))
    #endif
}

ขั้นตอนที่ 2:

แทนที่printหรือกับNSLogDDLogXXX

ขั้นตอนที่ 3:

$ tail -f {path of log}

ที่นี่ข้อความจะปรากฏใน Terminal.app ที่มีชีวิตชีวา

อีกอย่างหนึ่ง หากไม่มีข้อความออกจากระบบให้ตรวจสอบEnvironment Variables-> OS_ACTIVITY_MODEISNOT ปิดการใช้งาน

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