[ios] iOS 10은 NSLogs를 인쇄하지 않습니다.

NSLogXcode 8.0 베타 (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 시뮬레이터의 출력입니다.

hello from printf



답변

Scheme 환경 변수에 “OS_ACTIVITY_MODE”: “disable”속성을 추가하고 (시뮬레이터에서 OS 출력을 숨기기 위해) 잊어 버렸고, 이제 실제 장치에서 실행 중일 수 있습니다.

Xcode 8에서

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

추가 OS_ACTIVITY_MODE및 확인 만 (값을 추가하지 마십시오)

여기에 이미지 설명 입력

여기에 이미지 설명 입력

요약 : 이것은 Xcode 8 + iOS10의 버그입니다. 다음과 같이 해결할 수 있습니다.

  • 시뮬레이터를 사용할 때 이름 “OS_ACTIVITY_MODE”와 값 “비활성화”를 추가하고 확인하십시오.

  • 실제 장치에서는 “OS_ACTIVITY_MODE”만 추가하고 확인하십시오 (값을 추가하지 마십시오). Xcode8 콘솔에서 NSLog를 볼 수 있습니다.


답변

Xcode 8 베타 릴리스 노트 를 확인하면 다음과 같이 표시됩니다.

Simulator에서 실행중인 앱을 디버깅 할 때 콘솔에 로그가 표시되지 않을 수 있습니다. 해결 방법 : Simulator.app에서 command + /를 사용하여 콘솔 앱에서 시스템 로그를 열어 NSLog를 확인합니다. (26457535)


답변

NSlog 또는 print는 실제로 실행되지만이 문제를 해결하기 위해 다른 많은 콘솔 디버그 출력 사이에 숨겨져 있습니다. Xcode8을 엽니 다.

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

“OS_ACTIVITY_MODE”를 추가하고 값을 “비활성화”로 설정하고 확인하십시오.

닫기를 클릭

xcode9

“OS_ACTIVITY_MODE”를 추가하고 값을 “기본값”으로 설정하고 확인하십시오.

여기에 이미지 설명 입력
여기에 이미지 설명 입력


답변

또한 콘솔이 실제로 Xcode에서 보이는지 확인하십시오 (즉, 아래 이미지에 따라 오른쪽 아이콘이 파란색으로 강조 표시되어 있는지 확인하십시오). Xcode를 업그레이드 한 후 콘솔을 숨기고 변수보기 만 표시했습니다. 이로 인해 NSLog()제대로 작동하지 않는 것처럼 보였지만 실제로 올바르게 작동했지만 출력을 볼 수 없었습니다.

여기에 이미지 설명 입력


답변

실제 iOS 10 장치에서도 NSLog 출력을 볼 수 없습니다. 실제 장치를 사용하는 경우 Xcode (Shift + Command + 2)에서 장치 창을 열고 장치 로그를 볼 수 있지만 콘솔에는 시스템 및 모든 앱의 로그가 표시되므로 앱의 로그를보기가 어렵습니다.

(Xcode 7을 사용하고 있으므로 Xcode 문제가 아니라 iOS 10 문제 일 수 있습니다)


답변

흠 … 속성 “OS_ACTIVITY_MODE”: “disable”은 Xcode 9 로그에 NSlog가 표시되는 것을 방지합니다.

내 계획에서이 값을 선택 취소하면 로그가 복원되었습니다.


답변

미래에이 문제를 겪는 모든 사람을 위해. NSLog가 iOS 10 및 iOS 11에서 syslog에 인쇄되지 않는 이유는 Apple이 통합 로깅으로 변경했기 때문입니다.

여기에서 WWDC 이야기를 볼 수 있습니다 : https://developer.apple.com/videos/play/wwdc2016/721/

여기 문서 : https://developer.apple.com/documentation/os/logging

10부터 NSLog 대신 os_log를 사용해야합니다.

디스크에서 로그를 찾는 방법 : https://www.blackbagtech.com/blog/2017/09/22/accessing-unified-logs-image/

요약하면 다음 위치에서 /var/db/diagnosticsVM에 대한 로그를 찾을 수 있습니다./Users/USERNAME/Library/Developer/CoreSimulator/Devices/SIMULATOR-GUID/data/var/db/

모든 항목을 내부 diagnosticsuuidtext단일 폴더에 복사합니다 (폴더 진단 또는 내부에있는 uuidtext는 포함하지 않음).

해당 폴더의 이름을 변경합니다 foldername.xarchive.

Console.app에서 열거 나 OSX 유틸리티를 사용하십시오 log.log show <path to archive> --info --predicate <options>