Xcode에서 앱을 테스트하지 않으면 iOS 시뮬레이터에서 어떤 일이 발생하는지 알고 싶습니다.
예를 들어 Safari 시뮬레이터에서 링크를 열면 콘솔에서 어떤 일이 발생하는지 확인하거나 웹 응용 프로그램을 설치하면 콘솔에서 누르는 링크를 확인하십시오.
어떻게해야합니까?
Xcode 또는 Terminal에서보고 싶지만 다른 비트의 소프트웨어를 사용해야하는 경우 문제가되지 않습니다.
Xcode에서 앱을 테스트하지 않으면 iOS 시뮬레이터에서 어떤 일이 발생하는지 알고 싶습니다.
예를 들어 Safari 시뮬레이터에서 링크를 열면 콘솔에서 어떤 일이 발생하는지 확인하거나 웹 응용 프로그램을 설치하면 콘솔에서 누르는 링크를 확인하십시오.
어떻게해야합니까?
Xcode 또는 Terminal에서보고 싶지만 다른 비트의 소프트웨어를 사용해야하는 경우 문제가되지 않습니다.
답변:
iOS 시뮬레이터> 메뉴 막대> 디버그> 시스템 로그 열기
옛날 방식 :
iOS 시뮬레이터는 로그를 stdout에 직접 인쇄하므로 시스템 로그와 로그가 혼합 된 것을 확인할 수 있습니다.
터미널을 열고 다음을 입력하십시오. 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
console.log
사용하여 이러한 로그 tail
나Console.app
데스크탑 Safari를 통해 iOS 시뮬레이터의 콘솔을 볼 수 있습니다. 데스크탑 Safari를 사용하여 실제 iOS 장비의 콘솔을 보는 방법과 유사합니다.
시뮬레이터가 실행 중이고 웹 페이지가 열릴 때마다 데스크탑 사파리의 개발 메뉴 아래에 iOS 시뮬레이터 콘솔을 볼 수있는 옵션이 있습니다.
개발-> iPhone 시뮬레이터-> 사이트 이름
iOS 8 및 iOS 9에서이 위치는 다음과 같습니다.
~/Library/Logs/CoreSimulator/<DEVICE_CODE>
따라서 다음이 작동합니다.
tail -f ~/Library/Logs/CoreSimulator/<DEVICE_CODE>/system.log
이 DEVICE_CODE
값은 다음 콘솔 명령을 통해 찾을 수 있습니다.
instruments -s devices
instruments -s devices
콘솔에 입력 할 수 있습니다
xcrun simctl spawn booted log stream --level=debug | grep App_Debug_String
일했다.
당신은 의지해서는 안됩니다 instruments -s
. 커맨드 라인에서 시뮬레이터 작업을 위해 공식적으로 지원되는 도구는 xcrun simctl
입니다.
장치의 로그 디렉토리는로 찾을 수 있습니다 xcrun simctl getenv booted SIMULATOR_LOG_ROOT
. 위치가 변경 되더라도 항상 정확합니다.
이제 상황이 os_log
바뀌면서 호스트 Mac에서 Console.app를 여는 것이 더 쉬워졌습니다. 부팅 된 시뮬레이터는 실제 장치와 마찬가지로 왼쪽에 로그 소스로 표시되어야합니다. 부팅 된 시뮬레이터에서 로그 명령을 실행할 수도 있습니다.
# 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를 연 다음 Mac에서 Safari로 이동하면 메뉴에 시뮬레이터가 표시됩니다.
Safari 주소 표시 줄에서 URL을 드래그하여 시뮬레이터 창에 놓아 시뮬레이터에서 URL을 열 수 있습니다. 을 사용할 수도 있습니다 xcrun simctl openurl booted <url>
.
log help predicates
자세한 정보를 제공합니다. 술어 형식은 NSPredicate를 따릅니다.
당신은 사용할 수 있습니다 Console
사용하여 전송 된 로그 메시지를 확인하려면 Mac에서 응용 프로그램 (장치에서 장치를 선택) NSLog
(당신이에서 로그를 볼 수 없습니다 print
기능).
로그를 보려면 WebView
다음을 사용해야합니다.Safary -> Develop -> device
cmd
then
space bar
입력 " Console
"키를 누릅니다 enter
. Btw. 그것이 오늘 정답이되어야합니다.
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에 사용 된 시뮬레이터 유형을 인수로 전달할 수 있습니다. 위의 게시물에서 언급했듯이 Xcode 버전에 따라 사용할 수있는 시뮬레이터 유형을 보는 simctl and instrument 명령이 있습니다. 사용 가능한 장치 / 시뮬레이터 목록을 보려면
xcrun instruments -s
또는
xcrun simctl list
이제 장치 코드 또는 시뮬레이터 유형을 스크립트의 인수로 전달하고 grep 내부의 "iPhone 6 (8.2 Simulator)"를 $ 1로 바꿀 수 있습니다
Xcode 11에서 Select로 열 수있는 No NSLog
또는 print
content가에 기록됩니다 .system.log
Simulator -> Debug -> Open System log
나는 방법을 알아 내고 로그를 파일에 쓰고 xx.log
with을 연 Terminal.app
다음 로그가 Terminal.app
생생하게 나타납니다.
나는 CocoaLumberjack을 사용하여 이것을 달성합니다.
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
}
print
또는 NSLog
로 교체하십시오 DDLogXXX
.
$ tail -f {path of log}
여기, Terminal.app에 활발하게 메시지가 표시됩니다.
한가지 더. 메시지 로그 아웃이 없으면
Environment Variables
->OS_ACTIVITY_MODE
ISNOT disable을 확인하십시오 .