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


89

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

비슷한 문제가있었습니다. 하지만 iOS 8.1, Xcode 8에서는 여기에서 모든 답변을 확인했습니다. 내가 모든 것을 올바르게하고 있었다는 것이 밝혀졌습니다. 정말 도움이되지 않았습니다. 그래서 장치를 끄고 켰습니다. 효과가있다. 나는 비슷한 문제에 직면 다른 사람을 도울 수 있다는 것을 여기에 그래서이 댓글을 쓰셨
KrishnaCA

답변:


229

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를 볼 수 있습니다.


4
> "값을 추가하지 마십시오" "사용 안함"으로 설정하면 작동합니다! 빈 필드가 작동하지 않습니다.
m8labs 2016 년

시뮬레이터가 아닌 실제 iPhone 장치 디버깅시 작동합니까? "사용 안함"으로 설정하면 실제 iPhone 디버깅시 콘솔에서 NSLog를 수행 할 수 없습니다.
user6833743

나는, 그것이 ... 지금은 다시 모든 것을 보여준다 "사용 안 함"지금 장치에서 작동하지 않고 지금 확인하지만, 시뮬레이터에 깨진 한
m8labs

2
어쨌든이 프로세스를 자동화 할 수 있습니까? 우리가 다음과 같이 앞뒤로 가야한다는 것을 기억해야한다는 것은 정말 짜증나는
온실

2
이 솔루션은 NSLog을 유지하기 위해 엑스 코드 (9)로 시작하는 모든 NSLog를 숨길 교체 disable와 함께 default.
Cœur

27

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

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


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

19

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

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

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

닫기를 클릭

xcode9

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

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


이것은 나를 위해 작동하지 않습니다. NSLog는 배포 된 응용 프로그램에 대해 표시되지 않습니다. iOS 10 장치에서 xcode 8.1 (Mac 10.11에서 실행)을 사용합니다.
mobjug

22
이 솔루션은 NSLog을 유지하기 위해 엑스 코드 (9)로 시작하는 모든 NSLog를 숨길 교체 disable와 함께 default.
Cœur

3
이 답변은 Xcode 9에 대한 @ Cœur의 수정을 설명하기 위해 업데이트되어야합니다.
Joel

8

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

여기에 이미지 설명 입력


또한와 콘솔을 활성화 할 수 Shift + ⌘ + C있는 Xcode 버전 8.3.3
DJ2

알 수없는 의미의 아이콘으로 가득한 @Apple의 멋진 UI 디자인
Ornithopter

7

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

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


iOS 10 GM의 장치 창에 내 앱에 대한 NSLogs가 표시되지 않습니다 ... 같은 문제가 있습니까?
TahoeWolverine

iOS 10 GM을 사용하여 Xcode 7에서 로그를 볼 수 있으므로 더 이상 장치 창을 열 필요가 없습니다.
kientux

2
나는 Xcode에서 실행하는 것에 대해 말하는 것이 아니라 배포 된 앱에서 인쇄되는 로그에 대해 이야기하고 있습니다.
TahoeWolverine

이것에 대한 진전이 있습니까?
jhurray

NSLogs 및 printf는 배포 된 애플리케이션의 iOS 10 장치 로그에서 생략됩니다. 전역 매크로를 추가하여에 대한 직접 호출로 바꿀 수 있습니다 os_log.
Elist

6

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

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


6

미래에이 문제를 겪는 모든 사람을 위해. 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>


iOS에서는 어떻습니까?
kakyo

1

Xcode 8을 사용하고 있으므로 동일한 문제가 발생했습니다. value = disable시뮬레이터 를 추가하여이 문제를 해결 했지만 실제 기계에서는 가치를 추가하지 않습니다.


1
내가 인수 삽입 엑스 코드 (9) 몇 가지 문제에 봉착 : OS_ACTIVITY_MODE를하지만 그렇지가 ... 작동 할 것
알레 Campanelli

4
이 솔루션은 NSLog을 유지하기 위해 엑스 코드 (9)로 시작하는 모든 NSLog를 숨길 교체 disable와 함께 default.
Cœur

제 생각에는 이것이 정답입니다. OS_ACTIVITY_MODEdisable또는 default직접입니다
그렉

1

NSLogXcode 9.1 + iOS 11.1로 업그레이드 할 때 더 이상 메시지가 표시되지 않습니다. 처음에 받아 들여진 대답 은 콘솔 앱을 사용하고 시뮬레이터를 활성화하여이 문제를 해결할 수있는 방법을 제공했습니다 ( Lucas의 대답 참조 ).

콘솔 앱에서 Action선택 Include Debug Messages및 선택 취소를 시도했습니다 Include Info Messages(따라서 콘솔에 시스템 메시지가 넘치지 않음). NSLogXcode의 콘솔 창에는 메시지가 나타나지만 콘솔 앱에는 나타나지 않습니다.

나는에 더 직접적인 방법이있을 깨달았다 disable또는 (즉, 수 default) NSLogs에 응답 쾨르의 의견 덕분에 이 답변. 제 생각에는이 설정 때문에 가장 좋은 대답 OS_ACTIVITY_MODEdisable하거나하는 것은 default초보자를위한 더 의미가 뜻.

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