Reputation: 1953
Nothing prints from NSLog
on Xcode 8.0 beta (8S128d). printf
is unchanged
Here's my code:
NSLog(@"hello from NSLog");
printf("hello from printf");
Here's the output on iOS 9 Simulator:
2016-06-17 09:49:10.887 calmapp-dev[28517:567025] hello from NSLog
hello from printf
Here's the output on iOS 10 Simulator:
hello from printf
Upvotes: 91
Views: 56939
Reputation: 2142
Also, make sure the Console is actually visible in Xcode (i.e., make sure the right-hand side icon is highlighted in blue, as per the image below). After I upgraded Xcode, it hide the Console and showed me just the Variables view. This made it look like NSLog()
was not working properly, whereas it was indeed working correct, I just couldn't see the output.
Upvotes: 8
Reputation: 1449
the NSlog or print actually is executed but is hidden among lots of other console debug outputs to solve this issue Open Xcode8:
Product -> Scheme -> Edit Scheme -> Run -> Arguments -> Environment Variables
add "OS_ACTIVITY_MODE" and set the Value to "disable" and check it.
click close
xcode9
add "OS_ACTIVITY_MODE" and set the Value to "default" and check it.
Upvotes: 19
Reputation: 1842
NSLog
messages no longer displayed when I upgraded to Xcode 9.1 + iOS 11.1. Initially the accepted answer gave me a way to work around this using the Console app and enabling the Simulator (see Lucas' answer).
In the Console app under Action
I tried selecting Include Debug Messages
and deselecting Include Info Messages
(so the Console isn't swamped with system messages). NSLog
messages appeared in the Console window in Xcode but not in the Console app.
I realised there had to be a more direct way to disable
or enable (i.e. default
) NSLogs
thanks to Coeur's comment in response to this answer. In my opinion it is the best answer because setting OS_ACTIVITY_MODE
to disable
or default
will make more sense for beginners.
Upvotes: 1
Reputation: 415
For anyone who comes upon this in the future. The reason NSLog doesn't print to syslog in iOS 10 and iOS 11 is due to Apple changing to Unified Logging.
You can see the WWDC talk about it here: https://developer.apple.com/videos/play/wwdc2016/721/
Documentation here: https://developer.apple.com/documentation/os/logging
From 10 on you should be using os_log instead of NSLog.
How to find the logs on disk: https://www.blackbagtech.com/blog/2017/09/22/accessing-unified-logs-image/
To summarize, the logs are located in /var/db/diagnostics
which can be found for a VM at /Users/USERNAME/Library/Developer/CoreSimulator/Devices/SIMULATOR-GUID/data/var/db/
Copy all items inside diagnostics
and uuidtext
into a single folder (don't include the folders diagnostics or uuidtext just what is inside).
Rename that folder foldername.xarchive
.
Open it in Console.app or use the OSX util log
: log show <path to archive> --info --predicate <options>
Upvotes: 7
Reputation: 1049
Hmmm... it seems like the property "OS_ACTIVITY_MODE": "disable" PREVENTS NSlog from showing up in the Xcode 9 log.
Unchecking this value in my scheme restored my logs.
Upvotes: 6
Reputation: 2329
It could be that you added the property "OS_ACTIVITY_MODE": "disable" in the Scheme environment variables (to hide OS output from the simulator) and forgot about it, and now are running on a real device.
In Xcode 8:
Product -> Scheme -> Edit Scheme -> Run -> Arguments -> Environment Variables
Only add OS_ACTIVITY_MODE
and check it(Don't add a value)
Summary: This is a bug of Xcode 8 + iOS10, we can solve it in this way:
When using the simulator, add the Name "OS_ACTIVITY_MODE" and the Value "disable" and check it.
When on a real device, only add "OS_ACTIVITY_MODE" and check it(Don't add the Value). You will see the NSLog in the Xcode8 Console.
Upvotes: 232
Reputation: 49
I'm using Xcode 8,so I also encountered the same problem . And I solved this problem by adding value = disable
on the simulator, but on a real machine I don't add value.
Upvotes: 1
Reputation: 1792
I can't see NSLog output in real iOS 10 device neither. If you're using real devices, you can open Devices window from Xcode (Shift + Command + 2) and see device logs there, but it's hard to look at your app's logs because the console shows logs from system and all apps.
(I'm using Xcode 7, so it's may not Xcode's problem but iOS 10 problem)
Upvotes: 7
Reputation: 880
If you check the Xcode 8 beta release notes, you'll find that it says:
When debugging an app running on Simulator, logs may not be visible in the console. Workaround: Use command + / in Simulator.app to open the system log in the Console app to view NSLogs. (26457535)
Upvotes: 27