iOS 시뮬레이터에서 콘솔 로그를 얻으려면 어떻게해야합니까?


241

Xcode에서 앱을 테스트하지 않으면 iOS 시뮬레이터에서 어떤 일이 발생하는지 알고 싶습니다.

예를 들어 Safari 시뮬레이터에서 링크를 열면 콘솔에서 어떤 일이 발생하는지 확인하거나 웹 응용 프로그램을 설치하면 콘솔에서 누르는 링크를 확인하십시오.

어떻게해야합니까?

Xcode 또는 Terminal에서보고 싶지만 다른 비트의 소프트웨어를 사용해야하는 경우 문제가되지 않습니다.


답변:


271

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


8
여전히 정확한가요? 나는 아무것도 보이지 않아요 console.log사용하여 이러한 로그 tailConsole.app
제프

3
OSX 10.10에서 결과를 얻지 못했습니다. 그 로그는 있지만 시뮬레이터는 버전 8.1이고 로그는 모두 7.1 *입니다.
skift

65
iOS 시뮬레이터> 메뉴 막대> 디버그> 시스템 로그 열기
pkamb

4
감사! 요즘 ~ / Library / Logs / CoreSimulator / <simulator-hash> /system.log입니다.
calimarkus

6
BYossarian의 답변은 "올바른"답변입니다. "iOS 시뮬레이터 콘솔을 볼 수있는 데스크탑 사파리의 개발 메뉴 : 개발-> iPhone 시뮬레이터-> 사이트 이름"
snobojohan

224

데스크탑 Safari를 통해 iOS 시뮬레이터의 콘솔을 볼 수 있습니다. 데스크탑 Safari를 사용하여 실제 iOS 장비의 콘솔을 보는 방법과 유사합니다.

시뮬레이터가 실행 중이고 웹 페이지가 열릴 때마다 데스크탑 사파리의 개발 메뉴 아래에 iOS 시뮬레이터 콘솔을 볼 수있는 옵션이 있습니다.

개발-> iPhone 시뮬레이터-> 사이트 이름


31
이것은 브라우저의 "실제"콘솔과 마찬가지로 최상의 답변이며 즉시 JavaScript 명령을 실행할 수 있습니다. 감사합니다.
Jorge Fuentes González

4
다른 곳에서이 문서를 보지 못한 이유는 무엇입니까? 훌륭한.
순무

4
웹 관리자 (이 방법으로 액세스 할 때)가 완전히 비어있는 것으로 나타납니다 (Mavericks Macbook
Pro-

5
Safari는 시뮬레이터가 열려 있음을 감지 한 것으로 보이지만 "검사 할 수없는 응용 프로그램"이라고 표시되어 있습니다.
nickmorss

4
무슨 소리 야 ... 시뮬레이터의 웹뷰에서 열린 웹 사이트의 웹 디버거를 엽니 다. 당신이 볼 콘솔 메시지는 자바 스크립트 컨텍스트에 기록되어 있습니다. 그것들은 iOS 시뮬레이터의 로그가 아닙니다. 뭔가 빠졌습니까? 아마도 사과가 2013 년 이후 무언가를 바꿨을 지 모르지만, 오늘이 답변은 의문의 제목에 대해 엄청나게 높은 점수를 받았습니다
Radu Simionescu

107

시뮬레이터에는 옵션을 열 수 있습니다. console

Debug > Open System Log

또는

keyboard shortcut: ⌘/

시뮬레이터 메뉴 스크린 샷


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 / 콘솔 / 터미널 창 /
mharper

이것은 나를 위해 작동하지 않았습니다. xcrun simctl spawn booted log stream --level=debug | grep App_Debug_String일했다.
rustyMagnet

29

당신은 의지해서는 안됩니다 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>.


이것은 Xcode 9.3, iOS 11에서 현재 정답입니다. 다른 답변에서 언급 한 위치가 더 이상 정확하지 않습니다.
Michael McGuire

이것은 Xcode 버전 10.1 (10B61), iOS 12.1 Simulator에서 나를 위해 일했습니다. Emacs에서 iOS 앱 콘솔 출력을 보는 데 사용합니다. 다른 답변은 과거에 작동했지만 더 이상 작동하지 않습니다.
tboyce12

나를 위해, 일한 것은 순서였습니다 (시뮬레이터 전에 Safari를 열었으므로 메뉴 항목이 Safari에 나타나지 않았습니다)!
Shmarkus

"predicate"플래그에 대한 문서를 어디에서 찾았습니까?
Hjulle

macOS 11 및 iOS 14 시뮬레이터의 새로운 기능 : log help predicates자세한 정보를 제공합니다. 술어 형식은 NSPredicate를 따릅니다.
russbishop

18

당신이 사용하는 경우 스위프트 , 그 기억 println만 (엑스 코드의 디버그 영역에 나타납니다) 디버그 로그에 인쇄됩니다. 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에 사용 된 시뮬레이터 유형을 인수로 전달할 수 있습니다. 위의 게시물에서 언급했듯이 Xcode 버전에 따라 사용할 수있는 시뮬레이터 유형을 보는 simctl and instrument 명령이 있습니다. 사용 가능한 장치 / 시뮬레이터 목록을 보려면

xcrun instruments -s

또는

xcrun simctl list

이제 장치 코드 또는 시뮬레이터 유형을 스크립트의 인수로 전달하고 grep 내부의 "iPhone 6 (8.2 Simulator)"를 $ 1로 바꿀 수 있습니다


0

iOS 시뮬레이터를 통해 직접 로그를 열 수 있습니다. Debug -> Open System Log...도입시기가 확실하지 않으므로 이전 버전에서는 사용하지 못할 수 있습니다.


0

Safari Technology Preview 앱을 사용하여 Safari Web Inspector 및 모든 웹 개발 도구를 포함한 Simulator 콘솔 창을 볼 수 있습니다. 시뮬레이터의 Safari에서 페이지를 연 다음 Safari 기술 미리보기> 개발> 시뮬레이터로 이동하십시오.

웹 개발 툴


0

Xcode 11에서 Select로 열 수있는 No NSLog또는 printcontent가에 기록됩니다 .system.logSimulator -> Debug -> Open System log

나는 방법을 알아 내고 로그를 파일에 쓰고 xx.logwith을 연 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또는 NSLog로 교체하십시오 DDLogXXX.

3 단계 :

$ tail -f {path of log}

여기, Terminal.app에 활발하게 메시지가 표시됩니다.

한가지 더. 메시지 로그 아웃이 없으면 Environment Variables-> OS_ACTIVITY_MODEISNOT disable을 확인하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.